阅读 372

OSM学习之路(六):基于Ubuntu搭建逆地理服务器(OSM地图服务器搭建)

1、数据准备

从download.geofabrik.de/asia.html中下…

从planet.openstreetmap.org/pbf/中下载世界地图…

从 www.nominatim.org/release/Nom…

2、必要软件安装

用户状态:jtrj

桌面—右键—打开终端,逐个录入如下命令 ;

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-c1v5 wget

sudo apt-get install libgeos++-dev wget


ubuntu上默认只能安装php7,而nominatim需要安装php5,所以安装破坏

php5时需要执行多步命令。逐个执行下列指令;

sudo add-apt-repository ppa:ondrej/php

image.png

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-cache search postgres                 //获取插件列表查看postgis版本

sudo apt-get install postgresql-9.5-postgis-2.2

//postgresql- 9.5插件为postgis-2.2,postgresql-9.6插件为postgis-2.3

安装pbf支持软件:

sudo apt-get install libprotobuf-c0-dev

sudo apt-get install protobuf-c-compiler

安装postgre可视化窗口pgadmin3:

1)wget --quiet -O - www.postgresql.org/media/keys/… | sudo apt-key add -           //不要落下最后的横线,前面那个是大写字母O,而非数字0

2)     sudo apt-get update

3)     sudo apt-get install postgresql-client-9.5

4)     sudo apt-get install pgadmin3

5)     pgadmin3        //打开pgadmin3,以确认是否正确安装。直接关闭窗口则终端也退出。

3、配置postgresql

用户状态:jtrj

  1. 设置postgres用户,用postgres用户登录并修改密码。复制代码

sudo -u postgres psql postgres

\password postgres                     //密码设置为postgres即可

\q

image.png

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

image.png

  1. 配置postgresql

sudo gedit  /etc/postgresql/9.5/main/postgresql.conf

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

去掉 “#” 号,修改参数

shared_buffers = 2GB                             113 行

work_mem = 50MB                                  122 行

maintenance_work_mem = 10GB                      123 行

fsync = off                                      173 行

synchronous_commit= off                          174 行

full_page_writes = off                           183 行

checkpoint_timeout = 10min                       196 行

checkpoint_completion_target = 0.9               199 行

effective_cache_size = 24GB                      289 行

4、编译Nominatim

用户状态:jtrj

  1. 下载Nominatim

默认下载到 /home/jtrj/目录下,点击鼠标右键—提取,进行解压即可,然后逐个执行以下指令;

2) 编译Nominatim

cd  /home/jtrj/下载/Nominatim-2.5.1      //第一条指令,注意cd后有空格

./configure         //第二条指令,注意最前面是“.”,执行这个指令时如果出现lua错误或警告,需执行下面两条指令,再执行make指令;

sudo apt-get install libreadline-dev

sudo apt-get install lua5.2 lua5.2-doc liblua5.2-dev

make   //第三条指令,最后三句话用于编译nominatim,执行make指令需要点时间,请耐心等待。

  1. 设置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/');`

5、创建导入账户,用于导入数据

用户状态:先是普通用户jtrj,创建完test用户后,切换到test用户,逐条语句执行。

sudo -u postgres createuser -s test   (postgres的)

sudo adduser test            //(test密码随意,123456)

sudo passwd root         //第一次进入操作系统,根用户root默认没有密码,因此需要先设置root用户密码,根据提示录入新密码即可。

su root                        //切换到root用户

chmod 777  /etc/sudoers

打开文件,进入 /etc目录,打开sudoers文件;

在”root    ALL=(ALL) ALL “下添加:test    ALL=(ALL) ALL

然后保存退出,再修改回sudoers的状态;

chmod 440  /etc/sudoers

exit

su test               //切换到test用户,密码:123456

createuser -SDR www-data           (创建postgres用户) //创建后记得要打开看一下是否成功,需要切换到jtrj用户查看

image.png

6、导入数据

用户状态:test

(1)如果需要导入全球数据,可进入到这个网站下载全球地图数据:

从planet.openstreetmap.org/pbf/中下载世界地图…

执行导入操作:

/home/jtrj/下载/Nominatim-2.5.1/utils/setup.php --osm-file /home/jtrj/下载/plant-190422.osm.pbf --all      //向数据库中导入数据。此语句不能复制粘贴,只能手动输入!

//osm数据也存放到/home/jtrj/下载 目录下,方便操作

(2)如果需要合并两个地区的数据,可进入到如下网站下载各地区数据:

从download.geofabrik.de/asia.html中下…

执行合并操作:

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是自己命名。

合并完毕后再执行导入操作,语句同全球导入数据一样,更换osm文件名即可。

