PostgreSQL / PostGIS:创建地理要素

PostGIS详细教程可以参考官方文档:https://postgis.net/workshops/zh_Hans/postgis-intro/,并且官方文档提供了练习数据、教程、PPT版本教程。我这里参考QGIS文档中关于PostGIS的教程进行学习。

PostGIS 可以被认为是一组数据库内函数的集合,这些函数扩展了 PostgreSQL 的核心功能,以便它可以存储、检索、查询和操作空间数据。我们可以在psql中使用\df *point*查询与point有关的函数,使用\dT+ *Point*查看点数据类型。

除了PostGIS函数外,PostGIS扩展还EPSG定义的空间参考系(SRS)定义集合。这些在坐标参考系(CRS)转换等操作中使用。这些SRS被定义在spatial_ref_sys表中,可以查看该表的架构:\d spatial_ref_sys;还可以使用SELECT语句来查看特定的EPSG,例如查询常用的WGS 84坐标系。

SELECT * FROM spatial_ref_sys Where srid=4326; 

SFS模型

如何在数据库中存储和表示地理要素,可以使用开放地理空间联盟 (OGC)标准接口:Simple Feature for SQL (SFS) Model,也就是SFS模型。SFS模型是一种以非拓扑方式在数据库中存储地理空间数据方法,并定义了访问、操作和构造数据的函数,用于在SQL数据库中处理简单的空间特征数据。总的来说,SFS包括两部分内容,第一部分是描述简单要素的通用模型,定义了几何对象的基本类型,如点、线、面等;第二部分是描述第一部分模型在SQL中的实现,定义了空间SQL语句中的操作,如AsTextIntersects等。

除此之外,OGC还定义了其他多种标准接口:WMS(Web Map Service)、WFS(Web Feature Service)、WCS(Web Coverage Service)、WMTS(Web Map Tile Service)等。

(1)添加 geometry 字段

首先,修改完善之前创建的streets表和people表:

# 先完善streets表
UPDATE streets SET name='High street' WHERE id=1;
INSERT INTO streets(name) VALUES ('Main Road');
INSERT INTO streets(name) VALUES ('Low Street');
# 完善people表
insert into people (name, house_no, street_id, phone_no)values ('Joe Bloggs',3,2,'072 887 23 45');
insert into people (name,house_no, street_id, phone_no)values ('Jane Smith',55,3,'072 837 33 35');
insert into people (name,house_no, street_id, phone_no)values ('Roger Jones',33,1,'072 832 31 38');
insert into people (name,house_no, street_id, phone_no)values ('Sally Norman',83,1,'072 932 31 32'); 

接下来,为数据库pglearn添加postgis拓展:CREATE EXTENSION postgis;,然后向 people 表添加一个 point 字段:

ALTER TABLE people ADD COLUMN geom geometry;
(2)根据几何类型添加约束

geometry 字段类型并没有隐式地指定字段的几何类型,因此添加一个约束,指定几何类型只接受point类型或 null 值,这里的约束'POINT'要注意大小写,小写可能导致后续插入数据失败。

ALTER TABLE peopleADD CONSTRAINT people_geom_point_chkCHECK(GeomeTryType(geom)='POINT'::textOR geom IS NULL);
# 删除约束
ALTER TABLE 表名
DROP CONSTRAINT 约束名;
(3)处理geometry_columns表

geometry_columns 表是 PostGIS 扩展的一部分,用于存储空间数据的元信息,这个表记录了每个空间表的详细信息,包括表名、列名、坐标系等。首先查看这个表,发现表里面已经具有了people这个表的相关信息,表中的coord_dimension等于2,表示X和Y两个纬度,但坐标系是0。

 select * from geometry_columns;

因此,修改坐标系为WGS84,我在这里使用UpdateGeometrySRID 函数(表在 public 模式中,可以省略了'public'),显示query string argument of EXECUTE is null,但是表中明明有这个字段。因此,我又使用了原生SQL语句修改,然后修改成功了。我认为可能是因为存在多个geometry_columns 文件,所以使用UpdateGeometrySRID 函数查询时没有查询到正确的表。

SELECT UpdateGeometrySRID('people', 'geom', 4326);ALTER TABLE people
ALTER COLUMN geom TYPE geometry(Point, 4326)
USING ST_SetSRID(geom,4326);
(4)添加几何信息

