一、PostGIS简介
1、PostGIS介绍
PostGIS是一个空间数据库,空间数据库像存储和操作数据库中其他任何对象一样去存储和操作空间对象。
空间数据与数据库关联起来的三个要素:数据类型、索引和函数。
- 空间数据类型:用于指定图形为点(point)、线(line)和面(polygon)
- 多维度空间索引:被用于进行空间操作的高效处理(注意是多维度哦,而不是只有针对二维空间数据的索引)
- 空间函数:构建于SQL语言中,用于进行空间属性和空间关系的查询
空间数据类型、空间索引和空间函数组合在一起,提供了灵活的结构用于空间数据库的性能优化和分析。
空间数据库将空间数据和对象关系数据库(Object Relational database)完全集成在一起。实现从以GIS为中心向以数据库为中心的转变。
PostGIS通过向PostgreSQL添加对空间数据类型、空间索引和空间函数的支持,将PostgreSQL数据库管理系统转换为空间数据库。因为PostGIS是建立在PostgreSQL之上的,所以PostGIS自动继承了重要的"企业级"特性以及开放源代码的标准。
参考文章:PostGIS教程一:PostGIS介绍:https://zhuanlan.zhihu.com/p/62034688
2、安装 PostGIS的目的
因为空间数据具有空间位置、空间关系、分类编码、海量数据等特征,所以一般的数据库管理系统无法储存空间数据,如PostgreSQL。
为了达到储存空间数据这个目的,就需要将普通数据库转变为空间数据库。那么具体如何解决这个问题呢?
“关系型数据库+空间数据引擎”
通常是近年来由GIS厂商研发的一种中间件解决方案。用户将自己的空间数据交给独立于数据库之外的空间数据引擎,由空间数据引擎来组织空间数据在关系型数据库中的存储。当用户需要访问数据的时候,再通知空间数据引擎,由引擎从关系型数据库中取出数据,并转化为客户可以使用的方式。
而 PostGIS则在其中为空间数据引擎提供支持。它为PostgreSQL提供对空间数据类型、空间索引和空间函数等的空间信息服务,将PostgreSQL转变为可以储存空间数据的数据库。
简单来说,PostGIS仅仅只是PostgreSQL的一个插件,但是它将PostgreSQL变成了一个强大的空间数据库!PostGIS可以看作为空间数据进出该容器的转换通道,而关系型数据 PostgreSQL是存放空间数据的容器。
二、安装PostGIS
我们安装好 PostgreSQL数据库之后。下面为 PostgreSQL安装 PostGIS扩展模块。
1、PostGIS安装
PostGIS下载:http://download.osgeo.org/postgis/windows/
根据自己安装的 PostgreSQL版本来选择,因为本人安装的 PostgreSQL14,所以下面是对应 PostgreSQL14的window64位的安装包。
(1)双击安装包。
安装时我们勾选Create spatial database。表示创建一个空间数据库(postgis_34_sample),后面你不用时也可以删除它。
(2)选择安装路径时一定要保证与 PostgreSQL的安装路径保持一致
(3)需要验证 PostgreSQL的用户名和密码
(4)其他就一路next即可,安装成功之后打开pgAdmin查看数据库建立并连接成功。
这里我们就看到创建的 postgis_34_sample空间数据库。
2、数据库添加扩展
给指定的数据库添加扩展时执行下面语句。
CREATE EXTENSION postgis;
我们创建一个 test_gis数据库,并给它添加 PostGIS扩展,执行上面语句。执行成功之后,public中的表会多一个 spatial_ref_sys表(不要删除)。
3、验证
执行下面测试语句不报错即可。
SELECT st_asText(st_geomfromtext('POINT(114 50)', 4326));SELECT ST_SetSRID(ST_Point(-87.71,43.741), 4326), ST_GeomFromText('POINT(-87.71 43.741)', 4326);
三、常用的空间数据函数
PostGIS 提供了丰富的空间数据函数,用于存储、分析和处理空间数据。
以下是一些常用的空间数据函数以及它们的作用:
1、几何对象创建函数:
- ST_GeomFromText(wkt, srid):从 Well-Known Text (WKT) 格式的文本创建几何对象。可以选择性地指定坐标系标识。
- ST_GeomFromEWKT(ewkt):从扩展的 Well-Known Text (EWKT) 格式的文本创建几何对象,包括坐标系信息。
- ST_Point(x, y):创建一个点几何对象。
- ST_LineString(points):创建一个线几何对象。
- ST_Polygon(rings):创建一个多边形几何对象。
2、几何对象检查函数:
- ST_IsValid(geometry):检查几何对象是否有效。
- ST_IsEmpty(geometry):检查几何对象是否为空。
- ST_GeometryType(geometry):返回几何对象的类型。
3、几何对象转换函数:
- ST_AsText(geometry):将几何对象转换为 Well-Known Text (WKT) 格式的文本。
- ST_AsEWKT(geometry):将几何对象转换为扩展的 Well-Known Text (EWKT) 格式的文本。
- ST_SetSRID(geometry, srid):设置几何对象的坐标系标识。
4、空间关系函数:
- ST_Intersects(geom1, geom2):检查两个几何对象是否相交。
- ST_Contains(geom1, geom2):检查一个几何对象是否包含另一个几何对象。
- ST_Distance(geom1, geom2):计算两个几何对象之间的距离。
5、空间分析函数:
- ST_Buffer(geometry, distance):对几何对象进行缓冲区分析。
- ST_Intersection(geom1, geom2):计算两个几何对象的交集。
- ST_Union(geom1, geom2):计算两个几何对象的并集。
6、几何对象编辑函数:
- ST_Transform(geometry, srid):将几何对象转换到指定的坐标系。
- ST_Simplify(geometry, tolerance):对几何对象进行简化处理。
- ST_Centroid(geometry):计算几何对象的质心。
7、几何对象测量函数:
- ST_Area(geometry):计算几何对象的面积。
- ST_Length(geometry):计算几何对象的长度。
- ST_Perimeter(geometry):计算几何对象的周长。
8、几何对象索引函数:
- ST_GeoHash(geometry):计算几何对象的 GeoHash 值。
- ST_MakeEnvelope(minx, miny, maxx, maxy, srid):创建一个表示矩形范围的几何对象。
9、几何对象集合函数:
- ST_Collect(geometry1, geometry2):将多个几何对象合并为一个几何对象集合。
- ST_Extent(geometry):计算几何对象的外接矩形范围。
10、几何对象输出函数:
- ST_AsGeoJSON(geometry):将几何对象转换为 GeoJSON 格式的文本。
- ST_AsKML(geometry):将几何对象转换为 KML 格式的文本。
参考文章:
- Postgis 图文安装详细教程 (Windows):https://blog.csdn.net/LY1201A/article/details/107080664
– 求知若饥,虚心若愚。