上周把Asia區(qū)域的OSM的地圖數(shù)據(jù)Down下來了,數(shù)據(jù)是放到服務(wù)器硬盤上了汛蝙,可是還得放到數(shù)據(jù)庫里烈涮,然后進(jìn)一步用她來制作地圖等等。由于這是一份地理空間數(shù)據(jù)患雇,所以需要支持空間存儲(chǔ)的數(shù)據(jù)庫來驅(qū)動(dòng)跃脊。首選PostgreSQL數(shù)據(jù)庫 + PostGIS的開源數(shù)據(jù)庫方案,下面就重頭開始搭建PostgreSQL數(shù)據(jù)環(huán)境苛吱,將OSM的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫中酪术。
PostgreSQL + PostGIS on CentOS 7
1.安裝yum源
采用Yum源來安裝,由于CentOS默認(rèn)Yun安裝對(duì)應(yīng)的PostgreSQL和PostGIS版本較低(貌似是9.2)翠储,這里我采用9.5的版本來進(jìn)行部署绘雁。
首先安裝添加Yum源,RPM源的地址可以從https://yum.postgresql.org/repopackages.php獲取援所。根據(jù)要部署的OS版本來選擇不同的版本庫庐舟,查看服務(wù)器操作系統(tǒng)類型和版本。
$ uname -a
Linux localhost.localdomain 3.10.0-514.21.1.el7.x86_64 #1 SMP Thu May 25 17:04:51 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
根據(jù)所使用的平臺(tái)系統(tǒng)類型和版本選擇正確的安裝源住拭。
PostgreSQL 9.5版本的CentOS 7 RPM源(https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-3.noarch.rpm)
當(dāng)然現(xiàn)在最新版本為10.0挪略,也可以部署9.6的版本历帚,這里以9.5為例。
yum install https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-3.noarch.rpm
yum update
2.安裝postgresql95-server
部署PostgreSQL 9.5客戶端:(可選項(xiàng))
sudo yum install postgresql95 postgresql95-odbc PyGreSQL
部署PostgreSQL服務(wù)端以及相關(guān)依賴包
sudo yum install postgresql95-server postgresql95-contrib postgresql95-devel
3.初始化數(shù)據(jù)
sudo /usr/pgsql-9.5/bin/postgresql95-setup initdb
4.啟動(dòng)數(shù)據(jù)庫服務(wù)
sudo systemctl start postgresql-9.5
開機(jī)自動(dòng)啟動(dòng)數(shù)據(jù)服務(wù):
sudo systemctl enable postgresql-9.5.service
5.數(shù)據(jù)庫配置
由于默認(rèn)配置不支持密碼認(rèn)證杠娱,同時(shí)僅可供本地服務(wù)器訪問挽牢,需要進(jìn)行相關(guān)配置。編輯pg_hba.conf文件摊求,設(shè)置數(shù)據(jù)庫的遠(yuǎn)程可訪問性禽拔。增加host all all 0.0.0.0/0 md5來信任遠(yuǎn)程連接。
sudo vi /var/lib/pgsql/9.5/data/pg_hba.conf
編輯配置postgresql.conf文件室叉,開啟遠(yuǎn)程訪問:
sudo vi /var/lib/pgsql/9.5/data/postgresql.conf
生產(chǎn)環(huán)境可根據(jù)具體的網(wǎng)絡(luò)策略來進(jìn)行設(shè)置睹栖。
重啟數(shù)據(jù)庫服務(wù)
sudo systemctl restart postgresql-9.5
設(shè)置防火墻及訪問端口
sudo firewall-cmd --zone=public --add-port=5432/tcp --permanent
sudo firewall-cmd --reload
可使用數(shù)據(jù)庫客戶端連接訪問,測試是否安裝及配置成功茧痕。
6.安裝PostGIS
sudo yum install postgis2_95 postgis2_95-devel postgis2_95-client
其中postgis2_95-client包含PostGIS的命令行工具shp2gpsql, pgsql2shp, raster2pgsql野来,方便導(dǎo)入或?qū)С隹臻g數(shù)據(jù)。
OSM數(shù)據(jù)入庫
PostgreSQL數(shù)據(jù)庫準(zhǔn)備就緒凿渊,將下載的asia-latest.osm.pbf數(shù)據(jù)導(dǎo)入梁只。生態(tài)系統(tǒng)提供了一批免費(fèi)工具和開源組件。
- osmosis:基于Java的處理OSM數(shù)據(jù)的命令行工具埃脏,可以從數(shù)據(jù)庫創(chuàng)建地圖Dump搪锣、加載Dump到數(shù)據(jù)庫;基于數(shù)據(jù)庫歷史表生成變更集彩掐;把變更集應(yīng)用到數(shù)據(jù)庫构舟;根據(jù)兩個(gè)地圖Dump生成變更集;重新排序Dump中的數(shù)據(jù)堵幽;根據(jù)多邊形邊界框抽取地圖等等狗超。
- osmum:基于C++、JavaScript的處理OSM數(shù)據(jù)的框架朴下。
- osm2pgsql:基于C++的導(dǎo)入OSM到PostgreSQL的命令行工具努咐。
直接使用osm2pgsql工具將數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫中;首先使用上述sql創(chuàng)建數(shù)據(jù)庫殴胧,并且建立空間擴(kuò)展渗稍。
createdb osm
psql -d osm -c 'CREATE EXTENSION postgis; CREATE EXTENSION hstore;'
其中osm就是我的數(shù)據(jù)庫名稱。然后使用下面的命令導(dǎo)入之前下載好的數(shù)據(jù)
osm2pgsql -c -d osm --slim -C 2048 --flat-nodes /tmp/flat.files --number-processes 4 -U postgres -W -H 192.168.120.30 -P 5432 china-latest.osm.pbf
這里有幾個(gè)地方要注意团滥,一個(gè)是-C選項(xiàng)最好指定你電腦的內(nèi)存的75%竿屹,單位為 Mb,并且最大只能為30000灸姊,–flat-nodes 用來指定一個(gè)文件路徑拱燃,存放這個(gè)文件的位置至少要有20G的空閑空間(如果導(dǎo)入全球數(shù)據(jù)的話)。
導(dǎo)入全國的數(shù)據(jù)大約花了40多分鐘力惯,完成后會(huì)有一個(gè)概覽碗誉。
node cache: stored: 48136826(100.00%), storage efficiency: 50.52% (dense blocks: 427, sparse nodes: 45890166), hit rate: 100.00%
預(yù)覽地圖數(shù)據(jù)
使用QGIS工具召嘶,連接PostgreSQL數(shù)據(jù)庫,加載OSM數(shù)據(jù)預(yù)覽哮缺。
參考:
1.http://www.postgresonline.com/journal/archives/362-An-almost-idiots-guide-to-install-PostgreSQL-9.5,-PostGIS-2.2-and-pgRouting-2.1.0-with-Yum.html
2.http://wiki.openstreetmap.org/wiki/Osm2pgsql