MongoDB以错误的顺序插入geopoint

时间:2014-10-29 16:05:36

标签: php json mongodb symfony doctrine-odm

我试图在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},

为什么坐标会翻转顺序?我将它们设置为经度纬度,为什么物体被倒置?
创建经度在纬度之前的物体时,我是精确的 请帮忙

1 个答案:

答案 0 :(得分:1)

2d indexing documentation建议使用经度/纬度元组而不是嵌入对象,因为您可以更好地控制字段排序。

  

首选数组,因为某些语言不保证关联地图排序。

在您的情况下,2d坐标值最好在ODM中映射为Collection类型,这将确保它在MongoDB中存储为BSON数组。

如果您使用带有GeoJSON值的2dsphere索引,则该字段最好映射为Hash,这将确保BSON对象存储。从那里,您可以在PHP中自己创建GeoJSON值(我的geojson库可能会有所帮助)。哈希映射路由应该比创建嵌入文档更灵活,其中特定的GeoJSON typecoordinates字段已映射出来(有关该主题的一些讨论,请参阅this Twitter conversation)。最终,ODM支持GeoJSON作为映射字段类型(将MongoDB BSON对象转换为GeoJSON类或从GeoJSON类转换)也很不错。