Datos de ubicación geoespaciales y GeoJSON en Azure Cosmos DB for NoSQL

SE APLICA A: NoSQL

Azure Cosmos DB for NoSQL tiene una funcionalidad geoespacial integrada para representar formas geométricas, o bien polígonos o ubicaciones reales en un mapa.

Los datos geoespaciales suelen implicar consultas de proximidad. Por ejemplo, la pregunta "buscar todas las ubicaciones comerciales cerca de mi ubicación actual" se responde mediante una consulta de proximidad sobre varios objetos de datos geoespaciales.

Los casos de uso geoespacial comunes incluyen, pero no se limitan a:

  • Análisis de geolocalización, para impulsar iniciativas de marketing específicas basadas en la ubicación.
  • Personalización basada en la ubicación, para sectores como el minorista y el sanitario, para mejorar la experiencia de usuario.
  • Mejora de la logística, para sectores como el de transporte, en el que la optimización es fundamental.
  • Análisis de riesgos, para sectores como seguros y finanzas, para complementar otros metadatos.
  • Reconocimiento de situaciones*, para alertas y notificaciones basadas en proximidad.

Introducción a los datos espaciales

Los datos espaciales describen la posición y la forma de los objetos en el espacio. En la mayoría de las aplicaciones, estos puntos y formas se corresponden con objetos situados en la tierra y datos geoespaciales. Los datos espaciales pueden usarse para representar la ubicación de una persona, un lugar de interés o el límite de una ciudad o un lago.

Azure Cosmos DB for NoSQL admite dos tipos de datos espaciales: los geométricos y los geográficos.

  • El tipo geometry representa los datos en un sistema de coordenadas euclidiano (plano). Este tipo es útil para tareas geométricas comunes, como medir líneas, formar intersecciones de polígonos y medir distancias entre puntos.
  • El tipo geography representa los datos en un sistema de coordenadas de tierra redonda. Este tipo es útil para tareas geográficas comunes, como determinar si una ubicación está dentro de límites específicos y medir la distancia entre ubicaciones.

Tipos de datos admitidos

Azure Cosmos DB for NoSQL admite la indexación y consulta de datos de puntos geoespaciales que se representan mediante la especificación GeoJSON. Las estructuras de datos de GeoJSON son siempre objetos JSON válidos, por lo que se pueden almacenar y consultar mediante Azure Cosmos DB sin tener que usar herramientas ni bibliotecas especializadas.

Azure Cosmos DB admite los siguientes tipos de datos espaciales:

  • Point
  • LineString
  • Polygon
  • MultiPolígono

Puntos

Un punto denota una posición única en el espacio. En los datos geoespaciales, un elemento Point (punto) representa la ubicación exacta, que puede ser la dirección de una tienda de ultramarinos, un quiosco, un automóvil o una ciudad. Un punto se representa en GeoJSON (y Azure Cosmos DB for NoSQL) mediante su par de coordenadas (longitud y latitud).

Considere este punto GeoJSON de ejemplo. La longitud es -122.12826822304672 y la latitud es 47.63980239335718.

{
  "type": "Point",
  "coordinates": [
    -122.12826822304672,
    47.63980239335718
  ]
}

Sugerencia

Para el tipo de datos geography, la especificación GeoJSON indica la longitud primero y la latitud después. Al igual que en otras aplicaciones de mapeado, la longitud y la latitud son ángulos y se representan en grados. Los valores de longitud se miden a partir del meridiano cero y están comprendidos entre -180 y 180.0 grados, mientras que los valores de latitud se miden a partir del ecuador y están comprendidos entre -90.0 y 90.0 grados.

En el caso del tipo de datos geométricos, la especificación de GeoJSON especifica primero el eje horizontal y, después, el eje vertical.

Los tipos de datos espaciales se pueden insertar en un elemento, tal y como se muestra en este ejemplo de un elemento de instalación que incluye los datos de GeoJSON.

{
  "name": "Headquarters",
  "location": {
    "type": "Point",
    "coordinates": [
      -122.12826822304672,
      47.63980239335718
    ]
  },
  "category": "business-offices"
}

