Như đã chỉ ra trong các bình luận, sẽ cố gắng vẽ một bức tranh tương tự ở đây bằng cách sử dụng Java. Giả sử tên cơ sở dữ liệu của bạn db
và tên bộ sưu tập là col
và loại tài liệu là GeoData
có thể được mô hình hóa là:
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;
}
Nó sẽ tiến hành như sau:
-
Sắp xếp các mục theo trường ngày (giả sử theo thứ tự tăng dần)
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));
-
Tính khoảng cách giữa các điểm bằng cách sử dụng
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)); }
-
Tính tổng tất cả chúng để tính khoảng cách tuyến đường
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()); }