PostGIS简介与安装

Dive into business data optimization and best practices.
Post Reply
taniya12
Posts: 130
Joined: Thu May 22, 2025 6:06 am

PostGIS简介与安装

Post by taniya12 »

PostGIS 是 PostgreSQL 数据库的一个强大的空间扩展,它将 PostgreSQL 从一个普通的关系型数据库转变为一个功能完备的空间数据库。凭借其对 OGC (Open Geospatial Consortium) 标准的全面支持和丰富的空间分析函数,PostGIS 已成为开源 GIS 领域的基石,广泛应用于WebGIS、地理空间大数据和各种空间分析场景。

1. PostGIS 核心功能与优势
PostGIS 不仅仅是存储空间数据,它提供了一整套强大的空间能力。

空间数据类型: 支持所有标准的 OGC 空间数据类型,包括 Point(点)、LineString(线)、Polygon(多边形)、MultiPoint、MultiLineString、MultiPolygon 以及GeometryCollection(几何集合)。
空间函数: 提供了数百个空间函数,可用于:
空间关系查询: 例如 $\text{ST_Contains()}$ (包含)、$\text{ST_Intersects()}$ (相交)、$\text{ST_Distance()}$ (距离)、$\text{ST_Within()}$ (在...之内)。
空间操作/分析: 例如 $\text{ST_Buffer()}$ (缓冲区)、$\text{ST_Union()}$ (合并)、$\text{ST_Transform()}$ (坐标系转换)、$\text{ST_Area()}$ (面积)、$\text{ST_Length()}$ (长度)。
几何创建与转换: 从文本(WKT/WKB)创建几何、几何的格式转换。
空间索引: 支持GiST (Generalized Search Tree) 索引,这是 PostGIS 高效空间查询的关键。GiST 索引能够快速定位空间对象,显著提高查询性能。
坐标参考系统 (CRS) 支持: 内置了大量的 CRS 定义,并通过 $\text{ST_Transf 特殊数据库 orm()}$ 函数实现不同 CRS 之间的精确转换。
优势:
OGC 标准兼容: 确保了数据的互操作性。
功能强大: 几乎涵盖了所有主流的空间分析需求。
性能优异: 在空间索引和函数优化方面表现出色。
开源免费: 降低了使用成本,拥有活跃的社区支持。
易于集成: 与各种 GIS 软件(如 QGIS、ArcGIS)、编程语言库(如 Python 的 GeoAlchemy、R 的 sf)和 WebGIS 框架无缝集成。
2. PostGIS 安装步骤(以 Ubuntu 为例)
安装 PostGIS 通常涉及安装 PostgreSQL 和PostGIS 扩展包。

1. 安装 PostgreSQL:
Bash

sudo apt update
sudo apt install postgresql postgresql-contrib
2. 安装 PostGIS 扩展包:
Bash

sudo apt install postgis postgresql-$(pg_config --version | awk '{print $NF}' | cut -d'.' -f1-2)-postgis-3 --fix-missing
# 确保安装与PostgreSQL版本对应的PostGIS包
# 例如,如果PostgreSQL版本是16,则安装 postgresql-16-postgis-3
3. 创建数据库并启用 PostGIS 扩展:
切换到 PostgreSQL 用户:sudo -i -u postgres
进入 PostgreSQL 命令行:psql
创建新的数据库(例如 mydb):CREATE DATABASE mydb;
连接到新创建的数据库:\c mydb
启用 PostGIS 扩展:CREATE EXTENSION postgis;
验证 PostGIS 是否安装成功:SELECT PostGIS_Full_Version();
退出 PostgreSQL 命令行:\q
3. 简单使用示例
启用 PostGIS 后,就可以在数据库中存储和操作空间数据了。

创建包含几何列的表:
SQL

CREATE TABLE cities (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
population INT,
geom GEOMETRY(Point, 4326) -- 4326 是 WGS84 经纬度坐标系 SRID
);
插入空间数据:
SQL

INSERT INTO cities (name, population, geom) VALUES
('New York', 8400000, ST_SetSRID(ST_MakePoint(-74.006, 40.7128), 4326)),
('London', 8900000, ST_SetSRID(ST_MakePoint(-0.1278, 51.5074), 4326));
执行空间查询:
SQL

-- 查询距离纽约市100公里范围内的城市
SELECT name FROM cities WHERE ST_DWithin(geom, (SELECT geom FROM cities WHERE name = 'New York'), 100000); -- 距离单位是米
PostGIS 为 PostgreSQL 注入了强大的地理空间能力,使其成为处理空间数据的理想选择。
Post Reply