折腾了OpenStreetMap这么久,终于又看到一个让我感到兴奋的点――Getting Raw OpenStreetMap Data,获取原始数据。一直想搞个单机地图,不用联网也能查询。看看怎么获取OpenStreetMap 的原始数据吧。大概有三种方法:
1.Planet files
2.The main OpenStreetMap API
3.The Extended API (XAPI)
Planet 文件是把当前最新的OpenStreetMap数据库整个导出来的一个XML文件。
下载主力站:http://planet.openstreetmap.org/。Planet 文件每周更新一次,一般是在每周二早上。
本想Down个下来玩玩的,但一查硬盘空间,已然腾不出8G空间了。只能叹而罢之。然后作者介绍了如何校验下载文件的完整性,这个倒是蛮新鲜的。虽然MD5文件几乎天天见到,但从来没用过。Linux下可以用 md4sum 命令。
md5sum -c planet-latest.osm.bz2.md5
Windows 下也有类似的工具 Microsoft File Checksum Integrity Verifier
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=B3C93558-31B7-47E2-A663-7365C1686C08&displaylang=en
fciv planet-latest.osm.bz2
这么大文件,如果同时发起多个下载,服务器负荷会很大。“没事,还有兄弟我呢”,http://wiki.openstreetmap.org/wiki/Planet.osm#Mirrors。
OpenStreetMap倒也想到了不是所有人都需要整个地球的地图,所以就有了Planet extracts,提取需要的部分。CloudMade 就是其中的佼佼者,http://downloads.cloudmade.com/。
这么一看,感觉数据又太少了点。960万平方公里,怎么就这么一点数据。
OpenStreetMap's REST API
如果我想直接访问数据库,可以吗?可以的,通过它的web service接口。事实上前面介绍的编辑器都是通过Web Service接口与OpenStreetMap的后台数据库交互的。通过API调用获得的数据可以保证是最新的。但不要滥用这个API哦,人家放出来是为了方面贡献者编辑修改数据,然后再回传上去,可不是给你下载数据用的。不要重复用API去下载大量数据,不然你的账号很可能就突然被锁了。书中给出了几个很好的链接:
http://www.ibm.com/developerworks/webservices/library/ws-restful/
http://wiki.openstreetmap.org/wiki/API_v0.6
The extended API (XAPI)
除了普通的OpenStreetMap's API,还有一些扩展的API(XAPI),主要用于查询一些特定数据。http://wiki.openstreetmap.org/wiki/XAPI
Manipulating OpenStreetMap Data using Osmosis
终于到了第十章,到了全书尾声,拿到了数据了,怎么办呢,加工嘛。怎么加工呢,Osmosis嘛。Osmosis被称为OpenStreetMap的瑞士军刀。有这么厉害嘛,瞧他吹得:
Extracting data inside a bounding box or polygon 提取指定范围内的数据
Filtering the data based on primitive type and tags 根据基本数据类型和Tag过滤数据
Splitting one large OpenStreetMap file into several smaller ones 分割大型数据文件
Importing data into an OpenStreetMap server 导入数据到OpenStreetMap 服务器
Generating a list of changes between two OpenStreetMap files 比较两个数据文件,生成比较列表
Applying diff files to a planet file or database to keep it up-to-date 应用diff文件更新Plannet 文件或者数据库
看他吹了这么多,试试才知道。
http://wiki.openstreetmap.org/wiki/Osmosis#Downloading
先把代码弄下来:http://svn.openstreetmap.org/applications/utils/osmosis/。
中间的很多步我都略过了,直接来到我最喜欢的数据库这一段。
Using Osmosis with a database
Osmosis 支持三种数据库:
1.PostGIS with a simple schema
2.The OpenStreetMap API schema on PostgreSQL
3.A legacy API schema on MySQL
第三种,很不幸已经成为过去,不知是不是因为MySQL被Oracle收购的缘故。重点来看看 PostGIS 吧,http://postgis.refractions.net/,以前没见过。此时此刻,我心情异常激动,仿佛又回到了那个大学的夏天。想起了我的第一个项目。那时候,我技术还是那么生涩。那时候我第一次接触地图处理,那时候我不知道Oracle为何物。仅仅凭着对技术的兴趣(其实主要是因为当时专业的女生比较崇拜技术牛人,尤其是会数据库的),加入到那个项目。从加入那一天开始,连续奋战一个月,从早上6点,一直忙到晚上12点,干得不亦乐乎。效果也是有的,从最开始的仅仅是调研WEB服务器的选择,到最后完成WEB前台模块。可以说,那一个月学的东西比得上整整大学四年了。也许,我该选计算机专业的。
现在,又是一个比较陌生的地图系统,又是一个没接触过的数据库,难道是另一次质变的开始。
正当我兴高采烈的准备大展拳脚时,发现PostGIS 要在Linux环境下安装。我的笔记本资源已经不够再装一个虚拟机了,看来只能把这部分先留下,明天去公司整吧。
最后一章 OpenStreetMap's Future
谈了三点动向:
修改 license
http://www.opendatacommons.org/licenses/odbl/1.0/
据说OpenStreetMap's 还是第一个使用Open Database License (ODbL)这个Licence的。
MapCSS
既然可以用CSS定义HTML的样式,为何不能出个MapCSS定义地图的样式呢。
http://wiki.openstreetmap.org/wiki/MapCSS
专业修改工具
实话实话,现在OpenStreetMap 提供的几个编辑工具操作起来委实有些麻烦。有技术基础还好,没技术背景,想要帮助修改优化地图也是有心无力。所以需要一些定制化的,更人性的编辑工具。看看下面这个,http://mapzen.cloudmade.com/mapzen-poi-collector
感觉是不是舒服很多,而且支持iPhone 和Android,方便使用。
今天还是没读完这本书,希望明天会是终结版。