在业务需求中,需要对地理坐标进行存储,mongodb是一种很好的选择,因为它提供了许多关于地理位置的方法,但是它提供的GeoJson却是一个接口,当然也提供了对应的点、线、面的实现类,不过在业务需求中,往往需要前端传一个GeoJson数据格式,后端做一个点、线、面的适配,已达到简单使用,简单存储的功能;

基于上面的场景,写了这篇文章,下面就贴代码了(关于maven及mongdb的配置下面就不贴了,只贴核心代码)

1.首先自定义一个GeoJson类

@Data

public class CustomGeoJson implements GeoJson {

private String type;

private Iterable> coordinates;

}

2.添加mongdb的convert转换器,读写用的

1)CustomReadGeoJsonConverter

@ReadingConverter

public class CustomReadGeoJsonConverter implements Converter {

@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;

}

}

2)CustomWriteGeoJsonConverter

@WritingConverter

public class CustomWriteGeoJsonConverter implements Converter {

@Override

public Document convert(CustomGeoJson geoJson) {

Document document = new Document();

document.put(GeoJsonConstant.TYPE, geoJson.getType());

document.put(GeoJsonConstant.COORDINATES, geoJson.getCoordinates());

return document;

}

}

3.geoJson数据的键名称

public final class GeoJsonConstant {

/**

* type(类型)

*/

public static final String TYPE = "type";

/**

* coordinates(坐标位置)

*/

public static final String COORDINATES = "coordinates";

}

4.geoJson的type

public final class GeoJsonTypeConstant {

/**

* 点

*/

public static final String POINT = "Point";

/**

* 线

*/

public static final String LINESTRING = "LineString";

/**

* 面

*/

public static final String POLYGON = "Polygon";

}

实体类

@Data

@Document(collection = "map_data")

public class MapData {

@Id

private String id;

private CustomGeoJson geometry;

}

6.TestController

@RestController

@Api

public class TestController {

@Autowired

private MongoTemplate mongoTemplate;

@PostMapping("test")

public MapData test(@RequestBody MapData mapData){

return mongoTemplate.insert(mapData);

}

}

7.测试效果图

swagger入参

企业微信截图_08821638-8255-4b6f-92aa-3a85efa2c2c9.png

8.mongdb 存储数据的值

企业微信截图_0ee06576-194f-4ad1-bf60-cd320312afb0.png

以上就是GeoJson存储地理位置的实现;

有疑问或者有更好的实现方式可以讨论,本文属于原创,转载需指明出处

geojson mysql存储_mongodb存储geoJson相关推荐

  1. 内部存储_Mongodb存储特性与内部原理

    前言 本文重点叙述下mongodb存储特性和内部原理, 下一篇文章咱们一起来搭建下Replica Sets+Sharded Cluster的集群 存储引擎 wiredTiger引擎 1.3.0新增引擎 ...

  2. mysql有那些存储引擎_MySQL有那哪些存储引擎

    实际我们在平时的开发中,经常会遇到的,在用SQLyog等工具创建表时,就有一个引擎项要你去选.如下图: Mysql的存储引擎有这么多种,实际我们在平时用的最多的莫过于InnoDB和MyISAM了. 所 ...

  3. mysql longtext可以存储多少文字_MySQL 四万字精华总结 + 面试100 问,和面试官扯皮绰绰有余(收藏系列)

    作者:派大新 链接:https://juejin.im/post/5f0d4fadf265da22f3250eaa 写在之前:不建议那种上来就是各种面试题罗列,然后背书式的去记忆,对技术的提升帮助很小 ...

  4. 数据库基础笔记(MySQL)7 —— 存储引擎和视图 ( 完结撒花 )

    存储引擎 实在是学浅才疏,只能大致写点,放篇大佬的,看详细的去吧 传送门 ,等我闲下来学会了再来补充 即一个表存储数据的方式,不同的存储引擎会提供不同的功能,性能等 可以用 engine 指定存储引擎 ...

  5. MySQL 两种存储引擎:MyISAM与InnoDB对比及理解

    MySQL 两种存储引擎:MyISAM与InnoDB对比及理解 目前MySQL默认的存储引擎是InnoDB 现在大多数时候我们使用的都是InnoDB存储引擎,但是在某些情况下使用MyISAM更好,比如 ...

  6. 【MySQL】MySQL的核心——存储引擎

    [1] 存储引擎   1.存储引擎其实就是对于数据库文件的一种存取机制,如何实现存储数据,如何为存储的数据建立索引以及如何更新,查询数据等技术实现的方法.   2.MySQL中的数据用各种不同的技术存 ...

  7. mysql的常用存储引擎_MySQL常见的三种存储引擎

    Ok,我们知道了,引擎就是一个程序的核心组件. 简单来说,存储引擎就是指表的类型以及表在计算机上的存储方式. 存储引擎的概念是MySQL的特点,Oracle中没有专门的存储引擎的概念,Oracle有O ...

  8. linux mysql innodb_MySQL innoDB 存储引擎学习篇

    master thread的县城优先级别最高.其内部由几个循环(loop)组成:主循环(loop).后台循环(background loop).刷新循环(flush loop).暂停循环(suspen ...

  9. mysql 存储 结构,mysql目录与存储结构(一)

    mysql索引与存储结构(一) 首先从一个问题说起. 问题现象: 查询语句如下: -- sql1 SELECT w.wid, w.rid FROM warestock w JOIN product p ...

最新文章

  1. java 日志框架的选择Log4j-SLF4j-Logback
  2. javascript promise编程
  3. python用os.system打开wav文件_使用python读取wav格式文件
  4. BUU_刷题之旅(One)
  5. 学习 Swift 的知识点整理
  6. Visual C++中最常用的类与API函数
  7. 安卓第一次搭建C/S架构
  8. yii2 HeadersAlreadySentException 报错 解决方案
  9. RN环境搭建(Android端)
  10. myBatis + SpringMVC上传、下载文件
  11. Python调用百度地图api查询经纬度
  12. 推荐一款Android高清平板应用--豆果美食
  13. 2020 中国独立开发者生存现状调研报告
  14. Windows一键删除指定文件或文件夹
  15. Kubernetes之健康检查与服务依赖处理
  16. Visual Studio Code入门笔记
  17. 分布式架构在云计算平台中的应用及优缺点分析
  18. 【IPTV】烽火通信再次中标上海电信高清视讯平台项目
  19. AE实现Label Feature(转)
  20. 第一个Flash小游戏制作(1)

热门文章

  1. 常见人事问题汇总(中)
  2. win10“未激活”提示太烦人,轻松一招教你搞定它
  3. unionall的用法(当某条记录为空时,union all是否可以合并此条记录)
  4. 如何利用裂变工具为公众号涨粉?
  5. 360°VR全景图片,探索未知,畅游全景
  6. p2p shareaza 老牌多功能跨协议P2P客户端
  7. word中怎么快速选中光标之前或之后的全部内容?
  8. PRINCE2学习收尾总结
  9. 阿里技术分享:电商IM消息平台,在群聊、直播场景下的技术实践
  10. 【Java设计模式】007-简单工厂模式