Я пытаюсь вставить местоположение в MongoDB.
Я знаю, что местоположение должно быть в долготе, широте.
это мой код PHP:
...
$coordinates=new Coordinates();
$coordinates->setLng($lng);
$coordinates->setLat($lat);
$hospitals->setCoordinates($coordinates);
...
При промывке я получаю эту ошибку:
insertDocument :: вызвано :: 16755 Невозможно извлечь гео-ключи из
объект, неправильная геометрия ?: {_id:
ObjectId (‘54510e88211b6f133e8b4573’), координаты: {lat:
35.72701023223023, lng: 137.094778418541},
Почему координаты изменили порядок? Я установил их на широту и долготу, почему объект инвертирован?
Я был точным при создании объекта, что долгота перед широтой.
Помогите, пожалуйста
2D документация по индексированию советует использовать кортежи долготы / широты вместо встроенных объектов, поскольку вы лучше контролируете порядок полей.
Массивы предпочтительнее, так как некоторые языки не гарантируют ассоциативное упорядочение карт.
В вашем случае двумерное значение координаты лучше всего отображается как Коллекция введите ODM, чтобы убедиться, что он хранится как массив BSON в MongoDB.
Если вы используете 2dsphere
индекс со значениями GeoJSON, поле лучше всего отображается как гашиш, который обеспечит хранение объекта BSON. Оттуда вы можете создать значение GeoJSON самостоятельно в PHP (мой GeoJSON библиотека может быть полезна). Маршрут с хэш-отображением должен быть более гибким, чем создание встроенных документов с конкретным GeoJSON. type
а также coordinates
поля размечены (см. этот разговор в Твиттере для некоторой дискуссии на эту тему). В конечном счете, было бы неплохо, чтобы ODM поддерживал GeoJSON в качестве отображаемого типа поля (для преобразования объектов MongoDB BSON в / из классов GeoJSON).
Других решений пока нет …