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


Posted in MongoDB onNovember 01, 2021

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 经纬度内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MongoDB 相关文章推荐
MongoDB 常用的crud操作语句
Jun 20 MongoDB
MongoDB orm框架的注意事项及简单使用
Jun 20 MongoDB
详解MongoDB的条件查询和排序
Jun 23 MongoDB
SpringBoot整合MongoDB的实现步骤
Jun 23 MongoDB
MongoDB使用场景总结
Feb 24 MongoDB
剖析后OpLog订阅MongoDB的数据变更就没那么难了
Feb 24 MongoDB
一次线上mongo慢查询问题排查处理记录
Mar 18 MongoDB
Mongodb 迁移数据块的流程介绍分析
Apr 18 MongoDB
NoSQL优缺点与MongoDB数据库简介
Jun 05 MongoDB
centos8安装MongoDB的详细过程
关于CentOS 8 搭建MongoDB4.4分片集群的问题
MongoDB日志切割的三种方式总结
Sep 15 #MongoDB
mongodb清除连接和日志的正确方法分享
Sep 15 #MongoDB
阿里云服务器部署mongodb的详细过程
Sep 04 #MongoDB
mongodb数据库迁移变更的解决方案
Sep 04 #MongoDB
mongodb的安装和开机自启动详细讲解
Aug 02 #MongoDB
You might like
smarty获得当前url的方法分享
2014/02/14 PHP
PHP环境搭建的详细步骤
2016/06/30 PHP
Yii2实现同时搜索多个字段的方法
2016/08/10 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
javascript中有趣的反柯里化深入分析
2012/12/05 Javascript
JS+DIV实现鼠标划过切换层效果的方法
2015/05/25 Javascript
JavaScript实现select添加option
2015/07/03 Javascript
jQuery模拟select实现下拉菜单功能
2016/06/20 Javascript
浅谈$('div a') 与$('div&gt;a')的区别
2016/07/18 Javascript
Angular2实现组件交互的方法分析
2017/12/19 Javascript
浅谈JS对象添加getter与setter的5种方法
2018/06/09 Javascript
JavaScript实现京东购物放大镜和选项卡效果的方法分析
2018/07/05 Javascript
微信小程序的部署方法步骤
2018/09/04 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
2019/05/08 Javascript
Layui数据表格 前后端json数据接收的方法
2019/09/19 Javascript
原生JS实现烟花效果
2020/03/10 Javascript
如何实现echarts markline标签名显示自己想要的
2020/07/20 Javascript
[01:02:00]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第三场 1月24日
2021/03/11 DOTA
python提取内容关键词的方法
2015/03/16 Python
Python获取文件所在目录和文件名的方法
2017/01/12 Python
Python调用微信公众平台接口操作示例
2017/07/08 Python
浅谈pytorch、cuda、python的版本对齐问题
2020/01/15 Python
tensorflow模型保存、加载之变量重命名实例
2020/01/21 Python
运行python提示no module named sklearn的解决方法
2020/11/29 Python
美国领先的医疗警报服务:Philips Lifeline
2018/03/12 全球购物
SheIn沙特阿拉伯:女装在线
2020/03/23 全球购物
美国最大和最受信任的二手轮胎商店:Bestusedtires.com
2020/06/02 全球购物
主题酒店策划书
2014/01/28 职场文书
宣传标语大全
2014/07/01 职场文书
五四演讲稿范文
2014/09/03 职场文书
经费申请报告
2015/05/15 职场文书
刮痧观后感
2015/06/05 职场文书
Pytorch 如何实现常用正则化
2021/05/27 Python
Nginx内网单机反向代理的实现
2021/11/07 Servers
python 远程执行命令的详细代码
2022/02/15 Python
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
2022/12/24 MySQL