如何在本地运行open street map服务器


  • administrators

    open street map是一个开源的地图平台。网站http://www.openstreetmap.org/

    网页程序的源代码在这里 https://github.com/openstreetmap/openstreetmap-website/

    虽然官方有安装说明,但是由于说明的太过简略,很多关键地方没有说明,导致想要让程序在本地运行起来都很困难。下面就是我很费劲才摸索出的安装和运行方法。

    以下都是以 Ubuntu 16.04 为例

    安装依赖

    sudo apt-get install ruby2.3 libruby2.3 ruby2.3-dev \
                         libmagickwand-dev libxml2-dev libxslt1-dev nodejs \
                         apache2 apache2-dev build-essential git-core \
                         postgresql postgresql-contrib libpq-dev postgresql-server-dev-all \
                         libsasl2-dev imagemagick
    sudo gem2.3 install bundler
    

    下载源代码

    git clone --depth=1 https://github.com/openstreetmap/openstreetmap-website.git
    

    ruby gems

    cd openstreetmap-website
    bundle install
    

    这里最好先把ruby的源换成国内的,否则速度非常慢,换源的方法可以自己搜索一下

    复制配置文件

    cp config/example.application.yml config/application.yml
    

    配置数据库

    cp config/example.database.yml config/database.yml
    
    sudo -u postgres -i
    createuser -s <username>
    exit
    
    bundle exec rake db:create
    
    psql -d openstreetmap -c "CREATE EXTENSION btree_gist"
    
    cd db/functions
    make libpgosm.so
    cd ../..
    
    psql -d openstreetmap -c "CREATE FUNCTION maptile_for_point(int8, int8, int4) RETURNS int4 AS '`pwd`/db/functions/libpgosm', 'maptile_for_point' LANGUAGE C STRICT"
    psql -d openstreetmap -c "CREATE FUNCTION tile_for_point(int4, int4) RETURNS int8 AS '`pwd`/db/functions/libpgosm', 'tile_for_point' LANGUAGE C STRICT"
    psql -d openstreetmap -c "CREATE FUNCTION xid_to_int4(xid) RETURNS int4 AS '`pwd`/db/functions/libpgosm', 'xid_to_int4' LANGUAGE C STRICT"
    
    bundle exec rake db:migrate
    
    

    测试一下

    bundle exec rake test:db
    

    配置

    以上的步骤都是官方文档里的说明,如果你想要了解更多细节可以看这里

    按照官方文档下面运行

    bundle exec rails server
    

    就可以在http://localhost:3000访问网站了。但是实际上并不可以。

    你还要进行下面的步骤

    1. 编译assets
    bundle exec rake assets:precompile
    

    否则会报各种缺文件的错误

    1. 注册用户
      当你开始编辑的时候需要在本地的网站上注册用户。其中有邮箱的验证过程,然而本地的服务器是不会发邮件的,这样也就没办法认证。解决方法有两种,一种是改数据库里面的数据,设置用户为已认证。另一种就是,虽然没办法发邮件,但是邮件的内容会在终端输出来,把链接地址复制到浏览器里面就可以了。注意吧地址改成本地的。

    2. 申请用户token
      当你注册完成之后你会发现你没办法保存自己修改的地图。甚至无法打开地图编辑页面。会有各种create_token没有定义的错误。这是由于没有给自己本地的网站设置token的原因。
      在浏览器打开http://localhost:3000/user/randoms/oauth_clients/new其中的randoms要换成你自己注册的用户名。打开如下的界面

    0_1499324670768_TIM截图20170706150411.png

    名字可以随便输入,Main Application URL 写成 http://localhost:3000,当然如果你的地址不是localhost要根据自己的情况进行调整。把下面的选项全部勾上,点击注册就可以了。

    注册完成之后会出现下面的页面

    0_1499324858307_TIM截图20170706150730.png

    这样我们就获得了Consumer Key

    打开源代码中的config/application.yml文件
    server_url的值修改成http://localhost:3000
    oauth_key的值修改成刚才获得的Consumer Key
    id_key的值修改成刚才获得的Consumer Key

    保存修改然后运行

    bundle exec rails server
    

    就可以在本地使用了

    最后再吐槽一下官方的文档,缺少的东西太多了。。。


登录后回复
 

与 蓝鲸技术论坛 的连接断开,我们正在尝试重连,请耐心等待