使用 SQL 语句将几何记录添加到people表中,要注意ST_GeomFromText函数中不要出现多余的空格和符号等。

insert into people (name,house_no, street_id, phone_no, geom)values ('Fault Towers', 34, 3, '072 812 31 28',ST_GeomFromText('POINT(33 -33)', 4326));

添加点后,可以使用QGIS连接到数据库查看点的位置。

(5)创建线

在 streets 表中插入一个 LINESTRING;创建多边形相似,需要将参数改为 POLYGON

 sudo -u postgres psql\c pglearn# 添加列ALTER TABLE streets ADD COLUMN geom geometry;# 添加约束ALTER TABLE streets                         ADD CONSTRAINT streets_geom_line_chkCHECK(GeomeTryType(geom)='LINESTRING'::textOR geom IS NULL);# 修改约束的投影ALTER TABLE streetsALTER COLUMN geom TYPE geometry(LINESTRING, 4326)USING ST_SetSRID(geom,4326);#添加几何信息UPDATE streetsSET geom = ST_LineFromText('LINESTRING(20 -33,21 -34,24 -33)',4326)WHERE streets.id=2;
(6)QGIS加载PostGIS图层

在QGIS中添加PostGIS图层,在图层–添加图层–添加PostGIS图层,打开添加工具。

接下来新建连接,并输入主机IP、测试连接输入用户名和密码。

连接后,便可以看到点图层,双击便可以加载到QGIS中。

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

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

相关文章

Spring Boot 2 快速教程:WebFlux优缺点及性能分析(四)

WebFlux优缺点 【来源DeepSeek】 Spring WebFlux 是 Spring 框架提供的响应式编程模型,旨在支持非阻塞、异步和高并发的应用场景。其优缺点如下: 优点 高并发与低资源消耗 非阻塞 I/O:基于事件循环模型(如 Netty)&am…

C语言按位取反【~】详解,含原码反码补码的0基础讲解【原码反码补码严格意义上来说属于计算机组成原理的范畴,不过这也是学好编程初级阶段的必修课】

目录 概述【适合0基础看的简要描述】: 上述加粗下划线的内容提取版: 从上述概述中提取的核心知识点,需背诵: 整数【包含整数,负整数和0】的原码反码补码相互转换的过程图示: 过程详细刨析:…

专门记录台式电脑常见问题

1、蓝屏死机,检查内存硬盘和cpu 2、拆内存条,用橡皮擦金手指 3、放主板静电,扣主板电池 4、系统时间不正确,主板电池没电 5、开机键坏了 6、电脑主机的风扇转,正常通电运行,但显示器没信号。看键盘的num键&…

GB/T 44721-2024 与 L3 自动驾驶:自动驾驶新时代的基石与指引

1.前言 在智能网联汽车飞速发展的当下,自动驾驶技术成为了行业变革的核心驱动力。从最初的辅助驾驶功能,到如今不断迈向高度自动化的征程,每一步都凝聚着技术的创新与突破。而在这一进程中,标准的制定与完善对于自动驾驶技术的规…

[Python人工智能] 四十九.PyTorch入门 (4)利用基础模块构建神经网络并实现分类预测

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前文讲解PyTorch构建回归神经网络。这篇文章将介绍如何利用PyTorch构建神经网络实现分类预测,其是使用基础模块构建。前面我们的Python人工智能主要以TensorFlow和Keras为主,而现在最主流的深度学习框…

Unity扩展编辑器使用整理(一)

准备工作 在Unity工程中新建Editor文件夹存放编辑器脚本, Unity中其他的特殊文件夹可以参考官方文档链接,如下: Unity - 手册:保留文件夹名称参考 (unity3d.com) 一、菜单栏扩展 1.增加顶部菜单栏选项 使用MenuItem&#xff…

网络爬虫js逆向之某音乐平台案例

【注意!!!】 前言: - 本章主要讲解某音乐平台的js逆向知识 - 使用关键字搜定位加密入口 - 通过多篇文章【文字案例】的形式系统化进行描述 - 本文章全文进行了脱敏处理 - 详细代码不进行展示,需要则私聊作者 爬虫js逆向…

腾讯云 TI 平台部署与调用DeepSeek-R1大模型的实战指南

