sql >> Database >  >> NoSQL >> MongoDB

Hoe bereken ik de routeafstand tussen veel GeoJSON-punten in MongoDB?

Zoals ook in de opmerkingen is aangegeven, zou ik hier proberen een soortgelijk beeld te maken met Java. Uitgaande van uw databasenaam db en collectienaam als col en het documenttype als GeoData die zou kunnen worden gemodelleerd als:

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

Het zou als volgt verlopen:

  1. Sorteer items op datumveld (laten we zeggen in oplopende volgorde)

    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. Bereken de afstand tussen punten met behulp van 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. Tel ze allemaal bij elkaar op om de routeafstand te berekenen

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



  1. object in array-schema in Mongoose duwen

  2. Update subdocument in Mongodb dat id ('s) opslaat

  3. Een MongoDB-datum afdrukken vanuit PHP

  4. MongoDB $ regex-query en mogelijke exploits