过去的一年对于 web 开发人员来讲充满着难以置信的兴奋。新的开发工具使 web 开发变得更加容易,更加产品化,同时带来更多的乐趣。
你可以把更多的数据,服务方面的 API 通过有趣的方式组合在一起。作为开发人员,我们从技术中获得了前所未有的乐趣。这本书把主要的精力放在对 Google Maps API的诠释上,
如果你已经拿到了这本书,你可能已经发现了 Google Maps 的重要性。如果你需要一个随手查阅的提示,也可以到 Google Maps Mania (http://googlemapsmania.blogspot.com/)
上转一转,领略一下开发社区给 Google Maps 带来的变革。 Google Maps API 孕育了一种令人难以割舍的 web 基础应用,你可以轻松的把它架设在一个同样令人感到兴奋的web平台上:
Ruby on Rails。
Rails 架构可以极大的提升以数据库为基础的web应用程序的开发效率,Rails 开发起来很直接,功能强大,而且是免费的。Rails 可以轻松的搭建大型 web 应用程序,
而这些事情在两年前是难以想象的。
在接下来的一章中,你会经历一个简单的包括标记(marker),地形编码(geocoding )的例子,还有一些更加深入的主题,例如如何获得数据,呈现数据坐标(points),
提供一个有用的用户接口。
在Ruby on Rails 平台架设 Google Maps 有许多好处,Rails 可以轻松的提供一些 XML 支持,而 XML 在 Google Maps 中被广泛的应用,Rails 同时对 JSON (JavaScript Object Notation), 提供了友好的支持,这种简单的数据结构可以轻松的从服务器端发送数据到客户端。Ruby自身也包括了一些功能强大的类库,可以实现屏幕擦除(screenscraping),
这一点我们会在后边的章节中详细介绍。
我们主观的做了一个假设,假设当你拿到这本书的时候,你已经有一些Rails开发经验,你已经在你的电脑上安装了Ruby和Rails开发环境,并且可以成功的运行应用程序。如果事实并非如此,
我们在本章的末尾列出了一些帮助信息,使你尽快的上手Rails,例如“如何开始使用Ruby和Rails?(Just Getting Started with Ruby and Rails?)”。即便你现在已经是一个Rails骨灰级玩家,
你仍然可以从这本书中享受地图程序开发给你来的乐趣,并且使你同样成为一个地图程序开发的骨灰级玩家。Rails框架,Ruby语言,Google Maps API是你在畅游这本书时不可或缺的旅伴。
我们知道你已经迫不及待的开始一个地图项目了,但是在我们开始编写代码之前,还是先来粗略的了解两种制作地图项目的方法:KML(Keyhole MarkupLanguage)files 和
Wayfaring map site。他们都是我们通往成功道路上的奠基石,我们将使用他们来做几个简单的演示。在第二章中,我们才会开始研究代码,到那个时候,你会真正领略到你可以打造出什么样的作品。
KML: Your First Map
KML 是在 Google map 中显示标记(marker)和添加内容的最简单的方法之一,如你所料,简单往往会为丧失灵活性而付出代价,但 KML 仍然可以作为一个开始 Google map 项目的非常好的选择,早在 2006 年 7 月,Google map 官方网站就宣布其对 KML 测绘文件提供支持,你可以简单的在 Google Maps 的搜索框中输入一个URL,Google Maps 就会返回一个标识位置的 KML
文件。我们不会深入讨论这个实现过程,取而代之我们将马上展示一个简单而强大的 KML 的例子。
提示:Keyhole Markup Language 是基于 XML 和 Google Earth 并被命名为 keyhole 的项目,Google 于 2004 年末正式启动 Keyhole 项目。
我们创建了一个被命名为 toronto.kml的文件,并把 例子 1-1 中的内容写入其中。这段内容引自 Wikipedia,用于手动的从 Google Maps 上找到这些坐标。
代码 1-1. 一个简单的 KML 文件
<? xml version = "1.0" encoding="UTF-8"?><kml xmlns="http://www.google.com/earth/kml/2">
<Document>
<name>toronto.kml</name>
<Placemark>
<name>CN Tower</name>
<description>
The CN Tower (Canada's National Tower, Canadian National Tower),
at 553.33 metres (1,815 ft., 5 inches) is the tallest ➥
freestanding structure on land.
It is located in the city of Toronto, Ontario, Canada, and is considered the
signature icon of the city. The CN Tower attracts close to two million visitors
annually. http://en.wikipedia.org/wiki/CN_Tower
</description>
<Point>
<coordinates>-79.386864,43.642426</coordinates>
</Point>
</Placemark>
</Document>
</kml>
在这个真实的文件中(http://book.earthcode.com/kml/toronto.kml),我们添加了两个地点标记(Placemark )的子元素用于标记两个多伦多的标志性建筑。想要在 Google Maps
上查看结果,只需把这个URL粘贴到 Google Maps 的搜索框中,也可以直接点击下边的链接:
http://maps.google.com/maps?f=q&hl=en&q=http://book.earthcode.com/kml/toronto.kml.
图示1-1即为显示结果:
图示1-1:一个简单的 KML 数据文件在 Google Maps 上的显示结果.
的确立竿见影,不是吗?正如你所看到的,如果仅仅想展示一系列地点,场所,一个 KML 文件基本上就能搞定,如果你想标记一个你常去钓鱼的鱼塘,那么建立一个 KML 文件,把它发布到免费的服务器空间(host)上,这样就搞定了。但是仅仅这样我们就会满足吗?毕竟对于强大的 KML 来讲,现在的例子还没有提供与用户交互的功能。事实上在第二章中大多数例子中,我们只会体验一些 Google 发布的功能展示,但是当我们来到第三章的时候,你就会亲身领略 Google Maps API 的强大功能。
在我们继续前进之前,让我们来快速体验一下另一种在线获得地图的方法。
Wayfaring: Your Second Map
一些服务商提供免费发布手绘地图文件服务,我们挑选其中的一个服务 Wayfaring 作为我们的示例。如图示1-2所示,Wayfaring 以其优质的功能设计和活跃的社区支持(社区提供大量的讨论和资源共享)而著称,同事Wayfaring 也是尤 Ruby on Rails 打造的。
Adding a Driving Route
当然,这是一本编程相关的书,你可能已经迫不及待的想一头钻进代码中,做一些真正不寻常的事情,Wayfaring 的确强大,但是它不能带来舒适的编程体验。提及与程序的交互,让我们把视线转向 Ruby on Rails,这款服务器端框架。我们在本章的开始部分提到,我们假定这本书的读者有一些 Ruby and Rails 开发经验-至少可以独立完成 Rails 应用程序的运行。这意味着,你应该:
下面,我们同样列出了一些条款,对于阅读本书而言,这些都不是你所必须掌握的:
Just Getting Started with Ruby and Rails?
如果你刚刚准备学习 Ruby and Rails,并且决定学习一下地图应用程序开发,你可能希望得到一些辅助材料,从而加快学习进度。 Ruby on Rails 可能会比 PHP 或者 ColdFusion 的学习曲线长一些,希望以下资料对你的学习提供一些额外的帮助:
接下来会有哪些精彩?
我们知道你正在热切的期盼着打造真正属于你自己的地图应用程序。在这一章的最后部分,你已经通过 Wayfaring 了解了几乎全部使用 JavaScript 和 XHTML 实现的 Google Maps 功能
(除了 多插线(polylines)和 距离(distances),本书的第十章涵盖这些内容)。这本书的宗旨,就是让你掌握打造一个 Wayfaring 克隆项目的全部理论基础。那么接下来会是哪些内容呢?
这本书分为三个部分和两个附录。
第一部分会持续到第四章,展示了许多充满乐趣的例子用来引导用读者入门。通过这部分,你可以打造一个地图,添加一些自己的小标记,而且使用一些免费的服务器端数据填充一些
地图编码。
第二部分(第五章至第八章)会涉及到很多地图开发方面的主题,例如编写一个通用接口,处理大量坐标点(points),通过一些原始数据实现你自己想要的地图效果。
第三部分(第九章至第十一章) 一些高级主题:打造客户层叠地图, 比如你自己的提示框和提示文本;(creating your own map tiles and projections;)通过球面公式计算地球表面面积,通过抓痕技术打造自己的地理编码(building your own geocoder from scratch.)。
最后部分,附录中会提供一些 Google Maps API 第二版本中的参考。附录中还会提供一些扩展例子,你可以直接使用他们来丰富你自己的项目。
(第一章完。 2008年7月2日 刘 远 [email protected] )