0

我在 MongoDB 中遇到关于多边形搜索的问题。

我有一个文档结构,例如:

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

调试器告诉我查询是例如

{ "data.loc" : { "$geoWithin" : { "$geometry" : { "type" : "Polygon" , "coordinates" : [ [ [ 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;´

数据始终为空。

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

谢谢您的帮助!最好的问候丹尼尔

4

1 回答 1

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);
于 2014-12-22T13:40:23.370 回答