Azure Cosmos DB for NoSQL interpreta las coordenadas tal y como están representadas por el sistema de referencia WGS-84. Para obtener más información, consulte sistemas de referencia de coordenadas.

LineStrings

LineStrings representan una serie de dos o más puntos en el espacio y los segmentos que los conectan. En los datos geoespaciales, los elementos LineString se usan normalmente para representar autopistas o ríos.

En este ejemplo, se usa una cadena de línea para representar una línea que se dibuja entre dos puntos.

{
  "type": "LineString",
  "coordinates": [
    [ 31.8, -5 ],
    [ 31.8, -4.7 ]
  ]
}

Polígonos

Un elemento Polygon (polígono) es un área delimitada por puntos conectados que forman un elemento LineString cerrado. Los polígonos se usan normalmente para representar formaciones naturales como lagos, o jurisdicciones políticas como estados y ciudades.

El orden de los puntos dentro de un elemento Polygon debe especificarse siguiendo el sentido contrario al de las agujas del reloj. Un elemento Polygon cuyos puntos se hayan especificado en el sentido de las agujas del reloj representa el inverso de la región dentro de él.

En este ejemplo, se crea un polígono conectando varios puntos.

{
    "type":"Polygon",
    "coordinates":[ [
        [ 31.8, -5 ],
        [ 32, -5 ],
        [ 32, -4.7 ],
        [ 31.8, -4.7 ],
        [ 31.8, -5 ]
    ] ]
}

Sugerencia

La especificación de GeoJSON requiere que para que un elemento Polygon sea válido, el último par de coordenadas indicado tiene que ser el mismo que el primero, para así crear una forma cerrada.

MultiPolygons

Un elemento MultiPolygon es una matriz de cero o más elementos Polygon. Los elementos MultiPolygon no pueden superponerse a los lados ni tener áreas comunes. Pueden tocarse en uno o varios puntos.

Este es un ejemplo de elemento MultiPolygon.

{
    "type":"MultiPolygon",
    "coordinates":[[[
            [52.0, 12.0],
            [53.0, 12.0],
            [53.0, 13.0],
            [52.0, 13.0],
            [52.0, 12.0]
        ]],
        [[
            [50.0, 0.0],
            [51.0, 0.0],
            [51.0, 5.0],
            [50.0, 5.0],
            [50.0, 0.0]
        ]]]
}

Sistemas de coordenadas de referencia

Dado que la forma de la tierra es irregular, las coordenadas de los datos geoespaciales de geografía se representan en muchos sistemas de coordenadas de referencia (CRS). Cada CRS tiene sus propios marcos de referencia y unidades de medida. Por ejemplo, la "National Grid of Britain" es un sistema de referencia preciso para el Reino Unido, pero no fuera de él.

El sistema de coordenadas de referencia más popular en uso hoy en día es el Sistema Geodésico Mundial WGS 84. Los dispositivos GPS y muchos servicios de mapeado como Google Maps y API de Bing Maps, usan WGS 84. Azure Cosmos DB for NoSQL admite la indexación y consulta de datos geoespaciales de geografía usando solo el CSR WGS-84.

Creación de elementos con datos espaciales

Al crear elementos que contienen valores GeoJSON, se indexan automáticamente con un índice espacial. Esta indexación predeterminada se produce de acuerdo con la directiva de indexación del contenedor. La directiva de indexación predeterminada, si no se especifica, indexará con precisión los datos de GeoJSON. Si está trabajando con un SDK en un lenguaje dinámico, como Python o Node.js, deberá crear especificaciones GeoJSON válidas.

var userProfileitem = {
    "id":"cosmosdb",
    "location":{
        "type":"Point",
        "coordinates":[ -122.12, 47.66 ]
    }
};

client.createitem(`dbs/${databaseName}/colls/${collectionName}`, userProfileitem, (err, created) => {
    // additional code within the callback
});

Si no dispone de la información de latitud y longitud, pero tiene los nombres de ubicación o las direcciones físicas, busque las coordenadas reales mediante un servicio en línea. Servicios como los mapas de Bing pueden ayudar a encontrar los datos geográficos reales de un nombre de ubicación conocido. Para obtener más información sobre la geocodificación de mapas de Bing, consulte servicios REST de mapas de Bing.