1

我想用 morphia 框架查询一些地理位置点。我使用我的纬度、经度和半径(100 公里)和“Near”方法来查询我所在位置周围的另一个并限制 10 个结果。像这样 :

morphia.ds.find(Location.class).field("Location").near(latitude, longitude, 100).limit(10).asList();

它没有错误,但结果显示我周围的位置点超出了我的半径(100 公里)范围。所以,查询结果时我的半径不关心。

我的查询语句有什么问题?

提前谢谢你

4

3 回答 3

4

南北纬度差一个弧度的长度,在任何纬度约为60海里、111公里或69法定英里;您可以在wikipedia或 mongo 地理空间页面 The Earth is Round but Maps are Flat中阅读有关此处的更多信息。

使用公里时将距离换算为 111.12(1 度约为 111.12 公里),或换算为 69(英里)。

因此,将您的查询更改为

morphia.ds.find(Location.class).field("Location").near(latitude, longitude, 100/111.12).limit(10).asList();

并确保 mongodb 接受 [long,lat] 中的坐标。

于 2011-10-28T08:21:13.157 回答
3

根据网站(MongoDB:使用球面几何计算二维索引中的距离)来获得我们所看到的距离的弧度,我们必须使用 3.959 英里或 6.371 公里内的土地。

查看文档(MongoDB:$nearSphere)我认为调用应该是:

morphia.ds.find(Location.class).field("Location").near(latitude, longitude, 100/6371, true).limit(10).asList();

就我而言,经过一番检查,这就是我的工作方式。

于 2013-09-16T08:07:31.883 回答
0
public static void test() {
        DB datastore = ConnectionFactory.getInstance().getDatabaseMongo();
        double[] near = { 20.593684, 78.96288 };
        BasicDBObject basicDBObject = new BasicDBObject();
        basicDBObject.put("type", "Point");
        basicDBObject.put("coordinates", near);
        BasicDBObject geoNearParams = new BasicDBObject();
        geoNearParams.append("geoNear", <Collection name>);
        geoNearParams.append("near", basicDBObject);
        geoNearParams.append("spherical", true);
        geoNearParams.append("maxDistance", 100);
        geoNearParams.append("limit", 10);
        CommandResult commandResult = datastore.command(geoNearParams);
        commandResult.getErrorMessage();
        Object data = commandResult.get("results");
        System.out.println(data.toString());
    }
于 2016-07-12T10:35:13.073 回答