use*_*072 21 point polygon mongodb mongodb-query
mongo 2.6
我有一些存储的多边形.我有一点意见.如果这个点适合任何存储的多边形,我该知道什么
文档示例
{ ..., "polygons" : [ [ 17.60083012593064, 78.18557739257812 ], [ 17.16834652544664, 78.19381713867188 ], [ 17.17490690610013, 78.739013671875 ], [ 17.613919673106714, 78.73489379882812 ] ], ... }
Run Code Online (Sandbox Code Playgroud)
已经有几乎相同的问题Mongodb:检查一个点是否在存储的多边形内.但它不适合我 - 这个查询必须至少给出一个结果(示例中的那个) - 但事实并非如此.
db.areas.find( { polygons : { $geoIntersects : { $geometry : {type:"Point",coordinates:[17.3734, 78.4738]} } } } )
Run Code Online (Sandbox Code Playgroud)
实际上,如果我在任何多边形的边界上选择一个点 - 它确实如此.
$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
Run Code Online (Sandbox Code Playgroud)
我似乎错过了一些东西但却无法理解什么和在哪里.
我很感激你的帮助.
Joh*_*ell 31
这似乎与订单有关.如果您正在使用$ 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 ] }
}
}
});
Run Code Online (Sandbox Code Playgroud)
另请注意,您需要在结尾处重复多边形的第一个点.如果删除最后一对,则会出现"$ err":"无法规范化查询:BadValue错误的地理查询"错误.
似乎MongoDB允许您插入无效的几何,只有当您尝试添加2dsphere索引或者执行相交/内/近查询时才会抱怨,我认为这是合理的,因为GeoJSON可以是有效的JSON,而不是有效的几何.
| 归档时间: |
|
| 查看次数: |
10651 次 |
| 最近记录: |