16.1. Lesson: PostGIS设置
设置PostGIS函数将允许您从PostgreSQL中访问空间函数。
The goal for this lesson: 安装空间函数并简要演示它们的效果。
备注
在本练习中,我们假定使用的是PostGIS版本2.1或更高版本。旧版本的安装和数据库配置有所不同,但本模块中的其余部分仍然有效。有关安装和数据库配置的帮助,请参考您的平台的文档。
16.1.1. 在Ubuntu下安装
Postgis很容易从APT安装。
$ sudo apt install postgresql
$ sudo apt install postgis
真的,就这么简单。
备注
将安装的确切版本取决于您使用的Ubuntu版本以及您配置的存储库。安装后,您可以通过发出 select PostGIS_full_version();
使用psql或其他工具进行查询。
要安装特定版本(例如,PostgreSQL Version 13和PostGIS3),您可以使用以下命令。
$ sudo apt install wget ca-certificates
$ sudo lsb_release -a
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
$ sudo apt-get update
$ sudo apt install postgis postgresql-13-postgis-3
16.1.2. 在Windows下安装
在Windows上的安装可以使用普通的Windows安装对话框从二进制程序包完成。
第一次访问 the download page 。那就跟着来 this guide 。
有关在Windows上安装的更多信息,请访问 PostGIS website 。
16.1.3. 在其他平台上安装
这个 PostGIS website download 提供了有关在其他平台(包括MacOS和其他Linux发行版)上安装的信息
16.1.4. 配置数据库以使用PostGIS
一旦安装了PostGIS,您将需要配置数据库以使用这些扩展。如果您已经安装了>2.0版的PostGIS,那么只需使用我们上一个练习中的Address数据库通过psql发出以下命令即可。
$ psql -d address -c "CREATE EXTENSION postgis;"
备注
根据您的版本,您可以在https://postgis.net/docs/postgis_administration.html#create_spatial_db.上找到有关如何在空间上启用数据库的更多说明
16.1.5. 查看已安装的PostGIS功能
PostGIS可以被认为是数据库内函数的集合,这些函数扩展了PostgreSQL的核心功能,使其能够处理空间数据。我们所说的‘处理’是指存储、检索、查询和操作。为了做到这一点,在数据库中安装了许多函数。
我们的PostgreSQL address
数据库现在可以在地理空间上使用,这要归功于PostGIS。我们将在接下来的几节中更深入地研究这一点,但让我们给您一个快速的小试。假设我们想要从文本创建一个点。首先,我们使用psql命令查找与point相关的函数。如果您尚未连接到 address
数据库,现在就这么做。然后运行:
\df *point*
这就是我们要找的命令: st_pointfromtext 。要浏览列表,请使用向下箭头,然后按 Q 退回到psqlShell。
尝试运行此命令:
select st_pointfromtext('POINT(1 1)');
结果:
st_pointfromtext
--------------------------------------------
0101000000000000000000F03F000000000000F03F
(1 row)
需要注意的三件事:
我们在位置1,1(假定为EPSG:4326)定义了一个点,使用 POINT(1 1) ,
我们运行了一条SQL语句,但不是针对任何表,而是针对从SQL提示符输入的数据,
由此产生的行没有多大意义。
得到的行为OGC格式,称为‘熟知二进制’(WKB)。我们将在下一节详细介绍这种格式。
要以文本形式返回结果,我们可以快速扫描函数列表以查找返回文本的内容:
\df *text
我们现在要查找的查询是 st_astext
。让我们将其与前面的查询结合起来:
select st_astext(st_pointfromtext('POINT(1 1)'));
结果:
st_astext
------------
POINT(1 1)
(1 row)
在这里,我们输入了字符串 POINT(1,1) ,将其转换为一个点,使用 st_pointfromtext() ,并将其转换回人类可读的形式 st_astext() ,这让我们回到了原来的弦上。
在我们真正深入到使用PostGIS的细节之前,还有最后一个示例:
select st_astext(st_buffer(st_pointfromtext('POINT(1 1)'),1.0));
那是怎么回事?它在我们的点周围创建了一个1度的缓冲区,并以文本形式返回结果。
16.1.6. 空间参考系
除了PostGIS功能外,该扩展还包含由欧洲石油调查小组(EPSG)定义的一组空间参考系(SRS)定义。它们在坐标参考系(CRS)转换等操作期间使用。
我们可以在数据库中检查这些SR定义,因为它们存储在正常的数据库表中。
首先,让我们通过在psql提示符下输入以下命令来查看表的模式:
\d spatial_ref_sys
结果应该是:
Table "public.spatial_ref_sys"
Column | Type | Modifiers
-----------+-------------------------+-----------
srid | integer | not null
auth_name | character varying(256) |
auth_srid | integer |
srtext | character varying(2048) |
proj4text | character varying(2048) |
Indexes:
"spatial_ref_sys_pkey" PRIMARY KEY, btree (srid)
您可以使用标准的SQL查询(正如我们从介绍部分中了解到的那样)来查看和操作该表-尽管除非您知道自己在做什么,否则更新或删除任何记录都不是一个好主意。
您可能感兴趣的一个SRID是EPSG:4326-使用WGS 84椭球体的地理/经度参考系。让我们来看看它:
select * from spatial_ref_sys where srid=4326;
结果:
srid | 4326
auth_name | EPSG
auth_srid | 4326
srtext | GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS
84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,
0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,
AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
proj4text | +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs
这个 srtext 是以熟知文本表示的投影定义(您可以从shapefile集合中的.prj文件中认出这一点)。
16.1.7. In Conclusion
现在,您已经在您的PostgreSQL副本中安装了PostGIS函数。有了这一点,您将能够利用PostGIS的广泛空间功能。
16.1.8. What's Next?
接下来,您将了解如何在数据库中表示空间要素。