当前位置:网站首页 > Java教程 > 正文

postgis java教程



最近要做gps数据的分析,开始学习postgis。首先推荐下的专栏, 里面的postgis教程可以说很全面了,我就是靠这入的坑。

但在java程序中,对gis数据进行操作还有些问题,这里简单用文章记录下。

demo源码在https://gitee.com/Lonelyleaf/postgis-java-demo,下面简单说明下整个过程与遇到的坑

  • jdk11
  • gradle6
  • postgres11+postgis
  • idea 2019.3

首先需要安装postgres与postgis,在windows下,安装postgres时可以顺带安装postgis,记得勾选

img

安装好后,使用pgadmin来新建一个数据库,这里就叫做

img
img

然后选中你的数据库,选择上方的打开查询编辑器。

img

输入以下sql来启用PostGIS

create extension postgis

数据库就准备好了!

如果直接使用我的源码,那么启动项目会自动建立表结构与初始数据。这里还是说明下表结构与数据:

 

这里建立一个gps数据表,其中字段使用的来保存坐标信息。 其中表示是点信息,postgis还支持、等。 后面的4326表示了SRID,表明了使用的哪种坐标系,这里是使用的,既gps的 标准坐标。

然后在这里 下载样本数据的sql,放入数据库中执行。

执行成功后选中数据库,然后在t_gps表右键就能看到刚才导入的数据了,

img

然后可以看到下面的选项卡中,我们的字段右边有一个👁一样的图标,点击后,可以简单的在地图上 预览到刚才我们导入的数据

img
img

要专门分析数据,可以用或这些专业的gis软件,这里我们已经初步达成目的,下面说明下java后端程序中,怎样 读写postgis数据。

最后给建立索引,注意要使用gist索引来创建。

create index idx_gpt_location on t_gps using gist("location");

postgis的文档上对gist索引有介绍,时专门针对空间数据的一种索引,在

具体项目请参考我的项目源码, 基本是按照spring boot的curd工程来搭建。由于用到很多其它技术具体搭建过程这里不细说, 下面简单说明下读写数据的过程和一些痛点。

首先项目使用的是mybatis-plus来做crud,下面是表的java实体:

 

注意在postgis-jdbc中,并且为了让jdbc能正确读取数据,需要 将postgis-jdbc中的数据进行注册。postgis-jdbc提供了自动注册与手动注册。

如果使用自动注册,可以用作为driver,然后jdbc的url使用 就可以自动注册。但是,源码中支持的数据库类型是而不支持,这两者的 差别可以参考和的文章

PostGIS教程十三:地理 PostGIS距离计算建议 - 投影与球坐标系, geometry与geography类型

为了让也能自动注册,项目中自定义了类, 转换出来还是,在java代码层使用和并没做区分。

 

如果你没有注册类型,那么你拿到的类型会是。但其实通过 还是很可以获取来手动转换的。

明显mybatis没有原生支持与其各个子类。有个 mybatis-typehandlers-postgis 做了一些工作,但实在太简单我选择直接copy其中核心代码

 

注意如果你没有在jdbc connection中注册类型,那拿到的会是。

由于没有现成的转为GeoJson的库,所以项目中使用了自定义类来 转换一下然后序列化。

 

其实postgis-jdbc中有包,对JTS有支持,JTS是有jackson库转GeoJson的。 如果需要在java层做些地理位置的运算,使用包应该更好。

SRID的选择其实很复杂,详细解释可以参考下的文章https://blog.csdn.net/_/article/details/。 这里摘抄一段

 

SRID其实就决定了你的坐标使用的哪种投影,由于我的数据都是标准的gps坐标(经纬度,没有偏移), 所以在转换与建表时,都使用了。具体数据库应该使用哪种一定要根据业务来,不然使用postgis进行计算与使用 各种gis软件进行分析时一定会出问题。

在转换到时,项目中写死了srid的值,这不是必须,但为了保证正确最好这样做:

 

java与postgis交互其实不难,这里是用实体<->表对于的方法在建模。其实实在搞不懂,最次还可以全部靠 xml里手写sql搞定不是🐒

文章只介绍了数据的交互,但postgis的各种强大的空间分析的函数并没有介绍,等业务实践再积累些也许可以 再写一下。

如果对分析有兴趣,再次推荐下大佬的专栏

版权声明


相关文章:

  • 告白代码教程java2025-02-09 14:18:06
  • java六代教程视频2025-02-09 14:18:06
  • java公路车装箱教程2025-02-09 14:18:06
  • java爬虫实例教程2025-02-09 14:18:06
  • java循环视频教程2025-02-09 14:18:06
  • java单向链表教程2025-02-09 14:18:06
  • java变量配置教程2025-02-09 14:18:06
  • java操作es教程2025-02-09 14:18:06
  • java高级编程教程2025-02-09 14:18:06
  • java窗体安装教程2025-02-09 14:18:06