sql >> データベース >  >> NoSQL >> MongoDB

MongoDBの多くのGeoJSONポイント間のルート距離を計算するにはどうすればよいですか?

    コメントでも指摘されているように、ここでは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;
    }
    

    次のように進行します:

    1. 日付フィールドでアイテムを並べ替えます(たとえば、昇順で)

      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. 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. それらすべてを合計して、ルート距離を計算します

      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. LinuxサーバーのMongodb

    2. Spring-Mongodbは列挙型を文字列ではなくintとして格納/取得します

    3. 関連ドキュメントをカウントするためのMongoDBのベストプラクティス

    4. StackExchange.Redisを使用してキースペース通知をRedisします