我试图在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},
为什么坐标会翻转顺序?我将它们设置为经度纬度,为什么物体被倒置?
创建经度在纬度之前的物体时,我是精确的
请帮忙
答案 0 :(得分:1)
2d indexing documentation建议使用经度/纬度元组而不是嵌入对象,因为您可以更好地控制字段排序。
首选数组,因为某些语言不保证关联地图排序。
在您的情况下,2d坐标值最好在ODM中映射为Collection类型,这将确保它在MongoDB中存储为BSON数组。
如果您使用带有GeoJSON值的2dsphere
索引,则该字段最好映射为Hash,这将确保BSON对象存储。从那里,您可以在PHP中自己创建GeoJSON值(我的geojson库可能会有所帮助)。哈希映射路由应该比创建嵌入文档更灵活,其中特定的GeoJSON type
和coordinates
字段已映射出来(有关该主题的一些讨论,请参阅this Twitter conversation)。最终,ODM支持GeoJSON作为映射字段类型(将MongoDB BSON对象转换为GeoJSON类或从GeoJSON类转换)也很不错。