Entrades classificades amb: bases de dades

Manual d’ús del mòdul ‘Zones d’influència adaptatives’

Aquest document explica el funcionament del plugin de ‘Zones d’influència adaptatives’ per a QGIS.  Per a poder utilitzar-lo, el primer que s’ha de fer és executar el programa QGIS i un cop inicialitzat aquest, cal pitjar la icona següent1

o anar a Complements -> CCU -> Zones d’influència adaptatives i s’obrirà una finestra com la que podem veure a continuació a la imatge.

2

Aquest mòdul el que fa és ajustar la zona d’influència de cada entitat proveïdora d’un servei a la població a la capacitat de cada centre (que s’ha de fixar en la BD prèviament), tenint en compte la densitat de la problació ‘target’ del seu entorn. Aquesta zona d’influència pot ser circular o seguint el Graf de Trams de Carrer.

A continuació es detallaran els diferents components del plugin i quina és la seva funció:

  1. A la part superior, hi ha un barra on s’hi indica l’estat de la connexió i una pestanya desplegable amb les connexions disponibles (ja configurades prèviament) per a realitzar les operacions. Allà n’escollim una.3
  2. En aquesta part escollirem la capa de punts a partir de la qual volem fer la zona d’influència i el color que tindrà.4
  3. Just a sota trobarem tres botons que ens permetran escollir la capa sobre la que volem treballar: Illes, parcel·les o portals.5
  4. En aquesta secció cal introduir un número de iteracions que volem que es realitzin.6
    Hem de tenir present que el programa fa el recalcul del següent radi (o distància) a partir del nombre de persones trobades prèviament dins de la zona i això ho pot fer una vegada (cas de una iteració) o unes quantes, poguent anar refinant l’ajust, però amb augment del temps de càlcul.
  1. En l’apartat de cobertura caldrà dir el percentatge de població sobre el qual volem fer l’estudi. També marcarem el checkBox en el cas que vulguem que es mostri la població no afectada per la zona d’influència. Una vegada realitzada la operació, ens apareixerà el nombre d’habitants no coberts en el requadre blanc, a la part inferior.7
  2. Aquí cal introduir el radi inicial a partir del qual treballarem amb les entitats puntuals. Es una radi inicial mitjà a partir del qual i segons la capacitat de cada centre s’assigna el radi inicial particular de cada un.8
  3. En aquest apartat es pot escollir zones d’influència de graf si se selecciona l’opció ‘fer servir trams’. En cas contrari, les zones d’influència són circulars. En cas de fer servir trams, podem fer que es vegi el dibuix del graf marcan el checkBox corresponent. També es pot modificar el radi de la zona d’influència canviant el valor en el textBox.9
  4. En el cas que la opció de ‘fer servir trams’ estigui habilitada, cal escollir un graf sobre la qual treballar, mitjançant la pestanya desplegable. També podem escollir el color de l’àrea d’influència i modificar el traç amb la pestanya desplegable inferior.10
  5. En últim lloc, a la part inferior de la finestra podem trobar la versió de la plugin amb la que estem treballant i dos botons: ‘INICI’ per començar el processament de les dades i ‘SORTIR’ per tancar el plugin.11

 

Creació del plugin ‘Taula Resum’

Introducció

En aquest post es podrà llegir els passos que cal seguir per a construir el plugin ‘Taula Resum’ per a QGIS.

En el plugin ‘TaulaResum’ cal destacar el canvi de filosofia que s’ha produït amb el canvi de GeoMedia, el qual treballa amb bases de dades locals, al QGIS. En canvi amb aquest últim hem passat a treballar amb un topologia client-servidor, que permet que tots els usuaris que disposin de les credencials podran accedir a les bases de dades sempre que vulguin i des de qualsevol lloc. I només el cal tenir el mòdul QGIS amb el mòdul instal·lat i podran treballar.

Sempre que fem referència a qualsevol element de l’entorn de programació o QGIS, aquest és explicat en el post sobre ‘com preparar l’entorn’.

Procés de creació

Disseny de la interfície

El primer que vam fer va ser la creació de la interfície del plugin. Un cop hem creada l’estructura del plugin amb el ‘Plugin Builder’, vam obrir l’arxiu amb format *.ui amb el Qt Designer i començarem amb la creació. Primer va caldre posar les pestanyes més exteriors (QTab Widget) i dimensionar-lo de manera adequada. Al voltant, vam afegir els elements que ajudaran a escollir els filtres, els mètodes de treball, l’elecció de la connexió i els botons per crear la taula i sortir. Un costum que tenim és el de posar una etiqueta amb la versió de la plugin, ja que ajuda a la identificació de quines són les funcions que pot tenir un plugin. Els plugins poden patir diferents actualitzacions i les funcions poden variar. En el cas de que hi hagi un error en una versió que no és la més recent, l’etiqueta facilita la detecció de l’error i es pot corregir ràpidament. El resultat de tot això es pot veure a la figura 1.

p1
Figura 1

Un vegada fet, vam afegir els elements de dintre les cinc pestanyes dels filtres. Finalment, el que vàrem fer és donar-li un nom que ajudi a la identificació de cada element interactiu de la interfície. Aquest serà el nom que utilitzarem per poder-hi interactuar dins el codi principal que controlarà el plugin. A la figura 2 es pot veure com quedaria la finestra amb la pestanya principal omplerta.

p2
Figura 2

Recomanem que siguin el més explícits possible ja que es podran evitar errades i també ajudaran a facilitar la comprensió del codi, com per exemple ‘ComboConnexio’ en referencia a la pestanya desplegable on s’hi indicarà la connexió que volem escollir.

Interacció amb les Bases de Dades

Per a poder realitzar qualsevol acció sobre la base de dades cal primer saber el nom d’usuari, nom de la base de dades, servidor i contrasenya. És recomanable guardar aquestes dades en variables globals i aconseguirem accedir-hi des de qualsevol funció en qualsevol moment. També cal fer l’import de la llibreria psycopg2 (import psycopg2) al principi del codi.

Per establir la connexió hem utilitzat el codi següent:

#Connexio
nomBD = nomBD1.encode('ascii','ignore')
usuari = usuari1.encode('ascii','ignore')
servidor = host1.encode('ascii','ignore')
contrasenya = contra1.encode('ascii','ignore')
try:
  estructura="dbname='"+nomBD+"' user='"+usuari
  +"' host='"+servidor+"' password='" + contrasenya + "'"
  conn = psycopg2.connect(estructura)
  cur = conn.cursor()
  cur.execute(Sentencia_sql)
  resultat = cur.fetchall()
  conn.close()

Utilitzarem la comanda execute(<sentencia SQL>) per realitzar la consulta. Per poder passar els resultats i per poder-los tractar utilitzarem la comanda fetchall() que retorna una matriu amb tots ells. És important tancar la connexió un cop haguem fet les consultes necessàries.

En el cas que ens ocupa, hi ha tres pestanyes del grup de pestanyes principals que necessiten llegir dades de la BD i exposar-les en els seus respectius camps. Com per exemple en la pestanya ‘Estudis’ hi ha un requadre amb una llista (QListWidget) on cal llistar-hi tots els estudis que hi pot haver i que tenim emmagatzemats a la taula del Padró. El que busquem nosaltres és una consulta que ens retorni els diferents tipus d’estudi que hi ha i ho hem resolt amb la sentencia SQL següent:

select distinct("HABNIVINS"),"NINDESCRI" from "public"."Padro" order by 2;

El camp “HABNIVINS” és l’identificador de l’estudi i el “NINDESCRI” és el nom de l’estudi que apareixerà al requadre de la llista. L’identificador de l’estudi el vincularem a l’estudi per mitjà del ToolTip(), que posteriorment ens facilitarà la construcció de la consulta que l’usuari desitja.

Connexió dels botons

Per poder vincular i recollir els estats dels elements de la interfície cal fer els següents passos. Primer de tot cal fer from TaulaResum_dialog import TaulaResumDialog per tal de poder vincular el fitxer de la interfície amb el codi.

Aleshores, a la funció init(), que ja ve creada pel Plugin Builder, hi posem les següents comandes:

