ubuntu16.04下的OpenStreetMap离线地理编码服务器的搭建(Nominatim)

news/2024/7/9 22:38:16 标签: OpenStreetMap, ubuntu, nominatim, PostgreSQL
OpenSteetMap官网

Nominnatim 网页,这里面包含使用、安装、数据等的网址。

Nominatim的介绍

Nominatim的安装,这个比较不好懂。

部分国家和地区数据的下载,本文使用.osm.pbf 格式,这也是最佳格式。

Ubuntu16.04下载,下载时付钱的选项全部都设为0,就是免费版了。这是标准版。最好不要用优麒麟(Ubuntu Kylin)


 由于在上面网址中已经介绍了需要的软件、环境等,下面就直接开始讲安装步骤,其中命令语句全部为紫色字体,需要添加或修改的文本文件内容为绿色。

 注意命令语句之间的空格。

 安装过程中会遇到 “您希望继续执行吗?[Y/n] ”,此处选择y,然后继续安装。


注意:以下代码最好全部手动敲入,不要复制粘贴,否则容易出现错误!


1.数据准备

从http://download.geofabrik.de/asia.html中下载需要的国家地区数据(.osm.pbf)

从 http://www.nominatim.org/release/Nominatim-2.5.1.tar.bz2中下载Nominatim


2.预装软件

sudo apt-get install build-essential wget
sudo apt-get install libxml2-dev wget
sudo apt-get install libpq-dev wget
sudo apt-get update
sudo apt-get install libbz2-dev wget
sudo apt-get install libtool wget
sudo apt-get install automake wget
sudo apt-get install libproj-dev wget
sudo apt-get install libboost-dev wget
sudo apt-get install libboost-system-dev wget
sudo apt-get install libboost-filesystem-dev wget
sudo apt-get install libboost-thread-dev wget
sudo apt-get install libexpat-dev wget
sudo apt-get install gcc wget
sudo apt-get install proj-bin wget
sudo apt-get install libgeos-c1v5wget
sudo apt-get install libgeos++-dev wget

(以上共17个)


ubuntu上默认只能安装php7,而nominatim需要安装php5,所以安装破坏php5时需要执行多步命令。

sudo add-apt-repository ppa:ondrej/php



sudo apt update
sudo apt install php5.6
sudo apt install libapache2-mod-php5.6
sudo apt install php5.6-curl
sudo apt install php5.6-gd
sudo apt install php5.6-mbstring
sudo apt install php5.6-mcrypt
sudo apt install php5.6-mysql
sudo apt install php5.6-xml
sudo apt install php5.6-xmlrpc
sudo a2dismod php7.0                               //系统上如有php7.0,则此命令卸载7.0版本
sudo a2enmod php5.6
sudo systemctl restart apache2

sudo apt-get install php-pear wget
sudo apt-get install php5.6-pgsql wget
sudo apt-get install php5.6-json wget
sudo apt-get install php-db wget
sudo apt-get install osmosiswget
sudo apt-get install postgresql-9.5 wget
sudo apt-get install postgis
sudo apt-get install postgresql-contrib-9.5 wget
sudo apt-get install postgresql-server-dev-9.5 wget
sudo apt-cachesearch postgres                 //获取插件列表查看postgis版本
sudoapt-get install postgresql-9.5-postgis-2.2         //postgresql- 9.5插件为postgis-2.2,postgresql-9.6插件为postgis-2.3

(以上共13 + 11个)


安装pbf支持软件:

sudo apt-get install libprotobuf-c0-dev
sudo apt-get installprotobuf-c-compiler


安装postgre可视化窗口pgadmin3:

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -           //不要落下最后的横线,前面那个是大写字母O,而非数字0
sudo apt-get update
sudo apt-getinstall postgresql-client-9.5
sudo apt-get installpgadmin3
pgadmin3            //打开pgadmin3,以确认是否正确安装。直接关闭窗口则终端也退出。


3.配置postgresql

1) 设置postgres用户,用postgres用户登录并修改密码。

sudo -u postgres psql postgres
\password postgres
\q



pgadmin3       //以下图片中的密码即为上一张图片中设置的密码




2) 配置postgresql

sudo gedit /etc/postgresql/9.5/main/postgresql.conf     //注意gedit后有空格。必须使用命令打开.conf文件,否则修改之后没有权限,不能保存。


在打开的.conf文件中进行参数修改:

fsync = off                                                173 行

full_page_writes =off                              183 行

synchronous_commit= off                       174 行

shared_buffers (2GB)                              113 行

