MongoDb Polygon Search Query不返回任何结果

时间:2014-12-18 11:15:49

标签: java mongodb geometry geospatial boundbox

我在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;´

数据总是空的。

任何人都可以在我的方法中发现任何问题,或者有人有更好的方法吗?实际上我想在我的数据库上进行边界框搜索。

感谢您的帮助! 最好的祝福 丹尼尔

1 个答案:

答案 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);