self.dlg = TaulaResumDialog()
self.dlg.btoNACIONALITAT.toggled.connect(self.on_click_MarcarBotoNACIONALITAT)
self.dlg.comboConnexions.currentIndexChanged.connect(self.on_Change_ComboConn)

El primer inicialitza el diàleg amb el què hem d’interaccionar. Les altres dos activen les seves funcions respectives cada vegada que el valor que tinguin variï. Segons el tipus d’element que sigui, es pot canviar l’aparença o carregar elements per pantalla.

Cada element de la interfície ha de tenir una funció vinculada a ell per tal de que el codi sigui capaç de veure en quin estat està.

Programació dels efectes dels botons

Cada vegada que l’usuari interaccioni amb un dels elements de la interfície es produirà un efecte. En aquest apartat s’introduirà un exemple d’aquest tipus de comportament. Per l’exemple utilitzarem el codi següent:

def on_click_MarcarBotoEDAT(self, clicked):
if clicked:
  self.dlg.btoEDAT.setStyleSheet('background-color: #7fff7f')
  self.dlg.GrupPestanyes.setCurrentIndex(0)
else:
  self.dlg.btoEDAT.setStyleSheet('background-color:rgb(227,227,227)')

Aquesta funció es dedica a controlar l’aspecte del botó del filtre d’Edat. Si és clicat, canvia de color de fons i mostra la pestanya del filtre d’edat per tal que l’usuari esculli els paràmetres que vol analitzar. Altrament, li torna a posar el color de desactivat.

A més a més, cal tenir en compte que els elements de la interfície tenen memòria i que un cop els hi canviem l’estat, creem la taula i tanquem el plugin, una vegada el tornem a obrir, conserven el seu estat anterior. Això fa necessària una funció que posi aquests elements en el seu estat inicial cada vegada el que el plugin s’obri i s’utilitzi.

En el nostre cas, la majoria d’elements de la interfície tenen efectes molt senzills com el que hem explicat fa un moment però hi ha un botó que realitza una funció més complexa: crear la taula resum. Aquesta funció recull totes les dades que l’usuari ha introduït sobre els filtres que desitja analitzar, comprova que no hi hagi cap error o que falti alguna dada, es connecta amb la base de dades i escriu el resultat en fitxers de text .csv per a que l’usuari els pugui utilitzar sempre que vulgui.

Un altre punt important és el control d’errors. Cada cop que es produeixi un resultat no esperat s’ha controlar i avisar a l’usuari del que ha passat i indicar-li els passos per corregir l’errada. En el nostre cas, els errors més comuns es produeixen a l’hora de crear les consultes: l’usuari no introdueix correctament les dades de la consulta. Però també pot ser que la connexió no estigui disponible o que l’usuari no tingui els permisos adequats de lectura.

Quan es tracta d’un error relacionat amb la connexió s’adverteix a l’usuari per mitjà d’una etiqueta que n’indica l’estat. En el cas de tenir problemes amb la consulta, apareixen finestres amb el missatge d’error.

Prova del plugin

Una vegada hem programat totes les funcions, cal comprovar que els resultats són els esperats. Per fer-ho, cal que utilitzem el GeoMedia amb el plugin que s’utilitzava anteriorment i comprovar que si posem les mateixes variables d’entrada obtenim el mateix resultat.

Cal que el procés sigui exhaustiu perquè cal revisar cadascuna de les funcions que s’han implementat. S’han de fer totes les combinacions possibles i comprovar que el número de resultats ha sigut igual. En el cas que no ho sigui, s’han de comparar els codis i veure el punt on difereixen.

Preparació de l’entorn de treball per la creació d’un plugin per a QGIS

Introducció

En aquest post es podran llegir els passos que cal seguir per preparar un entorn de treball per a construir un plugin per a QGIS. Aquesta configuració no és la única proposta possible, sinó que és la que hem escollit nosaltres en particular.

El primer que cal fer és pensar una bona planificació del plugin: les funcionalitats que es volen incorporar, la tria i disposició dels elements que integraran la interfície, les fonts d’informació sobre les qual es volen realitzar els càlculs i quin tipus de sortides s’oferiran a l’usuari són alguns dels punts que cal tenir en compte a l’hora de la organització.

La interfície cal que sigui el més clara i intuïtiva possible per tal que amb unes simples instruccions l’usuari sigui capaç d’usar el plugin sense cap mena de problema. L’altre aspecte que cal tenir amb compte és el format de les fonts d’informació. Segons quines fonts no són ràpides a l’hora de ser tractades. Degut a aquest fet, recomanem treballar amb taules PostgreSQL ja que permet tractar un gran nombre de dades i fer funcions complexes en un període de temps molt reduït.

En el cas de les capes o taules de sortida, les sortides que no tinguin geometria és preferible guardar-les directament a la base de dades. Altrament, les sortides que si que tinguin geometria seria recomanable guardar el resultat de la consulta a la BDD i a partir d’allà generar un arxiu temporal .SHP per tal de que l’usuari pugui veure el resultat per pantalla en el projecte.

També cal instal·lar el programa ‘pgAdmin’ per tal de poder administrar les bases de dades des de les quals podrem extreure i afegir les dades que necessitem o obtinguem després dels nostres càlculs. Allà també podrem administrar els rols i permisos que volem donar en els usuaris.

Preparació i posta apunt

Entorn de programació

Per a poder crear un plugin de QGIS cal, com es obvi, el QGIS i un IDE. Un IDE és l’entorn de programació necessari per a poder programar el plugin internament. En el nostre cas, hem escollit l’IDE anomenat ‘Eclipse’ ja que és un entorn fàcil i intuïtiu, i té diverses funcionalitats d’entre les quals dues que són de gran utilitat: parlem d’un servidor per poder debugar mentre executem el plugin en el QGIS i un controlador de versions.

L’extensió per debugar remotament es connecta amb un altre plugin del QGIS(posteriorment serà explicat) i permet seguir l’execució del programa en temps real i tens la possibilitat de posar punts d’interrupció per tal de poder detectar possibles errors. A més a més, disposa d’una graella on s’hi pot veure el valor de les variables que són utilitzades en el codi en el moment en què parem l’execució.

La segona extensió recomanada és el controlador de versions, ja que està pensat per fer més fàcil i eficient la construcció manteniment d’aplicacions que tenen un gran nombre d’arxius amb codi font. Entre d’altres funcions permet fer un seguiment exhaustiu de les etapes que ha seguit el codi. Tens la possibilitat tornar a versions anterior en cas que hagis comès un error i seguir des de l’última versió correcta. També facilita el treball amb grup ja que permet ajuntar codi de dues o més persones fàcilment i d’aquesta manera es pot coordinar el treball que s’ha realitzat.

Els plugins de QGIS estan programats en Python, així doncs serà imprescindible instal·lar Python en el nostre equip en el cas que no ho estigui i també afegir l’extensió ‘PyDev’ a l’Eclipse.

Seguidament, explicarem pas a pas la instal·lació de tots el programes i extensions que s’han mencionat prèviament.

Comencem per la instal·lació del ‘Eclipse’. En el nostre cas ens hem descarregat la versió 4.5.2 de l’Eclipse Mars. En el cas de que l’equip no disposi de Java instal·lat, caldrà instal·lar-lo prèviament, ja que sinó l’Eclipse no funcionarà. Recomanem instal·lar la última versió.
Una vegada instal·lat, cal afegir les extensions necessàries. Comencem pel ‘PyDev’. Cal anar a Help a Install New Software (figura 1) i ens apareixerà una finestra com la de la figura 2.

1

Figura 1

2Figura 2

Pitgem el botó ‘Add’, que està ressaltat en la figura 2, i ens apareixerà un finestra com la de la figura 3.
3

Figura 3

Només cal omplir els dos camps buits: el primer amb el nom PyDev i el segon amb el link següent http://pydev.org/updates. Un cop fet, pitgem el botó OK per incorporar el repositori.

