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
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
pgadmin3 //以下图片中的密码即为上一张图片中设置的密码
- 配置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
- 下载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指令需要点时间,请耐心等待。
- 设置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/');`](http://localhost/nominatim/');%60)
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用户查看
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/“>
1 | markdown复制代码 Options FollowSymLinks MultiViews |
`
(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;
(2)选中ens33,点击Edit按钮;
(3)进入编辑页面,点击Ipv4 Settings,如图:
(4)Method选择:Manual;录入该电脑的静态IP、网关和DNS;
可在桌面上打开终端,输入如下命令查找IP等信息;
查看DNS
9、设置局域网
打开Nominatim-2.5.1/settings/local.php 文件,将最后一行的:
改为:
http://192.168.1.43/nominatim # 192.168.1.43是我服务器的静态IP(根据自己的情况修改)
后面我整理一下nominatim使用的API,到时候我们开发应用可以直接使用OSM来做开发。
其中遇到过一些问题,可能在导入中会出现错误,如果只是使用反地理编码可以继续执行文中提到的那条语句,最后也能完全导入。
后面我更换了自己用IP SAN改造的那台性能强悍的服务器后,大概只用了一个星期的时间,没有任何问题的执行完成了。
本文转载自: 掘金