目录

  • 一.升级系统
  • 二.安装PostgreSQL数据库和PostGIS扩展
  • 三.下载地图样式表和上传地图数据
  • 四.将地图数据导入PostgresSQL
  • 五.安装mapnik mod_tile
  • 六.添加中文支持
  • 七.生成Mapnik Stylesheet
  • 八.配置渲染文件
  • 九.配置Apache服务器
  • 十.使用Leftlet在网页上显示和操作地图

优麒麟设置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 - osmosm2pgsql --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/htmlsudo wget http://cdn.leafletjs.com/leaflet/v1.4.0/leaflet.zipsudo 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

OpenStreetMap地图服务器安装相关推荐

  1. OSM逆地理服务器搭建(四)之Web端加载OpenStreetMap地图

    前言 前面的文章中说道我们利用 Nominatim将搭建了可以进行地址解析的服务器,以及如何利用 Nominatim进行地址解析. 虽然我们解决了地址解析不依赖谷歌服务,但是地图引擎,路线规划,画电子 ...

  2. 搭建openstreetmap地图服务

    前言 内容包括 1. 搭建openstreetmap地图服务(源自openstreetmap官方搭建教程) 2. 搭建tileserver-gl地图服务(源自openmaptiles官方搭建教程) ( ...

  3. 基于OpenStreetMap地图数据的离线路径规划

    距离上次写博客已经好久了,这段时间断断续续也有弄一下关于OpenStreetMap的东西,这次把离线路径规划的实现记录一下. 在OpenStreetMap提供的开源项目中,osmbonuspack提供 ...

  4. OpenStreetMap地图获取城市路网数据

    文章转载自(http://www.mapboxx.cn/article/osm-way/) OpenStreetMap社区是一个由地图制作爱好者组成的社区,这些爱好者提供并维护世界各地关于道路.小道. ...

  5. python在地图上画路线_python在openstreetmap地图上绘制路线图的实现

    python在openstreetmap地图上绘制路线图的实现 发布时间:2020-08-28 23:14:52 来源:脚本之家 阅读:111 作者:AAAAAAAKing 利用python进行经纬度 ...

  6. Bing Maps进阶系列八:在Bing Maps中集成OpenStreetMap地图

    OSM(OpenStreetMap-开放街道地图)服务就是一种发布自己地图数据图片为服务的一种实现类型,开放街道地图成立动机在于希望能创造并且提供可以被自由地使用的地理资料(像街道地图)给每个想使用的 ...

  7. python在openstreetmap地图上绘制路线图

    利用python进行经纬度轨迹展示 嘿!各位好久不见,距离第一次发博客已经过去两年多了,本人也从本科生变成了研究生,好了书归正传,最近在做一个关于航班滑行路径轨迹的项目,目的是将航班的经纬度数据在地图 ...

  8. [转载]python 在OpenStreetMap地图上绘制路线图

    folium的基本用法 folium.Map([纬度,经度],zoom start,width,height,control_scale,no_touch) #zoom start为地图的初始缩放尺寸 ...

  9. tableau应用实战案例(二)-TABLEAU调用中国地图和Python获取地址的经纬度

    前言 如何在TABLEAU中实现调用国内百度地图或者谷歌地图的功能. 谷歌地图我没用过,以前看过<触手可及的大数据分析工具:Tableau案例集>上面有介绍,大家可以去参考.百度地图调用一 ...

  10. OSM OpenStreetMap 获取城市路网数据及转为ESRI shp数据的方法

    目录 一.OSM简介 二.获取OSM数据方法 方法1:官网下载 方法2:通过ArcGIS Editor for OpenStreetMap插件下载 方法3:通过QGIS下载 三.获取OSM城市路网数据 ...

最新文章

  1. PPT插入文本框但是字体并不是想要的
  2. 使用jquery实现的计算器功能
  3. 努比亚红魔有人脸识别_魅族魅蓝6T、努比亚红魔Mars电竞手机、华为畅享10Plus对比...
  4. 将数字字符串格式化为指定长度
  5. 深入浅出KNN算法(二) sklearn KNN实践
  6. layui 启用禁用_在不启用Apple Pay的情况下禁用烦人的Apple Pay通知
  7. Spark基础学习笔记17:掌握RDD算子
  8. HDU 2154 跳舞毯
  9. onloadsuccess: function获取不到表格数据_R语言输格式技巧系列(二),再精细一点,定制包含亚组的表格...
  10. 19.复习:一般过去时、过去进行时和过去完成时
  11. 风控贷中环节应该监控哪些风险指标
  12. delphi formshow 刷新_OPPO K7x部分配置和外观公布90Hz刷新率11·4发布
  13. Struts2的模型驱动封装方法获取页面提交的表单数据(接收表单数据的最常用的方法)
  14. Java基础之三大特性
  15. sis新地址_“这是什么梗?”,互联网上的新梗老梗如何影响你?
  16. 第10章 主成分分析(PCA)
  17. MSP430F149TIMER_A的连续计数模式
  18. poi解决受保护视图问题
  19. xtrabackup全量、增量备份恢复mysql数据库
  20. 阿昌教你使用谷歌guava工具包---集合包

热门文章

  1. ssh反向代理实现内网穿透;ssh+nginx实现公网云服务器代理访问内网服务器
  2. ubuntu 中 vi 编辑文件上下左右删除键毫无作用肿么办!(上上下下左右左右BABA)
  3. 白帽杯2022-Misc 游戏秘籍 write-up
  4. 方法(Method)
  5. 两个摄像头合成一路_监控系统中多路视频的合成方法
  6. 【Matlab水果蔬菜识别】灰度+二值化+腐蚀+直方图处理水果蔬菜识别【含GUI源码 1052期】
  7. 谁说技术男没有人文情怀:当旅途遇到生命赞歌
  8. hdu5773The All-purpose Zero,1257最少拦截次数
  9. Android - 控件android:ems属性
  10. trymyapps下载_Incentivized Application Starts Up-Trymyapps