Cómo implementar búsquedas personalizadas sobre los geoservicios de IDECOR

Contribución:
Ing. Aldo Algorry
Tecnología y Base de Datos, IDECOR


19 de mayo 2021.

En artículos anteriores hemos presentado diferentes maneras de consumir los geoservicios disponibles en MapasCordoba; por ejemplo, desde una herramienta de análisis y visualización de datos geográficos como QGIS (ver aquí), publicarlos como capas en una página Web (ver aquí) o en una aplicación híbrida (ver aquí parte 1 y parte 2).

En esta nota te mostramos cómo realizar, desde una aplicación externa, consultas personalizadas sobre los geoservicios de IDECOR y obtener como resultado un conjunto específico de datos geográficos, según los criterios o filtros establecidos. Por ejemplo, con estas herramientas pueden construirse aplicaciones donde, dada una ubicación, se obtienen todas las parcelas en un radio determinado (Imagen 1).

Imagen 1. Ejemplo de una App donde se obtienen los objetos espaciales disponibles en un geoservicios de MapasCordoba, dentro de un radio determinado a partir de una ubicación.

Este artículo está dirigido principalmente a desarrolladores de aplicaciones que necesiten implementar en sus soluciones, consultas específicas en tiempo real sobre los datos disponibles en MapasCordoba. Los geoservicios publicados en el geoportal de IDECOR utilizan la tecnología open source GeoServer.

Metainformación de los geoservicios

Para obtener las URL de los geoservicios publicados en MapasCordoba, debe accederse a la pestaña Geoservicios y navegar el árbol temático hasta identificar el conjunto de datos o capa de interés; se disponen geoservicios WFS, WCS y/o WCS (Imagen 2).

Imagen 2. Vista de la sección Geoservicios del portal MapasCordoba

Los geoservicios de una IDE responden al estándar OGC (ver aquí y aquí) permitiendo invocar “operaciones”, como consulta de los metadatos de los geoservicios. Para solicitar una operación se indica el nombre en el parámetro “request” por Query String del URL. Las operaciones para pedir información de una capa son las siguientes:

GetCapabilities (para WFS y WMS)

Ej: https://idecor-ws.mapascordoba.gob.ar/geoserver/idecor/parcelas/wfs?request=GetCapabilities

Recupera información sobre las versiones soportadas del estándar, las operaciones disponibles para ese geoservicio, los valores de configuración del geoservicio, algunos datos de interés geográfico como las coordenadas del bounding box, el ID del sistema de referencia (SRID) e información de las capacidades de consultas que pueden realizarse y sus operadores, entre otros.

DescribeFeatureType (solo para WFS)

Ej: https://idecor-ws.mapascordoba.gob.ar/geoserver/idecor/parcelas/wfs?request=DescribeFeatureType

Esta consulta permite acceso a la información detallada de cada objeto geográfico de la capa, detallando los atributos y tipos de datos.

Consultas por clave de objeto en un servicio WFS

Conociendo las características del geoservicio, podemos realizar consultas sobre los datos. Por ejemplo, puede obtenerse información de un objeto en particular si se conoce su featureID, que es el identificador único de objeto. En este caso, se usa la operación “GetFeature” pasando el tipo de servicio, la versión y el ID del objeto.

Ej: https://idecor-ws.mapascordoba.gob.ar/geoserver/idecor/parcelas/wfs/json?typeName=idecor:parcelas&request=GetFeature&service=WFS&%0Aversion=1.0.0&FEATUREID=parcelas.556327002.511206

El requerimiento anterior recupera información en formato XML, tanto geográfica como alfanumérica, de la parcela con identificador “2556”.

Si fuera necesario puede reducirse el tamaño de la respuesta, indicando el o los atributos que se necesitan, usando el parámetro “propertyName”; en el ejemplo a continuación, devuelve la designación oficial y la valuación de la parcela.

Ej: https://idecor-ws.mapascordoba.gob.ar/geoserver/idecor/parcelas/wfs/json?typeName=idecor:parcelas&request=GetFeature&service=WFS&%0Aversion=1.0.0&propertyName=desig_oficial,valuacion&FEATUREID=parcelas.556327002.511206

Para más información, ingresar al siguiente link.

Consultas por valores de atributos alfanuméricos

Hay dos formas de realizar consultas sobre servicios WFS con definición de filtros personalizados sobre los objetos.

Usando OGC filter

Cuando se usa la operación “getfeature” se puede agregar el parámetro “Filter”. La forma de construir la consulta es de tipo jerárquica, en un XML, según la especificación OGC. Por ejemplo, se puede consultar una parcela que tenga la nomenclatura igual a “2304553901092”, con una especificación XML de la siguiente forma:

La consulta quedará del siguiente modo:

https://idecor-ws.mapascordoba.gob.ar/geoserver/idecor/parcelas/wfs/json?typeName=idecor:parcelas&request=GetFeature&service=WFS&%0Aversion=1.0.0&Filter=<Filter xmlns:gml=»http://www.opengis.net/gml»><PropertyIsEqualTo><PropertyName>Nomenclatura</PropertyName> <Literal>1101012103002025</Literal></PropertyIsEqualTo></Filter>

