Неправильная геометрия при сохранении действительного GeoJSON в MongoDB?

Я создаю объект GeoJSON для моего MongoDB 2dsphere Индекс так (в PHP):

array (size=2)
'type' => string 'Point' (length=5)
'coordinates' =>
array (size=2)
0 => float 45
1 => float 95

За исключением того, что это не работает в MongoDB, возвращая ошибку:

Can't extract geo keys from object, malformed geometry

Почему нельзя сохранить эту действительную точку GeoJSON?

-1

Решение

Вы правы относительно неправильных значений lat / long. Как по документации:

По умолчанию двумерный индекс предполагает долготу и широту и имеет
Границы -180 включительно и 180 не включительно. Если документы
содержат данные координат вне указанного диапазона, MongoDB
возвращает ошибку.

Но для лат это поведение не определено

ВАЖНО Границы по умолчанию позволяют приложениям вставлять
документы с недействительными широтами больше 90 или меньше -90.
поведение геопространственных запросов с такими неверными точками не
определены.

И, скорее всего, это всего лишь драйвер php, который его применяет (и я думаю, что это хорошо).

1

Другие решения

Это потому, что 95 не является допустимой широтой.

В вашем приложении вы должны проверить значения вашей точки по диапазону точек широты и долготы, как указано в этом ответе: https://stackoverflow.com/a/16743805/383478

Допустимый диапазон широт в градусах составляет -90 и +90 для южного и северного полушария соответственно. Долгота находится в диапазоне от -180 до +180, определяя положение восток-запад.

В противном случае MongoDB завершится с ошибкой записи, когда пользователь введет некоторые данные, которые на самом деле не действительны.

0

По вопросам рекламы [email protected]