springboot + mongodb 通过经纬度坐标匹配平面区域的方法

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

自定义的空间坐标类型插入实体
其中的coordinates 可自定义插入point

/**
 * @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() {
 	//这里自定义point点集合(这里不固定格式参照mongdb官方文档)
  	list<list<point>> pointlist = new arraylist<>();
  	demomdb db=new demomdb();
  	//自行查看需要的类型
  	db.settype("***");
  	db.setcoordinates(pointlist);
  	//mongotemplate自行引入不做赘述
 	mongotemplate.insert(db, demomdb .class);
}

查询数据

 /**
 ** 经度x纬度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 经纬度内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