我在MongoDB中遇到有关Polygone搜索的问题。
我的文档结构如下:
Object:{id,type,...,
data:{
name,
loc:{
lng:xxx
lat:yyy
type:Point}}}
我在" data.loc"。
上有一个二维索引我在java代码中的查询是:
DBCollection coll = database.getCollection(type);
BasicDBList points = new BasicDBList();
points.add(bbox.getNe());
points.add(bbox.getSe());
points.add(bbox.getSw());
points.add(bbox.getNw());
points.add(bbox.getNe());
BasicDBList parentList = new BasicDBList();
parentList.add(points);
DBObject query = new BasicDBObject("data.loc",
new BasicDBObject("$geoWithin",
new BasicDBObject("$geometry", new BasicDBObject("type","Polygon")
.append("coordinates", parentList))));
Debuger告诉我该查询是例如
{" data.loc" :{" $ geoWithin" :{" $ geometry" :{" type" :" Polygon" , "坐标" :[[[48.240553,16.451597],[48.162751, 16.451597],[48.162751,16.303968],[48.240553,16.303968],[48.240553,16.451597]]]}}}}
但是在输入
之后DBCursor cursor = coll.find(query);
try {
while(cursor.hasNext()) {
data.add(cursor.next().get("data"));
}
} finally {
cursor.close();
}
return data;´
数据总是空的。
任何人都可以在我的方法中发现任何问题,或者有人有更好的方法吗?实际上我想在我的数据库上进行边界框搜索。
感谢您的帮助! 最好的祝福 丹尼尔
答案 0 :(得分:0)
好的,所以Java MongoDB驱动程序查询GeoJson结构的多边形中的点是
BasicDBList points = new BasicDBList();
points.add(bbox.getNe());
points.add(bbox.getSe());
points.add(bbox.getSw());
points.add(bbox.getNw());
points.add(bbox.getNe());
BasicDBList parentList = new BasicDBList();
parentList.add(points);
Set<Object> data = new CopyOnWriteArraySet<Object>();
DBObject query = new BasicDBObject("geometry",
new BasicDBObject("$geoWithin",
new BasicDBObject("$geometry", new BasicDBObject("type","Polygon")
.append("coordinates", parentList))));
System.err.println(query);