在MongoDB中保存有效的GeoJSON时格式错误的几何体?

时间:2015-04-13 09:42:48

标签: php mongodb geojson mongodb-php

我为MongoDB的2dsphere索引编写了一个GeoJSON对象(在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点?

2 个答案:

答案 0 :(得分:1)

你对错误的纬度/经度值是正确的。正如per documentation

  

默认情况下,2d索引假定经度和纬度并具有   -180包含边界和180包含非包容性。如果是文件   包含指定范围之外的坐标数据MongoDB   返回错误。

但对于lat,此行为未定义

  

重要事项默认边界允许应用程序插入   无效纬度大于90或小于-90的文件。该   具有此类无效点的地理空间查询的行为不是   定义

而且很可能这只是强制执行它的php驱动程序(我觉得它很好)。

答案 1 :(得分:0)

这是因为95不是有效的纬度。

在您的应用中,您必须根据此答案中提到的纬度和经度点范围验证您的积分值:https://stackoverflow.com/a/16743805/383478

  

南半球和北半球的有效纬度范围分别为-90和+90。经度在-180和+180范围内,指定东西方位置。

否则,当用户输入一些实际上无效的数据时,MongoDB将因写入异常而失败。