前言
CSDN上有關於ubuntu如何安裝Nominatim的博文ubuntu16.04下的OpenStreetMap離線地理編碼服務器的搭建(Nominatim),但是作者尚未查詢到中文的、關於fedora如何安裝Nominatim的博文,甚至也未見英文的博文,這是本文寫作的目的。
可以參考的網站:
- Nominatim官方文檔Installation on CentOS 7,CentOS和Fedora還比較像,但是也有不同,最重要的就是fedora裝的時候注意指定版本,版本,版本!!
(fedora與ubuntu的軟件目錄,配置、啓動方式有很大不同,參考ubuntu下的安裝反而更容易混淆)
本文是對於fedora27安裝Nominatim的心得步驟,不同的系統、不同的系統版本是有差別的。我的建議是:注意軟件版本,注意相互之間的依賴關係。先通讀本文,掌握整個安裝思路和重點,切記不顧實際光粘命令行。
目錄
一、新建Fedora用戶
Nominatim很亂,先新建個用戶,不然各種權限問題:
- 圖形化操作:設置–>詳情–>用戶–>解鎖–>新建(賬戶類型選管理員,這樣nominatim就跟你原來的賬戶權限一樣);
- 然後註銷當前用戶,切換到nominatim用戶;
- 以下所有操作都在nominatim這個賬戶下做的。
二、裝依賴(軟件)
這部分最重要!!!是後邊成功配置的前提,不要光粘到命令行,先看一眼我說的是什麼!!!!
官方CentOS的安裝教程沒指定軟件的版本,粘貼到fedora27中後,postgresql被不同的依賴項分別安裝了兩個版本(一個9.x,一個10),後邊各種問題,崩潰。。所以重要的是版本,版本,版本!!!
1)主要分三大類:
- postgresql類(分9.x版本的和10版本的,不同版本配置文件的位置不同,本文裝的是10版本)
- postgis類 (它的版本應該與postgresql的對應,如postgis25_10的意思就是postgis是2.5版本,支持postgresql 10,,,但實際證明postgis2.5版本不被Nominatim支持,本文最後選的postgis23_10)
- php (沒什麼問題,不用指定版本,好像是7.1版本)
2)安裝命令:
- postgresql10相關:
sudo dnf install postgresql10 postgresql10-libs postgresql10-server postgresql10-contrib postgresql10-devel
- postgis相關
sudo dnf install postgis23_10 postgis23_10-utils
- php相關
sudo dnf install php php-pgsql php-pear php-pear-DB php-intl
- 其他
sudo dnf install libpqxx-devel proj-epsg bzip2-devel proj-devel libxml2-devel boost-devel \
wget git cmake make gcc gcc-c++ libtool policycoreutils-python \
expat-devel zlib-devel
切記:不要好幾個教程對着看,然後重複粘貼命令,軟件都裝重了!!然後各種問題,,,上邊列出來的軟件如果都裝好了,應該就夠了,(我之前一直處理openstreetmap的.pbf數據,所以與.pbf數據相關的庫早就裝好了,讀者要是知道openstreetmap但還不知道.pbf數據,那你得下點功夫了,本文就不扯怎麼裝.pbf相關的庫了)
三、配置(和啓動)postgresql 10 (Fedora系統下)
千萬不要參考:1. ubuntu中postgresql的配置和啓動方式; 2. postgresql 9的配置和啓動方式。!!!!不然各種亂(因爲不同系統下文件路徑不一樣,而且9和10版本的文件路徑也不一樣)
1) 初始化及啓動
sudo /usr/pgsql-10/bin/postgresql-10-setup initdb
sudo systemctl enable postgresql-10.service
sudo systemctl start postgresql-10.service
2) 配置postgresql.conf文件
啓動管理員權限下的文本編輯器,編輯postgresql.conf文件
sudo gedit /var/lib/pgsql/10/data/postgresql.conf
修改如下內容,括號中的值代表要修改成的值
shared_buffers (2GB)
maintenance_work_mem (10GB)
work_mem (50MB)
effective_cache_size (24GB)
synchronous_commit = off
checkpoint_timeout = 10min
checkpoint_completion_target = 0.9
改完之後,重啓服務:
sudo systemctl restart postgresql-10.service
3) 添加兩個postgres用戶
老實說我也不明白爲什麼要添加這兩個用戶,但是注意:
這是postgres的用戶,不是fedora操作系統的用戶!!!! 意思好像是數據庫中的用戶???
(我剛開始卡了很長很長時間,到後來反正也還沒明白,苦笑)
- 先用命令進入postgres用戶 (很繞,我也講不太清楚這塊,好像是因爲安裝postgresql後自動出來的一個postgres用戶,但它只能做特定的數據庫相關的事)
su - postgres
(這塊新讀者可能容易出問題,密碼輸入的是nominatim用戶的密碼)
- 運行如下命令,新建兩個postgres用戶:
createuser -s nominatim
createuser apache
- 然後退回nominatim賬戶
exit
如圖(我的都創建過了,所以提示失敗)
四、裝Nominatim
本文將nominatim安裝在/opt/nominatim
文件夾下(注意官方CentOS的安裝教程是在/srv/nominatim
,並將它定義成了$USERHOME
,本文少定義,省的混。。讀者就跟我裝一個路徑吧,過程理清了之後想換也方便,,不然後邊的配置講不清楚)
1)建文件夾並改權限
sudo mkdir /opt/nominatim
sudo chmod 777 -R /opt/nominatim
2) 下載、編譯、安裝Nominatim
- 官網github上下載(截止到我下載的時候是3.20版本),並移動到
/opt/nominatim
目錄下,解壓縮…之後應該是我這樣的(還沒有build
文件夾)
- 先進入
Nominatim
文件夾裏,運行命令wget -O data/country_osm_grid.sql.gz https://www.nominatim.org/data/country_grid.sql.gz
下載國家網格(country grid)數據
- 退回來,新建
build
文件夾,進入build
文件夾,cmake,然後make
cd /opt/nominatim
mkdir build
cd build
cmake /opt/nominatim/Nominatim
make
(在這個目錄下進行cmake和make)
- 還在
build
文件夾內,配置settings/local.php
文件(即/opt/nominatim/build/settings/local.php
),內容如下(沒有就新建):
<?php
// Paths
@define('CONST_Postgresql_Version', '10.5'); //這個是參照ubuntu安裝的那篇的配置文件添加的,好像沒有也行
@define('CONST_Postgis_Version', '2.3'); // 好像沒有也行
//web set
@define('CONST_Database_Web_User', 'apache');
@define('CONST_Website_BaseURL', '/nominatim/');
@define('CONST_Osm2pgsql_Flatnode_File', '/opt/nominatim/build/flatnode.file'); // 這是官方推薦添加的(非必須)
如果cmake或make不成功,多半是因爲前邊的postgresql和postgis沒裝好(只是沒裝好,還不涉及配置的問題)。。。沒更好的辦法,按提示去網上查根本特麼沒有什麼答案。。把裝了的軟件重新卸了,重裝,重配置,等你到了不用看教程也大致明白哪裏重要的時候,就能裝好了
五、配置Apache Webserver
- 配置文件爲
/etc/httpd/conf.d/nominatim.conf
(沒有就新建),同樣gedit打開,編輯內容如下:
<Directory "/opt/nominatim/build/website">
Options FollowSymLinks MultiViews
AddType text/html .php
DirectoryIndex search.php
Require all granted
</Directory>
Alias /nominatim /opt/nominatim/build/website
這裏/opt/nominatim
就對應上一節Nominatim的位置。
- 重新載入apache:
sudo systemctl enable httpd
sudo systemctl restart httpd
這時候你打開網址http://localhost/nominatim應該就可以看到一些內容了(文本內容,提示嚴重錯誤,沒有nominatim數據庫之類的,因爲還沒有導入數據嘛)
六、導入數據
- (可選)下載額外的wiki數據,進入到
/opt/nominatim/Nominatim/data
目錄下,運行命令:
wget https://www.nominatim.org/data/wikipedia_article.sql.bin
wget https://www.nominatim.org/data/wikipedia_redirect.sql.bin
- 導入數據:
openstreetmap數據可以在網站https://download.geofabrik.de/下載(讀者應該知道吧)。導入命令(還在/opt/nominatim/build
目錄下呢):
./utils/setup.php --osm-file <data file> --all [--osm2pgsql-cache 28000] 2>&1 | tee setup.log
裏邊<data file>
替換爲你的.pbf文件,--osm2pgsql-cache 28000
是可選參數,一個實際的命令如圖:
要試一試有沒有問題的話先選一個小點兒的數據,如北京的。同樣地,如果導入不成功多半是因爲前邊的postgresql和postgis沒裝好,例如,我剛開始裝的postgis25_10(2.5版本),不被支持,提示: found postgis version 0(應該就是沒找到的意思),後來換了低版本的postgis23_10,導入成功了。 如果失敗,再次導入之前要先刪除數據庫,命令:
sudo -u postgresdropdb nominatim
總結
本文給出的是Fedora27下安裝Nominatim的基本方法,postgresql的版本爲10,postgis的版本爲2.3,php版本爲7.1,Nominatim的版本爲3.2。並給出了配置postgresql、apache、nominatim的方法。需要特別注意的是:安裝軟件過程中要指定軟件版本,注意區分不同操作系統、不同軟件版本的安裝、配置上的差異。限於作者水平和應用場景,關於局域網的配置、更多額外輔助數據的添加、保持數據實時更新的方法未做討論,這部分內容可以參考Nominatim官方文檔以及ubuntu16.04下的OpenStreetMap離線地理編碼服務器的搭建(Nominatim)。
附、最後的效果
不聯網也會有結果,但是可能網格圖片顯示有問題。。
本人的是爲了用python中的geocoder
庫離線使用地理編碼功能,python代碼如下:
import geocoder
url = 'http://localhost/nominatim'
g = geocoder.google('北京市北京站', url=url)
g.json