Responsive Image
Blogs

Servicio OGC API de procesos (OGC API Processes): simplifiedStatistics

El proceso de OGC API simplifiedStatistics consiste en calcular las estadísticas de la altitud máxima, mínima, media y desviación típica para un polígono a partir del Modelo Digital del Terreno (MDT05) del Plan Nacional de Ortofotografía Aérea, proporcionado por el Instituto Geográfico Nacional.

En la página de API processes simplifiedStatistics, se pueden consultar los parámetros de entrada necesarios para ejecutar el proceso y los parámetros de salida resultantes de la ejecución

Datos de entrada:

  • «bbox»: representa un rectángulo mínimo envolvente de la zona en la que se van a calcular las estadísticas. Obligatorio proporcionar bbox o geom.
  • «geom»: polígono de la zona en la que se van a calcular las estadísticas. Obligatorio proporcionar bbox o geom.
  • «formato»: formato en el que se proporciona la geometría del parámetro geom. Los formatos soportados son wkt, geojson, gml y ascii. Obligatorio si se proporciona el parámetro geom.
  • «crs»: Sistema de Referencia de Coordenadas de los parámetros geom o bbox. Opcional. Si no se proporciona se utilizará el valor por defecto 4326.

Datos de salida:

  • «Id»: Identificador del proceso.
  • «values»: valores de la elevación mínima (min), máxima (max), media (avg) y desviación típica (std) del area especificada. Para su cálculo se usan los métodos correspondientes de numpy.

El método NumPy

NumPy es una poderosa librería de Python que cuenta con una amplia colección de funciones matemáticas de alto nivel, las cuales permiten operar de manera eficiente y obtener resultados numéricos, vectoriales y de matrices multidimensionales. En el caso de cálculos estadísticos, NumPy proporciona una serie de funciones que facilitan la obtención de medidas de tendencia central, dispersión, correlación, entre otras. Estas funciones pueden aplicarse directamente sobre arrays (tanto unidimensionales como multidimensionales) y están optimizadas para trabajar con grandes volúmenes de datos. Algunos ejemplos de estas sentencias son:

  • np.min(array): obtiene el valor mínimo en el array.
  • np.max(array): obtiene el valor máximo en el array.
  • np.mean(array): calcula la media aritmética de los elementos en el array.
  • np.std(array): calcula la desviación estándar o típica, es decir la dispersión de los datos respecto a la media.

 

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/openapi?f=html#/simplifiedStatistics/execution y es obligatorio ejecutar la petición en JSON.

Una opción para verificar los API de procesos es utilizar Swagger UI que ofrece la misma interfaz de processes. Desde aquí podemos acceder al proceso simplifiedStatistic de una manera sencilla, de modo que podemos verificar el procedimiento para la obtención de las estadísticas de elevación (máxima, mínima, media y desviación típica) de un polígono del MDT05.

Figura 1. Interfaz del Swagger UI para acceder al proceso simplifiedStatistic

Otra forma más experta de explotar lo servicios es a través del comando cURL o de una biblioteca de Python llamada requests.

Al realizar las peticiones, se puede utilizar el parámetro «geom», que define un polígono, o el parámetro «bbox», que permite establecer un rectángulo mínimo envolvente de la zona en la que se van a calcular las estadísticas.

  • Uso del parámetro «geom»

Si como dato de entrada se introduce el parámetro «geom», la geometría de las entidades espaciales se define mediante puntos que forman un polígono, el cual puede especificarse en formato GeoJSON o WKT (Well-Known Text).

Vamos a explicar diferentes ejemplos de peticiones para el cálculo de valores estadísticos de altitud de un polígono, utilizando los Sistemas de Referencia de Coordenadas Geográficas ETRS89 (EPSG:4258) y la Proyección UTM ETRS89 Huso 30 (EPSG:25830) y partiendo del parámetro de entrada «geom» en formato GeoJSON y WKT

Formato

EPSG

GeoJSON

4258

25830

WKT

4258

25830

 

Como caso práctico, se ha seleccionado un polígono cuyas coordenadas se muestran en la siguiente imagen (Figura 2) y su respectiva Tabla I

Tabla I. Coordenadas geográficas (EPSG: 4258) y proyectadas (EPSG: 25830) del polígono.

 