maintenance_work_mem (10GB)            123 行

work_mem (50MB)                                 122 行

effective_cache_size (24GB)                   289 行

checkpoint_segments = 100 (only for PostgreSQL <= 9.4) 

(安装的9.5版本的无此项,无须修改)

checkpoint_timeout = 10min                    196 行

checkpoint_completion_target = 0.9          199行


4.编译并配置Nominatim

1) 下载Nominatim

网址为  http://www.nominatim.org/release/Nominatim-2.5.1.tar.bz2,并提取(解压)到某一目录中(本文存放在“下载”目录中),可以使用以下命令方式,也可以直接在网页中下载然后右键解压(提取),如果在数据准备中已经下载,此处就直接解压(提取)

wget     http://www.nominatim.org/release/Nominatim-2.5.1.tar.bz2                        //下载Nominatim
tar xvf /home/some/下载/Nominatim-2.5.1.tar.bz2    //此后的 “/home/some/下载/” 是本文相关文件的放置地址,右键nominatim文件查看其属性中的路径。
cd /home/some/下载/Nominatim-2.5.1      //注意cd后有空格
./configure         //注意最前面是“.”
make   //最后三句话用于编译nominatim,此步骤若出现错误,根据错误提示重新安装错误软件,根据步骤2重新安装之后再尝试此步骤,直到没有报错为止。lua libraries的报错和警告不用管,nominatim不需要它。




2) 设置nominatim的网络位置

Nominatim目录中的settings目录里新建local.php文件,告知nominatim它在网络服务器上的位置,新建文档内容如下:

<?php

// Paths

@define('CONST_Postgresql_Version', '9.5');

@define('CONST_Postgis_Version', '2.2');

// Website settings

@define('CONST_Website_BaseURL', 'http://localhost/nominatim/');


3) 创建导入账户

导入需要使用与执行导入的帐户同名的postgres超级用户来完成,通过运行以下命令来创建这样的postgres超级用户帐户:

sudo -u postgres createuser -s test  //创建名为test用户(自己设定用户名),这里test用于登录postgres数据库,需要输入系统密码
sudo adduser test        //这里test同上面创建的用户,用于登录ubuntu系统的,此处设置密码为123456,一些内容自己随意填写



4) 新建网站用户

su  test                //密码:123456
createuser -SDRwww-data          //创建后记得要打开看一下是否成功




5) 更改nominatim的读取权限

su  test                //密码:123456
createuser -SDRwww-data          //创建后记得要打开看一下是否成功


5.导入数据

1) 导入osm国家地区数据

osmosis --read-pbf file="/home/some/下载/areaA.osm.pbf" --read-pbf file="/home/some/下载/areaB.osm.pbf" --merge --write-pbf file="/home/some/下载/areaA-areaB.osm.pbf"                               //合并多个国家地区的数据,如果只有一个国家数据则跳过这一步。areaA-areaB.osm.pbf中的areaA-areaB是自己命名。
su test
下载/Nominatim-2.5.1/utils/setup.php --osm-file 下载/areaA-areaB.osm.pbf --all      //向数据库中导入数据。此语句不能复制粘贴,只能手动输入!


如果导入过程中出现问题,可能需要通过删除数据库进行清理,因为在尝试重新创建现有数据库时脚本将失败。使用以下命令来执行此操作:

sudo -u postgresdropdb nominatim


2) 添加额外字段

下载/Nominatim-2.5.1/utils/specialphrases.php--countries > 下载/Nominatim-2.5.1/data/specialphrases_countries.sql
su  test
psql -d nominatim -f 下载/Nominatim-2.5.1/data/specialphrases_countries.sql   //此三句是在搜索索引中添加国家/地区代码和国家/地区
exit
下载/Nominatim-2.5.1/utils/specialphrases.php --wiki-import > 下载/Nominatim-2.5.1/data/specialphrases.sql
su test
psql -d nominatim -f 下载/Nominatim-2.5.1/data/specialphrases.sql      //搜索具体或特殊设施时需要导入特殊的短语
exit


6.建立网站

1) 创建网站的目录,并确保它是可写的安装用户和可读:

sudo mkdir -m 755 /var/www/html/nominatim
sudo chmod 777 /var/www/html/nominatim                         //注意数字之后都有一个空格


2) 使用必要的符号链接填充网站目录:

下载/Nominatim-2.5.1/utils/setup.php --create-website /var/www/html/nominatim


需要确保settings/local.php配置了正确的值CONST_Website_BaseURL



3) 配置apache环境

