MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como calculo a distância da rota entre muitos pontos GeoJSON no MongoDB?


Como apontado nos comentários também, tentaria desenhar uma imagem semelhante aqui usando Java. Assumindo o nome do seu banco de dados db e nome da coleção como col e o tipo de documento como GeoData que pode ser modelado 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;
}

Ele procederia da seguinte forma:

  1. Classificar itens por campo de data (digamos em ordem crescente)
    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. Calcule a distância entre os pontos 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. Soma todos eles para calcular a distância da rota
    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());
    }