<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[如何在本地运行open street map服务器]]></title><description><![CDATA[<p dir="auto"><code>open street map</code>是一个开源的地图平台。网站<a href="http://www.openstreetmap.org/" target="_blank" rel="noopener noreferrer">http://www.openstreetmap.org/</a></p>
<p dir="auto">网页程序的源代码在这里 <a href="https://github.com/openstreetmap/openstreetmap-website/" target="_blank" rel="noopener noreferrer">https://github.com/openstreetmap/openstreetmap-website/</a></p>
<p dir="auto">虽然官方有安装说明，但是由于说明的太过简略，很多关键地方没有说明，导致想要让程序在本地运行起来都很困难。下面就是我很费劲才摸索出的安装和运行方法。</p>
<p dir="auto">以下都是以 Ubuntu 16.04 为例</p>
<h4>安装依赖</h4>
<pre><code>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
</code></pre>
<h4>下载源代码</h4>
<pre><code>git clone --depth=1 https://github.com/openstreetmap/openstreetmap-website.git
</code></pre>
<h4>ruby gems</h4>
<pre><code>cd openstreetmap-website
bundle install
</code></pre>
<p dir="auto">这里最好先把ruby的源换成国内的，否则速度非常慢，换源的方法可以自己搜索一下</p>
<h4>复制配置文件</h4>
<pre><code>cp config/example.application.yml config/application.yml
</code></pre>
<h4>配置数据库</h4>
<pre><code>cp config/example.database.yml config/database.yml

sudo -u postgres -i
createuser -s &lt;username&gt;
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

</code></pre>
<h4>测试一下</h4>
<pre><code>bundle exec rake test:db
</code></pre>
<h4>配置</h4>
<p dir="auto">以上的步骤都是官方文档里的说明，如果你想要了解更多细节可以看<a href="https://github.com/openstreetmap/openstreetmap-website/blob/master/INSTALL.md" target="_blank" rel="noopener noreferrer">这里</a></p>
<p dir="auto">按照官方文档下面运行</p>
<pre><code>bundle exec rails server
</code></pre>
<p dir="auto">就可以在<code>http://localhost:3000</code>访问网站了。但是实际上并不可以。</p>
<p dir="auto">你还要进行下面的步骤</p>
<ol>
<li>编译assets</li>
</ol>
<pre><code>bundle exec rake assets:precompile
</code></pre>
<p dir="auto">否则会报各种缺文件的错误</p>
<ol start="2">
<li>
<p dir="auto">注册用户<br />
当你开始编辑的时候需要在本地的网站上注册用户。其中有邮箱的验证过程，然而本地的服务器是不会发邮件的，这样也就没办法认证。解决方法有两种，一种是改数据库里面的数据，设置用户为已认证。另一种就是，虽然没办法发邮件，但是邮件的内容会在终端输出来，把链接地址复制到浏览器里面就可以了。注意吧地址改成本地的。</p>
</li>
<li>
<p dir="auto">申请用户token<br />
当你注册完成之后你会发现你没办法保存自己修改的地图。甚至无法打开地图编辑页面。会有各种create_token没有定义的错误。这是由于没有给自己本地的网站设置token的原因。<br />
在浏览器打开<code>http://localhost:3000/user/randoms/oauth_clients/new</code>其中的<code>randoms</code>要换成你自己注册的用户名。打开如下的界面</p>
</li>
</ol>
<p dir="auto"><img src="/assets/uploads/files/1499324673343-tim%E6%88%AA%E5%9B%BE20170706150411.png" alt="0_1499324670768_TIM截图20170706150411.png" class=" img-responsive img-markdown" /></p>
<p dir="auto">名字可以随便输入，Main Application URL 写成 <code>http://localhost:3000</code>，当然如果你的地址不是localhost要根据自己的情况进行调整。把下面的选项全部勾上，点击注册就可以了。</p>
<p dir="auto">注册完成之后会出现下面的页面</p>
<p dir="auto"><img src="/assets/uploads/files/1499324860459-tim%E6%88%AA%E5%9B%BE20170706150730.png" alt="0_1499324858307_TIM截图20170706150730.png" class=" img-responsive img-markdown" /></p>
<p dir="auto">这样我们就获得了<code>Consumer Key</code>了</p>
<p dir="auto">打开源代码中的<code>config/application.yml</code>文件<br />
把<code>server_url</code>的值修改成<code>http://localhost:3000</code><br />
把<code>oauth_key</code>的值修改成刚才获得的<code>Consumer Key</code><br />
把<code>id_key</code>的值修改成刚才获得的<code>Consumer Key</code></p>
<p dir="auto">保存修改然后运行</p>
<pre><code>bundle exec rails server
</code></pre>
<p dir="auto">就可以在本地使用了</p>
<p dir="auto">最后再吐槽一下官方的文档，缺少的东西太多了。。。</p>
]]></description><link>http://community.bwbot.org/topic/211/如何在本地运行open-street-map服务器</link><generator>RSS for Node</generator><lastBuildDate>Thu, 11 Jun 2026 01:43:53 GMT</lastBuildDate><atom:link href="http://community.bwbot.org/topic/211.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 06 Jul 2017 07:16:06 GMT</pubDate><ttl>60</ttl></channel></rss>