UTM Huso 30 ETSR89 (EPSG: 25830)

Geográficas ETRS89 (EPSG: 4258)

Punto

x

y

Longitud

Latitud

1

418298,470

4520559,490

-3.96900

40.83200

2

420827,963

4520531,949

-3.93900

40.83200

3

420863,663

4523862,211

-3.93900

40.86200

4

418335,311

4523889,756

-3.96900

40.86200

1

418298,470

4520559,490

-3.96900

40.83200

Figura 2. Representación del polígono en el que se calcularán los valores estadísticos de altitud

Para la ejecución del proceso API simplifiedStatistic realizaremos las peticiones en código JSON. A continuación, vemos los siguientes ejemplos:

1. Ejemplo de petición en formato GeoJSON y en el Sistema de Referencia de Coordenadas EPSG:4258.

 {
  "inputs": {
    "formato": "geojson",
    "geom": "{\"type\":\"Polygon\",\"coordinates\":[[[-3.969,40.832], [-3.939,40.832],[-3.939,40.862],[-3.969,40.862],[-3.969,40.832]]]}"
  }
}

El cURL que se ejecuta:

curl -X POST "https://api-processes.idee.es/processes/simplifiedStatistics/execution" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"inputs\":{\"crs\":4258,\"formato\":\"geojson\",\"geom\":\"{\\\"type\\\":\\\"Polygon\\\",\\\"coordinates\\\":[[[-3.969,40.832], [-3.939,40.832],[-3.939,40.862],[-3.969,40.862],[-3.969,40.832]]]}\"}}"

El resultado es el siguiente:


"id": "SimplifiedStatistics",
  "values": {
    "min": 1648.5670166015625,
    "max": 2426.860107421875,
    "avg": 2084.78955078125,
    "std": 158.86050415039062
  }

 

Ejemplo de petición desde script Python

 

En el siguiente ejemplo se muestra cómo realizar una petición HTTP POST al servicio publicado en una OGC API processes desde un script en Python. Para ello, se utiliza la librería requests, la cual se importa en la primera línea del código. A continuación, se definen las variables url (que contiene la dirección a la que se enviará la petición) y myObj (un objeto JSON con los parámetros de entrada de la función a ejecutar). Finalmente, se realiza la petición y se almacena el resultado en la variable result. Esta variable ofrece distintos métodos útiles, entre los que destacan: .request, para obtener información sobre la petición realizada; .json(), para acceder al resultado de la operación en formato JSON; y .status_code, para consultar el estado de la respuesta HTTP.

import requests

# URL del proceso en el processes

url = 'https://api-processes.idee.es/openapi?f=html#/simplifiedStatistics/execution'

myObj = {
  "inputs": {
    "crs": 25830,
    "formato": "geojson",
     "geom": "{\"type\":\"Polygon\",\"coordinates\":[[[-3.969,40.832],
     [-3.939,40.832],[-3.939,40.862],[-3.969,40.862],[-3.969,40.832]]]}"
  }
}

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)

Nota: 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 de entrada.

2. Ejemplo de petición en formato GeoJSON y en el Sistema de Referencia de Coordenadas EPSG:25830.

En este ejemplo el código JSON para realizar la petición sería:

{
  "inputs": {
    "crs": 25830,
    "formato": "geojson",
    "geom": "{\"type\":\"Polygon\",\"coordinates\":[[[418298.470, 4520559.490], [420827.63, 4520531.949],[420863.663, 4523862.211],[418335.311, 4523889.756],[418298.470, 4520559.90]]]}"
 }
}

El cURL que se ejecuta:

curl -X POST "https://api-processes.idee.es/processes/simplifiedStatistics/execution" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"inputs\":{\"crs\":25830,\"formato\":\"geojson\",\"geom\":\"{\\\"type\\\":\\\"Polygon\\\",\\\"coordinates\\\":[[[418298.470, 4520559.490], [420827.63, 4520531.949],[420863.663, 4523862.211],[418335.311, 4523889.756],[418298.470, 4520559.90]]]}\"}}"

