Java SpringBoot 集成PostGIS(附项目代码)

环境

java 1.8

框架:springboot2

持久层:mybatis plus

GIS库:GDAL

数据库:postgresql+postgis

本项目参照了 postgis-java-demo 项目,使用postgis-jdbc连接postgis,完成org.postgis.Geometry的json序列化。
具体方法和源码可以参照 https://github.com/lonelyleaf/postgis-java-demo,是个很好的学习案例

1、gradle配置postgresql和postgis依赖

添加postgresql和postgis依赖如下

dependencies {
    ...
    /*postgesql*/
    compile group: 'org.postgresql', name: 'postgresql', version: '42.2.14'
    compile group: 'net.postgis', name: 'postgis-jdbc', version: '2.5.0'
    compile group: 'org.locationtech.jts', name: 'jts-core', version: '1.17.1'
    compile group: 'org.locationtech.spatial4j', name: 'spatial4j', version: '0.8'
    compile group: 'com.fasterxml.jackson.core:jackson-databind:2.10.1'
    ...
}
2、配置yml文件

采用封装后的driver作为jdbc driver,让geography也能自动注册。

spring:
  datasource:
    driver-class-name: com.gis.common.jts.JtsWrapper
    url: jdbc:postgres_jts://****:****/GISDB?useSSL=false
    username: ****
    password: ****
mybatis-plus:
  mapper-locations: classpath:mapper/biz/*.xml
  type-handlers-package: "com.gis.common.mybatis.jts"
3、CodeGenerator生成entity,repository层等等

使用MybatisPlus的CodeGenerator生成entityrepository层等等,CodeGenerator代码地址为

https://gitee.com/magic1412/spring_gis_template/blob/master/src/main/java/com/gis/CodeGenerator.java

4、mapper.xml写sql

在mapper.xml实现repository层接口

注意,由于已经完成org.postgis.Geometry的json序列化,此处select语句中不必再使用st_asgeojson(geom)函数将geom转成json字符串,直接写geom即可。

    <select id="getGeoById" parameterType="java.lang.Long" resultType="java.util.Map">
        select fid, geom,st_area(geom) as area
        from geo_school
        where fid = #{fid}
    </select>

    <select id="getGeoStatistic" parameterType="java.lang.Long" resultType="java.util.Map">
        select count(fid) as number,sum(st_area(geom)) as area
        from geo_school
    </select>

    <select id="getGeoContainsPoint" parameterType="org.locationtech.jts.geom.Geometry" resultType="java.util.Map">
        select fid, geom from geo_school
        where ST_Within(#{point},geom)
    </select>
4、顺次完成repository,service,controller层
5、postgis常用控件函数

更多postgis函数可以看**PostGIS官方教程汇总目录** https://blog.csdn.net/qq_35732147/article/details/85256640

转wkt
st_astext(geom)

转geojson
st_asgeojson

两点间的距离
st_distance(geom,geom)

面的面积
st_area(geom)

线的长度/面的周长
st_length(geom)

缓冲区
st_buffer(geom,distance)

相交计算
st_intersection(geom,geom)

合并计算
st_union(geom,geom,…)

差异计算
st_difference(geom,geom)
项目代码
https://gitee.com/magic1412/spring_gis_template
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