PostGIS
PostGIS是通过向PostgreSQL添加对空间数据类型、空间索引和空间函数的支持,将PostgreSQL数据库管理系统转换为空间数据库。
简单理解来说PostGIS是PostgreSQL的一个插件,能够将PostgreSQL变为强大的空间数据库。
PostGIS0.1于2001年5月发布,具有空间对象存储、空间索引和一些空间函数,它是一个适合存储和检索的数据库,但不适合分析。
随着GOC的"Simple Features for SQL"(SFSQL)规范提供了空间函数规范和”Geometry Engine,Open Source“(GEOS)对SFSQL规范提供了必要的算法,在PostGIS0.8版本中提供了对SFSQL的完整支持。
早期的空间数据存储,会有一大部分开销花在对元数据存储上,为减少这样现象,PostGIS1.0中采用轻量级的描述。后续中PostGIS版本不断的迭代,其在功能和性能上也越发的丰富。
参考:
https://zhuanlan.zhihu.com/p/62034688
PostGIS安装
PostgreSQL安装
由于PostGIS是建立在PostgreSQL之上,因此需要先安装PostgreSQL。
PostgreSQL可在:
https://www.enterprisedb.com/downloads/postgres-postgresql-downloads
下载对应的版本,例如9.6。
安装过程中,所有设置都使用默认设置,只是需要设置超级用户postgres的密码。
PostGIS安装
Winodws环境
安装完PostgresSQL后,提示运行Stack Builder,通过该工具安装PostGIS插件。


参考:
https://zhuanlan.zhihu.com/p/62157728
Linux环境
Ubuntu
Ubuntu环境下安装PostGIS,可以参考官方教程。
参考:https://trac.osgeo.org/postgis/wiki/UsersWikiPostGIS24UbuntuPGSQL10Apt
通用:Docker镜像安装(推荐)
Docker是一个轻量的虚拟化技术,可以让应用程序和相关依赖打包到一个轻量级和可移植的容器内,通过Linux容器等技术,可以将容器在Linux系统内运行,也可以实现虚拟化。
简单的理解来说,Docker可以比喻为系统的应用商城,每个容器是App。
(类似于iPhone的App Store和APP)
Docker的优点在于轻量化、高效率和标准化,能够减少开发的生命周期,特别是在应用部署和测试环节。
Docker的缺点在于隔离不彻底和跨平台受限。
Docer的一般应用场景是在于Web应用的自动化打包和发布、自动化测试和持续集成、服务器环境部署和调整数据库和其他后台应用等。
Docker介绍:https://www.runoob.com/docker/docker-tutorial.html
Docker安装:https://www.runoob.com/docker/centos-docker-install.html
PostGIS镜像安装:https://blog.csdn.net/qq_34817440/article/details/103914574
PgAdmin
PostgreSQL的两个主要管理工具,一个是psql,另一个pgAdmin。
psql:命令行查询 pgAdmin:图形管理工具
空间数据库创建
运行pgAdmin,创建一个Server,配置PostGIS的服务器地址和密码,以连接数据库。
一般本地的服务器地址为localhost,用户名为postgres,密码为在安装过程中手动设置的密码。
在连接成功后,可以看到有默认的postgres数据库,该库是管理用户数据库,一般不使用。
右键Database,新建数据库,指定数据库的名称和所属用户。
按参考教程新建nyc数据库,可以看到整个数据库的结构如下图所示。
新建nyc数据库目前还仅仅只是一个普通数据库,要将其转变为空间数据库,需要加载PostGIS空间扩展。
在Query Tool里,输入以下SQL,即可加载空间扩展插件。
CREATE EXTENSION postgis;
复制
可以通过运行PostGIS函数来确认是否安装空间扩展插件成功。
SELECT postgis_full_version();
复制
空间数据导入
PostGIS Shapefile 手动导入
参考:
https://zhuanlan.zhihu.com/p/62160223
GeoPandas 批量导入
GeoPandas(https://geopandas.org/)是专门处理空间数据的库,可以简单理解为地理信息数据的Pandas库。
可以通过conda或者pip安装。
conda install -c conda-forge geopandas
复制
GeoPandas读取完空间数据,得到GeoDataFrame类型的空间对象,可以通过它的调用to_postgis
方法,将其导入到对应的空间数据库。(一般先要创建数据库引擎,建立与空间数据库的链接)
from sqlalchemy import create_engine
engine = create_engine("postgres://myusername:mypassword@myhost:5432/mydatabase")
gdf.to_postgis("my_table", engine)
复制
参考:
https://geopandas.org/docs/reference/api/geopandas.GeoDataFrame.to_postgis.html
QGIS连接PostGIS
QGIS(https://qgis.org/en/site/)是开源的桌面端GIS处理软件。可在官网免费下载,然后在本地安装。
QGIS可以连接PostGIS数据库,通过创建PostGIS的连接,输入PostGIS所在IP、端口、数据库名和登录口令,即可在QGIS中查看空间数据库的地理空间数据。