3.4 地图绘制工具
用于绘制地理数据的工具与上文的可视化工具之间存在一些交集。不过随着近年来地理数据的显著增多,我们绘制此类数据图的手段也层出不穷。如今移动定位服务持续升温,随之也将出现更多带有经纬度坐标的数据。地图也是一种非常直观的数据可视化方式,值得我们关注。
在互联网发展的早期,绘制电子地图并不容易,效果也谈不上讲究。还记得当年在访问MapQuest网站时,必须先找到东南西北,然后才能得到一小幅静态地图吗?Yahoo!也曾提供过类似的服务。
这一情况直到数年后Google实现了顺滑地图(slippy map)技术后才有所改观(见图3-23)。顺滑地图技术存在了好一段时间,但直到人们的网速快到足够应付地图的连续更新,它才体现出真正的价值。我们今天使用的地图服务都用到了这一技术。除了能轻松地移动、缩放地图以便查找方向之外,地图也是浏览某些数据集的主要接口。
图3-23 利用Google Maps来查找方向
说明 顺滑地图技术是一种如今广泛使用的地图实现技术。大型的地图通常都会超出显示器屏幕的范围,因此会被分割为较小的图片,或者说区块(tile)。只有在显示器区域内的区块会显示,其他的都被隐藏起来。当用户拖动地图时,其他区块才会显示,给用户“正在拖动一整幅地图”的感觉。大家在查看高分辨率照片时可能也曾遇到过类似的处理方式。
3.4.1 可选项
随着各类型的地理数据纷纷涌入到公众领域,绘制这些数据的工具也开始涌现。其中一些只需要编写一点点代码就能运行,另外一些则需要多花些工夫。此外,还有一些工具根本就不需要编程。
1.Google、Yahoo!和Microsoft地图
这是最容易的在线工具,不过需要一些编程技巧才能实现。你的编程能力越强,就能通过Google、Yahoo!和Microsoft提供的地图API来完成越多的事情。
这三者的基本功能都很相似,但如果你是新手,我会推荐Google,因为它似乎最为可靠。它提供了基于JavaScript和Flash的地图API,以及其他一些地理相关服务,例如地形编码和方向查找等。你可以从入门指南开始,然后再扩展到其他功能,例如放置标记(见图3-24)、绘制路径或者添加覆盖图等。面面俱到的教程和代码片段应该能让你很快上手。
图3-24 在Google地图上放置标记有
Yahoo!也提供了基于JavaScript和Flash的地图API,以及一些地理相关服务,但就该公司的现状来看,我不确定它还能支撑多久。在本书写作时,Yahoo!的角色已经由积极的应用开发者转变为单纯的内容提供商。Microsoft同样提供了一个JavaScript的API(Bing旗下的产品)和一个Silverlight支持的API(Microsoft的Flash版本)。
用的地图API资源
□ Google地图API系列(http://code.google.com/apis/maps/)。
□ Yahoo!地图Web服务(http://code.google.com/apis/maps/index.html)。
□ Bing地图API(http://www.microsoft.com/maps/developers/web.aspx)。
2.ArcGIS
从核心上来看,之前提到的在线地图服务提供的只是一些基本的功能。如果你想从中得到更高级的地理数据图,恐怕就只能靠自己来实现某些功能。而桌面地图软件ArcGIS则正好相反。它是一款大型软件,可以处理大批量的数据,还提供了平滑、合成等众多其他功能。你可以在用户界面中完成所有的事情,所以也不需要写代码。
任何配有地图绘制人员的图形设计部门基本上都在用ArcGIS,专业的地理制图师也在用ArcGIS。还有很多人喜欢它。如果你对制作详尽的地理数据图感兴趣,那么ArcGIS值得一试。
我只在部分项目中用过ArcGIS,因为只要情况允许,我一般都倾向于靠编程来实现,而且我不需要它提供的所有功能。功能丰富带来的不利的一面是按钮和菜单元素过多。你也可以使用它的在线和服务器解决方案,但相较于其他实现方式而言,这些都显得有些笨拙。
有用的ArcGIS资源
□ ArcGIS的官方产品页面(http://www.esri.com/software/arcgis/)。
3.Modest Maps
我在图3-13的例子中曾提到过Modest Maps,它显示了沃尔玛的成长史。Modest Maps是一个Flash和ActionScript的区块拼接地图函数库,并且支持Python。它由一群了解在线地图的人维护,而且他们不仅是因为客户而工作,还因为这是他们的爱好。从这个角度你应该能大概了解到这个函数库的质量。
Modest Maps更像一个框架,而不仅只是一个地图API(类似Google提供的那种)。它只提供极少的必备条件,方便你创建在线地图,然后就退到一边让你随心所欲地实现。你可以使用来源不同的地图区块,也可以根据需要定制。比如说,图3-13是黑色与蓝色的主题,但你也可以轻松地改成红色和白色(对应于深色和白色),如图3-25所示。
图3-25 利用Modest Maps创建的红白主题地图
Modest Maps是以BSD许可协议发布的,所以你可以免费用它来做任何事情。不过你还是需要对Flash和ActionScript有所了解,相关的基础知识将会在第8章介绍。
4.Polymaps
Polymaps有点像JavaScript版本的Modest Maps。它由同一群人中的一部分人开发及维护,提供同样的功能——而且还不止这些。Modest Maps只能进行基础的地图绘制,而Polymaps却有一些内置的功能,例如区域密度图(choropleth,见图3-26)和气泡图。
图3-26 显示失业率的区域密度图,通过Polymaps实现
由于是JavaScript,它给人的感觉更加轻便(因为需要的代码更少),不过只能支持现代浏览器。Polymaps通过可缩放矢量图形(Scalable Vector Graphics,SVG)来显示数据,所以不能在老版本的Internet Explorer中运行,但大部分人都是与时俱进的。FlowingData网站只有5%的访问者还在用低版本的浏览器,而且我估计这一比例很快就会下降为零。
我喜欢JavaScript地图函数库的另一个原因是所有的代码都在浏览器内原生运行。你无需任何编译或者Flash输出,因此执行起来更加容易,而且也便于日后更新。
有用的Polymaps资源
□ Polymaps官方网站(http://polymaps.org/)。
5.R
R的基础版本中并未提供地图绘制功能,但有一些工具包能帮助我们。图3-27就是我在R中绘制的一张地图。注释是后期在Adobe Illustrator中添加的。
图3-27 R中创建的美国地图
R中的地图在使用上存在限制,而且相关的文档也不够详尽。因此我只在数据足够简单,而且碰巧正在使用R时才会用它来创建地图。在其他的情况下,我会使用上述的工具。
有用的R地图资源
□ 地区数据分析(http://cran.r-project.org/web/views/Spatial.html)——有关地区分析的综合性R工具包列表。
□ 地理统计制图实用指南(http://spatial-analyst.net/book/download)——关于如何使用R及其他工具分析空间数据的可免费下载的电子书。
6.在线工具
还有一些在线工具也能帮你可视化地理数据。在多数情况下,它们会调用人们最常使用的地图类型,然后把不重要的内容剥去——有点类似简化版的ArcGIS。免费的工具有Many Eyes和GeoCommons,前者我们曾经讨论过,它只有一些基础功能,而且只能以国家或美国各州为单位。GeoCommons的功能更多,而且交互方式更加多样化,此外还能处理常见的地理文件格式,例如shapefile和KML。
此外还有一些付费工具,其中Indiemapper和SpatialKey是最有用的。SpatialKey更偏向于业务分析和决策制定,Indiemapper则更适合制图员和设计师。图3-28就是我用Indiemapper生成的例子,只花了几分钟时间。
图3-28 Indiemapper中创建的区域密度图
3.4.2 取舍
各种形式的地图工具能满足我们不同的需求。只学会一款软件,然后就能设计出各种地图无疑是最理想的,但很遗憾这种方法行不通。
比如说,ArcGIS的功能很丰富,但如果你只需创建简单的地图,就没必要花时间去学习它复杂的界面,也不值得花钱去购买。而R提供基础的地图功能,而且还免费,但可能达不到你想要的效果。如果你希望创建在线的、可交互的地图,可以选择开源的Modest Maps或Polymaps,但它们又需要更高的编程技能。在第8章你将会学到如何使用各种可用的工具。