即使 GeoJSON 有效,也无法提取地理键

Posted

技术标签:

【中文标题】即使 GeoJSON 有效,也无法提取地理键【英文标题】:Can't extract geo keys' even though the GeoJSON is valid 【发布时间】:2015-05-25 17:46:48 【问题描述】:

我在 MongoDB 中有一个带有 2dsphere 索引的集合。我要保存的对象如下所示:


        "type" : "Polygon",
        "coordinates" : [ 
            [ 
                [ 
                    5.052617929724351, 
                    52.64653192570052
                ], 
                [ 
                    5.051738165167465, 
                    52.64765805672784
                ], 
                [ 
                    5.054162882116928, 
                    52.64831549553909
                ], 
                [ 
                    5.054592035559312, 
                    52.64780777138566
                ], 
                [ 
                    5.055364511755601, 
                    52.64790541110375
                ], 
                [ 
                    5.056094072607651, 
                    52.64688343792051
                ], 
                [ 
                    5.054237983969346, 
                    52.64661654927096
                ], 
                [ 
                    5.052617929724351, 
                    52.64653192570052
                ]
            ]
        ]
    

根据http://geojsonlint.com/,这是完全有效的 GeoJSON。但是 MongoDB 表示它无法提取地理键,因为 GeoJSON 可能格式不正确。

谁能帮我找出错误?

这是我得到的 MongoDB 错误:

insertDocument :: caused by :: 16755 Can't extract geo keys from object, malformed geometry?

【问题讨论】:

您的点阵列周围有 2 个阵列括号。尝试删除一组数组括号。应该是 [[lat, long],[lat, long],...] 你好布赖恩,我不认为这是正确的。 GeoJSON 中的多边形是一组坐标环。 GeoJSON lint 还报告这是无效的 GeoJSON。不过我会在 MongoDB 中尝试一下。 对不起。我认为只有 MultiPolygon 需要额外的数组括号。太有趣了...我发现一个帖子的答案以相同的方式开始groups.google.com/forum/m/#!topic/mongodb-user/OPouYFHS_zU 没问题 :) 这是一个容易犯的错误。 这根本不是问题,这个确切的文档只是在您的文档中找到一个 geoJSON 对象的 【参考方案1】:

问题在于您没有提供 GeoJSON 将被分配到的***对象的名称。

您必须在“坐标”字段上创建了“2dsphere”索引。相反,您希望在将分配整个 GeoJSON 值的字段上创建它。

db.geo.createIndex("location":"2dsphere")
db.geo.insert("location" : 
     "type" : "Polygon",
     "coordinates" : [
        [ <list of your-coord-pairs> ]
     ]
 )
WriteResult( "nInserted" : 1 )

【讨论】:

这当然有可能是问题所在。遗憾的是,我无法再验证,因为我没有导致问题的特定代码。 显然有人有完全相同的问题,因为他们在答案上悬赏。

以上是关于即使 GeoJSON 有效,也无法提取地理键的主要内容,如果未能解决你的问题,请参考以下文章

使用D3 Geo模块画澳大利亚地图

GeoJSON快速入门教程

无法提取地理位置的地理键

无法提取地理键(nodejs 和 mongo)

Cesium GeoJson数据格式

如何在 MongoDB 2.4.x 中存储附加数据以使其符合 geoJSON 格式