基于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)馆长 用户管理:拥有自习室管理员、普通用户的所有…

如何准确获取PDF文件中的标题

想要在PDF文件中,解析获取全部的标题,是一件比较麻烦的事情。正是因为PDF文件中的内容可能是五花八门的格式(论文、财报、法律条文、图书、报纸、等等)。 但是获取标题信息,又是一件非常重要的事情。标题中往往蕴含着非…

优雅使用前端枚举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, //模块数…

golang 函数式编程库samber/mo使用: Future

golang 函数式编程库samber/mo使用: Future 如果您对samber/mo库不了解, 请先阅读第一篇 Option 本节讲述Future的使用,它可以帮助我们处理异步编程问题。 示例 我们先来看看下面代码的示例, 注释解释了每一步的操作。 packa…

深度学习 精选笔记(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系统安全、稳定、可靠运行。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法…

【Spring连载】使用Spring Data访问 MongoDB----Aggregation Framework支持

【Spring连载】使用Spring Data访问 MongoDB----聚合框架支持 一、基础槪念二、投影表达式Projection Expressions三、分面分类法Faceted Classification3.1 桶Buckets3.2 多方面的聚合Multi-faceted Aggregation3.3 按计数排序Sort By Count3.4 投影表达式中的Spring表达式支持…

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…

數據集成平台:datax將MySQL數據以query方式同步到hive

數據集成平台&#xff1a;datax將MySQL數據以query方式同步到hive 1.py腳本 # codingutf-8 import json import getopt import os import sys import MySQLdb import re# MySQL相关配置&#xff0c;需根据实际情况作出修改 mysql_host "xx" mysql_port "330…

最新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浏览…

iOS 通过NSURLProtocol拦截WKWebView网络请求

以前NSURLProtocol可以直接拦截UIWebView&#xff0c;后面升级成WKWebView发现拦截不到了 有细心爱研究的老铁发现了 [WKBrowsingContextController registerSchemeForCustomProtocol:] 这个函数的存在 所以还是可以拦截的 直接上步骤 1.在控制器或者你喜欢的地方注册NSU…

kubectl 声明式资源管理方式

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

【蓝牙协议栈】【BR/EDR】【AVRCP】蓝牙音视频远程控制协议

1. AVRCP概念 AVRCP(Audio/Video Remote Control Profile):音视频远程控制协议定义了蓝牙设备和 audio/video控制功能通信的特点和过程,另用于远程控制音视频设备,底层传输基于 AVCTP(音视频控制传输协议)。 ➢该 Profile定义了AV/C数字命令控制集。命令和信息通过 AVCT…

虚拟机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…