首页 > 数据库 >PostGIS 空间数据库入门

PostGIS 空间数据库入门

时间:2023-06-16 15:25:42浏览次数:68  
标签:入门 -- 数据库 PostGIS st 几何 空间 SELECT

一、简介

1、PostgreSQL 与 PostGIS关系

我们在开发中可能需要使用 GIS 的需求,尽管在PostgreSQL提供了上述几项支持空间数据的特性,但其提供的空间特性很难达到GIS的要求,主要表现在 :缺乏复杂的空间类型;没有提供空间分析;没有提供投影变换功能。为了使得 PostgreSQL 更好的提供空间信息服务,PostGIS应运而生。

PostGIS通过添加对空间类型、空间索引和空间函数这三个特性的支持,将PostgreSQL数据库管理系统转变为空间数据库。它建立在 PostgreSQL 之上。

2、PostGIS介绍

PostGIS 是一个空间数据库。,它是对象关系型数据库系统PostgreSQL的一个扩展,PostGIS支持所有的空间数据类型,包括:点(POINT)线(LINESTRING)面(POLYGON)多点(MULTIPOINT)多线(MULTILINESTRING)多面(MULTIPOLYGON) 和集合对象集 (GEOMETRYCOLLECTION) 等。

PostGIS提供如下空间信息服务功能:空间对象空间索引空间操作函数等。可以像普通数据库一样存储和操作空间对象。

二、空间数据类型

1、空间数据模型

开放地理空间联盟 (OGC) 开发了简单要素访问标准 (SFA),为地理空间数据提供模型。 它定义了几何的基本空间类型, 以及操作和转换几何值的操作 以执行空间分析任务。

PostGIS 将 OGC 几何模型实现为 PostgreSQL 数据类型几何类型(Geometry)地理类型(geography)

它们都包含了下面这些基本空间类型:

类型 含义
点(Point) 表示二维平面中的一个点,由 X 和 Y 坐标组成。
线(LineString) 表示由两个或多个点组成的线段。
多边形(Polygon) 表示由一个或多个线段组成的封闭区域。
多点(MultiPoint) 表示由多个点组成的集合。
多线(MultiLineString) 表示由多条线段组成的集合。
多边形集合(MultiPolygon) 表示由多个多边形组成的集合。
几何集合(GeometryCollection) 表示由多个几何对象组成的集合。

2、几何数据类型

OGC SFA 规范定义了两种格式来表示供外部使用的几何值 Well-Known Text (WKT)Well-Known Binary (WKB)

两种格式的展现出的结果不同:

  • WKT格式: point(1,1)
  • WKB格式:0101000000000000000000F03F000000000000F03F

两种格式可以使用函数相互转换


-- 输出结果:point(1 1)
SELECT st_astext('0101000000000000000000F03F000000000000F03F')

-- 输入结果:0101000020E6100000000000000000F03F000000000000F03F
-- 输出的值与上面不一样是因为使用了 4326 参考系统进行转换,默认为 0
SELECT st_geomfromtext('point(1 1)',4326)

PostGIS 定义了扩展的 EWKB 和 EWKT 格式。它们提供 3D(XYZ 和 XYM)和 4D (XYZM) 坐标支持并包括 SRID 信息。这些就先不介绍了。可以去官网看看 PostGIS 数据管理

3、地理数据类型

地理空间数据类型和几何空间数据类型是 PostGIS 中常用的两类空间数据类型,它们之间的主要区别在于坐标系的不同。

几何空间数据类型使用平面坐标系表示空间对象,适用于一般的二维空间分析和计算场景。而地理空间数据类型使用经纬度坐标系表示地球表面上的位置和空间对象,适用于地理空间分析和计算场景。不同坐标系的使用导致了两者在表示和计算空间对象时的差异。

4、元数据表

PostGIS 提供了两个表来跟踪和报告数据中可用的几何类型,spatial_ref_sysgeometry_columns

  • spatial_ref_sys 表定义了数据库所有的空间参考系统。
    我们常用的有坐标系又分为平面坐标系和地理坐标系、投影坐标系等等。
select * from spatial_ref_sys

image

  • geometry_columns 实际是一个视图,提供了所有存在几何属性对象的列表及基本信息。
SELECT * FROM geometry_columns

f_table_catalog, f_table_schema, f_table_name 分别表示数据库名、表名、列名

coord_dimensionsrid 分别定义几何的维度(2 维、3 维或 4 维)和空间参考系统标识符

type 表示列的几何类型

image

三、空间索引

我们使用普通数据库时常用B树索引,但是这对于空间数据作用不大。

空间索引分为:GISTBRINSP-GIST,我们最常用和最通用的就是GIST作为空间索引。

四、空间函数

PostGIS 遵循 SFA 标准,在空间函数前面加上“ST_”。 这旨在代表“空间和时间”, 但标准的时间部分从未开发过。 相反,它可以解释为“空间类型”。

下面记录一些常用的空间函数:

1、转换函数

在几何图形和外部数据格式之间进行转换的函数。

-- 将文本表示转换为几何类型
-- 结果:0101000000000000000000F03F000000000000F03F
SELECT st_geomfromtext('point(1 1)',0);

-- 将几何类型转换为文本表示
-- 结果:point(1 1)
SELECT st_astext('0101000000000000000000F03F000000000000F03F')

