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!