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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章