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提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 要在CentOS上离线搭建SVN服务器,需要按照以下步骤进行操作: 1. 首先,在CentOS服务器上安装必要的软件包和依赖项。由于是离线环境,需要先将相关的软件包下载到一个可访问的计算机上,然后通过U盘或其他外部介质将它们传输到CentOS服务器上。在CentOS服务器上使用以下命令安装软件包: ``` rpm -ivh svn-server-rpm包 ``` 2. 创建一个用于存储SVN仓库的目录,并为其分配合适的权限: ``` mkdir /svn-repo chown -R apache.apache /svn-repo ``` 3. 初始化SVN仓库: ``` svnadmin create /svn-repo/myrepo ``` 4. 配置SVN服务。在`/etc/httpd/conf.d/`目录下创建一个新的配置文件,例如`svn.conf`,并添加以下内容: ``` # SVN 配置 <Location /svn> DAV svn SVNPath /svn-repo/myrepo </Location> ``` 5. 重启Apache服务以应用配置更改: ``` systemctl restart httpd ``` 6. 确保防火墙允许通过HTTP访问SVN服务。可以使用以下命令开放端口80: ``` firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --reload ``` 7. 完成上述步骤后,即可通过浏览器或相应的SVN客户端从其他计算机访问SVN仓库了。 请注意,这只是一个简单的离线搭建SVN服务器的示例步骤。实际操作中可能涉及到更多的细节和配置,具体的步骤可能会有所不同。建议根据自己的实际情况和需求进行相应的调整。 ### 回答2: 要离线搭建CentOS下的SVN服务器,需要以下步骤: 1. 下载SVN软件包:在网络连接正常的环境中,下载最新版本的Subversion软件包,并将其保存到本地或移动存储设备中。 2. 安装CentOS系统:在目标服务器上安装CentOS操作系统,确保操作系统的版本和架构与下载的软件包相匹配。 3. 安装Subversion:将下载的SVN软件包复制到目标服务器,解压并安装。执行相关的安装命令,如使用yum命令安装:sudo yum install subversion。 4. 创建SVN仓库:使用命令行工具,创建一个SVN仓库。在指定的目录中执行命令:svnadmin create /path/to/repository。 5. 配置访问权限:为SVN仓库设置访问权限,确保只有授权的用户可以访问。创建一个authz文件,用于配置用户和组的权限。编辑文件并添加相应的权限规则。 6. 配置SVN服务器:编辑svnserve.conf文件,配置SVN服务器的各项参数。例如,设置SVN服务器监听的端口、启用身份验证等。 7. 启动SVN服务器:执行启动命令,启动SVN服务器。例如,通过命令svnserve -d -r /path/to/repository启动并使其在后台运行。 8. 测试SVN服务器:使用SVN客户端工具,例如TortoiseSVN等,在另一台计算机上测试连接SVN服务器。尝试进行检出、更新和提交等操作,验证服务器是否正常工作。 通过以上步骤,就可以在CentOS服务器上离线搭建一个SVN版本控制系统。 ### 回答3: 要在CentOS上离线搭建SVN服务器,您需要按照以下步骤进行操作: 1. 安装CentOS:首先,确保您已经在离线环境中安装了CentOS操作系统。您可以使用官方的CentOS ISO镜像进行安装。 2. 安装SVN服务器软件:在离线环境中,您需要将SVN服务器软件的安装包下载到离线机器上。您可以从Subversion官方网站或其他可信的软件下载站点下载最新版本的SVN服务器软件安装包。将安装包复制到离线机器上,并使用命令行工具(如yum)安装。 3. 配置SVN服务器:一旦安装了SVN服务器软件,您需要进行相关配置。在离线环境中,您可以编辑SVN服务器的配置文件,通常是在/etc/httpd/conf.d目录下的svn.conf文件。您可以根据实际需求进行配置,如指定版本库的存储位置、访问控制等。 4. 创建SVN版本库:在SVN服务器上创建版本库以存储项目代码。您可以使用svnadmin命令创建版本库,如在命令行中运行"svnadmin create /path/to/repository"来创建名为repository的版本库。 5. 配置访问权限:为了保护SVN版本库中的代码,您需要为其设置访问权限。在离线环境中,您可以在每个项目的conf目录中的svnserve.conf文件中进行配置。通过编辑该文件,您可以控制用户及其对版本库的访问权限。 6. 启动SVN服务器:在离线环境中,您可以启动SVN服务器以便用户可以访问版本库。在命令行中运行"svnserve -d -r /path/to/repository"命令来启动SVN服务器,并将其绑定到指定的版本库路径。 这些步骤将帮助您在CentOS上离线搭建SVN服务器。需要注意的是,在离线环境中,您需要提前准备好所需的软件包及其依赖关系,并保存在本地供安装使用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值