Skip to content

Commit 2705f47

Browse files
committed
Actualizada entrada
1 parent b3a0771 commit 2705f47

1 file changed

Lines changed: 32 additions & 16 deletions

File tree

sprint.md

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff 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-
![react.png](img/react.png)
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+
![react.png](/img/react.png)
618

719
Las tareas finalizadas son las siguientes
820

@@ -12,7 +24,7 @@ Las tareas finalizadas son las siguientes
1224
- 15 Consulta datos en mapa (popup).
1325
- 23 Añadir capas WMS y gestión con LayerControl.
1426

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:
1628

1729
- 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).
1830
- 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
2133
## Petición de datos a un servicio WFS
2234

2335
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.
2537

2638
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."*
2739

40+
![03_dera.png](/img/03_dera.png)
41+
2842
## Petición de datos con API fetch
2943

3044
En primer lugar han sido añadidos dos nuevos valores en *state* para el componente *App*
@@ -50,7 +64,7 @@ export default class App extends React.Component {
5064
- *geodata*: Será usado para guardar los datos que obtengamos tras realizar la petición al servicio WFS.
5165
- *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.
5266
53-
![03_add_codeine.png](img/03_add_codeine.png)
67+
![03_add_codeine.png](/img/03_add_codeine.png)
5468
5569
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)
5670
@@ -88,7 +102,7 @@ La funcionalidad está desarrollada dentro de un nuevo componente llamado *Mapla
88102
89103
Para poder usar el icono que viene por defecto en Leaflet se ha tenido que incorporar el siguiente código.
90104
91-
![03_icon_lealfet.png][img/03_icon_lealfet.png]
105+
![03_icon_lealfet.png](/img/03_icon_lealfet.png)
92106
93107
Este componente será añadido en *MapView* y consumirá los datos que le pasamos en sus propiedades
94108
@@ -99,8 +113,8 @@ Despúes de alguna que otra búsqueda [aquí](https://github.com/LiveBy/react-le
99113
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.
100114
101115
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.
104118
105119
```javascript
106120
//MapLayer.js
@@ -122,7 +136,7 @@ export default class MapLayer extends Component {
122136
}
123137
...
124138
```
125-
Para terminar tenemos que pasar como propiedad la referencia creada.
139+
Para poder usar las referencias tenemos que pasarsela como propiedad al compontente.
126140
127141
```javascript
128142
//MapLayer.js
@@ -139,15 +153,17 @@ render() {
139153
140154
### Popups
141155
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*.
143157
144-
![03_popup.png](img/03_popup.png)
158+
![03_popup.png](/img/03_popup.png)
145159
146160
## LayerControl
147161
148162
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.
149163
150164
```javascript
165+
//MapView.js
166+
...
151167
return (
152168
<div>
153169
<Map
@@ -187,11 +203,11 @@ Vamos a darle más **funcionalidades geo** a nuestra aplicación de mapas. Para
187203
188204
Tras el desarrollo de las nuevas tareas esta es nuetra aplición web hasta el momento.
189205
190-
![03_sprint3.gif](img/03_sprint3.gif)
206+
![03_sprint3.gif](/img/03_sprint3.gif)
191207
192208
## Resumen de tareas realizadas en el Sprint #3
193209
194-
![03_trello.png](img/03_trello.png)
210+
![03_trello.png](/img/03_trello.png)
195211
196212
## Hilo de entradas
197213

0 commit comments

Comments
 (0)