Centos7 OSM离线地理编码服务器的Nominatim 搭建

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、Nominatim是什么?

Nominatim是一个可以按名称和地址来搜索OSM中的数据,并生成OSM点的合成地址的工具(反向地理编码)。可用在http://nominatim.openstreetmap.org找到这个工具。Nominatim也用在OpenStreetMap首页的搜索工具栏中,同时也为MapQuest Open Initiative, PickPoint, OpenCage Geocoder, LocationIQ, Geocoding.ai 提供搜索支持。

二、软硬件需求

1、硬件

至少需要 2GB 的 RAM,否则安装将失败。对于一个完整的版本,强烈建议使用32GB 或更多的 RAM。对于完整的安装,您将需要大约 500GB 的硬盘空间(截至 2016 年 6 月,考虑到 OSM 数据库正在快速增长)。SSD 磁盘将大大有助于加快导入和查询。

2、软件版本

PostgreSQL(9.1 或更高版本)
PostGIS(2.0 或更高版本)
PHP(5.4 或更高版本)
PHP-pgsql
PHP-intl(与 PHP 捆绑)
网络服务器(推荐使用 apache 或 nginx)

三、安装

1、更新软件包

sudo yum update -y
sudo yum install -y epel-release

2、安装postgresql

sudo yum install postgresql-server
sudo yum install postgresql-contrib 
sudo yum install postgresql-devel

3、安装postgis

sudo yum install postgis
sudo yum install postgis-utils
sudo yum install postgresql-devel

4、安装php

sudo yum install php
sudo yum install php-pgsql
sudo yum install php-pear
sudo yum install php-pear-DB
sudo yum install php-intl

4、安装其他支撑库

sudo yum install libpqxx-devel
sudo yum install proj-epsg bzip2-devel
sudo yum install proj-devel
sudo yum install geos-devel
sudo yum install libxml2-devel
sudo yum install boost-devel
sudo yum install expat-devel
sudo yum install zlib-devel

5、查看版本

#查看PHP版本
php -v
#查看PostgreSQL版本
psql --version
#查看PostGIS版本
rpm -qa | grep postgis

四、系统设置和配置

Nominatim 将作为全局服务在您的机器上运行。因此,最好将其安装在自己单独的用户帐户下。在下面我们假设这个用户被调用nominatim并且安装将在/srv/nominatim. 创建用户和目录,本文章使用root用户进行演示。


1、PostgreSQL数据库设置

# 1、 初始化
sudo postgresql-setup initdb
sudo systemctl enable postgresql

#2、修改PostgreSQL默认配置
vim /var/lib/pgsql/data/postgresql.conf

#添加或修改如下内容:
fsync = off
full_page_writes = off
shared_buffers =2GB
maintenance_work_mem =10GB
work_mem = 50MB
effective_cache_size =24GB
synchronous_commit = off
checkpoint_segments = 100 # only for postgresql <= 9.4
checkpoint_timeout = 10min
checkpoint_completion_target = 0.9

#3、重启PostgreSQL数据库
sudo systemctl restart postgresql

#4、创建三个PostgreSQL数据库用户:
#一个用于导入的用户;
#另一个用于访问数据库仅用于阅读的网络服务器:
#另一个用于作为PostgreSQL数据库角色的网站用户www-data
sudo -u postgres createuser -s $USERNAME
sudo -u postgres createuser apache
sudo -u postgres createuser -SDR www-data

不要忘记fsync full_page_writes在初始导入后重新启用,否则您将面临数据库损坏的风险。不能关闭
Autovacuum,因为它可以确保经常分析表。

2、系统设置和配置

#创建账号并设置目录
sudo useradd -d /srv/nominatim -s /bin/bash -m nominatim
export USERNAME=nominatim
export USERHOME=/srv/nominatim
#Make sure that system servers can read from the home directory:
chmod a+x $USERHOME

五、安装Nominatim

1、下载安装环境

#安装gcc等必备程序包(已安装则略过此步)
yum install -y gcc gcc-c++ make automake 
#获取CMake源码包
wget https://github.com/Kitware/CMake/releases/download/v3.15.5/cmake-3.15.5.tar.gz
#解压CMake源码包
tar -zxvf cmake-3.15.5.tar.gz
cd cmake-3.15.5
#编译安装
./bootstrap && make -j4 && sudo make install

