MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment calculer la distance d'itinéraire entre de nombreux points GeoJSON dans MongoDB ?

Comme indiqué dans les commentaires également, j'essaierais de dessiner une image similaire ici en utilisant Java. En supposant que le nom de votre base de données db et le nom de la collection sous la forme col et le type de document comme GeoData qui pourrait être modélisé comme :

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

Cela se déroulerait comme suit :

  1. Trier les éléments par champ de date (disons par ordre croissant)

    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. Calculez la distance entre les points en utilisant 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. Additionnez-les tous pour calculer la distance de l'itinéraire

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