Després cal escollir PyDev en el desplegable de ‘Work with’ (figura 2 o 4)  i es carregaran les extensions que hi ha disponibles en el servidor. Un cop s’hagin carregat, escollim la opció del PyDev i pitgem el botó ‘Next’ per procedir a la instal·lació. Tot seguit haurem d’acceptar els termes de la llicencia i pitjar el botó ‘Finish’ per tal de finalitzar. Aquesta extensió porta incorporat la funció amb el servidor per debugar.

Per tal d’instal·lar la extensió de control de versions cal anar a la mateixa finestra que la figura 2 i a la pestanya desplegable cal escollir la opció <Mars – http://download.eclipse.org/releases/mars>  i en camp de filtre posar ‘Git’ tal i com es mostra en la figura 4.
4

Figura 4

Cal escollir les tres primeres opcions. La quarta és opcional: depèn de si interessa treballar amb GitHub. Un cop seleccionades les opcions, cal instal·lar-les com hem fet amb el PyDev.

Aquí acabaria la preparació de l’IDE.

QGIS

Aquests serien els requisits per poder treballar amb l’Eclipse. Seguidament explicaré les plugins que són necessaris per treballar amb el QGIS.

El primer pas per preparar l’entorn és la descarrega del QGIS des de la web del programa http://www.qgis.org/ca/site/forusers/download.html. La versió que nosaltres utilitzem és la 2.14, tot i això, qualsevol versió posterior hauria de funcionar sense cap mena de problema. Un cop descarregat, cal instal·lar-lo en el nostre equip.

Després de la instal·lació, és necessari obrir el programa QGIS i procedirem a instal·lar els plugins que comentarem seguidament.

Començaré per l’esmentat anteriorment, el plugin ‘Remote Debug’ que ens ajuda a connectar el QGIS amb el nostre IDE per tal de poder controlar l’execució i detectar possibles errors. Facilita molt la tasca de trobar errors i agilitza la codificació del plugin.

També hi ha el ‘Plugin Builder’. Aquest plugin crea una estructura bàsica o plantilla per a fer un plugin. Es parteix d’aquesta base i a partir d’allà es comença a programar el plugin amb el nostre IDE, que posteriorment l’importarem.

L’últim plugin a instal·lar és el ‘Plugin Reloader’. La seva funció és refrescar el connector mentre estem debugant errors i estem fent canvis en el codi. Si no ho féssim, els canvis en els codi no quedarien reflectits a l’execució.

Per poder instal·lar aquests cal seguir els passos següents: primer cal anar a Complementos à Administrar e instalar complementos com en la figura 5.
5

Figura 5

I seguidament ens apareixerà una finestra com la de la figura 6.
6

Figura 6

Abans de tot, cal anar a la pestanya de ‘Configuració’ i marcar la opció de mostrar els complements experimentals com en la figura 7.
7

Figura 7

Un cop marcada l’opció, tornem a la pestanya de ‘Todos’, com a la figura 6 i a la casella de buscar, busquem els plugins pel seu nom: Plugin Builder, Plugin Reloader i Remote Debug. Una vegada els hem trobat, pitgem el botó de instal·lar com el de la figura 8.
8

Figura 8

Ja instal·lats els plugins, apareixeran a la nostra barra d’eines del menú (figura 9).
9

Figura 9

L’últim detall que cal solucionar és indicar al Remote Debug el camí on hi ha el servidor per debugar del nostre IDE.

Per fer-ho cal pitjar la icona del plugin (és la que apareix a la dreta a la figura 9) i ens apareixerà una imatge com la de la figura 10.
10

Figura 10

En el camp pydevd path cap posar-hi el path següent: a la carpeta on hi ha guardat l’eclipse à Plugins à org.python.pydev_X.X.X.201608171824 à pysrc on X varia segons la versió que escollim.

pgAdmin

Per instal·lar el pgAdmin el primer que cal fer és descarregar-se l’aplicació des del lloc web que del programa https://www.pgadmin.org/download/. Allà només caldrà descarregar-se el que s’adequa a la nostra plataforma.

Un cop fet, només cal executar l’arxiu que ens hem descarregat i seguir els passos que indica.

Connexions a la base de dades

Per tal de poder configurar la connexió amb la base de dades cal seguir els següents passos:

Primer cal cercar a la barra d’eines en el lateral esquerra de la nostra pantalla una icona com aquesta 18
Un cop ho haguem fet, ens apareixerà una finestra com la de la figura 11. En allà cal premer el botó “Nueva”, tal i com està senyalitzat a la mateixa figura. Posteriorment ens ha d’apareixer una finestra com la de la figura 12. En allà cal introduir els camps necessaris per configurar la connexió: usuari, nom de la base de dades, servidor i contrasenya.
20

Figura 11

19

Figura 12

Funcionament

Creació del plugin

Comencem pel plugin Builder, ja que serà el primer que farem servir. Primer de tot, crearem un projecte i introduirem totes les dades que ens demana (figura 11).
11

Figura 11

Entre les dades que ens demana, li entrarem un camí on guardarà el plugin. És recomanable posar-lo al path següent: Disc Local (C:) à Usuaris à (Usuari on estigui el QGIS) à .qgis2 à python à plugins, ja que en aquella carpeta és on es guarden els plugins instal·lats.

Seguidament, copiem el camí i obrim l’eclipse. Anem a File à Import… i ens apareixerà una pestanya com la de la figura 14.
12

Figura 14

Pitjem l’opció de ‘Existing Projects into Workspace’ i ens mostrarà un pantalla com la de la figura 15.
13

Figura 15

Copiem el camí en el camp del directori arrel i pitjem el botó de ‘Browse..’. Un cop fet, es carregaran el projectes que hi hagi a la carpeta en requadre blanc. Llavors només caldrà seleccionar-lo i importar-lo mitjançant el botó Finish.

Finalment obrim el projecte i comencem a treballar a l’arxiu [nom del projecte].py que ja s’haurà creat prèviament.

Creació de la interfície

En el projecte que nosaltres hem creat, hi haurà un arxiu .ui que és la base de la nostre interfície. Aquest fitxer el podem editar amb el programa Qt Designer que s’instal·la automàticament quan instal·lem el QGIS en el nostre equip.

Per tant, per editar la nostra interfície obrim aquest programa i obrim el l’arxiu que tenim en nostre projecte.

El Qt Designer disposa de totes del eines que necessitem a la barra lateral esquerra i des d’allà incorporem els elements en el nostre disseny arrossegan-los fins on els vulguem posar.

Servidor per debugar

El que primer cal fer és obrir el ‘Eclipse’ i fer el seguent:

Anar a Window à Prespective à Open Prespective à Other com a la de la figura 16.
14

Figura 16

I seguidament se’ns obrirà una finestra com la de la figura 17.
15

Figura 17

Seleccionem Debug i seleccionem OK. A la barra d’eines superior ens mostrarà unes eines com les de la figura 18.
16

Figura 18

Cal pitjar el tercer botó 17 i haurem encès el servidor per debugar. Un cop fet, cal obrir el GIS i obrir el plugin del Remote Debug, que té una icona similar a la anterior. I ens apareixerà una finestra com la figura 10. Aleshores, només cal pitjar el botó de Connect i si hem configurat bé el complement, ens sortirà un missatge indicant que s’ha connectat amb el servidor.

Primers passos en el rutatge al QGIS

En aquest post mostraré els passos que he hagut de seguir per tal de crear el primer dels mòduls que utilitza funcions de rutatge en el QGIS. En aquest cas, volem traslladar el mòdul que calcula els 3 camins a les escoles bressol i llars d’infants més pròximes a cada portal de la ciutat de Mataró. En primer lloc presento les capes amb les quals es treballa. Llavors segueixo amb la creació del mòdul i la seva utilització.

Capes de treball

Actualment amb el GeoMedia treballem amb bases de dades de Microsoft Access majoritàriament. Aquestes incorporen tot tipus de dades, ja sigui taules amb informació sobre el padró o el cadastre, que no estan georeferenciades, o capes de punts, línies o polígons com poden ser els mapes de carrers, illes, cruïlles i serveis públics de la ciutat. Les dades en aquest format ens permeten una gran versatilitat d’ús i facilitat tan en l’ús com en la creació, modificació i eliminació. També són fàcilment exportables a qualsevol altre tipus de format per seguir treballant. Ocasionalment també treballem amb arxius SHAPE.

