Postgis使用

article/2025/9/28 23:50:54

Postgis使用

一、安装与配置

先查看目前yum源中有哪些版本可用,并安装合适的版本

yum search postgis

安装Postgresql 10对应的版本PostGIS

yum install -y postgis24_10

二、创建GIS数据库

PostGIS是Postgresql的一个扩展,创建数据库并加载PostGIS扩展:

create database geo;
create extension postgis;

三、几何对象

几何对象输入

PostGIS支持很多几何类型:点、线、多边形、复合几何体等,并提供大量实用的相关函数。对于PostGIS而言,所有几何对象都有一个公共父类Geometry,所以在实际使用中,通常PostGIS的空间数据类型使用统一的Geometry类型,无论是点、折线还是多边形,都可以放入Geometry类型字段中

​ PostGIS支持多种空间对象创建方式,大体上可以分为几类:

文本格式(WKT,Well-Known-Text)
二进制格式(WKB,Well-Known-Binary)
GeoJSON等编码
返回几何类型的函数

注:所有PostGIS相关函数都是以st开头

例如创建几何点(1,2),可以通过以下四种方式,得到的结果都一样

SELECT 
'Point(1 2)'::GEOMETRY                                      AS wkt,
'0101000000000000000000F03F0000000000000040':: GEOMETRY     AS wkb,
st_geomfromgeojson('{"type":"Point","coordinates":[1,2]}')  AS geo_json,
ST_Point(1,2)                                               AS func;

在这里插入图片描述

几何对象存储

​ PostGIS的几何类型对Postgresql内建的几何类型使用了不同的存储方式。以点为例,使用内置的Point与ST_Point创建一个点,返回结果如下:

SELECT Point(1,2),ST_Point(1,2) 

在这里插入图片描述
Postgresql中的Point只是一个包含两个Double的结构体(16字节),但PostGIS的点类型ST_Point则采用了不同的存储方式(21字节),除了两个坐标分量,他还包括了一些额外元数据:例如几何对象的实际类型、参考系的ID等。

如果需要人类可读的格式,则可以用ST_AsText输出WKT

SELECT st_astext(ST_Point(1,2))

在这里插入图片描述

几何对象运算

(1)两点间距离(几何距离)

SELECT ST_Point(1,1)  <-> ST_Point(2,2)

在这里插入图片描述

注:上述方法只能用于几何距离计算,不能用于坐标距离计算。

(2)地理坐标距离计算

地理坐标距离计算需要引入地理坐标系(4326号坐标系,指代WGS84国际标准GPS坐标系),只有当两个点用同一坐标系时才能进行计算。

SELECT st_geomfromtext('POINT(116.321367 39.966956)',4326) :: geography <-> st_geomfromtext('POINT(116.315346 39.997398)',4326) :: geography  

计算出A(116.321367,39.966956),B(116.315346,39.997398)两点间的距离为3.4km

ST_GeomFromText(character-string[, srid]) 根据字符串表示构造几何

参数

在这里插入图片描述

SELECT st_geomfromtext('POINT(116.321367 39.966956)',4326)

在这里插入图片描述

st_length可以计算某条路(折线)的总长度

st_area可以计算出某个闭合区域的面积

四、应用场景

场景一

​ 给出一个中心点,找出该点周围一定距离 范围内所有符合条件的对象。例如,找出以用户为中心,周围1公里内所有的公交站,并按距离远近排序。

​ 假设用户正在A地铁站:(116.321367,39.966956),使用PostGIS计算距离

CREATE TABLE stations(name   TEXT,position  geography,
);
SELECT name,ST_Point(116.321367,39.966956)::geography <-> position::geography AS distance   FROM stations WHERE st_point(116.321367,39.966956)::geography <-> position::geography < 500 
ORDER BY st_point(116.321367,39.966956)::geography <-> position::geography;

场景二

​ 电子围栏:用点和距离画圆圈人是一种常见场景,另外一种场景是,判断一个点落在了哪些地理围栏中

​ 例如有车辆和用户的位置坐标,现在希望从坐标得到用户所处的城市(或者区域、商圈等),又比如共享单车的禁停区检测,无人机的禁飞区识别,都是这种场景。

--兴趣区域(AOI,Area of Interest)
CREATE TABLE aoi(name TEXT,bound GEOMETRY
)
--检测A地铁站中心点所属的商圈
SELECT name FROM aoi WHERE ST_Contains(bound,ST_Point(116.458855,39.909863));
--或
SELECT name FROM aoi WHERE ST_Within(ST_Point(116.458855,39.909863),bound);

ST_Contains与ST_Within介绍

