在Ubuntu16-04版本上搭建离线免费地图osm(一)

开放街道图OpenStreetMap,也就是osm,是一个网上地图协作计划,目的是创造一个内容自由且能让所有人都编辑的世界地图。这个教程会叫你如何搭建一个自己的OSM服务器,配置是Ubuntu16.04,2GB RAM,40GB硬盘空间。

step1:升级软件

sudo apt update
sudo apt upgrade

step2:安装PostgreSQL Database Server和PostGIS

我们会使用PostgreSQL存储地图数据。PostGIS是一个地理空间插件,使用下面的命令安装。

sudo apt install postgresql postgresql-contrib postgis postgresql-9.5-postgis-2.2

用户postgres将在安装过程中创建。这允许使用对等体认证。让我们切换到postgres用户。

sudo -u postgres -i

创建一个PostgreSQL用户。

createuser osm

创建一个数据库gis,同时令osm为数据库的所有者,设置字符编码为utf8

createdb -E UTF8 -O osm gis

创建hstore和postgis扩展。

psql -c "CREATE EXTENSION hstore;" -d gis
psql -c "CREATE EXTENSION postgis;" -d gis

从用户postgre离开。

exit

在系统上创建osm用户。

sudo adduser osm

step3:下载 Map Stylesheet和Map Data

首先切换至osm用户

su - osm

下载最新的 CartoCSS map stylesheets到osm用户的家目录

wget https://github.com/gravitystorm/openstreetmap-carto/archive/v2.41.0.tar.gz

解压

tar xvf v2.41.0.tar.gz

下载map data至osm家目录,使用下面的数据下载整个地图的地图数据。

wget -c http://planet.openstreetmap.org/pbf/planet-latest.osm.pbf

如果只想导入某一个国家的地图数据,可以去http://download.geofabrik.de或者BBBike.org自行下载。

以英国为例(847M):

wget -c http://download.geofabrik.de/europe/great-britain-latest.osm.pbf

之后离开osm用户

exit

导入数据需要占用许多ram资源,如果你的物理机器ram有限,

step4:导入map data至PostgreSQL

为了导入数据,我们需要安装osm2pgsql。

sudo apt install osm2pgsql

切换至som用户。

su - osm

使用下面的命令进行导入,great-britain-latest.osm.pbf
替换成你自己的map data。

osm2pgsql --slim -d gis -C 3600 --hstore -S openstreetmap-carto-2.41.0/openstreetmap-carto.style great-britain-latest.osm.pbf

osm2gpsql将会以简洁模式运行,-d 表示–database.-C 表示具体缓存的大小,
缓存越大导入速度也越大,但是需要你的ram有足够的空间,-S标志具体的样式文件,最终你需要指定地图数据文件。
导入完成后,退出osm用户。

exit

step:安装mod_tile

mod_tile是apache上面的一个模块用来对瓦片提供服务,Ubuntu上没有可用的二进制包,我们从github上获取。

首先安装依赖:

sudo apt install git autoconf libtool libmapnik-dev apache2-dev

clone 仓库

git clone https://github.com/openstreetmap/mod_tile.git
cd mod_tile/

编译 安装

./autogen.sh
./configure
make
sudo make install
sudo make install-mod_tile

step6:生成Mapnik Stylesheet

安装需要的包

sudo apt install curl unzip gdal-bin mapnik-utils node-carto

切换至osm用户

su - osm

切换至样式目录

cd openstreetmap-carto-2.41.0/

得到 shapefiles

./get-shapefiles.sh

构建mapnik xml 样式文件

carto project.mml > style.xml

退出osm用户

exit

step7:配置渲染

编辑渲染配置文件。

sudo nano /usr/local/etc/renderd.conf

在[default]节,修改xml和host值。

XML=/home/osm/openstreetmap-carto-2.41.0/style.xml
HOST=localhost

在[mapnik]节,修改plugins_dir值。

plugins_dir=/usr/lib/mapnik/3.0/input/

保存文件。
安装渲染初始化脚本。

sudo cp mod_tile/debian/renderd.init /etc/init.d/renderd

授予执行权限。

sudo chmod a+x /etc/init.d/renderd

编辑初始化脚本。

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

开始渲染服务。

sudo systemctl daemon-reload
sudo systemctl start renderd
sudo systemctl enable renderd

step8:配置apache

安装apache web server

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

浏览器访问

your-server-ip/osm_tiles/0/0/0.png

你可能感兴趣的:(osm,map,server)