El QGIS permet gestionar formats raster i vectorials a través de les biblioteques GDAL i OGR, així com altres bases de dades. Una biblioteca GDAL i OGR és un conjunt de programes que estan formats per comandes, cada un amb moltes possibilitats d’ús.

Les capes més comunes amb les quals hem treballat són el Vector Layer, on utilitzem arxius SHAPE (.shp), i Delimited Text Layer on utilitzem arxius CSV (.csv).

Ambdos tipus de dades poden ser modificats fàcilment: tan crear, inserir, modificar o eliminar objectes i/o camps, la qual cosa els fa idonis treballar amb aquests tipus d’arxius ja que si volem fer proves per poder desenvolupar les consultes o els mòduls, ens són de gran utilitat.

Procés de creació

Per crear la interfície gràfica s’utilitza un creador de models que porta incorporats una sèrie de funcionalitats. Haurem d’anar a la caixa d’eines de processat i allà “crear model nou”.
fuc
I seguidament se’ns obra la següent finestra:
nou
Les dues imatges següents corresponen a la columna de l’esquerra de l’anterior imatge hi tenim tots els tipus de paràmetres amb els quals podem treballar, i si canviem a la pestanya de algoritmes, trobem totes les funcions amb les quals podrem treballar sobre les dades. Cal veure el funcionament d’aquestes per tal de poder-les utilitzar correctament.

fuc

dades

 

 

 

 

 

Seguidament, vam afegir el tipus de dades i buscar les funcionalitats adequades per construir la interfície gràfica.

dades2
Una vegada introduïdes les capes, va ser necessari buscar una funcionalitat que convertís el tipus de geometria dels objectes de les capes de punts ja que van sorgir problemes per què obteníem una capa buida. En el nostre cas vam utilitzar el mòdul “Convert Geometry type”.
convert
Seguidament vam començar la recerca d’entre les funcionalitats alguna que calculi una ruta entre dos punts. No existeix una funcionalitat que faci tal funció, així que vam seguir la cerca. Vam seguir buscant entre els plugins que permet instal·lar el QGIS. Vam trobar-ne un que si que fa aquesta funció però no ens era d’utilitat ja que no hi ha cap manera d’automatitzar el procés de càlcul de les distàncies. Això doncs, vam recórrer a l’últim recurs: crear un script en Python que realitzi la funció.

Vam trobar un script que calculava la ruta entre dos punts sobre un graf de carrers. Aquest script utilitza una funció interna de la API de QGIS anomenada “dijkstra” que et retorna un camí. El següent script és el que vam trobar a Internet:

##ruta=name
##ruta=name
##points=vector
##network=vector
##output=output vector

#Algorithm body
#==================================
from PyQt4.QtCore import *
from PyQt4.QtGui import *

from qgis.core import *
from qgis.gui import *
from qgis.networkanalysis import *
from processing.tools.vector import VectorWriter

point_layer = processing.getObject(points)
network_layer = processing.getObject(network)
writer = VectorWriter(output, None, [QgsField("order", QVariant.Int)],
network_layer.dataProvider().geometryType(), network_layer.crs())

# prepare graph
vl = network_layer
director = QgsLineVectorLayerDirector(vl,-1,'','','',3)
properter = QgsDistanceArcProperter()
director.addProperter( properter )
crs = vl.crs()
builder = QgsGraphBuilder( crs )

# prepare points
features = processing.features(point_layer)
point_count = point_layer.featureCount()
points = []
for f in features:
  points.append(f.geometry().asPoint())
tiedPoints = director.makeGraph( builder, points )
graph = builder.graph()
route_vertices = []

for i in range(0,point_count-1):
    progress.setPercentage(int(100 * i/ point_count))
    
    from_point = tiedPoints[i]
    to_point = tiedPoints[i+1]
    from_id = graph.findVertex(from_point)
    to_id = graph.findVertex(to_point)

    (tree,cost) = QgsGraphAnalyzer.dijkstra(graph,from_id,0)
    if tree[to_id] == -1:
        continue # ignore this point pair
    else:
        #collect all the vertices between the points
        route_points = []
        curPos = to_id 
        while (curPos != from_id):
            route_points.append(graph.vertex(
graph.arc(tree[curPos]).inVertex()).point())
           curPos = graph.arc( tree[ curPos ] ).outVertex()
        route_points.append(from_point)
    # add a feature
    fet = QgsFeature()
    fet.setGeometry(QgsGeometry.fromPolyline(route_points))
    fet.setAttributes([i])
    writer.addFeature(fet)
del writer

Un cop testejat i debuguejat, vam començar amb la modificació de l’script per tal d’obtenir el resultat desitjat. Aquest va ser un procés complex ja que s’havia de canviar el programa per dins. Després de forces entrebancs en el procés vam aconseguir un resultat força aproximat al que volíem. Van caldre forces hores per acabar de depurar el codi ja que teníem petits errors que costaven de detectar.

##dintreilla=vector
##EscolesBressol=vector
##network=vector
##output=output vector
#Algorithm body
#==================================
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import time
from qgis.core import *
from qgis.gui import *
from qgis.networkanalysis import *
from processing.tools.vector import VectorWriter

start_time = time.time()
network_layer = processing.getObject(network)

inputPoint = processing.getObject(dintreilla)
features = processing.features(inputPoint)

inputPoint2 = processing.getObject(EscolesBressol)
features2 = processing.features(inputPoint2)

di= 0
eb= 0
id = -1
fields = []
fields.append (QgsField("ID", QVariant.Int))
fields.append (QgsField("Length", QVariant.Int))
fields.append(QgsField("From_Node",QVariant.String))
fields.append(QgsField("To_Node",QVariant.String))

writer = VectorWriter(output, None, 
fields, network_layer.dataProvider().geometryType(), network_layer.crs())

#Per buscar els 3 millors de cada punt

for fea1 in features:
    di=di+1
    #xx = fea1.geometry().asPoint().x()
    #yy = fea1.geometry().asPoint().y()
    #pStart = QgsPoint(xx, yy)
    from_node = fea1.attributes()
    inici = from_node[0]
    print inici
    fea2=None
    features2 = processing.features(inputPoint2)
    eb = -1
    vec = []
    for fea2 in features2:
        eb=eb+1
        id  = id + 1
        nom = fea2.attributes()
        desti = nom[2]
       #---------------------------------------------------------------
        vl = network_layer
        director = QgsLineVectorLayerDirector(vl,-1,'Cost','Cost_inver','',3)
        properter = QgsDistanceArcProperter()
        director.addProperter(properter)
        crs = vl.crs()
        builder = QgsGraphBuilder(crs ,True,0.001)

        # prepare points
        points = []
        points.append(fea1.geometry().asPoint())
        points.append(fea2.geometry().asPoint())

        tiedPoints = director.makeGraph( builder, points )
        graph = builder.graph()

        route_vertices = []
        for i in range(0,2-1):
            from_point = tiedPoints[i]
            to_point = tiedPoints[i+1]

            from_id = graph.findVertex(from_point)
            to_id = graph.findVertex(to_point)

            (tree,cost) = QgsGraphAnalyzer.dijkstra(graph,from_id,0)
            if tree[to_id] == -1:
                continue # ignore this point pair
            else:
                # collect all the vertices between the points
                route_points = []
                curPos = to_id 
                while (curPos != from_id):
                    route_points.append(graph.vertex(
graph.arc(tree[curPos]).inVertex()).point())
                    curPos = graph.arc(tree[curPos]).outVertex()

                route_points.append(from_point)

            # add a feature
            geom=QgsGeometry.fromPolyline(route_points)
            fet = QgsFeature()
            fet.setGeometry(QgsGeometry.fromPolyline(route_points))
            fet.setAttributes([id, geom.length(), inici, desti])
            vec.append(fet)
           
    if (len(vec) > 0):
        vec.sort(key=lambda vec: vec[1])
        for i in range (0,3):
            writer.addFeature(vec[i])
del writer
print("--- %s seconds ---" % (time.time() - start_time))

