【问题标题】:Malformed geometry when saving valid GeoJSON in MongoDB?在 MongoDB 中保存有效的 GeoJSON 时几何形状不正确?
【发布时间】:2015-06-18 13:57:42
【问题描述】:

我为我的 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 点?

【问题讨论】:

    标签: php mongodb geojson mongodb-php


    【解决方案1】:

    您对错误的纬度/经度值是正确的。作为per documentation

    默认情况下,二维索引采用经度和纬度,并具有 -180(含)和 180(不含)的边界。如果文件 包含指定范围之外的坐标数据,MongoDB 返回错误。

    但是对于 lat 这种行为没有定义

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2015-06-15
        • 2015-08-22
        • 1970-01-01
        • 2012-06-23
        • 2015-12-14
        • 2019-11-04
        • 2015-02-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多