使用Java和PostGis的全国A级风景区数据入库实战
目录
前言
星垂平野阔,月涌大江流”“晴川历历汉阳树,芳草萋萋鹦鹉洲”……祖国的每一寸土地,都饱含着诗情画意。旅行一定是很多朋友的爱好,有人说:“人生至少要有两次冲动:一场奋不顾身的爱情和一段走就走的旅行。”不知道在看博文的朋友,是否也是一位旅行爱好者呢。
随着后疫情时代的到来,许多人又开始踏上旅行。旅游可以放松自己身心,缓解工作和生活方面的压力.旅行的过程中是不需要有任何的心理负担的,可以使人达到一种完全放松的状况.感受最原始的快乐。旅行的时候不仅可以观赏风景,还可以尝美食,住宾馆,听故事,感受全国各地的饮食文化.增长自己的见识,可以看到更多的人.了解更多的民俗文化,看到更多的景色使自己的内心感到充实。旅游可以开阔眼界,观察到丰富的人文景观,了解各地的文化风俗,饮食习惯和宗教信仰,广交朋友。旅游还可以锤炼人的意志,增加人的智慧,尤其是去一些有挑战性的景区游玩,征服一座山,跨过一条河学会一项新技能,都可以使自己变的更加勇敢。
中华大地,旅游景点众多,那我们国家到底有多少旅游景区呢?在前面的很多博文中,我们讲过如何将空间数据进行入库。那么文本将采用Java语言,重点讲述如何将全国A级风景区数据导入到PostGis数据库中,为后续我们进行旅游资源和旅游路线的推荐和展示打下坚实的基础。如果您也是WebGis的爱好者,可以从本文了解空间数据的入库开发方式,知道空间数据库的设计和操作。
一、数据介绍
数据说明,本文下载的数据是朋友分享的2023年全国A级风景区数据。数据大小为36MB左右,数据格式shapfile,下面是数据展示。
1、空间数据
这里我们采用Qgis对空间数据进行导入前查看。其基础信息如下表所示:
序号 | 参数 | 说明 |
1 | 文件格式 |
ESRI Shapefile |
2 | 文件编码 |
GBK |
3 | 元素类型 |
Point |
4 | 坐标参考系 |
EPSG:4326 - WGS 84 |
5 | 数据单位 | 度 |
6 | 数据总数 |
14,847 |
2、属性表说明
在shp文件中,除了有空间数据的定义,还有属性数据的定义,A级景区shp数据一共有15个字段,详情请看下面的表定义。
序号 | 字段名 | 数据类型 | 长度 |
1 |
景区名称 |
String | 254 |
2 |
等级 |
String | 254 |
3 |
所属省份 |
String | 254 |
4 |
地址 |
String | 254 |
5 |
评定时间 |
String | 254 |
6 |
发布时间 |
String | 254 |
7 |
发布链接 |
String | 254 |
8 |
lng_GCJ02(高德经度) |
Double | 18 |
9 |
lat_GCJ02(高德纬度) |
Double | 18 |
10 |
lng_BD09(百度经度) |
Double | 18 |
11 |
lat_BD09(百度纬度) |
Double | 18 |
12 |
lng_WGS84 |
Double | 18 |
13 |
lat_WGS84 |
Double | 18 |
14 |
所属城市 |
String | 254 |
15 |
所属区县 |
String | 254 |
3、QGIS数据预览
我们使用qgis对数据进行简单标绘,使用景区名字进行标注,使用景区等级做分类。可以看到如下的分类结果展示。
二、PostGIS空间数据库设计
空间数据库我们采用PostGIS进行存储,这里来简单设计一下如何存储景区数据。完整的景区数据条数在1万5千条左右。因此我们只需要设计一张景区表即可。与其空间属性保持一一对应的关系,我们来看一下数据表的表结构信息。
1、空间表结构
下面给出风景区空间数据库表的表结构:
为了在后面的应用中应用空间索引,我们在geom字段上创建空间索引,创建语句如下:
三、Java空间入库
这里主要讲解如何使用Java语言将shp数据进行导入到PostGis数据库中,主要采用的组件还是Gdal,如果大家对gdal不太熟悉,可以翻看博主以前的博客,有关于gdal的部署和具体使用方法。下面从代码实现来详细讲解具体的入库过程。后台开发框架采用Springboot,ORM框架采用Mybatis-plus,都是熟悉的组件。如果看博客的朋友对上述框架不是很熟悉,可以先学习一下相关的知识,对于理解和代码掌握有很大的帮助。
1、实体定义
示例工程采用MVC三层开发模式,这里只讲解M层,V和C在后续博文中讲解。
这里有几个地方要注意的就是,在类最开始定义的地方,@TableName(value = "biz_scenic_spot", autoResultMap = true),这里一定要这么写,否则后续将无法操作geometry数据。其次是@TableField(typeHandler = PgGeometryTypeHandler.class),通过绑定typehandler来设置具体的处理函数。
2、数据操作Mapper
熟悉Mybatis-Plus(mp)的朋友一定了解ORM操作的三个重要对象之一就是Mapper,相当与对jdbc的封装。下面是mapper的实现:
3、业务层实现
为了方便做景区数据的批量入库,我们在Mp之上实现serviceimpl,好直接调用其的批量处理方法,示例代码如下:
4、入库
这里采用junit测试组件来进行数据入库,首先将调用gdal进行shp数据解析,然后调用service方法进行空间数据入库。这里需要注意的是,要在junit测试方法中注入bean对象,因此,需要在测试bean中使用下面的注解。
5、数据入库验证
下面我们来运行一下测试代码,试着将数据导入到数据库中,鼠标右键运行。
运行后在控制台可以看到以下输出:
最后到数据库中验证数据是否已经成功导入,在客户端中运行以下语句。可以看到数据全部导入,数据总条数是14847条。
总结
以上就是本文的主要内容,那么文本将采用Java语言,重点讲述如何将全国A级风景区数据导入到PostGis数据库中,为后续我们进行旅游资源和旅游路线的推荐和展示打下坚实的基础。如果您也是WebGis的爱好者,可以从本文了解空间数据的入库开发方式,知道空间数据库的设计和操作。
- 点赞
- 收藏
- 关注作者
评论(0)