Finalment vam aconseguir un resultat que s’ajustava a les nostres necessitats, i així completar el procés de creació d’un mòdul amb el QGIS. Vam posar l’script en un mòdul per a python, vam posar-li totes les connexions necessàries.
python
I aquest en va ser el resultat final de tot el procés:
final

Procés d’utilització

Aquí es descriu el procés d’utilització del mòdul per trobar els 3 Camins més pròxims a una Escola Bressol i una d’infants. Aquest comença amb la preparació de les dades a la llegenda o panell de capes del QGIS. En el cas que ens ocupa necessitarem 4 capes SHAPE, 3 de punts i una de segments. Les 3 capes de punts són les Escoles Bressol, les Llars d’Infants  i els dintreilles, que són tots els portals de la ciutat.  I la capa de segments són el conjunts de carrers de la ciutat, és a dir, per on hem de trobar el camí.

Primer de tot, hem de tenir les capes en el tipus desitjat: SHAPE. En el cas que no estiguin ja en aquest format, cal transformar-les per tal de poder-hi treballar. Un cop les tinguem, les guardem per tal de poder-les agafar i emprar.

Tal com s’indica a la fotografia, s’afegeix cada capa via Capa -> Añadir capa -> Añadir capa vectorial:
afe3

afe

Seleccionem explorar i amb l’ajuda de la finestra, busquem els arxius SHAPE que volem posar.

afe2

Repetim l’acció 3 vegades més fins a aconseguir les 4 capes desitjades, tal i com es veu a la foto.

Un cop fet, anem al panell de la dreta de la pantalla on hi ha la “caja de herramientas de procesado” i busquem a l’apartat de Modelos -> CCU, un model anomenat “3EB més pròximes”.
afe4

Una vegada trobat, cal executar-lo. S’obrirà una pestanya amb el següent diàleg:

afe5

Posem a cada pestanya la capa que ens demani: a la primera hi posem la xarxa de carrers sobre la qual volem treballar, a la segona hi posem els Dintreilles o portals de la ciutat(assegurar-se de que sigui la versió “dintreilla_trajectes”) i finalment les escoles bressol o les llars d’infants. Haurem de repetir el procés per cada una de les capes: una per les EB i una altre per les LI.

Un cop tot estigui a punt, només cal executar el procés i esperar a obtenir el resultat. El temps d’espera pot variar segons l’ordinador on s’estigui executant aquest.

Quan finalitzi el procés cal guardar el resultat en un fitxer SHAPE, ja que està en un fitxer temporal i per tant, es perdria en el moment en què tanquem el programa.

Prova del mòdul

En aquest apartat es mostra un exemple de mostra del mòdul. No utilitzaré la capa del ‘dintreilla’ ja que es massa gran i per veure el funcionament, amb una simple capa en tenim prou.

En aquest cas utilitzaré una capa amb un punt (de color vermell) que serà el punt d’origen i una altre capa (de color verd) amb els possibles destins més propers. D’aquesta manera es pot veure ben clar el funcionament.
ex1

Posem en marxa el mòdul i el resultat que obtenim és el següent:

ex2

A la imatge es pot veure el graf de carrers de la ciutat de Mataró. S’hi pot veure 3 camins ressaltats de color verd clar. Tots tres tenen com a origen el punt vermell.

Aplicatiu per mostrar trajectes a entitats per ordre de proximitat

En anteriors entrades s’ha comentat la possibilitat de visualitzar la proximitat de la població com també d’obtenir els trajectes existents respecte a una entitat destí. En el nostre cas, s’ha vist aplicat precisament a les Escoles de Bressol Municipals.

Per això, i per la importància que suposa disposar de la informació necessària per tal de determinar si un servei es troba a prop del nostre domicili o bé lluny segons les diverses trajectòries obtingudes al destí desitjat i tenint present, en tot moment, les diverses zones d’influència possibles, s’ha desenvolupat l’aplicatiu de “cerca entitat propera”.

Aquest aplicatiu té la mateixa finalitat que l’utilitzat per cercar els camins a les tres Escoles Bressol més properes, però en canvi, ens permet fer la cerca de qualsevol entitat que es desitgi com també mostrar les dades entre un rang de 1-5 noms d’entitat diferents. Per tant, es pot triar el mode de cerca dels valors d’entre 1 i 5 entitats destí.

Figura 1: Aparença de l’aplicatiu de cerca camins a entitats properes.

Tal i com s’observa, l’aparença de l’aplicatiu és el mateix que l’utilitzat en la cerca de camins a les 3 Escoles més properes, amb la diferència d’haver modificat la grandària de la graella (Datagrid) per tal de poder arribar a visualitzar, en condicions, fins a 5 nom d’entitat diversa.

Per tant, com ja s’ha comentat, aquest nou aplicatiu serveix per indicar els trajectes des de qualsevol adreça de la ciutat a una sèrie d’entitats per ordre de proximitat, i no només limitat a les tres entitats més properes. Igualment el propòsit d’aquest mòdul és verificar les taules de proximitat generades pel mòdul generador de taules de proximitat, sense limitació en el tipus d’entitat ni en el nombre d’entitats properes. Tenint present que la verificació de les taules de proximitat ens és de molta utilitat pensant en la seva publicació via WFS tal com ja s’ha comentat a l’entrada al bloc anomenada: WFS Interacció amb mapes.

Aquesta taula de trajectes de proximitat s’haurà de crear amb anterioritat utilitzant el mòdul “càlcul de distàncies mitjançant el graf” en el qual tal i com s’observa a la Figura 2, es tria el camp d’origen (de quina direcció es parteix) i el camp destí (qualsevol entitat). També és possible triar la unitat de mesura que serà precisament l’observada com a resultat de distància o bé cost de l’aplicatiu. Apareixent els diversos filtres a triar, entre els quals pren importància el número d’entitats que seran amb les quals es farà l’estudi a l’aplicatiu en qüestió i les que es mostraran a la graella i mapa de resultats finals.

Figura 2: Aplicatiu de càlcul de distàncies mitjançant el graf.

Un altre aspecte important és el fet d’emmagatzemar la taula resultant de l’execució del mòdul, doncs s’haurà de triar quin serà el destí de la connexió creant tant la taula de trajectes com de proximitat.

I precisament, un cop es disposi d’aquesta taula, en el següent desplegable dins el mòdul creat s’ha de buscar la connexió on es troba emmagatzemada la BBDD que la conté.

Figura 3: Selecció de la BBDD de trajectes

En el present exemple s’ha creat una taula de trajectòries expressament del Veïnat de Mata tenint com a destí tant Escoles Bressol com Llars d’Infants. I triant 5 entitats destí que es visualitzaran a sobre el mapa com en la graella present a la part inferior de l’aplicatiu.

Figura 4: Incorporació de les dades a fer la recerca dins l’aplicatiu.

Un cop ja s’ha introduït el carrer, el número i la BBDD on es troba la taula de trajectes creada prèviament, s’executa l’aplicatiu: “INICI”.

En la següent imatge s’observa com apareixen les 5 entitats més properes, acompanyades de la distància existent entre el número de carrer (Número de portal) fins les 5 entitats de destí més properes. Aquestes es troben ordenades de més proximitat a menys.

Figura 5: Resultats obtinguts en l’execució.

Tal i com s’observa, apareix la columna del nom de l’entitat com també de la Distància/cost. Aquesta última columna indica la distància existent des del número de policia en la qual ens trobem (Veïnat de Mata, 5) fins a cadascuna de les entitats i que es poden trobar mesurades tant en distància, calculada en metres, com també en cost calculat en temps (segons).

En el present cas, el més pròxim a la situació definida (Núm. Portal 05490005x) és la Llar d’infant Snoopy II (3318 m) i en canvi la que es troba més lluny és el Grup d’Escoles Mataró GEM-Primària (3848m).

En la Figura 6 s’observa sobre el mapa quins són els 5 trajectes a les entitats destí. Cadascun marcat amb un color i gruixut diferent depenent de la seva proximitat fent que sigui més fàcil la visualització i entesa.

Figura 6: Visualització sobre el Mapa els camins a les Entitats obtingudes.

