国内关于OpenStreetMap的资料较少,主要通过整理国外网站资料加自己多方尝试,终于成功搭建环境。本教程在Ubuntu16.04中进行了测试,运行良好。Openstreetmap服务器需要至少2GB RAM以及40GB的内存。
sudo apt update
sudo apt upgrade
http://blog.csdn.net/sinat_23246437/article/details/54341755
http://blog.csdn.net/sinat_23246437/article/details/54341972
http://blog.csdn.net/sinat_23246437/article/details/54342551
sudo apt-get -y install fonts-wqy-zenhei
sudo apt-get install unifont
sudo apt-get install ttf-unifont
su - osm
wget https://github.com/gravitystorm/openstreetmap-carto/archive/v2.41.0.tar.gz
tar xvf v2.41.0.tar.gz
cd openstreetmap-carto-2.41.0/
./get-shapefiles.sh
carto project.mml > style.xml
exit
其中 get-shapefiles.sh 将会花费大量的时间。
编辑renderd配置文件
sudo nano /usr/local/etc/renderd.conf
在[default]区域,改变XML、HOST配置。
XML=/home/osm/openstreetmap-carto-2.41.0/style.xml
HOST=localhost
在[mapnik]区域,改变mapnik的引用路径
plugins_dir=/usr/lib/mapnik/3.0/input/
保存文件。
安装apache网页服务器:
sudo apt install apache2
创建一个模块来加载文件:
sudo nano /etc/apache2/mods-available/mod_tile.load
粘贴下列代码到文件中
LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so
创建一个链接
sudo ln -s /etc/apache2/mods-available/mod_tile.load /etc/apache2/mods-enabled/
然后,编辑下列的初始配置
sudo nano /etc/apache2/sites-enabled/000-default.conf
粘贴以下行至
LoadTileConfigFile /usr/local/etc/renderd.conf
ModTileRenderdSocketName /var/run/renderd/renderd.sock
# Timeout before giving up for a tile to be rendered
ModTileRequestTimeout 0
# Timeout before giving up for a tile to be rendered that is otherwise missing
ModTileMissingRequestTimeout 30
保存文件并重启Apache
sudo systemctl restart apache2
sudo -u 'osm' renderd -f -c /usr/local/etc/renderd.conf
在网页浏览器中输入:your-server-ip/osm_tiles/0/0/0.png,如果出现了一张世界地图,说明搭建的服务器成功能。
通过拷贝mod_tile的init脚本安装renderd init脚本:
sudo cp mod_tile/debian/renderd.init /etc/init.d/renderd
赋予权限
sudo chmod a+x /etc/init.d/renderd
编辑init脚本文件
sudo nano /etc/init.d/renderd
改变下列的变量值
DAEMON=/usr/local/bin/$NAME
DAEMON_ARGS="-c /usr/local/etc/renderd.conf"
RUNASUSER=osm
保存文件。
创建下列文件,使得osm可以操作这些文件
sudo mkdir -p /var/lib/mod_tile
sudo chown osm:osm /var/lib/mod_tile
然后开始renderd service
sudo systemctl daemon-reload
sudo systemctl start renderd
sudo systemctl enable renderd