GIS 数据在许多行业中主要用于制图和空间分析。GIS 数据的主要类型是栅格和矢量。如果您正在阅读本文,您可能不需要对 GIS 数据进行介绍,但下面将简要介绍一下。
栅格文件是具有定义分辨率的连续网格数据,通常存储为 .tiff、.jpeg、.bmp 或 .png。例如,以坐标系为地理参考的卫星图像就是栅格文件。
矢量文件可以是点、线或多边形特征。最常见的是,它们存储为 Shapefile,但也可以是 GeoJSON、KML、GML、TIGER 或嵌套在地理数据库 (GDB) 中。
由于文件格式结构和使用的数百个参考坐标系,GIS 数据本质上很复杂。例如,单个多边形 Shapefile 实际上是至少 (3) 个文件(.shp、.shx 和 .dbf)的集合,最多有 (13) 个其他相关文件类型存储各种元数据。
这些数据类型的复杂性需要在将数据存储在数据库管理系统 (DBMS) 中时进行特别考虑。最流行的开源 DBMS 之一是 PostgreSQL,它可以通过安装 PostGIS 扩展来存储 GIS 数据。
入门
首先,您必须在本地下载 PostgreSQL 或可以访问服务器上的实例。本文假设您具有 Postgres 和相关工具 pgAdmin 和 psql (Shell) 的一些经验。
如果您需要/想要参加 Postgres 速成课程,请点击此链接:https://www.postgresql.org/docs/9.4/tutorial-install.html。←引导您完成第一个数据库的下载和创建。
安装 PostGIS 扩展
从 Windows 开始菜单打开应用程序堆栈构建器。
选择您想要安装 PostGIS 的 PostgreSQL 版本。
单击下一步并展开空间扩展树并选择最新的 PostGIS 版本。
安装过程中会提示您输入各种安装参数,只需使用默认设置即可。
创建地理数据库
安装完成后,打开 psql (Shell) 并登录。确保您使用的是添加了 PostGIS 扩展的 Postgres 版本。
登录 psql
创建一个新的数据库,这里我称之为gis。您将看到 CREATE DATABASE 作为回调,确认已创建数据库。
postgres=# CREATE DATABASE gis;
CREATE DATABASE
为新数据库创建 PostGIS 扩展。
postgres=# CREATE EXTENSION postgis;
CREATE EXTENSION
此时,您有一个名为gis的新数据库,其中填充了 PostGIS 扩展属性。您可以在 pgAdmin 中打开数据库并直观地检查属性。
添加了许多允许进行专门的 GIS 查询的功能,最重要的是,添加了一个名为spatial_ref_sys的表。该表包含导入 GIS 数据时需要的所有 SRID(空间参考标识符)(稍后将显示)。
psql 响应显示添加 PostGIS 扩展后已将表添加到数据库
获取一些空间数据
创建并配置 GIS 数据库后,我们可以将 Shapefile 上传到其中。我在公共领域找到了一个 Shapefile,它是 FEMA 提供的科罗拉多州百年洪泛区(https://geo.colorado.edu/catalog/47540-5ca228ffd43267000b8c7448)。下载并将文件解压到单独的文件夹中。
如果不能通过上面连接下载,请使用:https://download.csdn.net/download/hefeng_aspnet/90502880
shp2pgsql 实用程序
PostGIS 安装时附带了一些实用程序。其中一个实用程序是shp2pgsql。此工具能够将 Shapefile 转换为 Postgres 可理解的 SQL 格式。它将被放置在C:/Program Files/PostgreSQL/14/bin/shp2pgsql.exe。
让我们使用此工具来转换我们的 Shapefile。第一步是找出 Shapefile 的参考坐标系。为此,使用文本编辑器打开包含在洪泛区下载中的 .prj 文件。
PROJCS[“NAD_1983_UTM_Zone_13N”,GEOGCS[“GCS_North_American_1983”,DATUM[“D_North_American_1983”,SPHEROID[“GRS_1980”,6378137.0,298.257222101]],PRIMEM[“Greenwich”,0.0],UNIT[“Degree”,0.0174532925199433]],PROJECTION[“Transverse_Mercator”],PARAMETER[“False_Easting”,500000.0],PARAMETER[“False_Northing”,0.0],PARAMETER[“Central_Meridian”,-105.0],PARAMETER[“Scale_Factor”,0.9996],PARAMETER[“Latitude_Of_Origin”,0.0],UNIT[“Meter”,1.0]]
不幸的是,这不包括 SRID;显示的信息存储在srtext中,它是我们新数据库中spatial_ref_sys表的一列。因此,最好的方法是使用 SQL 查询此表以找到最接近的匹配 SRID。
打开psql并连接到gis数据库。使用以下命令格式搜索spatial_ref_sys表:
SELECT srid, srtext FROM spatial_ref_sys WHERE srtext ILIKE ‘%NAD83 / UTM zone 13n%;’;
这样做可以告诉我们:
26913 | PROJCS[“NAD83 / UTM zone 13N”,GEOGCS[“NAD83”,DATUM[“North_American_Datum_1983”,SPHEROID[“GRS 1980”,6378137,298.257222101,AUTHORITY[“EPSG”,”7019"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[“EPSG”,”6269"]],PRIMEM[“Greenwich”,0,AUTHORITY[“EPSG”,”8901"]],UNIT[“degree”,0.0174532925199433,AUTHORITY[“EPSG”,”9122"]],AUTHORITY[“EPSG”,”4269"]],PROJECTION[“Transverse_Mercator”],PARAMETER[“latitude_of_origin”,0],PARAMETER[“central_meridian”,-105],PARAMETER[“scale_factor”,0.9996],PARAMETER[“false_easting”,500000],PARAMETER[“false_northing”,0],UNIT[“metre”,1,AUTHORITY[“EPSG”,”9001"]],AXIS[“Easting”,EAST],AXIS[“Northing”,NORTH],AUTHORITY[“EPSG”,”26913"]]
这告诉我们 SRID 是 26913。现在我们可以将 shapefile 导入到我们的数据库中。
打开命令提示符并进入包含shapefile库的文件夹。
cd custompath/Floodplain_Colorado_100yr_Effective_1_28_2016_X2
现在您需要指向 shp2pgsql,指定 SRID、要转换的文件以及生成的 sql 文件的名称。在下面的代码中,-D指定“转储格式”,这会加快进程,-I创建地理空间索引,-s之后是您定义我们找到的 SRID 的地方。
C:/”Program Files”/PostgreSQL/14/bin/shp2pgsql -D -I -s 26913 Floodplain_Colorado_100yr_Effective_1_28_2016.shp > Floodplain_Colorado_100yr_Effective_1_28_2016.sql
执行此代码后,您将看到一个新文件添加到shapefile目录中:
使用 shp2pgsql 创建的结果 .sql 文件
将转换后的 Shapefile 导入 PostgreSQL
使用命令行将文件导入到 postgres。系统将提示您输入 postgres 管理员密码。
psql -p 5433 -U postgres -d gis -f Floodplain_Colorado_100yr_Effective_1_28_2016.sql
将 Shapefile 添加到 Postgres 的输出
使用/dt我们可以确认该shapefile已作为新表添加到gis数据库中。
连接到 QGIS — 添加图层
本教程还假设您具有使用 QGIS 的经验,它是一款免费 GIS 解决方案,内置了许多非常先进的分析工具。
打开 QGIS,在浏览器面板中,您将看到 PostGIS 旁边有 PostgreSQL 图标。右键单击它以添加新连接。
从 QGIS 添加与 PostgreSQL 的新连接
现在添加适当的凭据并命名连接,这里我选择了GIS。
添加与 PostgreSQL 的新连接
一旦连接,您就会看到之前添加的数据库和shapefile。
PostgreSQL 连接后的浏览器树视图
您可以通过右键单击将 Shapefile 添加到项目中。系统将提示您从选项列表中选择一种转换方法。它会估计每种方法的误差幅度,这很方便确定选择哪种方法。
导入 SQLized Shapefile 的转换选项
转换后,将图层添加到底图上以供查看。
从新建的 PostGIS 数据库添加的科罗拉多州百年洪泛区图层视图
向 PostGIS 添加栅格文件
栅格文件可以类似地加载到 PostGIS 中,但使用不同的工具。所需的实用程序位于前面描述的同一个 bin 文件夹中,您猜对了,它叫做raster2pgsql。
首先下载一个栅格文件。我从公共领域下载了一个:https://www.naturalearthdata.com/downloads/50m-raster-data/50m-natural-earth-1/。在这个链接中,我下载了阴影浮雕和水栅格。
栅格文件是一个 .tif文件,它附带一个自述文件,其中说明其坐标参考系统是 WGS84,这是一种非常常用的坐标参考。我碰巧知道这个 4326 的 SRID,但如果需要,您可以像以前一样查询spatial_ref_sys表。
打开命令提示符并cd到.tif文件的位置。与之前类似,输入 raster2pgsql 的路径,然后输入以下格式的代码:
C:/”Program Files”/PostgreSQL/14/bin/raster2pgsql -I -C -F -s 4326 NE1_50M_SR_W.tif public.shaded_relief_ocean_basemap > shaded_relief_ocean_basemap.sql
以下是代码分解:
-I:在栅格表中创建空间索引
-F:创建包含文件名的列(适合管理)
-C:打开参考坐标系声明的约束(-s)
-s:后跟 SRID,将坐标系应用于栅格
public.shaded_relief_ocean_basemap:这是您在导入到 postgres 时要创建的 <schema>.<table>。因此,您看到我想要公共模式中的表,并有一个直观的名称
shaded_relief_ocean_basemap.sql:这是创建的 SQL 转储文件,将导入到 postgres
文件创建完成后,像前面一样上传到gis数据库。
psql -p 5433 -U postgres -d gis -f shaded_relief_ocean_basemap.sql
**请注意:如果未将 postgis_raster 添加为数据库的扩展,您将遇到问题。要检查它是否在 psql 中运行 \dx。您可以通过右键单击数据库树中的扩展来通过 pgAdmin 轻松添加它**
恭喜您,现在您拥有一个包含一个 Shapefile 和一个栅格文件的地理数据库,可以连接到 QGIS 或 ArcGIS。
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。