La validesa d’aquests trajectes obtinguts farà que es pugui realitzar posteriorment una publicació via WFS de forma satisfactòria i que per tant sigui possible observar la visualització via Internet (interacció amb mapes).

En resum, el fet de disposar d’aquest aplicatiu permetrà realitzar uns estudis més precisos respecte els diversos trajectes obtinguts disposant de més flexibilitat a l’hora de poder triar el número d’entitats destí, com també es podrà afinar en la cerca del recorregut òptim. Aquesta flexibilitat,  s’observa també en el fet de poder mostrar els resultats tant en distància (metres) com en cost (segons) tal i com succeïa en el mòdul de tria de les Escoles Bressol més properes. El fet de fer servir una variable temporal fa que la mesura obtinguda sigui molt més real respecte a la proximitat a cadascuna de les entitats, però en canvi requereix un model de velocitats més detallat i adequat.

Estudi de l’Activitat Econòmica

 

Unes de les aplicacions més sol·licitades dels Sistemes d’Informació Geogràfica (SIG) són les que tenen a veure amb l’anàlisi de l’activitat econòmica (AE), sigui aquesta la corresponent d’una ciutat, d’un territori o d’un país.

De fet la col·locació sobre el terreny de les diferents activitats econòmiques és una informació estratègica de primer ordre, ja que d’una mirada es pot intuir  si d’una determinada activitat, diguem-ne per exemple: restaurants, farmàcies o perruqueries, n’hi ha una concentració exagerada, equilibrada o deficient. Una anàlisi més rigorosa ens permetria saber si d’acord amb la població ‘target’ que hi ha en la seva proximitat i amb els hàbits de mobilitat de la població està justificada o no una determinada oferta en un lloc concret en relació amb la demanda possible. En aquest sentit s’hauria d’anar a esbrinar motivacions sociològiques, moltes vegades difícilment  racionalitzables, per explicar el per què de la presència o no  d’una activitat en una àrea determinada.

De tota manera, una de les motivacions més senzilles de la geolocalització d’activitats econòmiques en un territori, serien les aplicacions anomenades de ‘geo-marketing’, consistents en veure on hi ha ‘buits’ o mancances d’una determinada activitat per impulsar la creació de negocis precisament en aquells indrets.

Un primer punt d’un aplicatiu que respongués a tals característiques seria la ubicació de les activitats econòmiques sobre el mapa de la ciutat, en aquest cas, de la ciutat de Mataró. Aquesta eina per ser útil caldria que oferís la possibilitat de diferents mètodes de cerca de les activitats, sigui pel nom o descripció, sigui pel codi corresponent segons una determinada classificació. També caldria tenir una font de les activitats i un manteniment que permetés afegir amb agilitat les altes i les baixes que es van produint.

Arribats a aquest punt cal dir que el CCU ha treballat i està treballant en la generació d’eines que permetin ubicar les AE sobre el mapa de la ciutat de Mataró, tant pel que fa a parcel·la com a portal.

La font  de la informació de l’AE de Mataró que ha escollit el CCU és la Brossa Comercial (BC). Cada activitat genera un tipus de deixalles específic i això influeix en la tarifa que ha de pagar, i quan es deixi de fer l’activitat el seu titular serà el primer interessat en notificar-ho als responsables de recaptació per deixar de pagar per aquell concepte, per tant la Base de Dades de la Brossa Comercial és una font actualitzada de l’AE a la ciutat. Com a part negativa d’escollir aquesta font hi ha el fet  que l’activitat real que es faci no s’ajusti exactament a la declarada en concepte de deixalles generades.

Respecte al tema de la classificació, en aquest moment s’ha escollit la forma de classificació que la BC utilitza, que és la dels epígrafs de l’antic IAE (Impost sobre l’Activitat Econòmica), amb tendència a anar-ho canviant progressivament cap a la classificació CCAE (Classificació Catalana d’Activitats Econòmiques).

A l’aplicatiu del CCU també es poden visualitzar algunes característiques concretes com ara la superfície de l’activitat i consultar igualment algunes informacions proveïdes per la Base de Dades de la BC. A més a més també es poden consultar d’altres informacions relacionades amb la població que s’aniran explicant tot seguit i que el refermen com a eina analítica a més a més d’informativa.

Anem a concretar una mica tot això. A la figura 1 es pot veure la interfície on hi el cercador on a partir d’un paraula o conjunt de paraules o d’un codi podem anar seleccionant les activitats que es volen mostrar.

Fig 1. Llista d’activitats que podem cercar i seleccionar

Un cop escollida l’activitat, si es tracta de situar els portals on es desenvolupa l’activitat, es pot anar a una altra pestanya per incidir en el tamany del ‘topo’ on es mostra (proporcional a la superfície del local), i fer d’altres mesures relacionades amb la població, com ara definir una zona d’influència(ZI) a l’entorn de la ubicació de cada activitat i mostrar un mapa temàtic de la població que queda fora de aquestes zones d’influència.

Si mirem per exemple les ferreteries, la segona pestanya seria la que mostra la figura 2

Fig 2. Pestanya pes escollir tamany dels ‘topos’ i de la Zona d’Influència i tipus de Z.I

En aquest cas s’ha escollit un factor de forma dels ‘topos’ de 2, àrees d’influència circulars de 150 m de radi i veure el mapa temàtic de la població exclosa. La sortida es mostra a la figura 3 on s’ha fet un zoom sobre el centre urbà de la ciutat i es poden apreciar els indrets de l’activitat, les  ZI circulars i el mapa temàtic de les illes externes a les ZI.

Fig 3. Ferreteries amb ZI de 150 m i temàtic de població exterior

La llegenda corresponent a aquest mapa es mostra a la figura 4:

Fig 4. Llegenda del mapa de ferreteries

En el mapa temàtic de la població, les Illes més fosques corresponen a les de més població i per tant allà on ‘faria més falta’ la instal·lació de noves activitats.

Les ZI es poden escollir també sobre el Graf de Trams de Carrer (GTC), anem a  veure un altre exemple, les farmàcies.

En aquest cas hi ha la possibilitat d’escollir el treballar amb distància o recorregut seguint el GTC o bé amb temps de trajecte, i s’ha triat una zona d’influència de 3 minuts a l’entorn de cada centre d’activitat. La segona pantalla es mostra a la figura 5 i la sortida a la figura 6

Fig 5. Segona pantalla per a les Farmàcies amb ZI-GTC

Fig 6. Sortida de la consulta de Farmàcies amb ZI graf a 3 minuts

En resum la interacció entre la situació de les diferents activitats econòmiques amb la població, segmentada per Illes, permet veure la sobre-presència d’activitats en uns punts de la ciutat així com la no presència en d’altres on hi pot haver potencials usuaris o compradors. També la utilització del graf de trams de carrer graduat per distància o per temps ens dóna una idea molt fidel del concepte de proximitat i ens permet fer un anàlisi més acurat de les necessitats o tendències properes en la instal·lació de noves activitats.

 

 

 

 

 

 

 

Relació entre la capacitat d’un centre proveïdor de serveis i la seva àrea d’influència

 

Ja s’ha vist, en aquest mateix Bloc, com associar la població amb el territori, sabem que pot quedar associada a les Illes, parcel·les i els portals de la ciutat, i també s’ha vist com segmentar aquesta mateixa població segons determinats criteris, franja d’edat, estudis, procedència geogràfica, nacionalitat etc.

Ara anem a explicar com donat un determinat centre proveïdor d’un servei, per exemple un centre educatiu,  podem delimitar una zona del territori immediatament proper, de manera que ‘casin’ la capacitat del centre per una part i la població ‘target’ d’aquest zona propera per altra.

No cal dir que la vista del territori estudiat, en aquest cas la ciutat de Mataró, amb els centres proveïdors  del servei i les respectives àrees properes d’influència, pot donar una imatge, al menys teòrica, de la cobertura o no cobertura de les necessitats del global de la població en el servei objecte d’estudi.

