PostGIS 基础教程

从零开始学习PostGIS,掌握空间数据库的核心概念、安装配置和基础操作

学习进度
25%

学习路径

按照推荐顺序学习,循序渐进掌握PostGIS基础

环境准备

安装PostgreSQL和PostGIS扩展

2

基础概念

了解空间数据和几何类型

3

空间查询

学习基础空间查询函数

4

实践练习

完成基础查询练习

1. PostGIS简介

PostGIS是PostgreSQL的空间数据库扩展,它为PostgreSQL添加了存储、查询和分析空间数据的能力。 通过PostGIS,您可以在数据库中直接处理地理信息系统(GIS)数据,无需额外的GIS软件。

核心特性

  • 支持OGC标准的空间数据类型
  • 丰富的空间函数库
  • 高性能空间索引
  • 与PostgreSQL完美集成

应用场景

  • 地图服务和导航
  • 城市规划和土地管理
  • 位置智能分析
  • 物流和配送优化

学习提示

PostGIS基于OGC(开放地理空间联盟)标准,学习时建议先了解基本的空间数据概念, 这样可以更好地理解后续的课程内容。

2. 安装配置

PostGIS的安装相对简单,主要有两种方式:通过包管理器安装或从源码编译。 下面介绍在不同操作系统上的安装方法。

Ubuntu/Debian

# 安装PostgreSQL
sudo apt update
sudo apt install postgresql postgresql-contrib

# 安装PostGIS
sudo apt install postgis postgresql-14-postgis-3

# 验证安装
sudo -u postgres psql -c "CREATE EXTENSION postgis;"

CentOS/RHEL

# 安装PostgreSQL
sudo yum install postgresql-server postgresql-contrib

# 初始化数据库
sudo postgresql-setup --initdb

# 安装PostGIS
sudo yum install postgis_14

# 启动服务
sudo systemctl start postgresql

macOS

# 使用Homebrew安装
brew install postgresql
brew install postgis

# 启动PostgreSQL
brew services start postgresql

# 创建数据库
createdb mydb
psql -d mydb -c "CREATE EXTENSION postgis;"

验证安装

安装完成后,可以通过以下命令验证PostGIS是否正确安装:

-- 查看PostGIS版本
SELECT PostGIS_Version();

-- 查看完整版本信息
SELECT PostGIS_Full_Version();

3. 数据类型

PostGIS扩展了PostgreSQL的数据类型系统,添加了专门用于存储空间数据的几何类型。 理解这些数据类型是使用PostGIS的基础。

几何类型

POINT

表示二维或三维空间中的单个点

-- 创建点几何
ST_MakePoint(116.4074, 39.9042)
ST_MakePoint(116.4074, 39.9042, 100)

LINESTRING

表示连接一系列点的线

-- 创建线几何
ST_MakeLine(ARRAY[
    ST_MakePoint(0, 0),
    ST_MakePoint(1, 1),
    ST_MakePoint(2, 0)
])

POLYGON

表示封闭的区域

-- 创建面几何
ST_MakePolygon(ST_MakeLine(ARRAY[
    ST_MakePoint(0, 0),
    ST_MakePoint(0, 1),
    ST_MakePoint(1, 1),
    ST_MakePoint(1, 0),
    ST_MakePoint(0, 0)
]))

集合类型

MULTIPOINT

多个点的集合

-- 创建多点几何
ST_MultiPoint(ARRAY[
    ST_MakePoint(0, 0),
    ST_MakePoint(1, 1),
    ST_MakePoint(2, 2)
])

MULTILINESTRING

多条线的集合

-- 创建多线几何
ST_MultiLineString(ARRAY[
    ST_MakeLine(ARRAY[
        ST_MakePoint(0, 0),
        ST_MakePoint(1, 1)
    ]),
    ST_MakeLine(ARRAY[
        ST_MakePoint(2, 2),
        ST_MakePoint(3, 3)
    ])
])

MULTIPOLYGON

多个面的集合

-- 创建多面几何
ST_MultiPolygon(ARRAY[
    ST_MakePolygon(ST_MakeLine(ARRAY[
        ST_MakePoint(0, 0),
        ST_MakePoint(0, 1),
        ST_MakePoint(1, 1),
        ST_MakePoint(1, 0),
        ST_MakePoint(0, 0)
    ]))
])

重要提醒

创建几何数据时必须指定SRID(空间参考系统标识符), 常用的SRID包括4326(WGS84坐标系)和3857(Web墨卡托投影)。

4. 基础查询

PostGIS提供了丰富的空间函数来处理几何数据。以下是一些最常用的基础查询函数。

空间关系函数

ST_Intersects

判断两个几何是否相交

SELECT ST_Intersects(
    ST_MakePoint(0, 0),
    ST_MakePoint(0, 0)
); -- 返回 true

ST_Contains

判断一个几何是否包含另一个

SELECT ST_Contains(
    ST_MakePolygon(ST_MakeLine(ARRAY[
        ST_MakePoint(0, 0),
        ST_MakePoint(0, 2),
        ST_MakePoint(2, 2),
        ST_MakePoint(2, 0),
        ST_MakePoint(0, 0)
    ])),
    ST_MakePoint(1, 1)
); -- 返回 true

ST_DWithin

判断两个几何是否在指定距离内

SELECT ST_DWithin(
    ST_MakePoint(0, 0),
    ST_MakePoint(1, 1),
    2
); -- 返回 true

几何运算函数

ST_Distance

计算两个几何之间的距离

SELECT ST_Distance(
    ST_MakePoint(0, 0),
    ST_MakePoint(3, 4)
); -- 返回 5.0

ST_Area

计算几何的面积

SELECT ST_Area(ST_MakePolygon(ST_MakeLine(ARRAY[
    ST_MakePoint(0, 0),
    ST_MakePoint(0, 2),
    ST_MakePoint(2, 2),
    ST_MakePoint(2, 0),
    ST_MakePoint(0, 0)
]))); -- 返回 4.0

ST_Buffer

创建几何的缓冲区

SELECT ST_Buffer(
    ST_MakePoint(0, 0),
    1
); -- 返回半径为1的圆

5. 实践练习

通过实际操作来巩固所学知识。以下是一些基础练习,帮助您熟悉PostGIS的基本操作。

练习:创建空间数据表

创建一个包含城市信息的表,包括城市名称、位置和人口。

SQL代码

查询结果

点击"执行查询"查看结果

挑战1:缓冲区分析

为每个城市创建一个50公里的缓冲区,找出缓冲区重叠的区域

挑战2:人口密度

计算每个城市100公里范围内的人口总数和平均密度

挑战3:最优选址

找到一个位置,使其到三个城市的总距离最小