Wie auch in den Kommentaren erwähnt, würde ich versuchen, hier mit Java ein ähnliches Bild zu zeichnen. Angenommen Ihr Datenbankname db
und Sammlungsname als col
und den Dokumenttyp als GeoData
was wie folgt modelliert werden könnte:
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;
}
Es würde wie folgt vorgehen:
-
Elemente nach Datumsfeld sortieren (sagen wir in aufsteigender Reihenfolge)
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));
-
Berechnen Sie den Abstand zwischen Punkten mit
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)); }
-
Summieren Sie alle, um die Streckenlänge zu berechnen
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()); }