mongodb - 如何计算 MongoDB 中多个 GeoJSON 点之间的路线距离?

标签 mongodb geolocation mongodb-query database

如何计算 MongoDB 中多个 GeoJSON 点之间的路径距离?我可以有一个数据库查询,按日期字段对项目进行排序,然后计算点之间的距离,最后将所有点相加以计算总距离?

以下是我的一些数据示例:

{ 
 _id: 599cfc236ed0d81c98007f66
 tracerId: 59a07ea26ed0d81d78001acd
 loc { 
      type: "2dsphere",
      coordinates: [ 159.9, -37.92 ]
     },
 date: 2017-08-26 00:16:42,
 speed: 58,
}
{ 
 _id: 59a074d46ed0d81d78001acc
 tracerId: 59a07ea26ed0d81d78001acd
 loc { 
      type: "2dsphere",
      coordinates: [ 160, -38.20 ]
     },
 date: 2017-08-26 00:18:42,
 speed: 75,
}
{ 
 _id: 59a074d46ed0d81d78ac11cc
 tracerId: 59a07ea26ed0d81d78001acd
 loc { 
      type: "2dsphere",
      coordinates: [ 160.222, -38.92 ]
     },
 date: 2017-08-26 00:20:42,
 speed: 60,
}

最佳答案

正如评论中所指出的,我会尝试使用 Java 在此处绘制类似的图片。假设您的数据库名称为 db,集合名称为 col,文档类型为 GeoData,可以建模为:

public class GeoData {
    String tracerId;
    Location loc;
    Date date;
    Integer speed;
    ...getters, setters and other overrides
}

public class Location {
    String type;
    Coordinate coordinates;
}

public class Coordinate {
    double x;
    double y;
}

它将按如下方式进行:

  1. 按日期字段对项目进行排序(假设按升序)

    MongoDatabase database = getDatabase("db");
    MongoCollection<GeoData> collection = database.getCollection("col", GeoData.class);
    Bson sortFilter = Filters.eq("date", "1"); //sort ascending
    List<GeoData> geoData = Lists.newArrayList(collection.find().sort(sortFilter));
    
  2. 使用 c = [(xA-xB)^2+(yA-yB)^2] 的平方根计算点之间的距离

    private static double distanceBetweenCoordinates(Coordinate a, Coordinate b) {
        return Math.sqrt(Math.pow(b.getX() - a.getX(), 2) + Math.pow(b.getY() - a.getY(),2));
    }
    
  3. 将它们相加计算路线距离

    double routeDist = 0.0;
    for (int i = 0; i < geoData.size()-1; i++) {
        routeDist += distanceBetweenCoordinates(geoData.get(i+1).getLoc().getCoordinates(), geoData.get(i+1).getLoc().getCoordinates());
    } 
    

关于mongodb - 如何计算 MongoDB 中多个 GeoJSON 点之间的路线距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45891865/

相关文章:

mongodb - 将 mongo 中给定键/值对的查询结果作为返回值的数组返回的最简单方法是什么?

javascript - 通过表单输入和 pug 模板渲染器从 Mongodb 检索数据

python - 关于mongodb更新操作参数safe=True的问题

sql - SphinxQL 中的 SetGeoAnchor

MongoDB 'unable to find index for $geoNear query'

node.js - Mongoose (Mongodb)按填充字段排序

java - 分片后MongoDB插入速度变慢

c - mongo c 驱动程序更新嵌套数组

javascript - 地理定位在移动设备上不起作用,但在我的桌面上起作用

javascript - 为 OpenLayers 转换 GPS 坐标