MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bagaimana cara menghitung jarak rute antara banyak titik GeoJSON di MongoDB?

Seperti yang ditunjukkan dalam komentar juga, akan mencoba menggambar gambar serupa di sini menggunakan Java. Dengan asumsi nama database Anda db dan nama koleksi sebagai col dan jenis dokumen sebagai GeoData yang dapat dimodelkan sebagai :

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

Ini akan dilanjutkan sebagai berikut :

  1. Urutkan item menurut bidang tanggal (misalkan dalam urutan menaik)

    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. Hitung jarak antar titik menggunakan 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. Jumlahkan semuanya untuk menghitung jarak rute

    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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara memperbarui semua dokumen di mongodb PHP

  2. mongodb v3.2 tidak dapat berjalan di mac

  3. Bagaimana cara mengembalikan agregat sub array dengan filter di array paling atas?

  4. 2 Cara Menghapus Koleksi di MongoDB

  5. Deserialisasi khusus