You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: sprint.md
+32-16Lines changed: 32 additions & 16 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,8 +1,20 @@
1
-
# Sprint 3
2
-
3
-
Vamos con el tercer *sprint* de este [**proyecto para crear una aplicación de mapas con la librería React**](http://www.sigdeletras.com/2020/side-project-desarrollo-de-aplicacion-web-con-react-y-leaflet-i/). Como vamos comentando desde la primera entrada definimos un conjunto de "tareas" cerradas que definirían el alcance la aplicación. En esta ocasión, le he dado un buen impulso a nuestra *backlog*.
4
-
5
-

1
+
---
2
+
title: "Side Project: Desarrollo de aplicación web con React y Leaflet (III). Datos desde WFS"
3
+
excerpt_separator: "<!--more-->"
4
+
comments: true
5
+
related: true
6
+
header:
7
+
teaser: "/img/react.png"
8
+
categories:
9
+
- 2020
10
+
tags:
11
+
- react
12
+
- leaflet
13
+
---
14
+
15
+
Vamos con el tercer *sprint* de este [**proyecto para crear una aplicación de mapas con la librería React**](http://www.sigdeletras.com/2020/side-project-desarrollo-de-aplicacion-web-con-react-y-leaflet-i/). Como voy comentando desde la primera entrada se definieron un conjunto de "tareas" cerradas que establecerían el alcance de la aplicación. En esta ocasión, le he dado un buen impulso al *backlog*.
16
+
17
+

6
18
7
19
Las tareas finalizadas son las siguientes
8
20
@@ -12,7 +24,7 @@ Las tareas finalizadas son las siguientes
12
24
- 15 Consulta datos en mapa (popup).
13
25
- 23 Añadir capas WMS y gestión con LayerControl.
14
26
15
-
Centrándome en los temas aprendidos sobre React a partir del desarrollo de estas tareas, he tratado los siguientes aspectos:
27
+
Los temas aprendidos sobre React a partir del desarrollo de estas tareas son los siguientes:
16
28
17
29
- La gestión de forma asíncrona de peticiones/respuestas a servicios WFS usando [fetch](https://developer.mozilla.org/es/docs/Web/API/Fetch_API/Utilizando_Fetch).
18
30
- El uso de referencias y métodos de cliclo de vida en React.
@@ -21,10 +33,12 @@ Centrándome en los temas aprendidos sobre React a partir del desarrollo de esta
21
33
## Petición de datos a un servicio WFS
22
34
23
35
El consumo de datos geográficos mediante [servicios OGC](https://es.wikipedia.org/wiki/Open_Geospatial_Consortium) se encuentra extendido en proyectos de estas características. Dentro de estos servicios estándar, el conocido como **Web Feature Service (WFS)** ofrece una interfaz de comunicación que permite consultar o descargar objetos geográficos. En la la entrada titulada ["Acceso a servicios OGC (WMS,WFS..) con Postman"](http://www.sigdeletras.com/2019/acceso-a-servicios-ogc-con-postman/) tengo desarrollado algunos de estos aspectos.
24
-
Hay una gran cantidad de datos que pueden consumirse no solo con un SIG de escritorio, sino también mediante una aplicación web. Sirva come ejemplo la [recopilación de servicios de descargas en la web de la IDE España](https://www.idee.es/es_ES/web/guest/directorio-de-servicios?p_p_id=DIRSRVIDEE_WAR_DIRSRVIDEEportlet_INSTANCE_KXnVu4qMJc1J&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_DIRSRVIDEE_WAR_DIRSRVIDEEportlet_INSTANCE_KXnVu4qMJc1J_descSrv=DESCARGA).
36
+
Hay una gran cantidad de datos que pueden consumirse no solo con un SIG de escritorio, sino también mediante una aplicación web. Sirva come ejemplo la [recopilación de servicios de descargas en la web de la IDE España](https://www.idee.es/es_ES/web/guest/directorio-de-servicios?p_p_id=DIRSRVIDEE_WAR_DIRSRVIDEEportlet_INSTANCE_KXnVu4qMJc1J&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_DIRSRVIDEE_WAR_DIRSRVIDEEportlet_INSTANCE_KXnVu4qMJc1J_descSrv=DESCARGA). Al ser un recurso muy especializado técnicamente, pienso que se encuentra realmente poco explotado tanto por parte de los profesionales "geo" como desde del desarrollo web en general.
25
37
26
38
Para el proyecto voy a usar los datos de Servicios de Salud del [WFS de los Datos Espaciales de Rerencia de Andalucía (DERA)](http://www.juntadeandalucia.es/institutodeestadisticaycartografia/DERA/servicios.htm). En esta capa se encuentran la *"distribución de los equipamientos sanitarios públicos y privados integrados en el Sistema Sanitario Público de Andalucía."*
27
39
40
+

41
+
28
42
## Petición de datos con API fetch
29
43
30
44
En primer lugar han sido añadidos dos nuevos valores en *state* para el componente *App*
- *geodata*: Será usado para guardar los datos que obtengamos tras realizar la petición al servicio WFS.
51
65
- *code*: En este calor se almacenará el código INE del municipio y que permitirá realizar la consulta filtrada el servicio WFS. El código INE ha sido añadido al json que almacena los datos que aparecen en el listado y también se ha actualizado la información almacena en el valor del elemento *select* dentro de *SelectList* para que puede ser usado.
52
66
53
-

67
+

54
68
55
69
Para la obtención de los datos desde el WFS de la Junta de Andalucía, creamos una función *getWFSData(code)*. En esta función se realizará la petición de datos a la URL del servicio usando [API fetch](https://developer.mozilla.org/es/docs/Web/API/Fetch_API) y pasando el código INE como filtro. La asincronía de la función será manejada con [*async*](https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Sentencias/funcion_asincrona)
56
70
@@ -88,7 +102,7 @@ La funcionalidad está desarrollada dentro de un nuevo componente llamado *Mapla
88
102
89
103
Para poder usar el icono que viene por defecto en Leaflet se ha tenido que incorporar el siguiente código.
90
104
91
-
![03_icon_lealfet.png][img/03_icon_lealfet.png]
105
+

92
106
93
107
Este componente será añadido en *MapView* y consumirá los datos que le pasamos en sus propiedades
94
108
@@ -99,8 +113,8 @@ Despúes de alguna que otra búsqueda [aquí](https://github.com/LiveBy/react-le
99
113
Según la documentación de la librería, alguno de los componentes no se actualizan cuando cambian después de que el componente es montado. Este el el caso del componente GeoJSON. Para que esta opción funciones debemos acceder directamente al elemento Leaflet usado *this.leafletElement* y usando las [referencias de React](https://es.reactjs.org/docs/refs-and-the-dom.html) y desde ahí manejar el DOM de Leaflet.
100
114
101
115
Hecha la referencia, ahora debemos usar las funciones de la librería de mapa en los **métodos del ciclo de vida del componente React**:
102
-
- componentWillReceiveProps(). Este método no se ejecutará una vez se monte el componente, si no que se esperará a recibir nuevas props de un componente padre para ejecutarse. Lo usaremos para limpiar las capas con *clearLayers()* si los datos recibidos son distintos.
103
-
- componentDidUpdate(). Es invocado inmediatamente después de que el componente se haya actualizado. Dentro se añadirán los datos para el GeoJSON que obtenemos al realizar la consulta a la API.
116
+
- *componentWillReceiveProps()*. Este método no se ejecutará una vez se monte el componente, si no que se esperará a recibir nuevas props de un componente padre para ejecutarse. Lo usaremos para limpiar las capas con *clearLayers()* si los datos recibidos son distintos.
117
+
- *componentDidUpdate()*. Es invocado inmediatamente después de que el componente se haya actualizado. Dentro se añadirán los datos para el GeoJSON que obtenemos al realizar la consulta a la API.
Para terminar tenemos que pasar como propiedad la referencia creada.
139
+
Para poder usar las referencias tenemos que pasarsela como propiedad al compontente.
126
140
127
141
```javascript
128
142
//MapLayer.js
@@ -139,15 +153,17 @@ render() {
139
153
140
154
### Popups
141
155
142
-
Terminamos el componente incorporando la función *onEachFeature()* que permite ofrecer información del punto en un *popup*.
156
+
Terminamos el componente incorporando la función *onEachFeature()* que permite ofrecer información de los servicios saniarios en un *popup*.
143
157
144
-

158
+

145
159
146
160
## LayerControl
147
161
148
162
Vamos a darle más **funcionalidades geo** a nuestra aplicación de mapas. Para poder ver los datos sobre distintos mapas base, he incorporado el compomente de control de capas *LayersControl* en *MapView*. Dentro del mismo seguimos manteniendo la base de OpenStreetMap y añadimos la **ortofotografía del PNOA** como capa WMS.
149
163
150
164
```javascript
165
+
//MapView.js
166
+
...
151
167
return (
152
168
<div>
153
169
<Map
@@ -187,11 +203,11 @@ Vamos a darle más **funcionalidades geo** a nuestra aplicación de mapas. Para
187
203
188
204
Tras el desarrollo de las nuevas tareas esta es nuetra aplición web hasta el momento.
0 commit comments