(-:<转载时请注明本文由goldenhawking在 CSDN blog 撰写,http://blog.csdn.net/goldenhawking/article/details/7953338
上一篇,我们配置好了PostgreSQL服务器,导入了测试数据。今天,我们来配置 mapnik2 + apache2 + mod_tile 的WMS服务器,以便在今后被 OpenLays访问。
<1> 下载mapnik2代码到本地
cd ~/src
git clone https://github.com/mapnik/mapnik.git
cd mapnik
<2>安装编译所需的库。
由于前面一篇安装过Boost,就简单了。
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
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
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
最后,别忘了
sudo ldconfig
<4> 测试mapnik的运行正常
python
>>>import mapnik
如果没有什么异样,就说明mapnik已经安装到系统中拉
<5>下载mapnik-style
mapnik 针对 OpenStreeMap的环境配置、图层定义有专门的一个包,svn下载:
cd ~/bin
svn co http://svn.openstreetmap.org/applications/rendering/mapnik mapnik-style
cd ~/bin/mapnik-style
sudo ./get-coastlines.sh /usr/local/share
$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文件夹
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
提示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 文件夹下,产生了数据库、字体等配置文件。打开字体配置文件,可以看见
<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
如果没有产生文件,可能是前一步没有把数据库连接配置好。
<8> 测试渲染
转换好后,打开mapnik-style文件夹下的generate_image.py, 修改几行,以便避免因为使用 import mapnik2 造成的deprecated警告,并把图像挪到china
#!/usr/bin/env python
import mapnik
#...
if __name__ == "__main__":
try:
mapfile = os.environ['MAPNIK_MAP_FILE']
except KeyError:
mapfile = "osm-mapnik2.xml"
map_uri = "image.png"
#---------------------------------------------------
# Change this to the bounding box you want
#
bounds = (119, 29, 121, 31)
#---------------------------------------------------
下一步,开始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
编译安装
cd mod_tile
./autogen.sh
./configure
make
sudo make install
sudo make install-mod_tile
sudo ldconfig
如果不出错,就安装好啦
<11> 配置瓦片渲染后台服务renderd
首先,我们来建立文件夹,用来存储socket和状态.
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 没有搞定。
[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
;mapnik设置
[mapnik]
plugins_dir=/usr/local/lib/mapnik/input
font_dir=/usr/share/fonts/truetype/unifont
font_dir_recurse=1
[default]
URI=/osm_tiles2/
;这个是我们前面调试好的渲染器的style
XML=/home/goldenhawking/bin/mapnik-style/osm-mapnik2.xml
HOST=localhost
;HTCPHOST=proxy.openstreetmap.org
<12> 配置apache2 mod_tile
如果打算直接把瓦片放在/var/lib/mod_tile,就执行
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,里面包含一行
LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so
sudo nano /etc/apache2/sites-available/default
ServerAdmin webmaster@localhost
#这是加入的
LoadTileConfigFile /usr/local/etc/renderd.conf
ModTileRenderdSocketName /var/run/renderd/renderd.sock
ModTileRequestTimeout 0
ModTileMissingRequestTimeout 30
#加入结束
DocumentRoot /var/www
这就配置好啦,重启计算机
<13> 测试 renderd
完成了这么多步骤,我们来测试一下子。
cd ~/src/mod_tile
sudo su www-data
renderd -f -c /usr/local/etc/renderd.conf
如果看到了千呼万唤的 starting status thread, 就好了!显示类似
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里
sudo cp ~/src/mod_tile/debian/renderd.init /etc/init.d/renderd
sudo chmod u+x /etc/init.d/renderd
而后编辑/etc/init.d/renderd,
保存,使用
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> 设置时间戳
导入数据后,设置时间戳
touch /var/lib/mod_tile/planet-import-complete
sudo chown www-data /var/lib/mod_tile/planet-import-complete
-----------------------
下一篇,将使用openlayers 产生slippymap