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 balancer的使用详解
Apr 30 MongoDB
MongoDB数据库常用的10条操作命令
Jun 18 MongoDB
详解MongoDB的条件查询和排序
Jun 23 MongoDB
SpringBoot整合MongoDB的实现步骤
Jun 23 MongoDB
常用的MongoDB查询语句的示例代码
Jul 25 MongoDB
mongodb的安装和开机自启动详细讲解
Aug 02 MongoDB
centos8安装MongoDB的详细过程
Oct 24 MongoDB
SpringBoot 整合mongoDB并自定义连接池的示例代码
Feb 28 MongoDB
MongoDB支持的数据类型
Apr 11 MongoDB
MongoDB修改oplog大小的四种方法
Apr 11 MongoDB
Centos系统通过Docker安装并搭建MongoDB数据库
Apr 12 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
php adodb连接带密码access数据库实例,测试成功
2008/05/14 PHP
解析在zend Farmework下如何创立一个FORM表单
2013/06/28 PHP
PHP7之Mongodb API使用详解
2015/12/26 PHP
验证坐标在某坐标区域内php代码
2016/10/08 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
PHP实现常用排序算法的方法
2020/02/05 PHP
js模拟类继承小例子
2010/07/17 Javascript
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
JQGrid的用法解析(列编辑,添加行,删除行)
2013/11/08 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
2014/01/24 Javascript
Nodejs实现的一个静态服务器实例
2014/12/06 NodeJs
jQuery.each使用详解
2015/07/07 Javascript
jquery获取select选中值的方法分析
2015/12/22 Javascript
分享javascript、jquery实用代码段
2016/10/20 Javascript
TypeScript学习之强制类型的转换
2016/12/27 Javascript
layui获取多选框中的值方法
2018/08/15 Javascript
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
2018/10/25 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
vue 使用v-for进行循环的实例代码详解
2020/02/19 Javascript
python 获取文件列表(或是目录例表)
2009/03/25 Python
python脚本实现查找webshell的方法
2014/07/31 Python
Python黑魔法Descriptor描述符的实例解析
2016/06/02 Python
Python算法输出1-9数组形成的结果为100的所有运算式
2017/11/03 Python
浅谈Python对内存的使用(深浅拷贝)
2018/01/17 Python
使用 Python 实现微信群友统计器的思路详解
2018/09/26 Python
详解Django CAS 解决方案
2019/10/30 Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
2019/11/19 Python
python返回数组的索引实例
2019/11/28 Python
浅谈Python线程的同步互斥与死锁
2020/03/22 Python
Django实现微信小程序支付的示例代码
2020/09/03 Python
澳大利亚最好的厨具店:Kitchen Warehouse
2018/03/13 全球购物
在职研究生自我鉴定
2013/10/16 职场文书
师范学院美术系毕业生自我鉴定
2014/01/29 职场文书
关爱残疾人标语
2014/06/25 职场文书
R9700摩机记
2022/04/05 无线电
Java GUI编程菜单组件实例详解
2022/04/07 Java/Android