添加链接描述

boolean ST_Contains(geometry A, geometry B);

如果geometry B完全在geometry A里面则返回TRUE

添加链接描述

boolean ST_Within(geometry A, geometry B);

如果geometry A完全在geometry B里面则返回TRUE

ST_Contains 和ST_Within是相反的,即 ST_Contains(A,B) = ST_Within(B,A).

SELECT st_contains(st_setsrid(st_geomfromtext('POLYGON ((113.49628347923993 34.82665078796983, 113.6050170152778 34.88282716965251, 113.6427533999493 34.815514563935054, 113.5744551359546 34.77978979669181, 113.49008246199834 34.79650279857806, 113.49628347923993 34.82665078796983))'),4326),st_setsrid(st_point(113.619469,34.823071), 4326))

在这里插入图片描述

SELECT st_within(st_setsrid(st_point(113.619469,34.823071), 4326),st_setsrid(st_geomfromtext('POLYGON ((113.49628347923993 34.82665078796983, 113.6050170152778 34.88282716965251, 113.6427533999493 34.815514563935054, 113.5744551359546 34.77978979669181, 113.49008246199834 34.79650279857806, 113.49628347923993 34.82665078796983))'),4326))

在这里插入图片描述

--locaation为地理坐标表,digital_railing为电子围栏区域表
select * from locaation c,digital_railing d 
where st_within(st_setsrid(st_point(c.lng,c.lat), 4326), d.geometry) and d.name = 'XXX'

参考书籍《Postgresql实战》


http://chatgpt.dhexx.cn/article/RQmw93BO.shtml

相关文章

PostGIS 路线规划

❤️通过SQL存储过程&#xff0c;利用PostGIS实现路线规划❤️ pgRouting扩展了PostgreSQL/PostGIS地理空间数据库&#xff0c;以提供地理空间路由功能。 文章目录 1、环境配置2、导入shp文件2.1、打开PostGis Shapefile插件2.2、连接数据库2.3、添加并导入矢量数据2.4、查看数…

postgis启动_PostGIS 快速入门(转)

PostGIS 是 PostgreSQL 关系数据库的空间操作扩展。它为 PostgreSQL 提供了存储、查询和修改空间关系的能力。本文中 ‘PostgreSQL’ 指代基本的关系数据库功能&#xff0c;而 ‘PostGIS’ 指代扩展的空间操作特性。 客户端&#xff0d;服务器构架 PostgreSQL 同众多数据库产品…

postgis 返回 geojson

GeoJSON 特征集合&#xff1a; {"type": "FeatureCollection","features": [{"type": "Feature","geometry": {"type": "Point","coordinates": [102.0, 0.5]},"properties&…

PostGIS 安装

安装 PostgreSQL 数据库 Windows 下载安装包 运行安装包即可 Linux 以 Ubuntu 为例, 其他版本参考官方下载页面 通过 APT 仓库安装 sudo sh -c echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d…

PostGIS安装

1首先安装PostgreSQL &#xff0c;安装完后 services.msc打开服务列表&#xff0c;找到postgresql-x64-14启动&#xff0c;如果启动不了&#xff0c;设置本地系统账户登录 2打开pgAdmin4,创建服务器 参数设置可以参考帮助文档 3安装postgis,下载地址 Index of /postgis/windows…

PostGIS 笔记

空间数据库 定义&#xff1a;存储、操作空间数据的数据库。 空间数据特点 空间数据类型是指点、线、多边形等形状&#xff1b;提供用于空间操作的高效处理的多维空间索引&#xff1b;提供用于查询空间属性和关系额空间函数。 发展历程 第1代 在传统的 GIS 实施中&#xff0c;所…

PostGIS

一、ArcGISPostGIS 打开ArcCatalog目录&#xff0c;双击添加数据库连接&#xff0c;进入数据库连接窗口。数据库类型选择PostgreSQL&#xff0c;输入实例&#xff08;安装PostgreSQL的服务器名称或IP地址&#xff09;、用户名、密码&#xff0c;以上信息无误&#xff0c;点击数…

PostGIS的安装与初步使用

想学习postgis推荐看我翻译的官方教程文档&#xff1a;https://blog.csdn.net/qq_35732147/article/details/85256640 目录 一、安装PostGIS 1.下载安装程序 2.安装PostgreSQL 二、创建空间数据库 1.打开pgAdmin 4 2.登录到服务器 3.创建空间数据库 三、导入空间数据 1.获取…

PostGIS(1):PostGIS概述

