linux环境下搭建osm_web服务器二(Mapnik及apache2mod_tile配置):
Mapnik及apache2mod_tile配置
上一篇,我们配置好了PostgreSQL服务器,导入了测试数据。今天,我们来配置 mapnik2 + apache2 + mod_tile 的WMS服务器,以便在今后被 OpenLays访问。
<1> 下载mapnik2代码到本地
(通过系统包python-mapnik2安装即可,同时通过连接打包下载mapnik-master,解压至~/src目录mapnik)
[plain] view plain copy
- cd ~/src
- git clone https://github.com/mapnik/mapnik.git
- cd mapnik
<2>安装编译所需的库。
由于前面一篇安装过Boost,就简单了。
[plain] view plain copy
- sudo apt-get install libltdl-dev libltdl7 libpng12-dev libtiff4-dev
- sudo apt-get install libicu-dev python-cairo-dev python-nose libfreetype6-dev libfreetype6
- sudo apt-get install libcairo2-dev libcairomm-1.0-dev libgeotiff-dev libtiff4 libtiff4-dev (通过下载libtiff安装)
- sudo apt-get install libtiffxx0c2 libsigc++-dev libsigc++0c2 libsigx-2.0-2 libsigx-2.0-dev
- sudo apt-get install libgdal1-dev python-gdal imagemagick ttf-dejavu ttf-unifont
<3>进行配置、编译
[plain] view plain copy
- python scons/scons.py configure INPUT_PLUGINS=all OPTIMIZATION=3 SYSTEM_FONTS=/usr/share/fonts/truetype/
- python scons/scons.py
- sudo python scons/scons.py install
(通过上步骤中mapnik目录下找到scons.py)
最后,别忘了
sudo ldconfig
<4> 测试mapnik的运行正常
>>>import mapnik
如果没有什么异样,就说明mapnik已经安装到系统中拉
<5>下载mapnik-style
mapnik 针对 OpenStreeMap的环境配置、图层定义有专门的一个包,svn下载:
(通过svn打包下载)
[plain] view plain copy
- cd ~/bin
- svn co http://svn.openstreetmap.org/applications/rendering/mapnik mapnik-style
mapnik 为了加快渲染速度,世界地图的底图以及level 9 之前的很多元素是存储在磁盘文件上的,而不是数据库。我们需要下载这四五百兆的东西。如果网速好,直接调用
[plain] view plain copy
- cd ~/bin/mapnik-style
- sudo ./get-coastlines.sh /usr/local/share
下载安装到 /usr/local/share/world_boundaries 下。但是,苦逼的网速实在不给力,wget下来的东西经常要等待很久,最后还是badCheck。我们要利用迅雷或者其他的下载工具,打开get-coastlines.sh,发现下面几行,
[plain] view plain copy
- $WGET http://tile.openstreetmap.org/world_boundaries-spherical.tgz -O $OUTDIR/world_boundaries-spherical.tgz
- $WGET http://tile.openstreetmap.org/processed_p.tar.bz2 -O $OUTDIR/processed_p.tar.bz2
- $WGET http://tile.openstreetmap.org/shoreline_300.tar.bz2 -O $OUTDIR/shoreline_300.tar.bz2
- $WGET http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/10m-populated-places.zip -O $OUTDIR/10m-populated-places.zip
- $WGET http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/110m-admin-0-boundary-lines.zip -O $OUTDIR/110m-admin-0-boundary-lines.zip
用下载工具下完后,手工释放到/usr/local/share/world_boundaries 下,注意文件夹里没有套文件夹,不要变成 /usr/local/share/world_boundaries/world_boundaries
下载就完成了。
<6> 配置XML Include 参数
进入mapnik-style文件夹
[plain] view plain copy
- cd ~/bin/mapnik-style
- ./generate_xml.py --world_boundaries=/usr/local/share/world_boundaries --host=127.0.0.1 --port=5432 --user=www-data --password=您为www-data设置的密码 --dbname=osmgis
(eg:~/bin/mapnik-style# ./generate_xml.py
--world_boundaries=/usr/local/share/world_boundaries --host=192.168.105.180
--port=5432 --user=www-data --password=huawei.123 --db
name=osmgis)
提示osm.xml已经配置好了:Include files written successfully! Pass the
osm.xml file as an argument if you want to serialize a new version or test
reading the XML
在 inc 文件夹下,产生了数据库、字体等配置文件。打开字体配置文件,可以看见
[html] view plain copy
- <!--Settings for Mapnik Fonts
- To see the fonts you have installed with Mapnik do:
- ls `python -c "import mapnik;print mapnik.fontscollectionpath"`-->
- <FontSet name="book-fonts">
- <Font face-name="DejaVu Sans Book" />
- <Font face-name="unifont Medium" />
- </FontSet>
- <FontSet name="bold-fonts">
- 10. <Font face-name="DejaVu Sans Bold" />
- 11. <Font face-name="unifont Medium" />
12. </FontSet>
13. <FontSet name="oblique-fonts">
- 14. <Font face-name="DejaVu Sans Oblique" />
- 15. <Font face-name="unifont Medium" />
16. </FontSet>
不用改变设置,如果想只用unifont, 把每个FontSet的上面一行Font注释了即可。
<7> 转换 mapnik 0.7 的 osm.xml 到 mapnik 2.x 格式
由于当前mapnik-style是为0.7调配的,需要转换到2.x格式。转换比较简单,首先,安装库
sudo apt-get install libxml2 libxml2-dev python-lxml
而后,直接升级
upgrade_map_xml.py osm.xml
osm-mapnik2.xml
(https://github.com/makinacorpus/mapnik2/blob/master/utils/upgrade_map_xml/upgrade_map_xml.py#L92找到upgrade_map_xml.py, 未实现)
如果没有产生文件,可能是前一步没有把数据库连接配置好。
<8> 测试渲染
转换好后,打开mapnik-style文件夹下的generate_image.py, 修改几行,以便避免因为使用 import mapnik2 造成的deprecated警告,并把图像挪到china
(将generate_image.py备份到根目录,修改mapnik2为mapnik)
[python] view plain copy
- #!/usr/bin/env python
- import mapnik
- #...
- if __name__ == "__main__":
- try:
- mapfile = os.environ['MAPNIK_MAP_FILE']
- 9. except KeyError:
- 10. mapfile = "osm-mapnik2.xml"
- 11.
- 12. map_uri = "image.png"
- 13.
- 14. #---------------------------------------------------
- 15. # Change this to the bounding box you want
- 16. #
- 17. bounds = (119, 29, 121, 31)
- 18. #---------------------------------------------------
保存后,直接执行,如果没错,就出现了 image.png
下一步,开始apache2+mod_tile+renderd的配置
--------------------------------------------------
<9> 安装apache2和fcgi
由于后面几篇博文将涉及利用 C fcgi 创建简单的按地名搜索位置、按位置搜索附近要素的功能,我们需要fcgi库。
sudo apt-get install apache2 libfcgi-dev apache2-threaded-dev libagg-dev apache2-utils
访问 http://127.0.0.1
看到"It Works“ 就可以拉
<10> 编译安装瓦片服务
瓦片服务是关键部件,该部件将向用户提供 http://address/mod_tile2/n/x/y.png 的访问接口,在图片不存在的情况下,驱动 renderd 守护进程进行渲染。为了防止过多小文件碎片化影响磁盘的性能,renderd 和 mod_tile 将会使用瓦片簇来存储瓦片(如 每 8 *8 瓦片为一个文件),因此,渲染也是针对瓦片簇的。
首先,下载最新的代码
cd ~/src
svn co http://svn.openstreetmap.org/applications/utils/mod_tile
(在git库https://github.com/openstreetmap/mod_tile下找到)
编译安装
[plain] view plain copy
- cd mod_tile
- ./autogen.sh
- ./configure
- make
- sudo make install
- sudo make install-mod_tile
- sudo ldconfig
如果不出错,就安装好啦
<11> 配置瓦片渲染后台服务renderd
首先,我们来建立文件夹,用来存储socket和状态.
[plain] view plain copy
- sudo mkdir /var/run/renderd
- sudo chown www-data /var/run/renderd
而后,打开/usr/local/etc/renderd.conf
sudo nano /usr/local/etc/renderd.conf
修改几项,注意注释里的内容哦! 如果现在还木有这个文件,说明mod_tile 的install 没有搞定。(备份至根目录修改)注:修改URI似乎不影响访问。
[plain] view plain copy
- [renderd]
- ;把socketname设置到刚才创建的文件夹里
- socketname=/var/run/renderd/renderd.sock
- ;设置CPU核心
- num_threads=4
- ;这个瓦片路径现在只能是这个,不过我们通过创建链接,定向到2TB分区去
- tile_dir=/var/lib/mod_tile ; DOES NOT WORK YET
- ;同样设置到刚才创建的路径里
- stats_file=/var/run/renderd/renderd.stats
- 10.
11. ;mapnik设置
12. [mapnik]
13. plugins_dir=/usr/local/lib/mapnik/input
14. font_dir=/usr/share/fonts/truetype/unifont
15. font_dir_recurse=1
- 16.
17. [default]
18. URI=/osm_tiles2/
19. ;这个是我们前面调试好的渲染器的style
20. XML=/home/goldenhawking/bin/mapnik-style/osm-mapnik2.xml
21. HOST=localhost
22. ;HTCPHOST=proxy.openstreetmap.org
<12> 配置apache2 mod_tile
如果打算直接把瓦片放在/var/lib/mod_tile,就执行
(执行~/bin/mapnik-style/generate_tiles_multiprocess.py ,生成瓦片数据)
[plain] view plain copy
- sudo mkdir /var/lib/mod_tile
- sudo chown www-data /var/lib/mod_tile
本次,由于分区时已经指定了这个文件夹到200GB的分区上,就没有执行mkdir,直接改变所有者给www-data
首先,让apache2 在启动时装载 mod_tile
建立 /etc/apache2/conf.d/mod_tile,里面包含一行
(In Apache 2.4, "conf-available" and "conf-enabled" have replaced "conf.d")在conf-available下建立。
[plain] view plain copy
- LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so
而后,设置用户访问网页的入口点
(应为000-default.conf,多default-ssl.conf备份至/下修改)
[plain] view plain copy
- sudo nano /etc/apache2/sites-available/default
[html] view plain copy
- <VirtualHost *:80>
- ServerAdmin webmaster@localhost
- #这是加入的
- LoadTileConfigFile /usr/local/etc/renderd.conf
- ModTileRenderdSocketName /var/run/renderd/renderd.sock
- ModTileRequestTimeout 0
- ModTileMissingRequestTimeout 30
- #加入结束
- DocumentRoot /var/www
- 10. <Directory />
这就配置好啦,重启计算机
<13> 测试 renderd
完成了这么多步骤,我们来测试一下子。
[plain] view plain copy
- cd ~/src/mod_tile
- sudo su www-data
- renderd -f -c /usr/local/etc/renderd.conf
如果看到了千呼万唤的 starting status thread, 就好了!显示类似
[plain] view plain copy
- renderd[3091]: Created server socket 5
- renderd[3091]: Renderd is using mapnik version 200200.200.200200
- "Mapnik LOG> 2012-09-07 13:20:07:" Problem loading plugin library: /usr/local/lib/mapnik/input/python.input (dlopen failed - plugin likely has an unsatisfied dependency or incompatible ABI)
- renderd[3091]: DEBUG: Loading font: /usr/share/fonts/truetype/unifont/unifont.ttf
- Running in foreground mode...
- renderd[3091]: Starting stats thread
访问
http://localhost/osm_tiles2/0/0/0.png
就知道行不行
<14>设置开机运行
为了让开机运行,需要发到 /etc/init.d里
[plain] view plain copy
- sudo cp ~/src/mod_tile/debian/renderd.init /etc/init.d/renderd
- sudo chmod u+x /etc/init.d/renderd
而后编辑/etc/init.d/renderd,
DAEMON=/usr/local/bin/$NAME
DAEMON_ARGS="-c /usr/local/etc/renderd.conf"
保存,使用
sudo /etc/init.d/renderd start
sudo /etc/init.d/renderd stop
测试
最后,设置随机启动
sudo ln -s /etc/init.d/renderd /etc/rc2.d/S20renderd
重启,访问
http://localhost/osm_tiles2/0/1/0.png
就知道wms行不行
<15> 设置时间戳
导入数据后,设置时间戳
[plain] view plain copy
- touch /var/lib/mod_tile/planet-import-complete
- sudo chown www-data /var/lib/mod_tile/planet-import-complete
这样,避免反复渲染瓦片(如果没有这个文件,则旧于3天的瓦片都会被重新渲染)
-----------------------
下一篇,将使用openlayers 产生slippymap
转载:http://blog.csdn.net/goldenhawking/article/details/7952303
linux环境下搭建osm_web服务器二(Mapnik及apache2mod_tile配置):的更多相关文章
- linux环境下搭建osm_web服务器一(Postgresql配置及osm2pgsql原始数据导入):
Postgresql配置及osm2pgsql原始数据导入 2012年,Ubuntu 12.04LTS发布,又一个长效支持版,我们又该更新OpenStreetMap服务器了,这次,将详细在博客中记录配置 ...
- linux环境下搭建osm_web服务器三(Openlays和slippymap):
Openlays和slippymap 上一步,我们已经有了自己的地图瓦片服务器,现在,开始实现SlippyMap啦! <1>下载释放OpenLayers到 www文件夹 SlippyMap ...
- linux环境下搭建osm_web服务器四(对万国语的地名进行翻译和检索):
对万国语的地名进行翻译和检索 经过 前三篇的调试,已经有了一个完整的Map可以浏览,我们痛苦的世界范围数据下载.导入过程也结束了.要提醒一下的是,鉴于网速,不要下载 planetosm.lastest ...
- Windows和Linux环境下搭建SVN服务器
--------------------------Windows下搭建SVN服务器----------------------------- 一.安装SVN服务端 软件包Setup-Subversi ...
- linux环境下搭建solr服务器--单机版
前提需要在安装好jdk和tomcat,本人用的是jdk1.8+tomcat8.5+solr4.10. 第一步:安装linux.jdk.tomcat.(这步都是比较简单的,就不多说了) 第二步:把sol ...
- 在Linux 环境下搭建 JDK 和 Tomcat
在Linux 环境下搭建 JDK 和 Tomcat 参考地址:http://www.cnblogs.com/liulinghua90/p/4661424.html [JDK安装] 1.首先下载 ...
- Linux环境下搭建禅道管理工具-包含软件资源
Linux环境下搭建禅道管理工具 1:百度云盘下载: 禅道--链接: https://pan.baidu.com/s/1Stu7nOZVIPO5TnpJWjWtiQ 提取码:dnik CentOs操 ...
- ubuntu 14.04LTS 环境下搭建tftp服务器
花费我一整天的时间在 ubuntu 14.04LTS 环境下搭建tftp服务器,网上好多资料参差不齐,简单来说,TFTP(Trivial File Transfer Protocol),是一个基于UD ...
- freeSSHD在windows环境下搭建SFTP服务器
freeSSHD在windows环境下搭建SFTP服务器 0 建议现在windows环境下安装cygwin,否则在windows环境下cmd模式使用不了sftp去连接,可以利用win scp去测试连接 ...
随机推荐
- WebApi FormData+文件长传 异步+同步实现
// POST api/values public async Task Post() { try { // 检查该请求是否含有multipart/form-data if (!Request.Con ...
- 与FPGA相关的独热码
独热码在状态机里面使用比价广泛,这一块有些人爱用,有些人嫌烦,有时候可以用用格雷码跳转,不过格雷码只支持那种一步到底的,中间有分支就不好做了,所以后来还是回到了独热码的正道上. 说白了独热码的使用,在 ...
- python下很帅气的爬虫包 - Beautiful Soup 示例
先发一下官方文档地址.http://www.crummy.com/software/BeautifulSoup/bs4/doc/ 建议有时间可以看一下python包的文档. Beautiful Sou ...
- cache的作用
cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取. 如果使用jquery,可以使用 cache参数来控制 $.ajax({ url: " ...
- Easyui combotree 获取自定义ID属性方法
1.设置属性 <input id="cc" class="easyui-combotree" data-options="url:'tree_d ...
- iBatisNet分布式事务的应用 MS SQL2008。
所谓分布式事务,即多台数据库服务器在一个事务中运行,因此至少两台及以上的数据库服务器. 一.所有数据库服务器必须配置好MSDTC. 如何配置请大家搜索“MSDTC配置”即可. 大至的配置为: 1.开启 ...
- HDU5336题解
解题思路 这题思路并不难,主要问题是,不太好编码实现(可能是本人练习不够吧),因为有个时间在里面,而且每个小水滴都同时流动,感觉好复杂的样子.比赛时,我首先想到的是DFS+时间流做参数,由于比赛时神经 ...
- 脱壳系列(二) - EZIP 壳
程序: 运行程序 用 PEiD 查壳 EZIP 1.0 用 OD 打开 按 F8 往下走 这个看似是 OEP 的地方却不是 OEP 因为代码段从 00401000 开始 可以看到,壳伪造了 3 个区段 ...
- 在ubuntu中添加新硬盘
在ubuntu中添加新硬盘 转载于 http://www.cnblogs.com/unipower/archive/2009/03/08/1406230.html 前言 安装新硬盘这种事情并不会经常 ...
- Tkinter Scrollbar(垂直滚动部件)
Python GUI - Tkinter Scrollbar:这个小工具提供了一个幻灯片控制器,用于实现垂直滚动部件,如列表框,文本和帆布.请注意,您还可以创建进入部件的水平滚动条 这个小工具提供 ...