基于PostgreSql操作空间数据Geometry类型

  • 一、简介

        空间数据是指用来表示空间实体的位置、形状、大小及其分布特征诸多方面信息的数据,它可以用来描述来自现实世界的目标,它具有定位、定性、时间和空间关系等特性,操作空间数据主要是指对点、线、面等基本结构的一个操作。

        在PostgreSQL数据库中也可以存储这些空间数据,存储时可以是geometry格式,也可以以shape文件的格式存储。geometry是以十六进制串组成的,表示的是几何形状;shape文件存储的是wkt(Well-Know Text)类型的数据,对应点线面分别由三种类型:POINT、LINE、POLYGON来表示,这是单一的类型,对应的联合类型又有MULTIPOINT、MULTILINE、MULTIPOLYGON等。并且PostgreSQL提供了一些操作空间数据的函数,能够比较简单方便的对空间数据进行查询、插入、转换等。本文中主要介绍了怎么基于PostgreSQL操作geometry类型的空间数据。

  • 二、使用介绍

        想要在Postgresql中储存或者操作空间数据,首先需要安装并扩展空间数据库(Postgis)引擎,普通安装下的Postgresql是没有Postgis功能的,无法对geometry类型的数据进行操作。扩展包postgis的下载地址是Getting Started | PostGIS,可以直接下载exe执行文件,此处需注意要保证和本地已经安装的Postgresql版本保持一致。

        当安装Postgis后,Postgresql只是有了地理空间分析的支持,在具体的数据库中仍然不能使用,比如在未扩展Postgis的数据库中,新建一张表,表中的字段类型是geometry,此时会报“geometry”类型不存在问题,如下图所示。这是因为我们并没有创建空间数据库,因此无法使用。

        此时需要为指定数据库手动创建一个空间数据库才可以,创建方式是在当前数据库中执行以下sql语句:CREATE EXTENSION postgis。

执行完后,在数据库的扩展下可以看到多了一个postgis行,如下图左侧pcka_db数据库所示,而右边的ctm01efenalarm_db是没有扩展空间数据库的。

     

三、操作空间数据

        简介中提到PostgreSQL存储空间数据的格式有两种,分别是geometry和wkt,无论哪一种,其字段的数据类型都是geometry。在DBeaver数据库可视化工具中,都是用wkt形式展示geometry数据类型的,因此我们看到的都是如下形式的数据:其中POLYGON是一个面的空间数据,POINT是一个点的空间数据。

 

        为了直观看到geometry格式下的展示效果,我们可以使用pg数据库自带的一个开源图形工具pgAdmin4来查看geometry格式的数据展示效果,如下图所示。

 

        我们也可以编写java代码将geom字段取出来时,debug可以看出geometry格式的数据,如下图所示。

        从以上两个方式查看的geometry格式的数据是以一系列十六进制串组成的,只不过 DBeaver工具在数据展示的时候自动帮我们进行了转化而已。因此在java读取空间数据时,就涉及到了geometry格式和wkt格式的转化,对于geometry类型的字段:

  1. insert时:需要将wkt转换成geometry保存到数据库
  2. select时:需要再次将geometry转回wkt显示

PostgreSQL提供了下面两种转化操作函数,分别是:

  • ST_GeomFromText(wkt,坐标系参数):将wkt格式数据转化成geometry格式,其中第一个参数是wkt类型的数据,第二个是坐标系参数,常用的有4490即CGCS2000大地坐标系、4326地理坐标系等。
  • ST_AsText(geometry):将geometry格式转化成wkt格式

除了以上两个转换函数以外,还有其他一些常用的函数:

  • st_centroid(geometry):获取某个geometry的中心点
  • st_intersects(geometry,geometry):实现两个geometry的相交
  • st_union(geom):实现多个geometry的联合

四、实际使用效果 

        在实际查询数据库时,需要将geometry转成wkt,否则查询出来的是一连串的十六进制数据,无法使用,而本质上wkt就是一种用文本形式描述,因此java中可以直接使用String来接收wkt类型的数据。如下是查询sql语句。

转换完以后我们在java代码中获取的geom字段如下所示,可以看出转换以后的数据与DBeaver工具中看到的相同。

        对于前端来说,可以直接处理wkt类型的空间数据,因此将结果直接返给前端到页面进行展示。如果前端不好处理或者后续需要在代码里继续处理空间数据时,只需操作字符串即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/707100.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javaEE图书馆自习室订座系统信用springmvc+springboot+mybatis

研究的内容是设计和实现图书馆自习室系统,便捷广大师生对自习室的使用,协助图书馆自习室管理。在设计过程中,系统的用户角色和权限分配如下: (1)馆长 用户管理:拥有自习室管理员、普通用户的所有…

优雅使用前端枚举Enum,符合国标的那种!

