sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo calculo la distancia de la ruta entre muchos puntos GeoJSON en MongoDB?

Como también se señaló en los comentarios, intentaría dibujar una imagen similar aquí usando Java. Suponiendo que el nombre de su base de datos db y el nombre de la colección como col y el tipo de documento como GeoData que podría modelarse como :

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

Se procedería de la siguiente manera:

  1. Ordenar elementos por campo de fecha (digamos en orden ascendente)

    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. Calcula la distancia entre puntos usando c = square root of [(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. Súmelos todos para calcular la distancia de la ruta

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