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