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!