Données de localisation géospatiales et GeoJSON dans Azure Cosmos DB for NoSQL

S’APPLIQUE À : NoSQL

Azure Cosmos DB for NoSQL dispose de fonctionnalités géospatiales intégrées pour représenter des formes géométriques ou des emplacements/polygones réels sur une carte.

Les données géospatiales impliquent souvent des requêtes de proximité. Par exemple, la réponse à la question « rechercher tous les emplacements de vente au détail près de mon emplacement actuel » est effectuée à l’aide d’une requête de proximité sur plusieurs objets de données géospatiales.

Les cas d’usage géospatiaux courants incluent, mais ne sont pas limités à :

  • Analyses de géolocalisation, qui conduisent à des initiatives marketing spécifiques basées sur la localisation.
  • La personnalisation basée sur la localisation, pour les secteurs tels que la vente au détail et la santé, afin d’améliorer l’expérience utilisateur.
  • Amélioration de la logistique, pour des secteurs comme le transport où l’optimisation est essentielle.
  • Analyse des risques, pour les secteurs comme l’assurance et la finance pour compléter d’autres métadonnées.
  • Conscience situationnelle*, pour les alertes et les notifications.

Présentation des données spatiales

Les données spatiales décrivent la position et la forme des objets dans l'espace. Dans la plupart des applications, ces points et formes correspondent aux objets sur terre et aux données géospatiales. Les données spatiales peuvent servir à représenter l'emplacement d'une personne, d'un point d'intérêt ou de la limite d'une ville ou un lac.

Azure Cosmos DB for NoSQL prend en charge deux types de données spatiales : les données de type géométrique et les données de type géographique.

  • Le type geometry représente des données dans un système de coordonnées euclidien (plat). Ce type est utile pour les tâches géométriques courantes, telles que la mesure de lignes, l’intersection de polygones et la mesure de la distance entre les points.
  • Le type geography représente des données dans un système de coordonnées de monde sphérique. Ce type est utile pour les tâches géographiques courantes, comme le fait de déterminer un emplacement dans des limites spécifiques et le fait de mesurer la distance entre les emplacements.

Types de données pris en charge

Azure Cosmos DB for NoSQL prend en charge l’indexation et l’interrogation des données de point géospatiales représentées à l’aide de la spécification GeoJSON. Les structures de données GeoJSON sont toujours des objets JSON valides, afin de pouvoir les stocker et les interroger à l’aide d’Azure Cosmos DB, sans bibliothèques ou outils spécialisés.

Azure Cosmos DB prend en charge les types de données spatiales suivants :

  • Point
  • LineString
  • Polygon
  • MultiPolygon

Points

Un point désigne une position unique dans l'espace. Dans les données géospatiales, un point représente l’emplacement exact, qui peut être une adresse postale d’une épicerie, un kiosque, une voiture ou une ville. Un point est représenté dans GeoJSON (et Azure Cosmos DB for NoSQL) à l’aide de sa paire de coordonnées (longitude et latitude).

Considérez cet exemple de point GeoJSON. La longitude est -122.12826822304672 et la latitude est 47.63980239335718.

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

Conseil

Pour le type de données geography, la spécification GeoJSON spécifie d’abord la longitude, puis la latitude. Comme dans d'autres applications de mappage, la longitude et la latitude sont des angles et sont exprimées en degrés. Les valeurs de longitude sont mesurées à partir du premier méridien et sont comprises entre -180 degrés et 180.0 degrés. Les valeurs de latitude sont mesurées à partir de l’Équateur et sont comprises entre -90.0 degrés et 90.0 degrés.

Pour le type de données géométrique, la spécification GeoJSON définit d’abord l’axe horizontal puis l’axe vertical.

Les types de données spatiales peuvent être incorporés dans un élément, comme illustré dans cet exemple d’un élément d’installation qui inclut des données GeoJSON.

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

Azure Cosmos DB for NoSQL interprète les coordonnées représentées conformément au système de référence WGS-84. Pour plus d’informations, consultez systèmes de référence de coordonnées.

LineStrings

LineStrings représentent une série de deux ou plusieurs points dans l'espace et les segments de ligne qui les connectent. Dans les données géographiques, les LineStrings sont généralement utilisées pour représenter les autoroutes ou les cours d’eau.

Dans cet exemple, une chaîne de ligne est utilisée pour représenter une ligne qui a été dessinée entre deux points.

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

Polygones

Un polygone est une limite de points reliés qui constitue une LineString fermée. Les polygones sont couramment utilisés pour représenter des formations naturelles comme des lacs ou des juridictions politiques comme les villes et les États.

Les points dans un polygone doivent être spécifiés dans le sens antihoraire. Un polygone spécifié dans le sens horaire représente l’inverse de la région qu’il contient.

Dans cet exemple, un polygone est créé en connectant plusieurs points.

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

Conseil

La spécification GeoJSON impose que, pour les polygones valides, la dernière paire de coordonnées fournie soit identique à la première, pour créer une forme fermée.

Multipolygones

Un multipolygone est un tableau de zéro polygone ou plus. Les multipolygones ne peuvent pas avoir de zone en commun et leurs côtés ne peuvent pas se chevaucher. Ils peuvent se toucher en un ou plusieurs points.

Voici un exemple de 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]
        ]]]
}

Coordination des systèmes de référence

Étant donné que la forme de la terre est irrégulière, les coordonnées des données géospatiales de type géographie sont représentées dans de nombreux systèmes de coordonnées de référence (SCR). Chaque SCR a ses propres cadres de référence et unités de mesure. Par exemple, le « National Grid of Britain » est un système de référence précis pour le Royaume-Uni, mais en dehors.

Le CRS moderne le plus populaire est le World Geodetic System WGS-84. Les périphériques GPS et de nombreux services de mappage, notamment les API Bing Maps et Google Maps, utilisent le WGS-84. Azure Cosmos DB for NoSQL prend en charge l’indexation et l’interrogation de données géospatiales de type géographie uniquement à l’aide du SCR WGS-84.

Création d’éléments avec les données spatiales

Lorsque vous créez des éléments qui contiennent des valeurs GeoJSON, ils sont automatiquement indexés avec un index spatial. Cette indexation par défaut se produit conformément à la stratégie d’indexation du conteneur. La stratégie d’indexation par défaut, si elle n’est pas spécifiée, indexe avec précision les données GeoJSON. Si vous travaillez avec un Kit de développement logiciel (SDK) dans un langage saisi dynamiquement comme Python ou Node.js, vous devez créer un GeoJSON valide.

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 vous n'avez pas les informations de latitude et de longitude, mais disposez des adresses physiques ou du nom de localisation, vous pouvez rechercher les coordonnées réelles en utilisant un service en ligne. Des services tels que Bing Cartes peuvent vous aider à trouver les données géographiques réelles à partir d’un nom de localisation connue. Pour plus d’informations sur le géocodage Bing Cartes, consultez Bing Cartes services REST.