1 mar 2024

Servicio OGC API de procesos: Proceso bufferElevation


El proceso de definición de área de influencia con estadísticas de altitud (bufferElevation) implica la creación de un área de influencia (buffer) a partir de un punto y una distancia específica. Opcionalmente, se pueden obtener resultados estadísticos de altitud como la elevación máxima, mínima, promedio y desviación típica. Estas estadísticas se calculan a partir de los puntos contenidos en el área de influencia utilizando el
Modelo Digital del Terreno (MDT05) proporcionado por el Plan Nacional de Ortofotografía Aérea.

En la página de API processes bufferElevation se pueden consultar los parámetros de entrada y de salida.

Datos de entrada:
  • «geom»: Parámetro obligatorio que corresponde al punto a partir del que se va a calcular el área de influencia. Tipo de dato String
  • «formato»: parámetro obligatorio que indica el formato en que se proporciona la geometría del parámetro «geom». Los formatos soportados son GML, GeoJSON y WKT. Tipo de dato: string.
  • «crs» parámetro es opcional, que viene proporcionado por el sistema de referencia de los parámetros «geom», por defecto se utilizará el Sistema de referencia (EPSG: 4326). Tipo de dato: integer.
  • «distancia»: distancia del área de influencia (metros). Si no se proporciona se utilizará el valor por defecto 100 metros.
  • «estadisticas»: Indica si se quieren obtener las estadísticas del área de influencia calculada. Los valores permitidos son true/false. Valor por defecto se utiliza false.
Datos de salida:
  • «id»: Identificador del proceso.
  • «values» que es el resultado con la geometría del área de influencia calculada y las estadísticas si es solicitado. Formato de salida GeoJSON.
Ejecución del proceso:

Para la ejecución del proceso se utiliza una función POST. Se accede a la dirección: https://api-processes.idee.es/processes/bufferElevation/execution y es obligatorio ejecutar la petición en JSON.

En la galería de ejemplos de API CNIG se puede consultar un ejemplo completo para este proceso para la obtención de las estadísticas del área de influencia sobre el MDT. En este caso se usa como datos de entrada las coordenadas de un punto y una distancia (en metros) en el Sistema de Referencia de Coordenadas EPSG:4326 para construir un GeoJSON de entrada. Los resultados que se obtienen son las estadísticas de altitud para el área de influencia (buffer): mínima, máxima, media y desviación estándar.

Ejemplo de la API CNIG para la obtención de las estadísticas de altitud dentro de un área de influencia y a partir del MDT

Una opción para verificar los API de procesos es utilizar Swagger UI que ofrece la misma interfaz de procesos. Desde aquí podemos acceder al proceso bufferElevation de una manera sencilla, de modo que podemos verificar el procedimiento para la obtención de las estadísticas principales de las altitudes dentro de un área de influencia a partir del MDT05. 


Otra forma más experta de explotar lo servicios es a través del comando cURL o de una biblioteca de Python llamada requests, como se detalla en los siguientes ejemplos.

En este  proceso se puede utilizar como datos de entrada los formatos: WKT (Well Known Text), GeoJSON y GML. A continuación, vemos diferentes ejemplos partiendo de las coordenadas geográficas de un punto próximo al Pico del Teide (-16.642978, 28.272218), en el sistema de referencia WGS84 (EPSG:4326), y una distancia específica de 3000 m y variando el código JSON en función del formato de entrada del parámetro «geom» (geojson, wkt y gml). Opcionalmente obtendremos también el cálculo de los valores estadísticos de las altitudes del área de influencia (altitud mínima, máxima, media y desviación estándar) estableciendo el parámetro «estadisticas» con valor true.

FORMATO

EPSG

GeoJSON

4326

WKT

GML

Visualización del servicio WMS Mapa Raster IGN del Parque Nacional El Teide donde se definirá un área de influencia para la obtención de los valores estadísticos de altitudes.

FORMATO GeoJSON

Para el cálculo de las estadísticas de altitud para un área de influencia en formato GeoJSON el código JSON para realizar la petición sería:

 {
 "inputs": {
    "crs": 4326,

    "formato": "geojson",
    "distancia": 3000,
 
    "estadisticas": true,

    "geom": "{\"coordinates\": [-16.64297, 28.272218,\"type\":\"Point\"}"
  }
}

El cURL que se ejecuta:

curl -X POST "https://api-processes.idee.es/processes/bufferElevation/execution" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"inputs\":{\"crs\":4326,\"formato\":\"geojson\",\"distancia\":3000,\"estadisticas\":true,\"geom\":\"{\\\"type\\\": \\\"FeatureCollection\\\",\\\"features\\\": [{\\\"geometry\\\": {\\\"coordinates\\\": [-16.642978,28.272218],\\\"type\\\": \\\"Point\\\"}\"}}"


Ejemplo de petición desde script Python


