OpenStreetMap地图服务器安装


优麒麟设置root密码:

sudo passwd root

一.升级系统

sudo apt update
sudo apt upgrade

二.安装PostgreSQL数据库和PostGIS扩展

sudo apt install postgresql
sudo apt install postgresql-contrib
sudo apt install postgis postgresql-postgis

安装语言

export LANGUAGE="en_US.UTF-8"
export LANG="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"
sudo locale-gen en_US.UTF-8
sudo dpkg-reconfigure locales

ubuntu下postgres用户并登录PostgreSQL服务器:

sudo -u postgres -i

执行psql命令,并设置postgres用户登录密码:

psql postgres
postgres=# \password
Enter new password: 
Enter it again: 
postgres=#\q

创建用户osm

createuser osm

然后创建一个名为gis的数据库,同时将osm作为数据库的所有者,-E UTF8指定要在数据库中使用的字符编码方案是UTF8:

createdb -E UTF8 -O osm gis

接下来,为gis数据库创建postgis和hstore扩展:

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

将osm设置为表所有者:

psql -c "ALTER TABLE spatial_ref_sys OWNER TO osm;" -d gis

退出postgres用户:

exit

创建ubuntu的osm用户便后续使用:

sudo adduser osm

三.下载地图样式表和上传地图数据

切换osm用户:

su - osm

将最新的CartoCSS地图样式表下载到osm用户的主目录

wget https://github.com/gravitystorm/openstreetmap-carto/archive/v4.20.0.tar.gz

解压:

tar -zxvf v4.20.0.tar.gz

上传地图数据到osm用户的目录,osm数据下载地址:

http://download.openstreetmap.fr/extracts/asia/china/
http://download.geofabrik.de/asia.html

退出osm用户

exit

四.将地图数据导入PostgresSQL

需安装工具:osm2pgsql

sudo apt install osm2pgsql

运行以下命令以将地图样式表和地图数据加载到gis数据库中,用你自己的地图数据文件替换

su - osm

osm2pgsql --slim -d gis --hstore --multi-geometry --number-processes 8 --tag-transform-script /home/osm/openstreetmap-carto-4.20.0/openstreetmap-carto.lua --style /home/osm/openstreetmap-carto-4.20.0/openstreetmap-carto.style /home/osm/shanghai-latest.osm.pbf

退出osm用户

exit

相关说明:
–username osm:指定数据库用户。
–slim:以苗条模式而不是普通模式运行,如果要在将来使用OSM更改文件(OSC)更新地图数据,则需要此选项。
-d gis:选择数据库。
–hstore:将不带列的标记添加到PostgreSQL表的其他hstore(键/值)列。
–multi-geometry:在postgresql表中生成多几何特征。
–style:指定样式文件的位置。
–number-processes:服务器上的CPU核心数。
-C选项以兆字节为单位指定缓存大小,较大的缓存大小导致更快的导入速度,但你需要有足够的RAM来使用缓存
-最后,需要指定地图数据文件的位置。

五.安装mapnik mod_tile

安装 mapnik

sudo apt install -y libmapbox-variant-dev libmapnik-dev libmapnik3.0 mapnik-doc mapnik-reference mapnik-utils nik4 node-carto node-millstone node-tilelive python3-mapnik 
# 其他软件安装
sudo apt install git
sudo apt install autoconf
sudo apt install libtool
sudo apt install apache2-dev
sudo apt-get install -y g++

mod_tile源码下载

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

编译安装

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

make 时的报错:

报错1:
在这里插入图片描述
解决办法:

编译安装 iniparser ,并复制相应文件到相应目录下

#下载地址
https://gitcode.net/mirrors/ndevilla/iniparser?utm_source=csdn_github_accelerator

#下载文件后解压,进入目录,执行make命令安装
unzip iniparser-master.zip
make

如下图所示表示 iniparser 安装成功!
在这里插入图片描述
安装完成后,复制如下文件到 /home/osm/mod_tile/iniparser/ 目录下
在这里插入图片描述
示例命令如下:

