离线地图解决方案一

血红的双手。 提交于 2019-12-29 07:42:23

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

离线地图使用私有OSM Server作为Tile服务器, 前端使用Openlayer渲染地图数据. 共实践了两种安装环境(准确来说是三种, 但是放弃了在Redhat 6.5的部署...).

#Ubuntu 16.04 安装介绍

环境

名称 说明
OS ubuntu 16.04 x64

参考 https://switch2osm.org/serving-tiles/manually-building-a-tile-server-14-04/

安装说明

除一下两点外, 都可以按照参考文档安装.

  1. 安装Mapnik部分

可以通过apt安装, 不用从源码编译.

apt install libmapnik-dev libmapnik3.0 mapnik-utils mapnik-vector-tile python-mapnik python3-mapnik
sudo apt install libmapnik-dev libmapnik3.0 mapnik-utils mapnik-vector-tile python-mapnik python3-mapnik
  1. 配置mod_tile部分
vim /usr/local/etc/renderd.conf
plugins_dir=/usr/lib/mapnik/3.0/input

值修改为mapnik-config --input-plugins的结果.

CentOS 7安装介绍

环境

名称 说明
OS CentOS 7.2 x64
HTTP server httpd

安装过程主要流程参考Manually building a tile server (14.04),这个网站是针对Ubuntu 14.04写的,但是需要安装的软件基本相同,可以参考这个教程安装配置OSM Server。这里如无特殊说明的话,均在root用户下操作。

安装epel-release & 更新系统软件

yum install epel-release
yum update

安装 PostgreSQL DB.

参考这里 or:

  1. 安装postgresql 9.5的repo并安装postgresql 9.5
rpm -ivh http://yum.postgresql.org/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-2.noarch.rpm
yum install postgresql95 postgresql95-server postgresql95-libs postgresql95-contrib postgresql95-devel
  1. 初始化数据库并启动数据库
/usr/pgsql-9.5/bin/postgresql95-setup initdb
service postgresql-9.5 start
  1. 设置开机启动
chkconfig postgresql-9.5 on
  1. 添加用户

这里添加的用户名为usergis,可以按需替换,后续的usergis都要替换。

adduser -m usergis
passwd usergis
  1. 创建数据库gis
sudo -u postgres -i
createuser usergis
createdb -E UTF8 -O usergis gis
exit

安装postgis

根据安装的postgresql版本选择postgis软件,这里postgresql使用的是9.5的版本,所以采用postgis2_95,95是postgresql的版本号。

  1. 在postgresql上搭建postgis
yum install postgis2_95 postgis2_95-client
sudo -u postgres -i
\c gis
CREATE EXTENSION postgis;
ALTER TABLE geometry_columns OWNER TO usergis;
ALTER TABLE spatial_ref_sys OWNER TO usergis;
\q
exit

安装osm2pgsql

安装过程尽量采用GitHub上osm2pgsql的安装介绍,这里说明一下依赖的安装。

进入osm2pgsql目录,创建build目录并cd build/

yum install cmake
yum install expat
yum install expat-devel
yum install bzip
yum install bzip2
yum install bzip2-devel
yum install zlib-devel
yum install geos-devel
yum install proj-devel
yum install liblua-devel
yum install lua-devel
yum install boost-devel

依赖安装完成后就可以开始编译了

cmake ..
make
make install

安装Mapnik library

同osm2pgsql一样,我们也尽量follow官方安装流程,点这里。 这里说一下依赖的安装。

这里我们使用branch为2.2.x,你也可以使用最新版本。切换方法:

git branch 2.2 origin/2.2.x
git checkout 2.2 -f

如果使用3.x的版本,mapnik库文件的安装位置可能发生改变,在后边配置renderd.conf的时候需要根据mapnik-config --input-plugins来配置。

安装依赖

yum install freetype-config
yum install libicu-devel
yum install harfbuzz-devel
yum install freetype-devel
yum install libjpeg-devel libpng-devel libtiff-devel libxml2-devel
yum install python-devel

这里mapnik的lib安装在/usr/local/lib/libmapnik.so.2.2,需要将此目录包含在ld的search path中,创建/编辑/etc/ld.so.conf,加入一行/usr/local/lib

ldconfig

然后可以愉快的开始编译安装了。安装完成后参考官方文档测试mapnik可以正常被python搜索到即可。

安装mod_tile

同上参考官方安装手册,点这里。这里介绍依赖的安装。

安装依赖:

yum install httpd-devel

开始编译安装吧。

Stylesheet configuration

安装过程参考*Manually building a tile server (14.04)*的说明即可,这里我们的Web Server为httpd,so 启动服务的时候需要相应修改。需要注意的是在上文这一节结尾的make.py部分,有部分依赖需要安装。

yum search carto
yum install libcairo
yum install cairo
yum install nodejs
yum install npm

高版本的nodejs已经内置了npm,不需要单独安装。这里我们使用的是默认repo中0.10.x的版本。

npm i -g carto
npm i -g millstone

之后就可以执行./make.py了。

搞定Web Server

基本参考*Manually building a tile server (14.04)*的配置即可,其中module的配置文件的存放位置为/etc/httpd/conf.modules.d/,可以创建mod_tile的配置文件00-mod_tile.conf放到此目录,内容如下:

LoadModule tile_module /usr/lib64/httpd/modules/mod_tile.so

可以使用locate指令确定mod_tile.so文件的位置,当然执行locate之前需要执行updatedb来更新文件索引。

配置VirtualHost

创建文件vim /etc/httpd/conf.d/tile_server.conf,内容如下即可:

<VirtualHost *:9000>
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com

ServerAdmin webmaster@localhost

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

DocumentRoot /var/www/test_openlayer
</VirtualHost>

重启http服务后,访问宿主http://host:9000/osm_tiles/0/0/0.png能看到图片即表明成功。

Appendix I

File: /usr/local/etc/renderd.conf

[renderd]
socketname=/var/run/renderd/renderd.sock
num_threads=4
tile_dir=/var/lib/mod_tile
stats_file=/var/run/renderd/renderd.stats

[mapnik]
plugins_dir=/usr/local/lib/mapnik/input
font_dir=/usr/local/lib/mapnik/fonts
font_dir_recurse=1

[default]
URI=/osm_tiles/
TILEDIR=/var/lib/mod_tile
XML=/usr/local/share/maps/style/OSMBright/OSMBright.xml
HOST=localhost
TILESIZE=256
;HTCPHOST=proxy.openstreetmap.org
;** config options used by mod_tile, but not renderd **
;MINZOOM=0
MAXZOOM=18
;TYPE=png image/png
;DESCRIPTION=This is a description of the tile layer used in the tile json request
;ATTRIBUTION=&copy;<a href=\"http://www.openstreetmap.org/\">OpenStreetMap</a> and <a href=\"http://wiki.openstreetmap.org/wiki/Contributors\">contributors</a>, <a href=\"http://opendatacommons.org/licenses/odbl/\">ODbL</a>
;SERVER_ALIAS=http://localhost/
;CORS=http://www.openstreetmap.org
;ASPECTX=1
;ASPECTY=1
;SCALE=1.0
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!