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


    OpenSteetMap官网  http://www.openstreetmap.org/#map=2/39.8/129.0       

    Nominnatim 网页 http://www.nominatim.org/ 这里面包含使用、安装、数据等的网址。

    Nominatim的介绍:http://wiki.openstreetmap.org/wiki/Zh-hans:Nominatim

    Nominatim的安装:http://wiki.openstreetmap.org/wiki/Nominatim/Installation  这个比较不好懂。

    部分国家和地区数据的下载:http://download.geofabrik.de/asia.html   本文使用.osm.pbf 格式,这也是最佳格式。

    Ubuntu16.04下载 https://www.ubuntu.com/download/desktop  下载时付钱的选项全部都设为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

    (以上共13个)


    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.2postgresql-9.6插件为postgis-2.3。)

    (以上共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的读取权限

     

    exit              //退出some,而进入主系统

    chmod +x /home/some/下载            //x后面有一个空格)

    chmod +x /home/some/下载/Nominatim-2.5.1

    chmod +x /home/some/下载/Nominatim-2.5.1/module


    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/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



  • 相关阅读:
    转贴:.net中using的几种用途
    codebehind的优先权大于codeinline
    access的存储过程
    11.26笔记
    vs2005中的快捷键总结
    关于填充datagrid
    猫叫了,所有老鼠开始逃跑经典面试题
    面向对象的三个基本特征(讲解)
    在中文VS2008中安装ASP.NET MVC框架
    测试驱动开发全功略
  • 原文地址:https://www.cnblogs.com/-lurenjia/p/6544532.html
Copyright © 2020-2023  润新知