MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie berechne ich die Routenentfernung zwischen vielen GeoJSON-Punkten in MongoDB?

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:

  1. 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));
    
  2. 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));
    }
    
  3. 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());
    }