mkdir -p /home/osm/mod_tile/iniparser
cp /home/good/iniparser-master/src/iniparser.h /home/osm/mod_tile/iniparser/
cp /home/good/iniparser-master/src/dictionary.h /home/osm/mod_tile/iniparser/

报错2:
在这里插入图片描述
由上可见,make生成了libiniparser.a静态库和 libiniparser.so.1动态库。一般 Linux 系统把/lib/usr/lib 两个目录作为默认的库搜索路径,使用这两个目录中的库时不需要进行设置搜索路径即可直接使用,所以可以把这两个库文件直接拷贝到对应的目录下。

cp /home/good/iniparser-master/libiniparser.a /usr/lib
cp /home/good/iniparser-master/libiniparser.so.1 /usr/lib

运行结果如下表示 mod_tile 安装成功!
在这里插入图片描述

六.添加中文支持

sudo apt-get -y install fonts-wqy-zenhei
sudo apt-get -y install unifont
sudo apt-get -y install ttf-unifont

七.生成Mapnik Stylesheet

sudo apt install curl
sudo apt install unzip
sudo apt install gdal-bin
sudo apt install mapnik-utils
sudo apt install npm
sudo npm install -g carto

切换至osm用户,创建data文件夹用于存放下载的边界文件

su - osm
cd openstreetmap-carto-4.20.0
mkdir data

# 上传如下边界文件到data目录下并解压
# antarctica-icesheet-outlines-3857.zip
# antarctica-icesheet-polygons-3857.zip
# land-polygons-split-3857.zip
# ne_110m_admin_0_boundary_lines_land.zip
# simplified-land-polygons-complete-3857.zip
# world_boundaries-spherical.tgz

如下图所示
在这里插入图片描述

构建mapnik xml 样式文件

carto project.mml > style.xml

会看见有一个 style.xml的文件,里面是这样的
...
退出osm用户

exit

八.配置渲染文件

编辑渲染配置文件。

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

修改如下配置

# 在[default]下,修改xml和host值。
[default]
XML=/home/osm/openstreetmap-carto-4.20.0/style.xml
HOST=localhost

# 在[mapnik]下,修改plugins_dir值。
[mapnik]
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 vim /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

手动启动渲染服务

mkdir /run/renderd
sudo -u 'osm' renderd -f -c /usr/local/etc/renderd.conf

九.配置Apache服务器

安装apache web server

sudo apt install apache2

创建模块加载文件。

sudo vim /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 vim /etc/apache2/sites-enabled/000-default.conf

<VirtualHost *:80>下粘贴下面语句。

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

重启 apache2

sudo systemctl restart apache2

用你的浏览器访问:

localhost/osm_tiles/0/0/0.png
localhost/mod_tiles/0/0/0.png

十.使用Leftlet在网页上显示和操作地图

要使用 Leftlet 显示你的地图,需要下载 JavaScript 和 CSS 并将其解压缩到 Web 根文件夹:

cd /var/www/html

sudo wget http://cdn.leafletjs.com/leaflet/v1.4.0/leaflet.zip

sudo unzip leaflet.zip

接下来,创建map.html文件:

sudo vim /var/www/html/map.html

将以下HTML代码粘贴到文件中,替换并根据需要调整经度,纬度和缩放级别:

<html>
<head>
<meta charset="UTF-8">
<title>My first osm</title>
<link rel="stylesheet" type="text/css" href="leaflet.css"/>
<script type="text/javascript" src="leaflet.js"></script>
<style>
#map{width:100%;height:100%}
</style>
</head>
<body>
<div id="map"></div>
<script>
var map = L.map('map').setView([0,0],5);
L.tileLayer('http://localhost/osm_tiles/{z}/{x}/{y}.png',{maxZoom:18}).addTo(map);
</script>
</body>
</html>

保存并关闭文件,通过在浏览器中输入服务器IP地址来查看你的 slippy 地图:http://localhost/map.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值