01、什么是枚举Enum? 枚举Enum是在多种语言中都有的一种数据类型,用于表示一组特定相关的常量数据集合,如性别(男、女)、数据状态(可用、禁用)、垂直对齐(顶端、居中、底部&#xff…

AD9226 65M采样 模数转换

目录 AD9220_ReadTEST AD9220_ReadModule AD9226_TEST_tb 自己再写个 260M的时钟,四分频来提供65M的时钟。 用 vivado 写的 AD9226_ReadTEST module AD9226_ReadTEST( input clk, input rstn,output clk_driver, //模块时钟管脚 input [12:0]IO_data, //模块数…

深度学习 精选笔记(5)多层感知机

学习参考: 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增),以达到集多方教程的精华于一文的目的。 ③非常推荐上面(学习参考&#x…

spring自定义事件监听器

1. 创建自定义事件 import org.springframework.context.ApplicationEvent; import java.util.List;public class CollectionCreateEvent extends ApplicationEvent {private List<String> fileList;public CollectionCreateEvent(Object source,List<String> file…

vscode——本地配置(C和C++环境配置)(2)

vscode——本地配置&#xff08;2&#xff09; 配置C语言编译看看.json文件编译多个C文件C/C调试 今天我们继续来看vscode的配置&#xff0c;如果没看过上一次的文章&#xff0c;大家可以点击&#xff1a; https://blog.csdn.net/qq_67693066/article/details/136315696 配置C语…

【漏洞复现】鸿运(通天星CMSV6车载)主动安全监控云平台存在敏感信息泄露漏

漏洞描述 鸿运(通天星CMSV6车载)主动安全监控云平台实现对计算资源、存储资源、网络资源、云应用服务进行7*24小时全时区、多地域、全方位、立体式、智能化的IT运维监控,保障IT系统安全、稳定、可靠运行。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法…

leetcode 3.反转链表;

1.题目&#xff1a; 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 2.用例&#xff1a; 3.题目解析&#xff1a; &#xff08;1&#xff09;函数头&#xff1a; 要求返回结点&#xff0c;就 ListNode* reverseList(ListNode* head)&…

海量物理刚体 高性能物理引擎Unity Physics和Havok Physics的简单性能对比

之前的博客中我们为了绕过ECS架构&#xff0c;相当于单独用Batch Renderer Group实现了一个精简版的Entities Graphics&#xff0c;又使用Jobs版RVO2实现了10w人同屏避障移动。 万人同屏对抗割草 性能测试 PC 手机端 性能表现 弹幕游戏 海量单位同屏渲染 锁敌 避障 非ECS 那么有…

Android Activity启动模式

文章目录 Android Activity启动模式概述四种启动模式Intent标记二者区别 Android Activity启动模式 概述 Activity 的管理方式是任务栈。栈是先进后出的结构。 四种启动模式 启动模式说明适用场景standard标准模式默认模式&#xff0c;每次启动Activity都会创建一个新的Act…

最新IE跳转Edge浏览器解决办法(2024.2.26)

最新IE跳转Edge浏览器解决办法&#xff08;2024.2.26&#xff09; 1. IE跳转原因1.1. 原先解决办法1.2. 最新解决办法1.3. 最后 1. IE跳转原因 关于IE跳转问题是由于在2023年2月14日&#xff0c;微软正式告别IE浏览器&#xff0c;导致很多使用Windows10系统的电脑在打开IE浏览…

kubectl 声明式资源管理方式

目录 介绍 YAML 语法格式 命令 应用yaml文件指定的资源 删除yaml文件指定的资源 查看资源的yaml格式信息 查看yaml文件字段说明 查看 api 资源版本标签 修改yaml文件指定的资源 离线修改 在线修改 编写yaml文件 创建资源对象 查看创建的pod资源 创建service服务对…

虚拟机CentOS7仓库被禁用无法进行yum命令

执行yum repolist all命令时&#xff0c;仓库全被禁用 使用sudo yum-config-manager --enable C7.5.1804-base/x86_64去尝试启用其中的仓库时没反应 通过ls /etc/yum.repos.d/命令发现 [rootlocalhost ~]# ls /etc/yum.repos.d/ CentOS-Base.repo.bak CentOS-fasttrack.repo Ce…

博途PLC 单通气缸功能块(SCL源代码)

气缸是工业现场应用非常多的一个重要执行器,气缸在很多场合都有大量应用,今天我们的对象就是"单通气缸",不同的工程师,不同的应用行业,大家对气缸功能块的封装会有所不同。气缸功能块的其它封装大家可以参看下面文章 1、气缸功能块 https://rxxw-control.blog…

Flutter(三):Stack、Positioned、屏幕相关尺寸、Navigator路由跳转

页面尺寸 通知栏高度&#xff1a;MediaQuery.of(context).padding.top顶部导航高度&#xff1a;kToolbarHeight底部导航高度&#xff1a;kBottomNavigationBarHeight屏幕宽&#xff1a;MediaQuery.of(context).size.width屏幕高&#xff1a;MediaQuery.of(context).size.height…

【计算机】本科考研还是就业?

其实现在很多计算机专业的学生考研&#xff0c;也是无奈的选择 技术发展日新月异&#xff0c;而在本科阶段&#xff0c;大家学着落后的技术&#xff0c;出来找工作自然会碰壁。而且现在用人单位的门槛越来越高&#xff0c;学历默认研究生起步&#xff0c;面试一般都是三轮起步…

第十四天-网络爬虫基础

1.什么是爬虫 1.爬虫&#xff08;又被称为网页蜘蛛&#xff0c;网络机器人&#xff09;&#xff0c;是按照一定规则&#xff0c;自动的抓取万维网中的程序或者脚本&#xff0c;是搜索引擎的重要组成&#xff1b;比如&#xff1a;百度、 2.爬虫应用&#xff1a;1.搜索引擎&…

一周学会Django5 Python Web开发-Django5列表视图ListView

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计27条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

初识Maven

介绍&#xff1a; web后端开发技术ApacheMaven是一个项目管理和构建工具&#xff0c;它基于项目对象模型&#xff08;POM&#xff09;的概念&#xff0c;通过一小段描述信息来管理项目的构建。安装&#xff1a;http://maven.apache.org/ Apache软件基金会&#xff0c;成立于19…

矩阵的范数 matrix norm Frobenius norm 弗罗贝尼乌斯 范数

1&#xff0c;矩阵范数的定义 矩阵的范数&#xff0c;matrix norm即矩阵的模&#xff1b;它把一个矩阵空间变成为赋范线性空间&#xff1b; 从一个矩阵空间映射到非负实数的函数 满足以下条件&#xff1a; 1&#xff0c;严格的正定性。对于 , 则 ; and if , must ; 2&…