Des d’un punt de vista tecnològic, és a dir, de les eines que ens poden permetre obtenir aquesta representació gràfica, un SIG (Sistema d’Informació Geogràfica) per sí mateix no ens permet obtenir-ho d’una forma fàcil i immediata. Per tant hem hagut d’anar a les funcionalitats base del nostre SIG, en aquest cas el GeoMedia, per generar un procés iteratiu i convergent de modificació de la zona d’influència fins que el nombre d’habitants continguts a la zona, coincideixi amb la capacitat de servei del centre estudiat.

Anem a veure-ho per un cas concret que coneixem. Suposem que volem estudiar la implantació de les Escoles Bressol Municipal a la ciutat de Mataró, recordem la situació dels centres en la figura 1.

Fig 1. Situació de les Escoles Bressol Municipals a la ciutat de Mataró.

Ja que els usuaris de les Escoles Bressol són nens entre 0 i 2 anys, el que s’ha de fer és preparar una segmentació de la població total que només tingui en compte aquesta franja d’edat, i també s’ha d’escollir si ho agreguem per Illes, parcel·les o portals. Utilitzarem el recurs basat en Visual Basic que ja vam explicar, la interfície seria la de la figura 2.

Fig 2. Escollim els habitants entre 0 i 2 anys agrupats per Illes.

Això vol dir exactament que tenim associat a cada illa de cases el nombre de nens entre 0 i 2 anys que hi ha empadronats en algun habitatge de l’illa. Ens cal també tenir associat a cada entitat Escola Bressol el nombre màxim de nens que pot acollir. A partir d’aquestes dues dades podem iniciar el procés de càlcul pròpiament dit. Cal tenir en compte que l’àrea d’influència resultant serà, probablement, diferent per a cada entitat ja que dependrà tant de la capacitat del centre com de la densitat que hi hagi a les illes del voltant de cada centre de nens entre 0 i 2 anys.

Fixem-nos en la interfície de càlcul de les Àrees d’Influència de la figura 3, aquí podem veure el formulari que s’ha d’omplir per iniciar el càlcul.

Fig 3. Interfície per generar les Àrees d’Influència

Els camps més importants són:

Tipus d’agregació: ILLES [podrien ser també Parcel·les o Portals]
Entitat Base: Escoles Bressol [a partir de les quals generem les Àrees d’Influència]
Paràmetre del Radi Incial: 400 [valor associal al radi de les Zones d’Influència incials]
Cobertura: 100% [si volem que Tota la població del rang tingui Escola Bressol, o només una part, en aquest cas aquest valor seria de menys del 100%]
Possibilitat de comptar els habitants que no estàn a cap zona: Sí
Possibilitat de fer un mapa temàtic de la població no inclosa: No
Treballar per Trams: No [Possibilitat d’agafar Zones d’Influència Circulars o a partir del Graf de Trams de Carrer]

Si premem el botó de ‘Calcular l’Àrea d’Influència’ obtenim el que surt a la figura 4.

Fig4. Àrees d’Influència de les EB Municipals

A l’anterior figura es pot veure l’Àrea d’Influència de cada Escola Bressol Muncipal on s’ha aproximat la població entre 0 i 2 anys de cada zona i la disponibilitat de places de cada centre. Encara que no es vegi a la figura 4, s’ha calculat igualment el  nombre de nens d’aquestes edats que queda fora del conjunt d’àrees, que és per a tota la ciutat de 1972. Cal pensar també que segons la mena d’agregació que es faci l’aproximació entre la xifra del recompte de nens dins de la zona i la del nombre de places serà més o menys propera, si comptem per illes l’error que es pot cometre és molt més gran que si comptem per parcel·les o portals, ja que a l’incloure o no una illa el nombre d’habitants de la zona canvia molt bruscament.

També hi ha la possibilitat de fer un mapa temàtic de tota aquesta població que queda fora, d’aquesta manera les illes més fosques són les que tenen més nens ‘exclosos’ en la situació actual de les Escoles Bressol Municipals i considerant una cobertura del 100%. Vegeu la figura 5.

Fig 5. Àrees d’Influència de les EB Municipals, amb mapa temàtic per illes de la població exclosa

Es imporant pensar que el que s’ha vist per les Escoles Bressol Municipals, es pot generalitzar a qualsevol grup d’entitats que ofereixin un servei determinat i de les que coneixem la seva capacitat en el servei, per exemple els Centres d’Assistència Primària, els Centres Cívics, les institucions socio-sanitàries, etc.

En un cop d’ull, si mirem per exemple la figura 5 podem saber a quins llocs de la ciutat seria més interessant que hi hagués un nou centre o a on no caldria que n’hi hagués un d’existent. L’eina permet fer simulacions modificant la ubicació i la capacitat d’un centre en concret observant com varien el nombre i distribució de la població no inclosa.

Igualment tot el que s’ha fet per les Àrees d’Influència circulars, a vista d’ocell, es pot fer també per les Àrees d’Influència seguint el Graf de Trams de Carrers, considerant els trajectes del vianants i donant una imatge més real de la capacitat d’accedir a un determinat servei.  Però això ja ho comentarem més endavant.

Segmentació de la Població

 

Tal com vam veure en un ‘post’ anterior sobre les agregacions de la població de la ciutat, utilitzant la base de dades del Padró Municipal d’Habitants es pot localitzar la població segons la Illa de cases on es viu, segons la parcel·la o segons el portal on hi ha el seu domicili.

Aquesta manera de geolocalitzar pot ser molt útil per mesures o consultes en les quals interessi veure on hi ha més gent o on n’hi ha menys. Però, anant més enllà, pot caldre també discernir sobre quin tipus de població hi ha, segons característiques que estiguin reflectides en el Padró, aquestes característiques són: la data de naixement, el gènere, els estudis, el lloc de procedència , la nacionalitat, i totes les  declarades per cada ciutadà a   l’empadronar-se a la ciutat.

Aquestes propietats, juntes, combinades o separades poden determinar segmentacions de la població en cada una de les agregacions per lloc de què parlàvem abans.

En un anterior exemple sobre les Escoles Bressol Municipal, el segment de població que interessava geolocalitzar era el de nens entre 0 i 2 anys. Anem a veure una interfície del plug-in construït en VB per treballar sobre el SIG  GeoMedia que permet fer aquestes segmentacions.

 

Fig 1. Interfície per fer la Segmentació i l’Agregació dels habitants

A la figura 1 podem veure a la pestanya de l’ edat uns camps on indicar el marge inferior i el marge superior de l’edat que estem cercant, i amb dues possibilitats de comptabilitzar-ho,  estrictament si compleix anys a la data indicada, o en sentit ampli, la persona té X anys fins que no en compleixi  X+1. A la part superior del formulari es pot veure el mètode d’agregació que s’utilitzarà que en aquest cas és el de les Illes.

Aquestes dades de franges d’edat es podrien combinar amb el gènere i el nivell d’estudis o qualsevol altre propietat. Per exemple si el segment que cerquem és el d’homes entre 50 i 60 anys que tinguin estudis universitaris a nivell de llicenciatura, s’haurien de posar els paràmetres a les pestanyes corresponents com es pot veure a les figures 2, 3 i 4.

Fig 2: Marge d’edat
Fig 3: Gènere
Fig 4: Estudis

També s’observa a la figura 4, que en el formulari cal marcar tots els criteris pels quals es farà la cerca, abans de generar la taula,  a més a més cal posar els paràmetres corresponents a cada una de les pestanyes que siguin necessaris per a cada cas.

En resum, com a eina necessària en els estudis de població basats en les dades del Padró Municipal d’Habitants, presentem aquest recurs que permet de generar taules per entitats agregades,  escollides segons els segments de població que ens interessin i que permetin les dades, presentant sempre dades agregades i mai personalitzades.

 

WFS: Interactuació amb mapes.

Descripció.

La necessitat de transferir cartografia per Internet ha sigut, i encara és, un problema difícil. La cartografia digital conté un gran volum de dades d’informació, i enviar aquestes quantitats de megabytes per Internet és una tasca pesada, i lenta.

És per això que es va començar a treballar amb WFS, sigles de “Web Feature Service”, que és un servei estàndard que ofereix una interfície que permet sol·licituds de comunicació, permetent interactuar amb mapes WMS (Web Map Service).

