十月 22, 2024
摘要:在本教程中,您将学习 PostGIS 的一些基础用法。
目录
介绍
PostGIS 是 PostgreSQL 最强大的扩展之一,它可以将数据库转换为 GIS(地理信息系统)。
在本教程中,我们加载了 2020 年纽约市人口普查数据的数据包。如果您想更深入地了解,此数据也是 PostGIS.net 教程的一部分。
本教程包含相当多的数据,加载需要一些时间,因此请耐心等待。
查找单点
SELECT name, ST_AsText(geom)
FROM nyc_subway_stations
LIMIT 10;
计算面积
以平方米为单位
SELECT ST_Area(geom)
FROM nyc_neighborhoods
WHERE name = 'West Village';
计算长度
SELECT ST_Length(geom)
FROM nyc_streets
WHERE name = 'Columbus Cir';
纽约市的街道长度,按类型汇总是多少?
SELECT type, Sum(ST_Length(geom)) AS length
FROM nyc_streets
GROUP BY type
ORDER BY length DESC;
空间参考标识符 (SRID)
在转换坐标数据(比如使用ST_GeomFromText()
)时,需要一种从纬度/经度转换为内部表示的标准化方法。PostGIS 在安装时会附带一个 spatial_ref_sys
空间参考表,其中包含最常见的、在 GIS 产品中标准化的空间参考。在本例中,我们使用 26918
的 id,它是以北美为中心的投影的常用投影。
从一个点外推
找到该点
SELECT name, ST_AsText(geom)
FROM nyc_subway_stations
WHERE name = 'Broad St';
name | st_astext
----------+--------------------------------------------
Broad St | POINT(583571.9059213118 4506714.341192182)
(1 row)
查找该点的市区和行政区名称。
SELECT name, boroname
FROM nyc_neighborhoods
WHERE ST_Intersects(geom, ST_GeomFromText('POINT(583571 4506714)',26918));
空间联接
SELECT
subways.name AS subway_name,
neighborhoods.name AS neighborhood_name,
neighborhoods.boroname AS borough
FROM nyc_neighborhoods AS neighborhoods
JOIN nyc_subway_stations AS subways
ON ST_Contains(neighborhoods.geom, subways.geom)
WHERE subways.name = 'Broad St';
距离
从一个点到另一个点
SELECT ST_Distance(a.geom, b.geom)
FROM nyc_streets a, nyc_streets b
WHERE a.name = 'Columbus Cir'
AND b.name = 'Atlantic Commons';
或者通过距离找到附近的东西。例如,距离 Broad Street 车站 10 米的街道(距某个点的距离)。
SELECT name
FROM nyc_streets
WHERE ST_DWithin(
geom,
ST_GeomFromText('POINT(583571 4506714)', 26918),
10
);
想要进一步测试 QGIS 或更多 postgis 查询,请参阅 使用 PostGIS 进行基础的地理空间数据查询。