El resultado de ejecutar esta petición nos devuelve los valores estadísticos de la elevación: mínimo (min), máximo (max), promedio (avg) y desviación estándar (std) del polígono indicado:

  "id": "SimplifiedStatistics",
  "values": {
    "min": 1648.5670166015625,
    "max": 2426.860107421875,
    "avg": 2084.78955078125,
    "std": 158.86050415039062
  }

 

3. Ejemplo de petición en formato WKT y en el Sistema de Referencia de Coordenadas EPSG:4258.

 

Los datos de entrada en formato WKT, dentro de la solicitud en código JSON, se introducirían de la siguiente manera:

{
  "inputs": {
    "crs": 4258,
    "formato": "wkt",
    "geom": "POLYGON((-3.969 40.832, -3.939 40.832, -3.939 40.862, -3.969 40.862, -3.969 40.832))"
  }
}   

El cURL que se ejecuta:

curl -X POST "https://api-processes.idee.es/processes/simplifiedStatistics/execution" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"inputs\":{\"crs\":4258,\"formato\":\"wkt\",\"geom\":\"POLYGON((-3.969 40.832, -3.939 40.832, -3.939 40.862, -3.969 40.862, -3.969 40.832))\"}}"

Como resultado, se obtienen los valores estadísticos de elevación del polígono: mínimo, máximo, media y desviación típica.

{
  "id": "SimplifiedStatistics",
  "values": {
    "min": 1648.5670166015625,
    "max": 2426.860107421875,
    "avg": 2084.78955078125,
    "std": 158.86050415039062
  }
}

 

4. Ejemplo de petición en formato WKT y en el Sistema de Referencia de Coordenadas EPSG:25830.

 

Para realizar este ejemplo se utiliza el siguiente código JSON:

{
  "inputs": {
    "crs": 25830,
    "formato": "wkt",
    "geom": "POLYGON((418298.470 4520559.490, 420827.63 4520531.949, 420863.663 4523862.211, 418335.311 4523889.756, 418298.470 4520559.90))"
  }

El cURL que se ejecuta:

curl -X POST "http://10.67.33.37:9078/processes/simplifiedStatistics/execution" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"inputs\":{\"crs\":25830,\"formato\":\"wkt\",\"geom\":\"POLYGON((418298.470 4520559.490, 420827.63 4520531.949, 420863.663 4523862.211, 418335.311 4523889.756, 418298.470 4520559.90))\"}}"

El resultado de los valores estadísticos:

{
  "id": "SimplifiedStatistics",
  "values": {
    "min": 1648.5670166015625,
    "max": 2426.860107421875,
    "avg": 2084.78955078125,
    "std": 158.86050415039062
  }
}

 

  • Uso del parámetro “bbox”

 

En el caso de utilizar el parámetro «bbox» en lugar del parámetro «geom», el código JSON para especificar el área de estudio se define mediante las coordenadas mínimas y máximas del recuadro envolvente, en valores de coordenadas x, y, de la forma: «bbox»: [Xmin, Ymin, Xmax, Ymax]; o bien en coordenadas geográficas (longitud, latitud): «bbox»: [longitud_min, latitud_min, longitud_max, latitud_max].

{
  "inputs": {
    "crs": 4258,
    "bbox": [-3.969,40.832,-3.939,40.862]
  }
}

El cURL que se ejecuta:

curl -X POST "https://api-processes.idee.es/processes/simplifiedStatistics/execution" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"inputs\":{\"crs\":4258,\"bbox\":[-3.969,40.832,-3.939,40.862]}}"

El resultado obtenido de la ejecución del código JSON son los valores estadísticos de elevación del polígono (mínimo, máximo, media y desviación típica):

{
  "id": "SimplifiedStatistics",
  "values": {
    "min": 1648.5670166015625,
    "max": 2426.860107421875,
    "avg": 2084.78955078125,
    "std": 158.86050415039062
  }
}

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

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

Contacto
Calle General Ibáñez de Íbero 3
​​​​​​​Madrid 28003
Síguenos
Ministerio de Transportes y Movilidad sostenible

BLOG IDEE

Responsive Image
Responsive Image

BLOG IDEE

Responsive Image
Contacto
Calle General Ibáñez de Íbero 3
​​​​​​​Madrid 28003
Síguenos
Responsive Image