A través d’una URL, es pot accedir a les dades cartogràfiques que s’hagin publicat a la taula WFS, i fer consultes específiques, més endavant es mostra un exemple.

Per realitzar aquestes operacions s’utilitza el llenguatge GML, que deriva de XML,  és l’estàndard a través del qual es transmeten les comandes WFS.

Un cop s’ha fet la publicació de la taula WFS i es té la URL que apunta a ella, es poden veure les dades en alguns SIG (Sistemes d’Informació Geogràfica) que permetin el tractament d’aquest tipus de dades, en aquest cas al Geomedia.

En aquest cas, s’ha decidit a utilitzar la taula de trajectes i proximitat a les tres escoles bressol més properes.

Com fer la publicació?

Primerament, des del servidor on està instal·lat el GeoMediaWebMap Professional, s’obre el Server Configuration Utility i es crea un nou servei amb el botó “Add”.

Creació del servei.

El següent pas és seleccionar l’opció Manipulate Feature Web Service.

Es deixen els valors per defecte i es va prement “Next”, s’haurà d’introduir un nom pel WFS.

Nom del servei.

Quan es demani el tipus de base de dades, introduir Microsoft Access. La resta es deixa per defecte, i es finalitza, el servei s’ha creat.

En aquest punt, s’obre el Geomedia i es carrega el mapa que es vol publicar, s’obre el “GeomediaWebMap Publisher Administrator”.

Configurant el Geomedia.

Es selecciona el servei que s’acaba de crear i apareixerà una barra amb botons. Polsar sobre el cinqué botó “PublishandPopulatetheGeoWorkspace”, i seleccionar la primera opció “PublishtheGeoWorkspace contents to theMetaData”. Es selecciona “Sí”.

Botó “settings”.

Es selecciona el segon botó, “settings”. Aquí s’ha de seleccionar l’arxiu .csf que conté el sistema de coordenades. Després es prem l’últim botó per tancar el menú.

En aquest punt només queda inicialitzar el servei, per fer-ho, es torna al Publisher Server Configuration Utility, es selecciona el servei que s’ha creat i es prem “Initialize”.

Servei inicialitzat.

Provar el servei des del navegador introduint l següent línia de comanda:

http://geoportalccu.tecnocampus.cat/ProvaWFS/request.aspx?version=1.1.0&service=wfs&request=getcapabilities

Codi GML creat.

Interpretació gràfica del codi GML.

Veure així el codi no és interessant, el més interessant és veure-ho transformat en un mapa, al Geomedia per exemple, a continuació es veu com es pot configurar el geomedia per tal de veure la informació del servei WFS.

Primerament s’ha de crear una nova connexió, de tipus WFS, en aquest cas s’ha creat de WFS només lectura, per tal de que les dades no es puguin modificar.

Nova connexió.

S’ha d’introduir la URL abans esmentada, i s’accepta.

Un cop creada la connexió, ja es poden mostrar les seves entrades des de la llegenda.

Ventana de mapa del Geomedia amb les dades.

Entitats agregades de Població

 

Hem vist en anteriors entrades que al final de qualsevol càlcul de proximitat en un sentit o en altre (comptar entitats), arribàvem a veure la població afectada agrupada per illes de cases, cosa que permetia, mitjançant un mapa temàtic, veure les illes on hi havia més o menys gent, que en el cas dels càlculs de proximitat ens  portava a estudiar  les illes que es trobaven a més distància d’un determinat centre o que no en tenien cap a una distància determinada.

Es pot dir que aquesta relació amb la població és el motiu final de molts càlculs i simulacions, ja que la població, en darrera instància és el subjecte principal de l’activitat de la gestió municipal.

Anem a veure una mica en detall com fem aquestes agrupacions dels habitants. L’eina base és el Padro Municipal d’Habitants. En un primer procés s’agafen totes les dades rellevants de la base de dades del Padró, i un cop despersonalitzades, s’inclouen en una taula única, que seria una imatge de la situació del Padró Municipal en un moment determinat, en una data determinada, per tant seria una fotografia que es queda obsoleta immediatament acabada de fer ja que el Padró va canviant en el temps constantment degut a les altes i baixes que es van produint de forma contínua.

Un aspecte important és com situar els habitants en el territori. Nosaltres fem les agregacions dels habitants de tres maneres: càlcul dels habitants que viuen en una  mateixa illa, càlcul dels habitants que viuen en una mateixa parcel·la, i càlcul dels habitants que viuen en el mateix ‘portal’.

Aquesta diferent forma de comptar els habitants correspon al nivell de resolució que ens cal, segons el tipus d’estudi que volem fer. Les illes de Mataró són de l’ordre de 600, les parcel·les, estaríem en unes 12.000 i els portals  (també anomenats números de policia) de l’ordre de 20.000. Per tenir una visió general, no massa precisa, les illes són suficients. Si volem calcular els habitants d’una zona arbitrària de la ciutat  afinarem molt més amb àrees molt més petites com ara les parcel·les, i amb els portals, que per definició no són àrees sinó punts, encara més. Seria com tenir una mateixa fotografia amb uns pixels molt grans (illes) o més petits (parcel·les i portals).

Com podem associar cada habitant amb una illa, una parcel·la o un portal?  D’entrada hem dit que tenim tots els habitants en una única taula, cada fila de la taula és una persona i tant tindrem un total de tantes files com persones. Ara el que cal és un identificador de l’entitat amb la qual volem associar aquest habitant. Si parlem d’illes hi ha una forma única d’identificar cada illa amb un conjunt de tres codis INE (Instituto Nacional de Estadística) : codi de districte censal, i dins de cada districte codi de secció censal i dins de cada secció codi d’illa, tots tres són codis numèrics, i el conjunt de tots tres codis constitueix un identificador únic per una illa de la ciutat de Mataró, el format sol ser D-S-I (districte-secció-illa) per exemple: 5-2-4 que vol dir la illa 4 de la secció 2 del districte 5. Com que cada registre (fila) de la taula tindrà el seu codi D-S-I podrem sumar tots els habitants que tenen un mateix codi, per exemple pel codi 5-2-4 podríem dir que hi ha 235 habitants i així podríem fer una nova taula de dues columnes en la primera tindríem tots els codis d’illa i en la segona els habitants que podem comptar de cada codi. Aquesta seria una primera forma d’agregació dels habitants.

Codificació INE per les Illes: Districte-Secció-Illa
Taula d’agregacions d’habitants per Illa

De la mateixa manera podem tenir en cada registre de la taula general del Padró un identificador únic per la parcel·la que en aquest cas s’anomena codi UTM o Referència Cadastral [set caracters numèrics], aquest codi no existeix per les parcel·les dins de les zones rurals i en aquest cas és substituït per un altre codi que s’anomena CODI_GIS[ nou caracters numèrics]

Codificació per les parcel·les urbanes codi UTM

De la mateixa manera que hem fet la taula d’agregacions per les illes ho faríem per les parcel·les

Agregacions dels habitants per parcel·la

Tal com es pot veure el nombre d’habitants per parcel·la és molt menor que en el cas de les illes, però clar depèn de l’edificació en vertical que hi hagi.

L’agregació per portals o números de policia la faríem en base a un codi que es genera directament de l’adreça postal. El codi NP estaria format per codiCarrer+NumCasa+Lletra, corresponent a cinc caracters numèrics pel codi de carrer, tres pel número de casa, i un per la lletra que si no n’hi ha, que és el normal, es posa una x.

Numeros de Carrer. Codificació CodiCarrer.NumCarrer.Lletra

Com podem veure són els números de carrer que es correspondran amb els portals de les cases i/o les escales. Podem fer l’agregació igual que s’ha fet per les Illes i les parcel·les.

Agregació d’habitants per portal

En resum, d’aquesta manera podem construir les agregacions d’habitants segons la unitat de referència geogràfica que agafem.

Aquesta georeferenciació agregada dels habitants de la ciutat ens pot permetre fer estudis de densitat de població per barris o per àrees concretes de la ciutat, també per carrers, vies i eixos i preveure necessitats de serveis a la població.