今天我们将继续探讨如何部署一个私有化的 DeepSeek-R1 大模型,具体的部署过程我们将利用腾讯云的 TI 平台进行操作。当前,腾讯云 TI 平台为用户提供了免费体验的满血版 DeepSeek-R1 大模型,同时该平台还提供了开放的 API 接口服务&#xff0c…

Python自动化测试selenium指定截图文件名方法

这篇文章主要介绍了Python自动化测试selenium指定截图文件名方法,Selenium 支持 Web 浏览器的自动化,它提供一套测试函数,用于支持 Web 自动化测试,下文基于python实现指定截图文件名方法,需要的小伙伴可以参考一下 前…

Gurobi基础语法之 addConstr, addConstrs, addQConstr, addMQConstr

在新版本的 Gurobi 中,向 addConstr 这个方法中传入一个 TempConstr 对象,在模型中就会根据这个对象生成一个约束。更重要的是:TempConstr 对象可以传给所有addConstr系列方法,所以下面先介绍 TempConstr 对象 TempConstr TempC…

Django框架丨从零开始的Django入门学习

Django 是一个用于构建 Web 应用程序的高级 Python Web 框架,Django是一个高度模块化的框架,使用 Django,只要很少的代码,Python 的程序开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能…

Redis --- 秒杀优化方案(阻塞队列+基于Stream流的消息队列)

下面是我们的秒杀流程: 对于正常的秒杀处理,我们需要多次查询数据库,会给数据库造成相当大的压力,这个时候我们需要加入缓存,进而缓解数据库压力。 在上面的图示中,我们可以将一条流水线的任务拆成两条流水…

开源AI智能名片2 + 1链动模式S2B2C商城小程序:内容价值创造与传播新引擎

摘要:本文聚焦于信息爆炸时代下,内容价值的创造与传播。随着用户角色的转变,其在内容生产与传播中的价值日益凸显。同时,深入探讨开源AI智能名片2 1链动模式S2B2C商城小程序这一创新商业模式,如何借助用户创造内容并传…

游戏引擎 Unity - Unity 打开项目、Unity Editor 添加简体中文语言包模块、Unity 项目设置为简体中文

Unity Unity 首次发布于 2005 年,属于 Unity Technologies Unity 使用的开发技术有:C# Unity 的适用平台:PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域:开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…

AllData数据中台核心菜单十二:数据同步平台

🔥🔥 AllData大数据产品是可定义数据中台,以数据平台为底座,以数据中台为桥梁,以机器学习平台为中层框架,以大模型应用为上游产品,提供全链路数字化解决方案。 ✨奥零数据科技官网:…

备考蓝桥杯嵌入式4:使用LCD显示我们捕捉的PWM波

上一篇博客我们提到了定时器产生PWM波,现在,我们尝试的想要捕获我们的PWM波,测量它的频率,我们应该怎么做呢?答案还是回到我们的定时器上。 我们知道,定时器是一个高级的秒表(参考笔者的比喻&a…

数字人|通过语音和图片来创建高质量的视频

简介 arXiv上的计算机视觉领域论文: AniPortrait: Audio-Driven Synthesis of Photorealistic Portrait Animation AniPortrait:照片级真实感肖像动画的音频驱动合成 核心内容围绕一种新的人像动画合成框架展开。 研究内容 提出 AniPortrait 框架&a…

stm32点灯 GPIO的输出模式

目录 1.选择RCC时钟 2.SYS 选择调试模式 SW 3.GPIO 配置 4.时钟树配置( 默认不变)HSI 高速内部时钟8Mhz 5.项目配置 6.代码 延时1s循环LED亮灭 1.选择RCC时钟 2.SYS 选择调试模式 SW 3.GPIO 配置 4.时钟树配置( 默认不变&#xff09…

OpenEuler学习笔记(十六):搭建postgresql高可用数据库环境

以下是在OpenEuler系统上搭建PostgreSQL高可用数据环境的一般步骤,通常可以使用流复制(Streaming Replication)或基于Patroni等工具来实现高可用,以下以流复制为例: 安装PostgreSQL 配置软件源:可以使用O…

Sentinel的安装和做限流的使用

一、安装 Release v1.8.3 alibaba/Sentinel GitHubA powerful flow control component enabling reliability, resilience and monitoring for microservices. (面向云原生微服务的高可用流控防护组件) - Release v1.8.3 alibaba/Sentinelhttps://github.com/alibaba/Senti…