2、下载安装nominatim

#进入/srv/nominatim目录,获取源码
cd $USERHOME
git clone --recursive git://github.com/openstreetmap/Nominatim.git
cd Nominatim
#When installing the latest source from github, you also need to download the country grid:
wget -O data/country_osm_grid.sql.gz http://www.nominatim.org/data/country_grid.sql.gz
#The code must be built in a separate directory.
mkdir build
cd build
cmake $USERHOME/Nominatim
make

#创建一个最小的配置文件,告诉 nominatim 您的网络服务器用户的名称和网站的 URL:

3、设置Apache Webserver

您需要在 apache 配置中创建网站目录的别名。将单独的 nominatim 配置添加到您的网络服务器:


sudo tee /etc/httpd/conf.d/nominatim.conf << EOFAPACHECONF
<Directory "$USERHOME/nominatim-project/website">
  Options FollowSymLinks MultiViews
  AddType text/html   .php
  DirectoryIndex search.php
  Require all granted
</Directory>

Alias /nominatim $USERHOME/nominatim-project/website
EOFAPACHECONF

#重启Apache服务器
sudo systemctl enable httpd
sudo systemctl restart httpd

4、添加SELinux安全设置

让 SELinux 保持启用和强制执行是一个好主意,尤其是在可从 Internet 访问的 Web 服务器的情况下。至少应为 Nominatim 做以下 SELinux 标签:

使用yum查询选项搜索
yum provides semanage
按照搜索结果安装对应包即可解决
yum install -y policycoreutils-python
在这里插入图片描述

sudo semanage fcontext -a -t httpd_sys_content_t "/usr/local/nominatim/lib/lib-php(/.*)?"
sudo semanage fcontext -a -t httpd_sys_content_t "/srv/nominatim/nominatim-project/website(/.*)?"
sudo semanage fcontext -a -t lib_t "/srv/nominatim/nominatim-project/module/nominatim.so"
sudo restorecon -R -v /usr/local/lib/nominatim
sudo restorecon -R -v /srv/nominatim/nominatim-project

sudo semanage fcontext -a -t httpd_sys_content_t "$USERHOME/Nominatim/(website|lib|settings)(/.*)?"
sudo semanage fcontext -a -t lib_t "$USERHOME/Nominatim/module/nominatim.so"
sudo restorecon -R -v $USERHOME/Nominatim

注意事项:
问题1:
CMake Error at /usr/local/share/cmake-3.15/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
Could NOT find PythonInterp: Found unsuitable version “2.7.5”, but required
is at least “3.6” (found /usr/bin/python)

解决方案:升级Python

yum groupinstall ‘Development Tools’
yum install centos-release-scl
yum install rh-python36
python --version
scl enable rh-python36 bash
yum -y install python-pip
#创建软连接
 mv /usr/bin/python /usr/bin/python_old
 ln -s /opt/rh/rh-python36/root/bin/python3 /usr/bin/python
 #修改yum指向
 vi /usr/bin/yum
 vi /usr/libexec/urlgrabber-ext-down
将第一个行#!/usr/bin/python” 改为 “#!/usr/bin/python_old”即可。

问题2:
Target “osm2pgsql” requires the language dialect “CXX17” , but CMake does
not know the compile flags to use to enable it.
解决方案:升级gcc

1、安装centos-release-scl
sudo yum install centos-release-scl
2、安装devtoolset,注意,如果想安装7.*版本的,就改成devtoolset-7-gcc*,以此类推
sudo yum install devtoolset-8-gcc*

3、激活对应的devtoolset,所以你可以一次安装多个版本的devtoolset,需要的时候用下面这条命令切换到对应的版本
scl enable devtoolset-8 bash

每个版本的目录下面都有个 enable 文件,如果需要启用某个版本,只需要执行
source ./enable
所以要想切换到某个版本,只需要执行
source /opt/rh/devtoolset-8/enable

可以将对应版本的切换命令写个shell文件放在配了环境变量的目录下,需要时随时切换,或者开机自启
长期有效
ln -s /opt/rh/devtoolset-7/root/bin/gcc /usr/bin/gcc
ln -s /opt/rh/devtoolset-7/root/bin/g++ /usr/bin/g++

————————————————
版权声明:本文为CSDN博主「梦 里 不 知 身 是 客」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42193489/article/details/122418169

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值