1. ホーム
  2. データベース
  3. モンゴルディーブ

springboot + mongodbによる緯度経度座標による平坦地マッチング方式

2022-01-19 03:21:52

java apiにはmongodbエンティティが付属していますが、トーラス多角形の面積にマッチしないので(おそらく正しい方法を使わなかったから)、空間座標のタイプをカスタマイズする必要があります。

さっそくですが、コードは以下の通りです。

/**
 *
 * @author cy
 */
@Configuration
@ReadingConverter
public class CustomReadGeoJsonConverter implements Converter<Document, CustomGeoJson> {

    @Override
    public CustomGeoJson convert(Document document) {
        CustomGeoJson geoJson = new CustomGeoJson();
        geoJson.setType(document.get(GeoJsonConstant.TYPE, String.class));
        geoJson.setCoordinates(document.get(GeoJsonConstant.COORDINATES, Iterable.class));
        return geoJson;
    }

}


@Configuration
public class Config {
    @Autowired
    private CustomReadGeoJsonConverter customReadGeoJsonConverter;
    @Bean
    public MongoCustomConversions customConversions() {
        List<Converter<? , ? >> converterList = new ArrayList<>();
        converterList.add(customReadGeoJsonConverter);
        return new MongoCustomConversions(converterList);
    }
}



エンティティに挿入されるカスタム空間座標タイプ
座標をポイントにカスタム挿入できるところ

/**
 * @author cy
 */
@Data
public class CustomGeoJson implements GeoJson, Serializable {
    private String type;

    private Iterable<? > coordinates;

}


定義したmongodbエンティティにカスタムタイプを追加します。

/**
 * @author cy
 * @since 2021-10-20
 */
@Data
@Document(collection = "demo_mdb")
public class DemoMdb implements Serializable {

    private String id;

    @GeoSpatialIndexed(type = GeoSpatialIndexType.GEO_2DSPHERE)
    private CustomGeoJson customGeoJson;
}


データを挿入する

public void saveData() {
 	// custom point point collection here (no fixed format here refer to mongdb official documentation)
  	List<List<Point>> pointList = new ArrayList<>();
  	DemoMdb db = new DemoMdb();
  	// check the type needed by yourself
  	db.setType("***");
  	db.setCoordinates(pointList);
  	//mongoTemplate introduces itself without going into detail
 	mongoTemplate.insert(db, DemoMdb .class);
}



クエリデータ

 /**
 ** longitude x latitude y
 **/
public List<DemoMdb> findData(String x, String y) {
        Query query = new Query(Criteria.where("customGeoJson").
        intersects(new GeoJsonPoint(Double.valueOf(x), Double.valueOf(y))));
        List<DemoMdb> dbList = mongoTemplate.find(query, DemoMdb.class);
        return dbList;
}


まだ完璧ではありませんが、一つの方法です。

この記事はspringboot + mongodbの緯度経度座標による平坦地のマッチング方法についてです、より関連するspringboot mongodbの緯度と経度の内容は、スクリプトハウスの過去の記事を検索するか、次の関連記事を閲覧し続けることを願ってあなたは将来的にもっとスクリプトハウスをサポートします!.