在ubuntu 12.04 LTS上搭建OpenStreetMap切片服务

为了简化配置,直接添加别人发布的软件仓库,里面包含发布地图服务需要的一切软件。

sudo add-apt-repository ppa:kakrueger/openstreetmap

更新apt

sudo apt-get update

安装libapache2-mod-tile

sudo apt-get install libapache2-mod-tile

这里会进行配置并创建数据库,需要注意的是,导入数据是需要使用这个用户操作。如果没有配置不对,可以通过sudo dpkg-reconfigure openstreetmap-postgis-db-setup重新配置。我这里加上了当前用户,如www-data,ubuntu。

下载osm数据,全球数据可以到https://planet.openstreetmap.org下载,同时http://download.geofabrik.de为我们提供了不同国家的小数据。我只下载了中国的

wget http://download.geofabrik.de/asia/china-latest.osm.pbf

导入数据库,如果数据大,这一步会非常耗时。调整osm2pgsql参数可加快速度。 这里使用的EC2主机,分配给100M内存和1个处理器,大概用十几分钟。由于EC2性能太低,不得已加上--cache-strategy sparse参数。

osm2pgsql --slim -C 100 --cache-strategy sparse --number-processes 1 china-latest.osm.pbf

设置数据导入时间

sudo touch /var/lib/mod_tile/planet-import-complete

重启渲染服务

sudo /etc/init.d/renderd restart

测试

http://localhost/osm/slippymap.html

http://localhost/osm/0/0/0.png

slippymap

PS: 如果地图显示不出来,查看渲染的日志

tail -f /var/log/syslog |grep renderd

数据更新

mod-tile中提供了增量数据更新工具openstreetmap-tiles-update-expire。试用出现不少问题,并没能成功。

下载增量数据,https://planet.openstreetmap.org/replication/可以找到每天、没小时和每分钟的增量更新包。部分区域每天更新的更新包可以从http://download.geofabrik.de/asia/china-updates/下载。

安装osmosis

初始化更新配置

mkdir WORKDIR
cd WORKDIR
osmosis --read-replication-interval-init

这里会生成configuration.txt文件,修改其中的BaseURL

baseUrl=http://download.geofabrik.de/asia/china-updates/

下载当天的state.txt

wget http://download.geofabrik.de/asia/china-updates/state.txt

以后每天执行更新

osmosis --read-replication-interval --simplify-change --write-xml-change changes.osc.gz
osm2pgsql --append --slim -C 100 --cache-strategy sparse --number-processes 1 changes.osc.gz
sudo touch /var/lib/mod_tile/planet-import-complete

重新下载osm数据并导入数据。

设置数据导入时间

sudo touch /var/lib/mod_tile/planet-import-complete

PS:如果地图没有更新,可调用render_old重新渲染旧切片。同时把浏览器的缓存清除掉。

参考

http://switch2osm.org/serving-tiles/building-a-tile-server-from-packages/

http://blog.csdn.net/goldenhawking/article/details/7952303

comments powered by Disqus