En el siguiente ejemplo se muestra cómo realizar la misma petición HTTP POST al servicio publicado en una OGC API processes desde un script de Python. Para ello, se utiliza la librería requests, cuya importación se realiza en la primera línea. Posteriormente se definen las variables «url» (texto con la URL a la que se va a realizar la petición) y «myObj» (json con los parámetros de entrada de la función a ejecutar). Por último, se realiza la petición y se guarda en el parámetro «result».

Dentro de la variable tenemos distintos métodos, entre los que destacan: 
  • «request» para obtener los datos de la petición 
  • «.json()» para obtener el resultado de la operación ejecutada en formato json
  • «.status_code» para obtener el estado de la petición HTTP.

 import requests

 # URL del proceso en el processes
 url = 'https://api-processes.idee.es/processes/bufferElevation/execution'
 
 myObj = {
             "inputs": {
             "crs": 4326,
             "distancia": 3000,
             "estadisticas": True,
             "formato": "geojson",
             "geom": "{\"coordinates\": [-16.642978,28.2722181],\"type\":\"Point\"}",
          }
 }

 result = requests.post(url, json = myObj)

 print('resultado de la petición: ',result.request)
 print('resultado del proceso: ',result.json())
 print('estado de la petición: ',result.status_code)

En los siguientes ejemplos sólo se muestra la petición cURL, por simplificar. Para crear el script de Python, solo habría que modificar el objeto myObj con el JSON indicado en cada caso.

FORMATO WKT

Para el cálculo de las estadísticas principales de las altitudes de un área de influencia en formato WKT, la geometría del punto viene dada por el parámetro "geom": "POINT(longitud latitud)".

El código JSON para realizar la petición sería:  "

 {
 "inputs": {
    "crs": 4326,

    "formato": "wky",
    "distancia": 3000,
 
    "estadisticas": true,

    "geom": "Point(-16.64297, 28.272218)"
  }
}

El cURL que se ejecuta:

curl -X POST "https://api-processes.idee.es/processes/bufferElevation/execution" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"inputs\":{\"crs\":4326,\"formato\":\"wkt\",\"distancia\":3000,\"estadisticas\":true,\"geom\":\"POINT(-16.642978,28.272218)\"}}"


FORMATO GML


Para el cálculo de las estadísticas principales de las altitudes de un área de influencia en formato GML 
El código JSON de entrada modificando los parámetros: “formato” y “geom” para definir el punto en formato GML sería:

{
 "inputs": {
    "crs": 4326,

    "formato": "gml",
    "distancia": 3000,
 
    "estadisticas": true,
   "geom": "<gml:Point xmlns:gml=\"http:\/\/www.opengis.net\/gml\"><gml:coordinates>-16.64297 28.272218<\/gml:coordinates>\/gml:Point>"
  }
}

El cURL que se ejecuta:

curl -X POST "https://api-processes.idee.es/processes/bufferElevation/execution" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"inputs\":{\"crs\":4326,\"formato\":\"gml\",\"distancia\":3000,\"estadisticas\":true,\"geom\":\"<gml:Point xmlns:gml=\\\"http://www.opengis.net/gml\\\"><gml:coordinates>-16.642978 28.272218</gml:coordinates></gml:Point>\"}}"


RESULTADO DE LA EJECUCIÓN DEL PROCESO:


El resultado de ejecutar cualquiera de las anteriores peticiones definidas en los formatos (GeoJSON, WKT y GML) para el ejemplo propuesto, nos devuelve el mismo resultado en formato GeoJSON:

{
 "id":"BufferElevation",
   "values": {

    "type": "Feature",
      "geometry": {
        "type": "Polygon",
       "coordinates": [
        [
         [
         -16.615978,
         28.272218
         ],
         [
         -16.616015002561625,
         28.270804929181438
         ],
         [
         -16.61631041480393,
           28.267994269443914
         ],
         /.../
 
         [
         -16.61631041480393,                 
         28.276441730556083
         ]
       ]
     ]
    },
    "properties": {
       "min": 2004.760986328125,
       "max": 2571.5859375,
       "avg": 2202.36376953125,
       "std": 129.33950805664062
     }
   }
 }

Los resultados del fichero GeoJSON muestran las coordenadas geográficas que forman el círculo (120 puntos) y las estadísticas calculadas para el área de influencia definida. Estos resultados podemos visualizarlos en un SIG (p.ej. QGIS), como vemos en la siguiente imagen, la capa vectorial de resultados tiene asociada los datos estadísticos en su tabla (con referencia a los campos: min, max, avg y std) que representan respectivamente el valor mínimo, máximo, promedio y desviación estándar de la altitud del área de influencia.

Representación de los resultados del ejemplo propuesto empleando el proceso de API Processes de OGC: bufferElevation.


Este artículo forma parte de una serie,  para saber más sobre OGC API Processes y otros procesos del Servicio OGC API procesos del CNIG consulta el artículo índice.

Publicado por María José García Rodríguez.

No hay comentarios: