您現在的位置是:首頁 > 武術

如何在Debian 10上設定OSM地理編碼伺服器

  • 由 MMCLOUD 發表于 武術
  • 2022-03-28
簡介預設情況下,傳單控制地理編碼器使用公共https:nominatim

如何改變檔案型別

在上一個教程中,我解釋了在Debian 10上構建自己的OSM tile伺服器的過程。本教程將向您展示如何在Debian 10上設定Namingm地理編碼伺服器。Nagnitm為OpenStreetMap提供搜尋功能,因此如果訪客在搜尋框中輸入地址,將返回該地址的緯度/經度位置。

第一步:從原始碼構建提名

安裝依賴項包以構建Nagnitm。

sudo apt update sudo apt install build essential cmake g++libboost dev libboost system dev libboost filesystem dev libexpat1 dev zlib1g dev libbz2 dev libpq dev libproj dev

apache

2 php php php pgsql lib

apache

2 mod php intl python3 setuptools python3 dev python3 pip python3-psycopg2 python3 tidylib git gram postgresql-server-dev-11

建立提名使用者。(無需為此使用者建立密碼。)

sudo useradd-d/srv/namitm-s/bin/bash-m namitm

更改為/srv/m/目錄。

cd/srv/M/

向您自己的使用者帳戶授予許可權。

sudo apt install acl sudo setfacl-R-mu:username:rwx/srv/m/

從官方網站下載提名。

wgethttps://nominatim。org/release/Nominatim-3。5。1。tar。bz2

取出柏油球。

tar xvf M-3。5。1。焦油bz2

建立構建目錄。

mkdir構建

更改到此目錄並配置生成環境。

cd build cmake/srv/Namingm/Namingm-3。5。1

編譯原始碼。

製作

如何在Debian 10上設定OSM地理編碼伺服器

第2步:配置提名

Nagnitm的預設配置檔案是/srv/Nagnitm/build/settings/settings。php。我們可以建立一個本地。php檔案,並在那裡新增我們的修改。

sudo nano/srv/m/build/settings/local。php

在檔案中新增以下行。

<;?php@define(‘CONST_Website_BaseURL’,‘/namignm/’)@定義(‘CONST_Default_Lat’,55。0)@定義(‘CONST_Default_Lon’,1。0)@定義(‘CONST_Default_Zoom’,6)@定義(‘CONST_Map_Tile_URL’,‘https://tile。linuxbabe。com/osm/{z} /{x}/{y}。巴布亞紐幾內亞);

上述配置定義了

相對於磁貼伺服器的Namingm例項的路徑。

預設緯度、經度和縮放級別。

OSM磁貼伺服器的URL。預設情況下,Nagnitm使用公共openstreetmap。組織平鋪伺服器。在這裡,我使用自己的磁貼伺服器。

您還可以檢視/srv/namitm/build/settings/settings。php檔案,並在需要時新增自己的自定義項。例如,如果要匯入大型資料集(歐洲、北美、planet等),最好啟用節點位置的平面節點儲存,這樣節點座標將儲存在一個簡單的檔案中,而不是資料庫中,從而節省匯入時間和磁碟儲存。

@定義(’CONST_Osm2pgsql_Flatnode_File‘,’/srv/namignm/Flatnode。File‘);

儲存並關閉檔案。

第3步:匯入OSM資料庫

下載維基百科重要性轉儲檔案,這將提高Nomatim搜尋結果的質量。

cd/srv/NAMMATIONM/NAMMATIONM-3。5。1/data wgethttps://www。nominatim。org/data/wikimedia-importance。sql。gz

下載美國和英國郵政編碼資料。

wgethttps://www。nominatim。org/data/us_postcode_data。sql。gzwgethttps://www。nominatim。org/data/gb_postcode_data。sql。gz

下載國家程式碼資料檔案。

wget——國家電網。sql。廣州https://www。nominatim。org/data/country_grid。sql。gz

然後需要下載一個OSM檔案並將其匯入PostgreSQL。你可以去http://download。geofabrik。de下載你需要的摘錄。也可以在磁貼伺服器設定過程中使用PBF檔案。

在PostgreSQL中建立www資料使用者,這樣web伺服器將對資料庫具有隻讀訪問許可權。

sudo-u postgres createuser www資料

向postgres使用者授予許可權。

sudo setfacl-R-mu:postgres:rwx/srv/m/

切換到postgres使用者。

sudo-u postgres-i

並執行以下命令將OSM提取匯入PostgreSQL。

cd/srv/Namingm/build//srv/Namingm/build/utils/setup。php——osm檔案/home/osm/great british-latest。奧斯曼。pbf——全部2個>&;1 |三通設定。日誌

匯入資料庫後,索引過程將開始。

如何在Debian 10上設定OSM地理編碼伺服器

完成後,執行以下命令進行驗證。

/srv/namignm/build/utils/check_import_finished。php

如何在Debian 10上設定OSM地理編碼伺服器

退出postgres使用者。

出口

第4步:設定Apache

編輯磁貼

伺服器配置

檔案。

sudo nano/etc/apache2/sites enabled/tileserver_site-le-ssl。形態

在VirtualHost標記之間新增以下行。

<;目錄“/srv/namitm/build/website”>;選項如下SymLinks MultiViews AddType application/json。php目錄索引搜尋。php需要所有授權</目錄>;別名/namitm/srv/namitm/build/website

儲存並關閉檔案。然後重新載入Apache。

sudo systemctl重新載入apache2

現在參觀https://tile。yourdomain。com/nominatim。您將看到您的Nomatim例項。

如何在Debian 10上設定OSM地理編碼伺服器

CSS檔案位於/srv/namitm/build/website/CSS/search。css,如果你想定製外觀。

更新提名資料庫

為了使Namingm資料庫保持最新,我們需要安裝Pyosmium。它可以從預設的軟體儲存庫中獲得,但建議使用pip3安裝最新版本。

sudo pip3安裝鋨

這將安裝一個二進位制檔案/usr/local/bin/pyosmium獲取更改。編輯配置檔案。

sudo nano/srv/m/build/settings/local。php

新增以下行以指定pyosmium get changes的位置。

@定義(’CONST_Pyosmium_Binary‘,’/usr/local/bin/Pyosmium get changes‘);

接下來,我們需要告訴Namingm在哪裡下載更新。預設情況下,它被配置為從https://planet。openstreetmap。org/replication/minute。如果您從geofabrik下載了OSM PBF檔案。de,那麼最好也從那裡下載更新。

要查詢自己地圖的更新URL,請轉到https://download。geofabrik。de/找到你所在的地區。然後找到該檔案的URL。osc。gz檔案。

如何在Debian 10上設定OSM地理編碼伺服器

此URL是更新URL。

如何在Debian 10上設定OSM地理編碼伺服器

在/srv/namignm/build/settings/local中新增以下行。php檔案。您需要使用自己的更新URL。

//複製服務@define的基本URL(’CONST_replication_URL‘,’http://download。geofabrik。de/europe/great-britain-updates‘); // 上游釋出diff@define的頻率(’CONST_Replication_Update_Interval‘,’86400‘);//如果還沒有找到更新@define(’CONST_Replication_Recheck_Interval‘,’900‘),需要多長時間睡眠;

儲存並關閉檔案。向postgres使用者授予許可權。

sudo setfacl-R-m“u:postgres:rwx”/srv/m/build/

然後切換到postgres使用者。

sudo-u postgres-i

初始化更新過程。

/srv/namignm/build/utils/update。php——初始化更新

更新我的資料庫。

/srv/namignm/build/utils/update。php——全部匯入

設定Cron作業以進行自動更新

編輯root使用者的Crontab檔案。

sudo crontab-e

在此檔案中新增以下行。

@每日sudo-u postgres/srv/namitm/build/utils/update。php——全部匯入

儲存並關閉檔案。

如何在拖沓的地圖上新增搜尋功能

我假設你的slippy地圖是使用傳單JavaScript庫顯示的。要將搜尋功能新增到地圖中,需要使用傳單地理編碼外掛。我將向您展示如何使用傳單控制地理編碼器。其實很簡單。

假設您使用以下HTML程式碼來顯示拖拉地圖。

<;html>&書信電報;頭>&書信電報;meta charset=“UTF-8”大於&書信電報;標題>;我的第一個osm</標題>&書信電報;link rel=“stylesheet”type=“text/css”href=“傳單。css”/>&書信電報;script type=“text/javascript”alt="如何在Debian 10上設定OSM地理編碼伺服器" data-isLoading="0" src="/static/img/blank.gif" data-src=“ployate。js”></指令碼>&書信電報;風格>#地圖{寬度:100%;高度:100%}</風格></頭>&書信電報;車身>&書信電報;div id=“map”></部門>&書信電報;指令碼>;var map=L。map(’map‘)。setView([54,1],6);蒂萊萊耶https://tile。yourdomain。com/osm/{z} /{x}/{y}。png’,{maxZoom:19})。addTo(地圖)</指令碼></車身></html>;

現在,您需要在HTML標題中新增以下兩行,以使用傳單控制地理編碼器外掛。

<;link rel=“stylesheet”href=”https://unpkg。com/leaflet-control-geocoder/dist/Control。Geocoder。css“/>;<;指令碼alt="如何在Debian 10上設定OSM地理編碼伺服器" data-isLoading="0" src="/static/img/blank.gif" data-src=”https://unpkg。com/leaflet-control-geocoder/dist/Control。Geocoder。js“>;<;/script>;

然後將以下函式新增到<;指令碼></指令碼>;將搜尋功能新增到地圖中。

控制。地理編碼器()。addTo(地圖);

最終的HTML程式碼如下所示:

<;html>&書信電報;頭>&書信電報;meta charset=“UTF-8”大於&書信電報;標題>;我的第一個osm</標題>&書信電報;link rel=“stylesheet”type=“text/css”href=“傳單。css”/>&書信電報;link rel=“stylesheet”href=”https://unpkg。com/leaflet-control-geocoder/dist/Control。Geocoder。css“/>;<;script type=“text/javascript”alt="如何在Debian 10上設定OSM地理編碼伺服器" data-isLoading="0" src="/static/img/blank.gif" data-src=“傳單。js“>;<;/script>;<;script alt="如何在Debian 10上設定OSM地理編碼伺服器" data-isLoading="0" src="/static/img/blank.gif" data-src=”https://unpkg。com/leaflet-control-geocoder/dist/Control。Geocoder。js“>;<;/script>;<;style>;#map{寬度:100%;高度:100%}<;/style>;<;/head>;<;body>;<;div id=“map”>;<;/div>;<;script>;var map=L。map(‘map’)。setView([54,1],6);L。tileLayer(‘map’)”https://tile。yourdomain。com/osm/{z} /{x}/{y}。png‘,{maxZoom:19})。addTo(地圖);控制。地理編碼器()。addTo(地圖)</指令碼></車身></html>;

儲存並關閉檔案。然後在web瀏覽器中重新載入地圖,您應該會在右上角看到一個搜尋按鈕。

如何在Debian 10上設定OSM地理編碼伺服器

預設情況下,傳單控制地理編碼器使用公共https://nominatim。openstreetmap。org地理編碼服務。要使用您自己的地理編碼服務,請刪除以下行。

控制。地理編碼器()。addTo(地圖);

改為新增以下行。將該URL替換為您的提名地理編碼服務的URL。請注意,不應省略尾隨的斜槓。

var geocoder=L。控制。地理編碼器。提名({serviceUrl:’https://tile。yourdomain。com/nominatim/‘}); if(URLSearchParams&;location。search){//parse/?geocoder=namitm from URL var params=new URLSearchParams(location。search);var geocoderString=params。get(’geocoder‘);if(geocoderString&;L。Control。geocoder[geocoderString]){console。log(’Using geocoder‘,geocoderString);geocoder=L。Control geocoder[geocoderString](); } else if(geocoderString){console。warn(’Unsupported geocoder‘,geocoderString);}var control=L。control。地理編碼器({query:’Moon‘,佔位符:’Search here…‘,geocoder:geocoder})。addTo(地圖);var標記;setTimeout(function(){control。setQuery(’Earth‘);},12000);

您還可以為反向地理編碼新增以下程式碼。當訪客點選地圖上的某個點時,該地址的名稱就會出現。

地圖在(’click‘,函式(e){geocoder。reverse(e。latlng,map。options。crs。scale(map。getZoom()),函式(results){var r=results[0];if(r){if(marker){marker。setLatLng(r。center。)。setPopupContent(r。html | | r。name)。openPopup()}else{marker=L。marker(r。center)。bindpoppup(r。name)。addTo(map。openPopup();}}});});

儲存並關閉檔案。然後在web瀏覽器中重新載入地圖。

提高反向搜尋的準確性

提名中有兩種型別的搜尋:

前向搜尋,又名地理編碼,返回地址的緯度和經度

反向搜尋,又名反向地理編碼,返回緯度和經度的地址,即當訪問者點選地圖上的某個點時。

如果進行反向搜尋,則標記針和彈出視窗與您單擊的地圖上的位置不在同一位置,則需要增加縮放級別。地圖。getZoom()函式將獲取當前的地圖檢視,該檢視由setView()函式設定,如下所示

var map=L。map(’map‘)。setView([54,1],6);

縮放級別設定為6,這將導致反向搜尋的精度較低。我們可以對反向搜尋的縮放級別進行硬編碼,如下所示:

地理編碼器。反轉(如拉特林、地圖選項、crs比例(21)、功能(結果)

i、 換張地圖。getZoom()到21。反向搜尋的最大縮放級別為21。您可以選擇另一個縮放級別以滿足您的需要。

故障排除

如果地圖上的搜尋功能不起作用,您可以檢查web瀏覽器的控制檯,找出哪裡出了問題。有些人可能會認為406不可接受或CORS不允許出現錯誤。確保為設定了正確的MIME型別。Apache配置檔案中的php。有些人可能有下面這句話,這可能會導致上述錯誤。

AddType text/html。php

應該是的

AddType應用程式/json。php

更改MIME型別後。重新載入Apache以使更改生效。

sudo systemctl重新載入apache2

收尾

我希望本教程能幫助您在Debian 10上安裝Namingm地理編碼伺服器。和往常一樣,如果你覺得這篇文章很有用,那麼訂閱我們的免費時事通訊以獲得更多提示和竅門。當心

除非註明,否則均為MMCloud原創文章,轉載必須以連結形式標明本文連結。

Top