Геопространственные данные и данные о расположении GeoJSON в Azure Cosmos DB для NoSQL

ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL

Azure Cosmos DB для NoSQL имеет встроенные геопространственные функции для представления геометрических фигур или фактических расположений или многоугольников на карте.

Геопространственные данные часто включают запросы близкого взаимодействия. Например, на вопрос "найти все розничные расположения рядом с моим текущим расположением" можно ответить с помощью запроса близкого взаимодействия к нескольким объектам геопространственных данных.

Распространенные варианты использования геопространственных данных включают, помимо прочего:

  • Аналитика геолокации, управляя маркетинговыми инициативами на основе конкретных расположений.
  • Персонализация на основе расположения для таких отраслей, как розничная торговля и здравоохранение, чтобы улучшить взаимодействие с пользователем.
  • Улучшение логистики для таких отраслей, как транспорт, где оптимизация имеет решающее значение.
  • Анализ рисков для таких отраслей, как страхование и финансы, в дополнение к другим метаданным.
  • Ситуационная осведомленность*, для оповещений и уведомлений на основе проксимиитета.

Общие сведения о пространственных данных

Пространственные данные описывают положение и форму объектов в пространстве. В большинстве приложений эти точки и фигуры соответствуют объектам на земле и геопространственным данным. Пространственные данные могут использоваться для представления местонахождения человека, мест, представляющих интерес, или границ города или озера.

Azure Cosmos DB для NoSQL поддерживает два типа пространственных данных: тип данных geometry и тип данных geography .

  • Пространственный тип данных geometry представляет данные в евклидовой (плоской) системе координат. Этот тип удобен для распространенных геометрических задач, таких как измерение линий, пересечение многоугольников и измерение расстояния между точками.
  • Пространственный тип данных geography представляет данные в системе координат для сферической Земли. Этот тип удобен для распространенных географических задач, таких как определение того, находится ли расположение в пределах определенных границ, и измерение расстояния между расположениями.

Поддерживаемые типы данных

Azure Cosmos DB для NoSQL поддерживает индексирование и запросы данных геопространственных точек, представленных с помощью спецификации GeoJSON. Структуры данных GeoJSON всегда являются действительными объектами JSON, поэтому их можно сохранять и опрашивать с помощью Azure Cosmos DB без специальных средств или библиотек.

Azure Cosmos DB поддерживает следующие типы пространственных данных:

  • Point
  • LineString
  • Многоугольник
  • MultiPolygon

точки

Точка обозначает одно положение в пространстве. В геопространственных данных точка представляет точное расположение, которое может быть адресом продуктового магазина, киоска, точкой расположения автомобиля или города. Точка представлена в GeoJSON (и Azure Cosmos DB для NOSQL) с использованием пары координат (долгота и широта).

Рассмотрим этот пример точки GeoJSON. Долгота имеет значение , -122.12826822304672 а широта — 47.63980239335718.

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

Совет

Для типа данных geography в спецификации GeoJSON сначала указывается широта, затем долгота. Как и в других картах, широта и долгота представляют собой углы и выражаются в градусах. Значения долготы измеряются из основного меридиана и находятся между -180 градусами и 180.0 градусами, а значения широты измеряются из экватора и находятся между -90.0 градусами и 90.0 градусами.

Для типа данных geometry в спецификации GeoJSON сначала указывается горизонтальная ось, а потом вертикальная ось.

Пространственные типы данных могут быть внедрены в элемент, как показано в этом примере элемента объекта, включающего данные GeoJSON.

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

Azure Cosmos DB для NoSQL интерпретирует координаты как представленные в справочной системе WGS-84. Дополнительные сведения см. в разделе Системы координат.

LineStrings

Объект LineString представляет собой последовательность из двух или более точек в пространстве и отрезков, которые их соединяют. В геопространственных данных объекты LineString обычно используются для представления автомагистралей или рек.

В этом примере строка линии используется для представления линии, нарисованной между двумя точками.

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

многоугольники

Многоугольник представляет собой область, ограниченную соединенными друг с другом точками, которая образует замкнутый объект LineString. Многоугольники обычно используются для представления естественных природных образований, таких как озера, или географических единиц, таких как города и области.

Точки внутри многоугольника должны указываться в порядке против часовой стрелки. Если точки указаны в порядке по часовой стрелке, то многоугольник представляет регион, расположенный снаружи от него.

В этом примере многоугольник создается путем соединения нескольких точек.

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

Совет

По спецификации GeoJSON для действительного многоугольника последняя пара координат должна совпадать с первой, чтобы фигура стала замкнутой.

Объекты MultiPolygon

MultiPolygon — это массив из нуля или более объектов Polygon. MultiPolygons не могут перекрывать стороны или иметь какую-либо общую область. Они могут касаться друг друга в одной или нескольких точках.

Ниже приведен пример Объекта 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]
        ]]]
}

Системы координат

Поскольку форма земли неправильная, координаты географических геопространственных данных представлены во многих системах координатных ссылок (CRS). Каждый CRS имеет собственные рамки отсчета и единицы измерения. Например, "Национальная система координат Великобритании" (National Grid of Britain) обладает точностью в Великобритании, но не за ее пределами.

Самой популярной системой координат на данный момент является WGS-84. WGS-84 используют устройства GPS и многие службы географических карт, в том числе Карты Google и API-интерфейсы Карт Bing. Azure Cosmos DB для NoSQL поддерживает индексирование и запросы географических геопространственных данных только с помощью WGS-84 CRS.

Создание элементов с пространственными данными

При создании элементов, содержащих значения GeoJSON, они автоматически индексируются с помощью пространственного индекса. Индексирование по умолчанию выполняется в соответствии с политикой индексирования контейнера. Политика индексирования по умолчанию, если она не указана, будет точно индексировать данные GeoJSON. Если вы работаете с пакетом SDK на динамически типизированном языке, например Python или Node.js, необходимо создать допустимый GeoJSON.

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
});

Если у вас нет сведений о широте и долготе, но у вас есть физические адреса или имя расположения, найдите фактические координаты с помощью веб-службы. Такие службы, как Карты Bing, могут помочь в поиске фактических географических данных из известного имени расположения. Дополнительные сведения о геокодирования Карты Bing см. в разделе Карты Bing службы REST.