Postgresql+postgis
地图开发说明
实习期间需要部署路网数据库查询服务,windows
和ubuntu
下的安装部署大同小异,现以postgresql 10+postgis 2.5.0为例
1. 安装postgresql+postgis
部署地图数据查询服务
ubuntu: sudo apt install libpq-dev postgresql-server-dev-10 postgresql-server-dev-all
windows
:参考博客csdn blog
2. 下载openstreetmap
地图osm
数据
下载国家地图数据,在
www.openstreetmap.org
,无法具体到省份城市下载具体省份城市地图下载可参考省市地图
更小区域地图下载,可使用
www.openstreetmap.org
限定经纬度直接导出
3. 创建数据库,并支持postgis
和pgrouting
- 方式一,命令行
createdb -U postgres XXX
(数据库名称,后续都用XXX代替)
进入数据库\c XXX
,输入以下语句使数据库支持空间分析和空间查询
1 | CREATE EXTENSION postgis; |
- 方式二:在
pgAdmin
中打开,直接以postgis
数据库为模版创建数据库,这样创建的数据库直接支持空间查询和空间分析。
4. 将osm
数据导入数据库blog
4.1 安装OSM
数据导入工具osm2pgsql
(Ubuntu
操作):
sudo apt install osm2pgsql
(windows
操作):
osm2pgsql
下载地址:http://customdebug.com/osm/osm2pgsql.zip
default.style
文件:https://github.com/openstreetmap/osm2pgsql/blob/master/default.style
osm2pgsql
下载好之后解压,解压完成之后,将下载的default.style
放入到.\osm2pgsql\x64
文件夹下
4.2 进入数据库
windows
: cmd
输入psql -U postgres -d XXX
进入数据库
ubuntu
: psql -U user_name -d database_name -h localhost
4.3 为了避免后面出现要输入密码或者出现Error: Connection to database failed: fe_sendauth: no password supplied
错误,将文件pg_hba.conf
(文件路径:...\PostgreSQL\10\data
)里面的md5
,下图所示的两个md5
改为trust
4.4 (windwos
)加载postgis
对象和函数定义(postgis.sql
)
在数据库安装位置
bin
文件夹下打开dos
窗口,输入命令psql -U postgres -d osm -f
“此处为postgis.sql文件的路径”。postgis.sql
文件在...PostgreSQL\10\share\contrib\postgis-2.5
文件夹下
4.5 (windows
)加载EPSG
坐标系统定义(spatial_ref_sys.sql)
在
dos
窗口下输入命令psql -U postgres -d osm -f
此处为postgis.sql
文件的路径postgis.sql
文件在...PostgreSQL\10\share\contrib\postgis-2.4
文件夹下
4.6 导入OSM
数据
ubuntu
osm2pgsql -d XXX –U username -P portID -C 12000 -S /home/china-latest.osm.pbf -H localhost -W
windows
在下载的
osm2pgsql
的.\osm2pgsql\x64
文件夹下打开dos
窗口,输入命令osm2pgsql -d XXX –U username -P portID -C 12000 -S "C:\develop\postsql-gis\osm2pgsql\x64\default.style" china-latest.osm.pbf
4.7 验证数据是否成功
(
linux
)\d
发现多了几张table
和view
说明导入成功(
windows
) 从菜单栏的postgressql
打开pgAdmin
,发现XXX
库中多了4张表,说明导入成功
5. 创建路网拓扑图和查询数据表
5.1 创建数据表,选择指定列,并重新排序gid
选择指定列:
CREATE TABLE XXX AS (SELECT osm_id,name,ref,highway,oneway,bridge,way FROM planet_osm_roads);
添加起点id:
ALTER TABLE XXX ADD COLUMN source integer;
添加终点id:
ALTER TABLE XXX ADD COLUMN target integer;
添加道路权重值:
ALTER TABLE XXX ADD COLUMN length double precision;
创建序列:
1 | CREATE SEQUENCE test_id_seq |
- 更新自增ID:
1 | alter table XXX add column gid int; |
- 修改数据表中列名way为geom:
alter table XXX rename way to geom
5.2 创建路网拓扑 SELECT pgr_createTopology('XXX',0.00001, 'geom', 'gid');
5.3 为length赋值 update XXX set length =st_length(geom);
6. 使用QGIS加载数据表和在线地图
6.1 QGIS连接postgressql
连接PostGIS数据源——数据库管理器——导入数据——加载数据
输入数据库名称 端口 用户名和密码
双击数据表即可显示图层
6.2 安装在线地图插件显示地图图层
- 打开QGIS,在插件下搜QGIS cloud插件,选择 add background layer 即可添加google map,bing map,openstreet map 作为底图