通过 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 餐厅”集合中提取地理键字段的主要内容,如果未能解决你的问题,请参考以下文章