Хорошо, Google… Покажите 5-звездочные отели рядом со мной.
Вы когда-нибудь задумывались о том, как Google Maps выбирает ближайшие магазины и места в соответствии с нашим запросом?
GeoJSON с помощью $near,оператора в MongoDB, помогает сделать это возможным. На высоком уровне это способ представления географических данных в базе данных.
Итак, давайте углубимся в мир структур географических данных и узнаем, как работает GeoJSON, а затем $near, что делает нашу повседневную жизнь более доступной и удобной.
Введение в GeoJSON
GeoJSON — это доступный формат с открытым исходным кодом для описания простых географических объектов и их непространственных характеристик. Он использует формат данных JSON.
Точки (адреса и места), строки линий (улицы, шоссе и границы), многоугольники (страны, провинции и земельные участки) и наборы из нескольких частей такого рода входят в число функций. Функции GeoJSON не обязательно должны представлять физические объекты; мобильные приложения для маршрутизации и навигации, например, могут использовать GeoJSON для описания покрытия своих услуг.
GeoJSON поддерживает точки , LineString, Polygon, MultiPoint, MultiLineString и MultiPolygon. Особые объекты — это геометрические объекты с дополнительными свойствами. Объекты FeatureCollection представляют собой наборы функций.
Компоненты GeoJSON
Компоненты GeoJSON следующие:
- Точка, линия или многоугольник, описанные ранее, являются геометрическим объектом — по сути, информацией о местоположении.
- Объект геометрии и связанные случайные данные ad hoq составляют объект функции. Помните, что GeoJSON не имеет отношения к данным, которые вы связываете с данными о местоположении.
- 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 требуется географический индекс:
- Если указана точка GeoJSON, используется индекс 2D-сферы.
- Если вы используете устаревшие координаты для указания точки, вы получите 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 в веб-среде!