即使 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 有效,也无法提取地理键的主要内容,如果未能解决你的问题,请参考以下文章