Хорошо, Google… Покажите 5-звездочные отели рядом со мной.

Вы когда-нибудь задумывались о том, как Google Maps выбирает ближайшие магазины и места в соответствии с нашим запросом?

GeoJSON с помощью $near,оператора в MongoDB, помогает сделать это возможным. На высоком уровне это способ представления географических данных в базе данных.

Итак, давайте углубимся в мир структур географических данных и узнаем, как работает GeoJSON, а затем $near, что делает нашу повседневную жизнь более доступной и удобной.

Введение в GeoJSON

GeoJSON — это доступный формат с открытым исходным кодом для описания простых географических объектов и их непространственных характеристик. Он использует формат данных JSON.

Точки (адреса и места), строки линий (улицы, шоссе и границы), многоугольники (страны, провинции и земельные участки) и наборы из нескольких частей такого рода входят в число функций. Функции GeoJSON не обязательно должны представлять физические объекты; мобильные приложения для маршрутизации и навигации, например, могут использовать GeoJSON для описания покрытия своих услуг.

GeoJSON поддерживает точки , LineString, Polygon, MultiPoint, MultiLineString и MultiPolygon. Особые объекты — это геометрические объекты с дополнительными свойствами. Объекты FeatureCollection представляют собой наборы функций.

Компоненты GeoJSON

Компоненты GeoJSON следующие:

  1. Точка, линия или многоугольник, описанные ранее, являются геометрическим объектом — по сути, информацией о местоположении.
  2. Объект геометрии и связанные случайные данные ad hoq составляют объект функции. Помните, что GeoJSON не имеет отношения к данным, которые вы связываете с данными о местоположении.
  3. FeatureCollection — это не что иное, как набор объектов функций.

Давайте возьмем пример и разберемся с различными компонентами:

Вы можете видеть, что я определяю FeatureCollection или список данных на верхнем уровне. Затем определяются функции, которые представляют собой массив объектов Feature. Существует объект геометрии и объект свойств для каждой функции. Объектом геометрии будет Point, LineString, Polygon, MultiPoint, MultiLineString или MultiPolygon. Каждая категория не требует пояснений, но если что-то неясно, пожалуйста, оставьте комментарий. Вы можете видеть, что я дал своим кошкам как имя, так и значение пола в разделе свойств. Я могу указать здесь любые данные, но, как и следовало ожидать, если уделить им некоторое внимание и быть последовательным, это поможет сделать ваши данные более полезными.

Геометрии

Точки равны [x, y] или [x, y, z]. Это может быть [долгота, широта] или [восток, север]. Высота над уровнем моря является необязательным третьим числом. Это десятичные числа.

Например, Лондон (51,5074° с.ш., 0,1278° з.д.) равен [-0,1278, 51,5074]

Работа с объектами GeoJSON

Чтобы объявить данные GeoJSON, документ или код должны содержать:

  • Тип: это имя поля, которое определяет тип объекта GeoJSON.
  • Координаты. Имя поля, в котором указаны координаты объекта.

Если вы указываете координаты широты и долготы, начните с долготы, а затем широты:

Диапазон допустимых значений долготы: от -180 до 180 включительно.

Действительная широта находится в диапазоне от -90 до 90 включительно.

<field>: { type: <GeoJSON type> , coordinates: <coordinates> }

Примеры

Точка :

{ type: "Point", coordinates: [ 40, 5 ] }

Строка строки:

{ type: "LineString", coordinates: [ [ 40, 5 ], [ 41, 6 ] ] }

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

Массив массивов координат GeoJSON LinearRing составляет многоугольник. Эти LinearRings представляют собой LineStrings, которые закрыты. Закрытые LineString имеют как минимум четыре пары координат, а первая и последняя координаты находятся в одном месте.

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

Многоугольники с одним кольцом

{
  type: "Polygon",
  coordinates: [[ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ]]
}

Многоугольники с несколькими кольцами

{
  type : "Polygon",
  coordinates : [
     [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ],
     [ [ 2 , 2 ] , [ 3 , 3 ] , [ 4 , 2 ] , [ 2 , 2 ] ]
  ]
}

Итак, надеюсь, приведенные выше примеры дали вам общее представление об атрибутах и ​​функциях GeoJSON. Теперь давайте перейдем к самой увлекательной фразе $near, которая является заключительным этапом в процессе определения местоположения.

$рядом

Указывает местоположение, для которого запрос геопространственный будет возвращать документы в порядке близости к самому дальнему. Точка GeoJSON или устаревшая координатная точка могут быть указаны с помощью оператора $near.

Для $near требуется географический индекс:

  1. Если указана точка GeoJSON, используется индекс 2D-сферы.
  2. Если вы используете устаревшие координаты для указания точки, вы получите 2D-индекс со следующим синтаксисом:
{
  $near: [ <x>, <y> ],
  $maxDistance: <distance in radians>
}

Для операции $near требуется индекс 2D-сферы, и для указания точки GeoJSON используется следующий синтаксис:

Вы можете использовать дополнительные переменные $minDistance и $maxDistance, чтобы ограничить результаты $near расстоянием в метрах при указании GeoJSON. точка:

  • $minDistance ограничивает результаты документами, которые находятся как минимум на этом расстоянии от центральной точки.
  • $maxDistance ограничивает результаты документами, находящимися на определенном расстоянии от центральной точки.

Рассмотрите коллекцию places с индексом 2D sphere.

В следующем примере возвращаются документы, которые находятся на расстоянии не менее 1200 и не более 7000 метров от указанной точки GeoJSON, отсортированные от ближайшего к самому дальнему:

Заключение

GeoJSON – это открытый стандартный формат, предназначенный для представления простых географических объектов вместе с их непространственными атрибутами. Он основан на формате JSON. В этом разделе мы рассмотрели основы интеграции геопространственной библиотеки $near. У него гораздо больше применений, чем мы замечаем в нашей повседневной жизни, а также в наших путешествиях.

Ссылки

Руководство по MongoDB: $near, GeoJSON

Блог: Введение в geoJSON

Youtube: Учебник от The Net Ninja

Эта статья опубликована как часть раздела JavaScripted в разделе Клуб исследований и разработок Spider, NIT Trichy в веб-среде!