Datos con componente espacial en la Onesait Platform (parte 1): el concepto

Header Maps

Cuando hablamos de datos con componente espacial, estamos hablando de cualquier tipo de dato que lleva asociada cierta información que permite su localización en un mapa.

Un ejemplo de esto sería una tabla con datos, por ejemplo, donde uno de sus campos contiene las coordenadas que permiten indicar la posición de una farola, un camino o una parcela, por ejemplo.

Podríamos estar horas escribiendo acerca de la caracterización de este posicionamiento, hablando del elipsoide, sistemas de coordenadas, datums y demás, pero vamos a simplificarlo todo indicando que para localizar un elemento en un mapa, necesitamos dos coordenadas; una que indique su posición en el eje X, y otra la de su eje Y.

El par de coordenadas más común que encontramos es la longitud y la latitud, que permite definir un punto en la superficie terrestre.

Globo terráqueo con los meridianos y paralelos indicados. Fuente: SailingIssues

Estructura de datos espaciales

Ahora que sabemos cómo definir un dato en el espacio, ¿cómo se guarda este tipo de información?

Como hemos dicho al principio, esta información no deja de ser un dato más, y como tal se puede introducir como un campo cualquiera más. Sin embargo, no es lo óptimo según lo que queramos hacer con dichos datos.

Si lo que buscamos es representar la información en un visor de mapas, por ejemplo, almacenando la información con cierta estructura nos puede facilitar mucho las cosas.

Existen muchos formatos denominados como geográficos, tales como los SHP (shapefile), GML (Geography Markup Language) o KML (Keyhole Markup Language), todos ellos muy comunes en el mundo del mapeo y del GIS. Según la finalidad que se tenga, se utilizarán unos u otros.

Sin embargo, para trabajar con visores de mapas web el formato más común que nos encontramos actualmente es el GeoJSON, un tipo de archivo basado en un JSON (de hecho, es un JSON), con una estructura de datos orientada a definir geometrías, las cuales pueden ser de tipo punto, línea o polígono.

Esta estructura seguiría un esquema similar a este:

{
  "type": "Feature",
  "geometry": {
    "type": "Point",
    "coordinates": [-3.6394, 40.5305]
  }
}

Por un lado, se define una propiedad «type», indicando que es un «Feature» (un elemento, vamos), y otra propiedad llamada «geometry» que contendrá el componente espacial. Aquí dentro se definen dos propiedades; una primera llamada «type», indicando la geometría (acepta hasta siete opciones distintas), y otra llamada «coordinates» con el array de coordenadas que definen la posición.

Las agrupaciones de «features» se hace mediante un «FeatureCollection».

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [
          -3.6394,
          40.5305
        ]
      }
    }
  ]
}

Como en el caso anterior, se compone de una propiedad «type», con valor «FeatureCollection», y un array llamado «features» que agrupa cada feature definido.

Datos espaciales en la Plataforma

Como bien sabéis, en la Onesait Platform utilizamos el concepto de ontología, lo que nos permite definir un esquema de datos acorde a nuestras necesidades.

Esto es ideal para poder definir la estructura de un GeoJSON, lo que nos permitirá tener los datos tal como se definen en las especificaciones de este formato.

Para facilitar el trabajo, incorporamos a los tipos de datos disponibles en las ontologías los principales tipos de geometrías, por lo que a la hora de crear una ontología se puede elegir el tipo de geometría que nos interese, lo que generará automáticamente por debajo el esquema de datos necesario.


Cuando se genera la ontología, es posible crear diferentes tipos de geometrías en diferentes campos; así, para una misma serie de datos podríamos tener su polígono definido así como su centroide, por ejemplo.

A la hora de introducir datos en este tipo de ontologías, se hará de la misma forma que si se tratase de cualquier otro tipo de dato, teniendo en cuenta el formato con el que se introducen los datos.

Así, para el ejemplo de los tres tipos de geometrías, un objeto de ejemplo con el que hacer un CRUD válido sería el siguiente:

{
  "ontology_name": {
    "point": {
      "coordinates": [-15.03, 41.6],
      "type": "Point"
    },
    "line": {
      "coordinates": [
        [0, 0],
        [-28.6, 28.6]
      ],
      "type": "LineString"
    },
    "polygon": {
      "coordinates": [
        [
          [0, 0],
          [10, 0],
          [10, 10],
          [0, 0]
        ]
      ],
      "type": "Polygon"
    }
  }
}

Como veis, incluir información con componente espacial en la Onesait Platform es bastante sencillo, ya que las ontologías estás bien preparadas para ello.

La semana que viene veremos cómo visualizar estos datos en la Plataforma, generando capas a partir de ontologías e incluyéndolas en un visor de mapas.

2 Comments

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *