mongo 2.6
我有一些存储的多边形。我有一点。我知道该点是否适合任何存储的多边形
文件范例
{ ..., "polygons" : [ [ 17.60083012593064, 78.18557739257812 ], [ 17.16834652544664, 78.19381713867188 ], [ 17.17490690610013, 78.739013671875 ], [ 17.613919673106714, 78.73489379882812 ] ], ... }
Mongodb已经存在几乎相同的问题:检查点是否在存储的多边形内。但这对我不起作用-此查询必须至少给出一个结果(示例中为一个)-但事实并非如此。
db.areas.find( { polygons : { $geoIntersects : { $geometry : {type:"Point",coordinates:[17.3734, 78.4738]} } } } )
实际上,如果我在任何多边形的边界上选择了一个点,它就会这样做。
$geoWithin
方法必须按照mondodb
文档所述完成工作。
但是这些查询中的任何一个都不起作用
db.areas.find( { polygons : { $geoWithin : { $geometry : {type:"Point",coordinates:[17.3734, 78.4738]} } } } ) - not supported with provided geometry
db.tradeareas.find( { polygons : { $geoWithin : { $geometry : {type:"Polygon",coordinates: inside_polygon} } } } ) - BadValue bad geo query
似乎我错过了一些东西,但无法理解在什么地方。
我将不胜感激。
似乎与顺序有关。如果使用$ geoWithin并尝试在多边形内查找点,则其中的内容就是要搜索的字段。但是,geoIntersects可以在任一方向上工作,因此您可以在多边形或包含点的多边形中搜索点,例如,
db.geom.insert({"polygons":
{"type":"Polygon",
coordinates:
[[[ 17.60083012593064, 78.18557739257812],
[ 17.16834652544664, 78.19381713867188],
[ 17.17490690610013, 78.739013671875],
[ 17.613919673106714, 78.73489379882812],
[ 17.60083012593064, 78.18557739257812]
]]
}
});
db.geom.find({polygons:
{$geoIntersects:
{$geometry:{ "type" : "Point",
"coordinates" : [ 17.3734, 78.4738 ] }
}
}
});
另外,请注意,您需要在末端重复多边形的第一个点。如果删除最后一对,则会出现“ $ err”:“无法规范化查询:BadValue错误的地理查询”错误。
似乎MongoDB允许您插入无效的几何图形,并且仅在您尝试添加2dsphere索引或执行相交/内部/附近查询时才抱怨,我想这是合理的,因为GeoJSON可以是有效的JSON而又不是有效的几何图形。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句