通过 JAVA 从 MongoDB“NYC 餐厅”集合中提取地理键字段

Posted

技术标签:

【中文标题】通过 JAVA 从 MongoDB“NYC 餐厅”集合中提取地理键字段【英文标题】:Extract geo keys field from MongoDB "NYC restaurant" collection by JAVA 【发布时间】:2016-05-28 13:37:12 【问题描述】:

我在 MongoDB 中使用纽约餐厅的数据集。每家餐厅都有一个类似这个例子的地址:

"address" :  
    "building" : "461", 
    "coord" : [-74.138492, 40.631136],
    "street" : "Port Richmond Ave", 
    "zipcode" : "10302"

我试图通过 Java 代码将 "coord" 作为一对 double - 它不适用于 List。这个数据结构[-74.138492, 40.631136]是什么?我只想将餐厅坐标与我的位置进行比较,以查找特定范围内的所有餐厅。

【问题讨论】:

【参考方案1】:

与此同时,我找到了将“坐标”字段加倍的方法。代码远非完美。如果有人知道更优雅的方式来做到这一点 - 我很高兴知道。 “closestPoints”是一种计算我所在位置周围定义范围框的方法。同时它只是打印出过滤后的坐标。

//....一些代码.....

    DB db = mongoClient.getDB("test");
    DBCollection coll = db.getCollection("restaurants");

    BasicDBObject query = new BasicDBObject();

    query.put("cuisine", "Chinese");

    DBCursor cursor = coll.find(query);

    //coordinates for box of defined range around my location.
    double lat1 = myPoint.closestPoints(1)[0];
    double lat2 = myPoint.closestPoints(1)[1];
    double lon1 = myPoint.closestPoints(1)[2];
    double lon2 = myPoint.closestPoints(1)[3];

    try 

        while(cursor.hasNext()) 

        BasicBSONObject addressObj = (BasicBSONObject) cursor.next().get("address");
        BasicDBList addressList = (BasicDBList) addressObj.get("coord");

         double restLongitude  = (double) addressList.get(0);
         double restLatitude = (double) addressList.get(1);

        if ((restLatitude < lat2 && restLatitude > lat1) && (restLongitude < lon2 && restLongitude > lon1)) 
          System.out.println(restLatitude + "," + restLongitude + " box LAT is " + lat1 + ", " + lat2 + " box LON is " + lon1 + "," + lon2 );
        

    
     catch (NullPointerException e) 

        System.err.println("NullPointerException: " + e.getMessage());

     finally 
      cursor.close();
    

 mongoClient.close();

//...一些代码...

【讨论】:

以上是关于通过 JAVA 从 MongoDB“NYC 餐厅”集合中提取地理键字段的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Java从mongodb获取最后插入的N条记录?

如何使用Java从mongodb获取最后插入的N条记录?

如何通过java驱动程序在mongodb中存储38位整数

使用 ELKI 和 Mongodb

MongoDB笔记 通过java访问MongoDB

MongoDB笔记 通过java访问MongoDB