-- 将几何类型转为 GeoJson类型
-- 结果:{"type":"Point","coordinates":[1,1]}
SELECT st_asgeojson(st_geomfromtext('point(1 1)',4326))

-- 将几何类型从一个坐标系转换为另一个坐标系。
-- 结果:0101000020110F0000DB0B4ADA772DFB402B432E49D22DFB40
SELECT st_transform(st_geomfromtext('point(1 1)',4326), 3857)

2、检索函数

用于检索几何的属性和测量值的函数。

-- 查询几何的空间参考标识符号
-- 结果:4326
SELECT st_srid(st_geomfromtext('point(1 1)',4326))

-- 查询几何的类型
-- 结果:ST_Point
SELECT st_geometrytype(st_geomfromtext('point(1 1)',4326))

-- 返回几何的维数
-- 结果:2
SELECT st_ndims('0101000000000000000000F03F000000000000F03F')

-- 返回 x 和 y 坐标
SELECT st_x('0101000000000000000000F03F000000000000F03F')
SELECT st_y('0101000000000000000000F03F000000000000F03F')

-- 用于检查一个空间对象是否包含另一个空间对象
-- 结果:t (true)
SELECT ST_Intersects('POINT(0 0)'::geometry, 'LINESTRING ( 0 0, 0 2 )'::geometry);
-- 下面几个函数都是类似的用法
-- ST_Contains: 检查一个空间对象是否包含另一个空间对象。
-- ST_Intersects: 检查两个空间对象是否相交。
-- ST_Touches: 检查两个空间对象是否相邻。
-- ST_Equals: 检查两个空间对象是否相等。
-- ST_Disjoint: 检查两个空间对象是否不相交。

PostGIS中有很多的函数,我们使用时可以参照官网使用 PostGIS函数

标签:入门,--,数据库,PostGIS,st,几何,空间,SELECT
From: https://www.cnblogs.com/Snowclod/p/17484955.html

相关文章

  • 实验三 嵌入式SQL与数据库连接
    **实验三嵌入式SQL与数据库连接**一、实验要求掌握嵌入式SQL的使用方法,通过数据库连接技术连接DBMS,访问数据库并实现存储过程调用,完成简易数据库应用系统的模拟实现。二、实验目的·理解嵌入式SQL;·理解数据库连接技术;·掌握基于特定宿主语言的数据库连接与访问;·设计......
  • 一篇带你入门DDD实战
    DDD理论微服务和DDD的渊源软件架构模式的演进我们先来分析一下软件架构模式演进的三个阶段。第一阶段是单机架构:采用面向过程的设计方法,系统包括客户端UI层和数据库两层,采用C/S架构模式,整个系统围绕数据库驱动设计和开发,并且总是从设计数据库和字段开始。第二阶段是集中式架......
  • 前端新手学习入门路径推荐
    背景目的方便新手学习前端技术,整理了一些资源和教程帮助大家更好的入门。基础知识了解一遍有个印象即可,不懂暂时不必深究,在后续实践中会融会贯通。大家重点关注“训战结合”的部分,动手练习并解决问题进步最有效。 Vue学习顺序https://zhuanlan.zhihu.com/p/23134551起......
  • Apache Storm教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介ApacheStorm是一个分布式实时大数据处理系统。Storm设计用于在容错和水平可扩展方法中处理大量数据。它是一个流数据框架,具有最高的摄取率。虽然Storm是无状态的,它通过ApacheZooKeeper管理分布式环境和集群状态。它很简单,您可以并行地对实时数据执行各种操作。ApacheS......
  • Apache Spark教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介ApacheSpark是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UCBerkeleyAMPlab(加州大学伯克利分校的AMP实验室)所开源的类HadoopMapReduce的通用并行框架,Spark,拥有HadoopMapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存......
  • 4.深度学习(1) --神经网络编程入门
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • b GaussDB数据库开发设计
    一使用IAM账户登录二创建gaussDB1首先进入控制台-vpc-左手边选择访问限制-点击安全组-选择已创建好的,点击后面配置规则选择【入方向规则】,单击【添加规则】,具体如下:8000端口放开成功。2创建GaussDB数据库进入GaussDB(foropenGauss)服务,点击左侧的【服务列表】,选择其中【数据......
  • 系统架构设计师笔记第16期:数据库基本概念
    数据库技术的发展数据库技术在过去几十年中经历了显著的发展和演变。层次数据库和网状数据库:20世纪60年代和70年代初,层次数据库和网状数据库是主流的数据库模型。层次数据库使用树状结构组织数据,而网状数据库使用复杂的网络结构。这些数据库模型适用于特定的数据组织和查询需求,但缺......
  • MyBatis快速入门--环境搭建
     1.------------------------------CREATEdatabasemybatis;usemybatis;CREATETABLEtb_user(idINTPRIMARYKEYauto_increment,usernamevarchar(20),passwordvarchar(20),genderCHAR(1),addrvarchar(30));INSERTintotb_user(id,username,password,gen......
  • solr 模拟数据库like查询(不使用分词)
    IK分词个别拆分的不够完美,另外个别业务逻辑是需要替代数据库的like查询。所以本篇文章是介绍如何在solr中使用类似数据库的like查询。本片文章是介绍如何在solr中使用类似数据库的like操作。首先我们抛弃text_ik。IK分词,因为使用的是like操作,所以这块不能在使用分词了。我们需......