sudo gedit /etc/apache2/sites-enabled/000-default.conf                 //打开.conf。用命令打开才有权限保存修改后的内容


在最后添加如下内容

<Directory "/var/www/html/nominatim/">

       Options FollowSymLinks MultiViews

       AddType text/html   .php

</Directory>


service apache2restart               // apache配置在更改后需要重启


4) 增加test对数据库nominatim的权限

su test
psql template1
GRANT ALL PRIVILEGES ON DATABASE nominatim to test             //此处test是创建的库,注意按自己的名称
\q
exit


5)运行nominatim

浏览器登陆http://localhost/nominatim/      注意,不论是否联网,可以查到的名称地点应该全都属于你所导入的地区。当联网时会出现具体的地图,当不联网时只能看到轮廓。



打开数据库查看www-data用户有没有数据库读写权限,若没有则执行以下命令:     

sudo gedit /etc/apache2/envvars        

按如下内容修改打开的文件:

exportAPACHE_RUN_USER=test

exportAPACHE_RUN_GROUP=test


6) 局域网设置

按如下内容修改local.php

<?php

// Paths

@define('CONST_Postgresql_Version', '9.5');

@define('CONST_Postgis_Version', '2.2');

// Website settings

@define('CONST_Website_BaseURL', 'http://000.000.000.000/nominatim/');                


以上000.000.000.000为电脑IP

修改后重启Apache

service apache2 restart






http://www.niftyadmin.cn/n/517529.html

相关文章

使用 ArcGIS Pro 对一幅没有空间参考的老照片进行配准

栅格数据可通过卫星影像、航空摄像机和扫描地图等多种来源获取。现代化的卫星影像和航空摄像机往往具有相对准确的位置信息&#xff0c;只需进行轻微调整&#xff0c;就能与其他 GIS 数据对齐。 扫描地图和历史数据通常不包含空间参考信息&#xff0c;需要使用地理配准工具将影…

使用 C# 编写简易 ASP.NET Web 服务器

如果你想获得更好的阅读体验&#xff0c;可以前往我在 github 上的博客进行阅读&#xff0c;http://lcomplete.github.io/blog/2013/07/16/use-csharp-write-aspnet-web-server/。 你是否有过这样的需求——想运行 ASP.NET 程序&#xff0c;又不想安装 IIS 或者 Visual Studio&…

ArcGIS10.8.1ArcGIS Pro2.5 PJ使用下载(文章最下方)

需要软件的同学请直接翻到文章最下方 10.8.1 版本的新特性 服务与发布 在 ArcMap 中创建地图并将要素服务&#xff08;启用了要素访问权限的地图服务&#xff09;发布到 ArcGIS GIS Server 10.8 站点时&#xff0c;要素服务会保留您为地图中的图层定义的字段顺序。 从 ArcGIS…

Krpano学习:软件初识

1.安装注册&#xff1a;官网下载Krpano软件&#xff0c;打开krpano Tools填写注册码。打开krpano-1.19-pr8可以下载这个版本&#xff0c;里面含有注册码&#xff0c;如何使用注册里面也有写。由于上传大小限制&#xff0c;只能压缩成7z的格式&#xff0c;但是rar等软件都可以解…

STL中stack小结

(1)为了运用stack&#xff0c;你必须包含头文件<stack>&#xff1a;#include<stack>(2)在头文件中stack定义如下&#xff1a; namespace std{template <class T, class Container deque<T> >class stack; } 第一个template参数代表元素型别&#xff0…

Krpano学习:信息框的显示与关闭

以下代码全部都写在<scene></scene>里面 <!-- 文本框的属性 textfield.swf是文字插件&#xff0c;首先要让文本框的图层不可显示 --> <layer name"hotspot_pos_info"url"%SWFPATH%/plugins/textfield.swf"visible"false"ht…

全国矢量Shp数据整理,包括省、市、县、森林公园、国家保护区等。

今天查看了一下自己的网盘&#xff0c;发现经常需要用到的行政区划数据存放很乱&#xff0c;有时候临时用到还找不到&#xff0c;所以决定整理一下&#xff0c;同时共享出来给小伙伴们使用。 2015/2017/2019三个数据集中存放了我国的行政区划数据&#xff08;省、市、县&#x…

项目呈现器 classFactory来创建

1.flex4.5以前的写法 例如改变mx:datagrid 的字体颜色 package com.qijinsoft.common {/*** 为mx:itemRenderer提供字体色彩改变* * */import mx.controls.Label;import mx.states.SetStyle;public class ColorLabel extends Label{public function ColorLabel(){super();}over…