一、 参考资料:
https://blog.gmem.cc/setup-openstreetmap-server
http://www.v5cn.cn/?p=167
http://www.tuicool.com/articles/ba6vEn
二、系统架构:
上图中红色部分为本文主要使用的组件,我们把这些组件全部安装到一个目录%OSM_STACK%下
三、下载安装:
1、地图数据下载
地图数据源网上有很多,这里给出其中一个数据源:
区域地图,可从这里下载:http://download.geofabrik.de/
全球地图,可从这里下载:http://ftp.heanet.ie/mirrors/openstreetmap.org/planet/2015/planet-150105.osm.bz2
2、安装Python
安装Python 2.7.x到%OSM_STACK%\python,并加入PATH环境变量,下载地址:https://www.python.org/ftp/python/2.7.9/python-2.7.9.msi
为避免后续需要下载依赖的模块,可以安装便携版的Python,集成了很多常用模块,安装后把App目录里面的所有文件拷贝到%OSM_STACK%\python即可,下载地址:http://ftp.osuosl.org/pub/portablepython/v2.7/PortablePython_2.7.6.1.exe
3、安装PostgreSQL和PostGIS
最好下载PostgreSQL 9.0以上或者 8.3版,8.4存在性能问题。
9.4的下载地址:http://get.enterprisedb.com/postgresql/postgresql-9.4.0-1-windows-binaries.zip,解压到%OSM_STACK%\psql
下载PostGIS:http://download.osgeo.org/postgis/windows/pg94/postgis-bundle-pg94x32-2.1.5-2.zip,解压覆盖到%OSM_STACK%\psql
注意:上述的PostgreSQL是绿色版的,对MSVC12有C运行时库、C++标准库有依赖,如果你的机器缺少msvcp120.dll、msvcr120.dll这两个DLL,可以下载:Visual C++ Redistributable Packages for Visual Studio 2013并安装,亦可直接拷贝这两个文件到%OSM_STACK%\psql\bin下
打开%OSM_STACK%\psql\data\postgresql.conf,修改以下参数,以提高性能(根据硬件配置调整):
4、下载osm2pgsql
osm2pgsql——是由OpenStreetMap开发的一个命令行工具负责将OSM数据导入到基于PostgresSql的Postgis的数据库中。下载地址:http://customdebug.com/osm/osm2pgsql.zip,其次我们还要指定osm2pgsql的gitHub地址因为我们需要的两个文件在里面可以找到一个是900913.sql一个是default.style,osm2pgsql在github的地址如下:https://github.com/openstreetmap/osm2pgsql
需要指出的是:在github中最新版本的osm2pgsql已经没有900913.sql这个文件,需要在github历史版本中去寻找。
OSM数据导入到Postgresql数据库:
第一步:创建一个Postgresql的数据库
打开命令行输入createdb -U postgres -E UTF8 osm其中osm是数据库的名称,postgres是数据库的用户名。执行完成后我们打开pgAdmin III客户端刷新,就可以看到刚才创建的数据库。
第二步:安装language plpgsql
createlang -U postgres plpgsql osm
一般这一步都不需要,默认已经安装上去了。
第三步:添加PostGIS功能到数据库,执行如下命令:
psql -U postgres -d osm -f “你PostgreSQL安装路径/share/contrib/postgis-2.1/postgis.sql”
控制台会打印下一些命令。
第四步:添加EPSG: 900913支持
上面提到过在osm2pgsql的github上包含900013.sql的文件下载到本地。放到一个好访问的目录中,执行如下命令:
psql -U postgres -d osm -f “本地的文件路径/900913.sql”
第五步:添加OSM数据到数据库
下载github上的osm2pgsql中的default.style文件并拷贝到本地osm2pgsql的x64目录中,把下载的chain.osm.bz2文件解压得到的chain.osm文件也拷贝到osm2pgsql的x64目录中。
新打开一个命令行进入osm2pgsql的x64目录中,执行如下命令:
osm2pgsql -U postgres -d osm -s -S ./default.style ./china.osm
5、安装mapnik
从http://mapnik.org/pages/downloads.html下载mapnik的windows版本即Windows 32 bit SDK,安装(或解压,好像是绿色版,不用安装)到%OSM_STACK%\mapnik,将其bin、lib目录加入PATH环境变量,python\2.7\site-packages加入PYTHONPATH环境变量。
在mapnik中,一个Map可以包含若干个图层(Layer),每个层可以独立着色,即可为每个层定制样式(Style),每个样式由若干个规则组成(Rule),每个规则由是由若干个符号定制。
6、安装cygwin模拟linux环境
以下的配置或文件生成需要用到linux环境,所以先安装cygwin.
注:cygwin中安装插件代码为:apt-cyg install **, 如 apt-cyg install unzip,所以先看看怎么使用apt-cyg
7、安装和配置TileStache
TileStache作为网络地图服务,类似于apache的功能,只是她提供的是地图服务。WMS协议的服务器
安装便携版Python后,只需要执行下面的脚本:
在Windows上,如果使用的是Python 2.7.6,需要修改一下__init__.py的源码,否则运行时会报错:UnicodeDecodeError: utf8 codec can't decode byte 0xb0 in position 1: invalid start byte,这是Python的一个BUG。
安装完毕后,通过下面的脚本即可启动TileStache的Web服务(基于 Werkzeug,一个WSGI工具库):
其中tilestache.cfg是TileStache使用的配置文件,注意要使用utf-8编码,我们先使用下面这个做测试:
上图中的path可能要用linux的目录结构才行,所以类似/tmp/tilecache ,这是值地图的缓存地址,可以自由更改
启动TileStache后,可以通过以下几个URL来测试:
8、下载mapnik-stylesheets
mapnik-stylesheets中提供了osm的样式文件,osm.xml,它表示我们要在web服务中展示的地图style,
下载地址:https://github.com/openstreetmap/mapnik-stylesheets
同时需要下载以来包:
wgethttp://tile.openstreetmap.org/world_boundaries-spherical.tgz# (51M) wgethttp://tile.openstreetmap.org/processed_p.tar.bz2# (391M) wgethttp://tile.openstreetmap.org/shoreline_300.tar.bz2# (42M) wgethttp://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_populated_places.zip# (1.5 MB) wgethttp://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/ne_110m_admin_0_boundary_lines_land.zip# (44 KB)
解压
tar xzf world_boundaries-spherical.tgz # creates a 'world_boundaries' folder
tar xjf processed_p.tar.bz2 -C world_boundaries
tar xjf shoreline_300.tar.bz2 -C world_boundaries
unzip -q ne_10m_populated_places.zip -d world_boundaries
unzip -q ne_110m_admin_0_boundary_lines_land.zip -d world_boundaries
这个仓库中包含了众多的小工具,generate_xml.py用于生成Mapnik的样式文件,generate_image.py用于生成图片,generate_tiles.py用于生成众多的瓦片。
此处我们将使用generate_xml.py来创建一个地图样式文件,
9、通过postgresql中的数据生成地图样式
$ cd mapnik-stylesheets/
$./generate_xml.py osm.xml china.xml--dbname openStreetMap --user postgres --accept-none
其中osm.xml是样式文件,在mapnik-stylesheets中,china.xml是将要生成的样式文件名称,openStreetMap是postgresql中的数据库(之前已把地图数据导入),postgres是数据库的用户名
执行完成后就会生成china.xml文件。
10、集成TileStache与mapnik
tilestache.cfg可以配置为这样:
tilestache.cfg改好后,启动TileStache Web服务,浏览器打开http://127.0.0.1:5539/osm/preview.html进行测试
11、通过前端API使用OSM瓦片
使用Leaflet
Leaflet是一个近来迅速流行的JavaScript库,比起OpenLayers它更小小巧、简单,对于简单寻常的需求,Leaflet是个好的选择。
以上如有不对之处,请参考参考资料(篇顶处)!!!!!