注意: (1)这里,如果刚执行命令时报 php找不到DB的错误,执行  sudo pear install DB (2)如果是导入过程中出现错误,要删除数据库再重新导入, 删除命令为:

sudo -u postgres dropdb nominatim

(3)在导入过程中,可能会出现如下的报错情况:

index_placex: UPDATE failed: ERROR:  buffer 238141 is not owned by resource owner PortalCONTEXT:  SQL statement "INSERT INTO search_name_95 values (in_place_id, in_rank_search, in_rank_address, in_name_vector, in_geometry)"PL/pgSQL function insertsearchname(integer,bigint,character varying,integer[],integer[],integer,integer,double precision,geometry,geometry) line 436 at SQL statement PL/pgSQL function placex_update() line 359 at assignment

ERROR: Error executing external command: /home/jtrj/下载/Nominatim-2.5.1/nominatim/nominatim -i -d nominatim -P 5432 -t 15 -r 26

Error executing external command: /home/jtrj/下载/Nominatim-2.5.1/nominatim/nominatim -i -d nominatim -P 5432 -t 15 -r 26

继续执行指令:

/home/jtrj/下载/Nominatim-2.5.1/nominatim/nominatim -i -d nominatim -P 5432 -t 15 -r 26 执行该指令的时候如果出现提示ubuntu16.04系统内部错误之类的,建议重启服务器再执行,该条指令需要等待很长时间,可能长达24小时,请耐心等待。

在执行过程中会反复出现类似的报错或其他报错,继续执行该条指令直到导入完毕即可。

(4)添加额外字段(以下语句可待完全配置成功后再执行)

/home/jtrj/下载/Nominatim-2.5.1/utils/specialphrases.php--countries >  /home/jtrj/下载/Nominatim-2.5.1/data/specialphrases_countries.sql

su  test                 //切换到test用户

psql -d nominatim -f  /home/jtrj/下载/Nominatim2.5.1/data/specialphrases_countries.sql

//此三句是在搜索索引中添加国家/地区代码和国家/地区

Exit

/home/jtrj/下载/Nominatim-2.5.1/utils/specialphrases.php --wiki-import >  /home/jtrj/下载/Nominatim-2.5.1/data/specialphrases.sql

su test                  //切换到test用户

psql -d nominatim -f  /home/jtrj/下载/Nominatim-2.5.1/data/specialphrases.sql

//搜索具体或特殊设施时需要导入特殊的短语

exit

7、建立网站

用户状态:test

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

sudo mkdir -m 755 /var/www/html/nominatim

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

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

/home/jtrj/下载/Nominatim-2.5.1/utils/setup.php --create-website

/var/www/html/nominatim          //这两行文字是一条指令,/var前面有一个空格

(3)配置apache环境

sudo gedit /etc/apache2/sites-enabled/000-default.conf          //打开.conf文件

在最后添加如下内容

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

        Options FollowSymLinks MultiViews

        AddType text/html   .php复制代码

`

(4)修改后重启Apache

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

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

su test

psql template1

GRANT ALL PRIVILEGES ON DATABASE nominatim to test

//此处test是创建的库,注意按自己的名称

\q

Exit

(6)运行nominatim

浏览器登陆http://localhost/nominatim/      注意,不论是否联网,可以查到的名称地点

应该全都属于你所导入的地区。当联网时会出现具体的地图,当不联网时只能看到轮廓。

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

sudo gedit /etc/apache2/envvars

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

exportAPACHE_RUN_USER=test

exportAPACHE_RUN_GROUP=test

(7)局域网设置

按如下内容修改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

8、修改IP地址为静态IP

(1)点击桌面右上角的网络图标,选择 Edit Connections;

image.png

(2)选中ens33,点击Edit按钮;

image.png

(3)进入编辑页面,点击Ipv4 Settings,如图:

image.png

(4)Method选择:Manual;录入该电脑的静态IP、网关和DNS;

可在桌面上打开终端,输入如下命令查找IP等信息;

image.png

查看DNS

image.png

9、设置局域网 打开Nominatim-2.5.1/settings/local.php 文件,将最后一行的:

http://localhost/nominatim

改为:

http://192.168.1.43/nominatim     # 192.168.1.43是我服务器的静态IP(根据自己的情况修改)

后面我整理一下nominatim使用的API,到时候我们开发应用可以直接使用OSM来做开发。

其中遇到过一些问题,可能在导入中会出现错误,如果只是使用反地理编码可以继续执行文中提到的那条语句,最后也能完全导入。

后面我更换了自己用IP SAN改造的那台性能强悍的服务器后,大概只用了一个星期的时间,没有任何问题的执行完成了。

image.png


作者:物联网_咸鱼
链接:https://juejin.cn/post/7022824839949844510

文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