Я создаю объект 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?
Вы правы относительно неправильных значений lat / long. Как по документации:
По умолчанию двумерный индекс предполагает долготу и широту и имеет
Границы -180 включительно и 180 не включительно. Если документы
содержат данные координат вне указанного диапазона, MongoDB
возвращает ошибку.
Но для лат это поведение не определено
ВАЖНО Границы по умолчанию позволяют приложениям вставлять
документы с недействительными широтами больше 90 или меньше -90.
поведение геопространственных запросов с такими неверными точками не
определены.
И, скорее всего, это всего лишь драйвер php, который его применяет (и я думаю, что это хорошо).
Это потому, что 95 не является допустимой широтой.
В вашем приложении вы должны проверить значения вашей точки по диапазону точек широты и долготы, как указано в этом ответе: https://stackoverflow.com/a/16743805/383478
Допустимый диапазон широт в градусах составляет -90 и +90 для южного и северного полушария соответственно. Долгота находится в диапазоне от -180 до +180, определяя положение восток-запад.
В противном случае MongoDB завершится с ошибкой записи, когда пользователь введет некоторые данные, которые на самом деле не действительны.