在空间数据管理与应用中,PostgreSQL几乎是最具性价比的解决方案,它同时具备了开源、稳定和功能强大的特性。在本课程中,我们将通过图形界面GUI、SQL语言和简单的Python代码,带领大家领略PostgreSQL及其空间模块PostGIS和网络模块pgrouting的神奇魅力。我们将了解时空数据的输入与输出,空间数据管理工作流,带领学员一起下载数据,构建道路拓扑网络,从而实现最短路径分析及服务区域分析(DrivingDistance)等高级主题的全过程。
课程内容:
课程1:PostgreSQL数据管理基本操作
- PostgreSQL、PostGIS及pgRouting模块介绍
- pgAdmin4的使用简介
- PostgreSQL建库及基本SQL操作
- 将空间数据导入PostgreSQL的方法
- 空间数据查询
- 空间数据分析
课程2:PostgreSQL网络建构及分析
- 拓扑道路网的建构及展示
- 如何在PostgreSQL道路网中实现最短路径分析
- 如何在PostgreSQL中实现服务区域分析
课程3:使用Python展示PostgreSQL的数据分析成果
- 在Jupyter lab中展示地图
- 使用Python来访问PostgreSQL数据库
- 将PostgreSQL的分析结果的地图可视化
下载和安装PostgreSQL
- 下载PostgreSQL
- 下载pgAdmin4
- 使用pgcli命令行
brew upgrade pgcli
pgcli -U postgres
1.OSX平台
- 删除之前的版本
brew uninstall --force pgrouting
brew uninstall --force postgis
brew uninstall --force postgresql
rm -rf /usr/local/var/postgres
- OSX平台上安装PostgreSQL和PostGIS
brew会给OSX平台安装上最新版本的postgresql和postgis服务。
brew install postgresql
brew services start postgresql
brew link postgresql --force
brew install postgis
brew install pgrouting
如果是要安装9.6及相关插件,可以使用http://www.kyngchaos.com/software/postgres/ 中编译的dmg版本。安装完dmg后,必须执行一系列操作:
cd /usr/local/pgsql/bin
./initdb -D /usr/local/var/postgres
./pg_ctl -D /usr/local/var/postgres start
如果无法启动,而是出现address被占用的情况,则查看占用进程并使用Kill 杀掉
ps -ef | grep postmaster | awk '{print $2}'
./createuser postgres
./psql postgres
- 新建用户postgres并设置密码
createuser postgres
psql postgres
会以管理员身份进入界面,然后修改postgres用户的密码及给予其superuser身份
postgres=# ALTER USER postgres with password 'archesadmin';
postgres=# ALTER ROLE postgres Superuser;
可以使用 \du 查看用户权限
\du
然后以postgres的身份登入
psql -U postgres
- 启动和关闭服务
brew services start postgresql
brew services stop postgresql
- 连接错误
如果在psql访问数据库时发现问题
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
解决方法是删除/usr/local/var/postgres/postmaster.pid即可。
2.Ubuntu安装
2.1 14.04
安装过程:
sudo add-apt-repository "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -sc)-pgdg main"
wget -q -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-9.6 postgresql-contrib postgresql-9.6-postgis-2.3 postgresql-9.6-pgrouting
2.2 18.04
- 1、预处理
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt bionic-pgdg main" >> /etc/apt/sources.list'
wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add -
sudo apt update
- 2、安装postgresql+postgis
sudo apt install postgresql-10
sudo apt install postgresql-10-postgis-2.5
- 3、修改用户密码
sudo -u postgres psql
ALTER USER postgres with encrypted password 'archesadmin';
- 4、添加数据库和表
sudo -u postgres psql
create database geodb;
\c geodb
create extension postgis;
\q
3.CentOS安装9.6
rpm -U https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-6-x86_64/pgdg-centos96-9.6-3.noarch.rpm
yum install epel-release
yum install postgresql96 postgresql96-contrib postgresql96-devel postgresql96-server postgis2_96
新建数据库
# cd /var/lib/pgsql/9.6/
# su postgres
$ /usr/pgsql-9.6/bin/initdb data/
$ exit
启动服务
service postgresql-9.6 start
登录
psql -U postgres
# ALTER USER postgres with password 'archesadmin';
4.数据处理
- 将shapefile数据插入postgis
使用shp2pgsql:
shp2pgsql -c -g geom -D -s 4326 -S -i -I guangzhou_china_osm_line2 gzroads | psql -d pgdb -U postgres -h 127.0.0.1 -p 5432
shp2pgsql -I -s 4326 -W 'latin1' india.shp PlaceName | psql -d osmdata -U postgres -h 127.0.0.1 -p 5432
如果是向已经存在的表中加入数据,可以使用
shp2pgsql -I -s 4326 -W 'latin1' -a india.shp PlaceName | psql -d osmdata -U postgres -h 127.0.0.1 -p 5432
- 转换为sql
shp2pgsql -I -s 4326 -W 'latin1' pk.shp PlaceName > PlaceName.sql
psql -d osmdata -U postgres -h 127.0.0.1 -p 5432 < PlaceName.sql
- shp2pgsql的安装
一般地,在windows中安装postgresql和postgis会自动安装shp2pgsql的工具,但在ubuntu中,这个工具是需要另外安装的。
sudo apt-get install postgis-gui
- postgresql数据库备份与恢复
备份
pg_dump -h localhost -U postgres databasename > databasename.bak
恢复
psql -h localhost -U postgres -d databasename < databasename.bak