También pueden usarse conectores lógicos y operadores (expresados como tags XML) de comparación, para realizar consultas más complejas. El parámetro “Filter” se puede enviar también por método POST, de modo de que la URL no quede tan compleja.

Para más información, ingresar al siguiente link.

Usando CQL filter

GeoServer permite una forma alternativa de sintaxis más compacta para realizar consultas, utilizando el estándar CQL/E-CQL (Common Query Language / Extended Common Query Language). Las consultas CQL se formulan usando predicados que incluyen operadores de comparación y conectores lógicos, y funciones predefinidas en forma de expresiones en vez de XML, como los filtros OGC. En este caso el parámetro a usar será CQL_FILTER seguido de la expresión CQL.

Entre los operadores de comparación se incluyen el IN para filtrar por conjuntos de valores y el BETWEEN para establecer rangos de valores válidos.

Por ejemplo, el URL de la consulta que realizamos en el punto anterior se traduce en E_CQL como:

https://idecor-ws.mapascordoba.gob.ar/geoserver/idecor/parcelas/wfs/json?typeName=idecor:parcelas&request=GetFeature&service=WFS&%0Aversion=1.0.0&CQL_FILTER=Nomenclatura=’1101012103002025′

Un ejemplo usando BETWEEN se muestra a continuación

https://idecor-ws.mapascordoba.gob.ar/geoserver/idecor/parcelas/wfs/json?typeName=idecor:parcelas&request=GetFeature&service=WFS&%0Aversion=1.0.0&CQL_FILTER=Superficie_Tierra_Urbana BETWEEN 5000 and 5100

Para más información, ingresar al siguiente link.

Consultas por criterios geográficos

Usando las formas presentadas en los tópicos anteriores, pueden incluirse predicados que involucren selecciones según filtros geográficos combinados o no, con consultas alfanuméricas mediante conectores lógicos.

Usando CQL filter

En CQL para definir las geometrías se utiliza el formato WKT. soportando POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON y GEOMETRYCOLLECTION.

Por otro lado, CQL incorpora las siguientes funciones que permiten definir criterios espaciales para verificar relaciones entre objetos geográficos; EQUALS, DISJOINT, INTERSECTS, TOUCHES, CROSSES, WITHIN, CONTAINS, OVERLAPS, RELATE, DWITHIN BEYOND y BBOX.

Por ejemplo, si requiere identificarse las parcelas que se encuentran dentro de área rectangular (box) se puede usar la función BBOX con los parámetros del campo geometría, en este caso “geom”, y las coordenadas de los puntos extremos del box. Aquí un URL de ejemplo, aplicando esta consulta:

https://idecor-ws.mapascordoba.gob.ar/geoserver/idecor/parcelas/wfs/json?typeName=idecor:parcelas&request=GetFeature&service=WFS&%0Aversion=1.0.0&CQL_FILTER=BBOX(geom,%206523924.29589041,%204357775.75245809,%206524059.98300828,%204357908.31458344)

Para más información, ingresar al siguiente link.

Aplicado a WMS

Los filtros también pueden aplicarse a geoservicios WMS, caso en que el servidor devolverá imágenes de la capa, solo con los objetos filtrados. Por ejemplo, si en un programa javascript con OpenLayers se indica como parámetro CQL_FILTER como el del ejemplo anterior, en el visor se verán sólo las parcelas filtradas como se muestra en la imagen 3.

Imagen 3. Resultado del filtro aplicado usando CQL_FILTER sobre un geoservicios WMS

Para más información, ingresar al siguiente link.

Usando OGC filter

Los mismos filtros se pueden aplicar usando filtros OGC, en el caso del ejemplo, el XML del filtro a aplicar queda como se muestra a continuación:

Y el URL de la consulta será: https://idecor-ws.mapascordoba.gob.ar/geoserver/idecor/parcelas/wfs/json?typeName=idecor:parcelas&request=GetFeature&service=WFS&%0Aversion=1.0.0&Filter=<Filter xmlns:gml=»http://www.opengis.net/gml»><BBOX><PropertyName>geom</PropertyName><gml:Box><gml:coord><gml:X>6523924.29589041</gml:X><gml:Y>4357775.75245809</gml:Y></gml:coord><gml:coord><gml:X>6524059.98300828</gml:X><gml:Y>4357908.31458344</gml:Y></gml:coord></gml:Box></BBOX></Filter>

Para más información, ingresar al siguiente link.

Interactuá en IDECOR-Dev!

Si vas a implementar este tipo de consultas ponete en contacto con el equipo de IDECOR ([email protected]) a fin de evaluar la mejor forma de implementarlas, teniendo en cuenta que algunas consultas (por ejemplo, sobre grandes volúmenes de datos) pueden consumir muchos recursos y afectar tanto la performance del servidor como de la aplicación cliente.

¿Te interesan estos temas? Suscribite al grupo IDECOR-Dev y usá ese espacio para interactuar con otros profesionales que trabajan en el desarrollo e implementación de soluciones usando datos geográficos.

Categorías: Novedades