Бөлісу құралы:


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

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

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

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

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

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

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

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

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

  • Пространственный тип данных 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 поддерживает индексирование и запросы географических геопространственных данных только с помощью только CRS-84.

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

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

var userProfileitem = {
    "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
    "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 Maps REST Services.