Както беше посочено и в коментарите, бих се опитал да нарисувам подобна картина тук, използвайки Java. Ако приемем името на вашата база данни db
и име на колекция като col
и типа на документа като GeoData
което може да се моделира като :
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;
}
Ще продължи по следния начин:
-
Сортирайте елементите по поле за дата (да речем във възходящ ред)
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));
-
Изчислете разстоянието между точките, като използвате
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)); }
-
Сумирайте всички тях, за да изчислите разстоянието на маршрута
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()); }