fedora27下的OpenStreetMap離線地理編碼服務器的搭建(Nominatim)

前言

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)主要分三大類:

  1. postgresql類(分9.x版本的和10版本的,不同版本配置文件的位置不同,本文裝的是10版本)
  2. postgis類 (它的版本應該與postgresql的對應,如postgis25_10的意思就是postgis是2.5版本,支持postgresql 10,,,但實際證明postgis2.5版本不被Nominatim支持,本文最後選的postgis23_10)
  3. php (沒什麼問題,不用指定版本,好像是7.1版本)

2)安裝命令:

  1. postgresql10相關:
sudo dnf install postgresql10 postgresql10-libs postgresql10-server postgresql10-contrib postgresql10-devel
  1. postgis相關
sudo dnf install postgis23_10 postgis23_10-utils
  1. php相關
sudo dnf install php php-pgsql php-pear php-pear-DB php-intl
  1. 其他
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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章