作为对象关系型数据库PostGreSQL的拓展模块&#xff0c;PostGIS可用于存储GIS数据&#xff0c;并提供了对基于GiST的R树索引支持、以及面向GIS对象的分析和处理相关的函数。 以下是PostGIS官网对其特征的介绍&#xff0c; &#xff08;1&#xff09; 先看一下百度对PostGIS的介…

PostGIS总结

PostGreSQL&#xff08;三&#xff09;PostGISPostGreSQL&#xff08;四&#xff09;PostGIS-空间数据存储PostGreSQL&#xff08;五&#xff09;PostGIS-常用函数PostGreSQL&#xff08;六&#xff09;PostGIS-空间连接和空间索引PostGreSQL&#xff08;七&#xff09;PostGIS…

postgis学习

以后估计会长期从事gis相关的工作&#xff0c;postgis作为一款功能比较强大的gis数据库还是需要好好学习一下的。虽然几何数据存储用任何一种类型的数据库都可以自行实现&#xff0c;但也仅仅只是存储&#xff0c;后续的坐标转换、空间分析等功能如果都要一一自己实现&#xff…

【笔试题】求最小公倍数 C++(两种方法)

题目 本题链接&#xff1a;求最小公倍数 正整数A和正整数B 的最小公倍数是指能被A和B整除的最小的正整数值&#xff0c;设计一个算法&#xff0c;求输入A和B的最小公倍数。 输入描述&#xff1a; 输出描述&#xff1a; 示例1&#xff1a; 解题思路一&#xff1a; 暴力破解 …

多个数求最小公倍数详解!

最小公倍数 既然想算最小公倍数&#xff0c;首先要清楚最小公倍数的求法&#xff0c;还有最大公约数的求法 最小公倍数*最大公约数两数乘积 有了公式&#xff0c;我们很清楚可以知道了&#xff0c;只要有最大公约数就可以求出最小公倍数&#xff0c;因为两数乘积肯定是已知的&a…

最大公约数(GCD) 与 最小公倍数(LCM)的 定义、关系、求法

最大公约数 与 最小公倍数 约数 和 倍数最大公约数最小公倍数 最大公约数与最小公倍数的关系求最大公约数、最小公倍数例一例二 约数 和 倍数 如果数 a a a能被数 b b b整除&#xff0c; a a a就叫做 b b b的倍数&#xff0c; b b b就叫做 a a a的约数。 约数和倍数都表示一个…

最大公约数和最小公倍数

一、求最大公因数的三种方法: 最大公因数定义: (最大公约数、最大公因子):指两个或多个整数共有约数中最大的一个。 最小公倍数定义: 两个或多个整数公有的倍数叫做它们的公倍数&#xff0c;其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。 ①辗转相除法&#x…

最大公约数和最小公倍数的关系

联系&#xff1a; 最大公约数&#xff1a; 指两个或多个整数共有的约数中最大的那个 最小公倍数&#xff1a; 指两个或多个整数共有的倍数中最小的那个 以两个整数为例&#xff1a; 最大公约数表示为&#xff1a;(a&#xff0c;b) 最小公倍数表示为&#xff1a;[a&#xff0…

公约数(也叫公因数)|公倍数 |小知识|Golang

一、最大公约数&#xff08;也叫公因数&#xff09; 两个数的 最大公约数 是能够被两个数整除的最大正整数。 举例&#xff1a; 3 和 6 的最大公约数是3。“6和3的最大公因数是3。 6的因数有1,2,3,6&#xff0c;3的因数有1,3。两个数的最大公约数是能够被两个数整除的最大整数…

线性代数学习笔记——第六十九讲——正交向量组与标准正交基

1. 正交向量组的定义 2. 正交的判定 3. 正交向量组必然线性无关&#xff0c;线性无关向量组未必是正交向量组 4. 正交向量组求解示例 5. 标准正交向量组的定义

线性空间标准正交基的构造——Schmidt正交化

证明: 两两正交的一组向量必然线性无关 线性空间的标准正交基定义 (定义摘自《矩阵论》&#xff0c;程云鹏&#xff0c;1999年第2版&#xff0c;p88) 下面的定理证明了欧式空间一定存在标准正交基&#xff0c;其证明过程可以看作把任意一组基化成标准正交基的算法&#xff0…

Schmidt正交化(正交规范化方法)

设有向量α1,α2...αn&#xff0c;则正交规范化方法为 ... 其中&#xff0c;括号内是指做内积运算&#xff0c;即((x1,x2,...xn),(y1,y2...yn))x1*y1x2*y2...xn*yx 然后&#xff0c;再将每个向量单位化、 即 最后得到的一系列γ组成的向量组就正交且均为单位向量