Page 89 - JavaScript修炼之道
P. 89
80 第六部分 使用混搭
任务 35 获得地理位置及该位置的照片
主要由于移动互联网的兴起,地理定位现在成了比较普遍的需求,因此让我们来看看它的两
个主要方面。
第一,将文本位置(地址、城市、行政区或者州、国家)转换成地理位置(实质上就是经
①
纬度) ;
第二,用这些地理坐标来搜索数据。
有不少API可以选用,包括Google、Yahoo!、Geonames还有一些其他人开发的著名的“地理
编码器”。根据我们的需要,我就用一个简单直接且实用的工具:Yahoo! 的Placemaker API,再加
②
上Christian Heilmann为它打造的JavaScript wrapper ,即JS-Placemake。这个API允许我们分析任
何文本,并提取该文本可能对应的一个或多个地理位置。我们就用它来把位置名称(比如在某个
表单域中输入的文本)转换成经纬度坐标。
和所有其他Yahoo!开发者网络(Yahoo! Developer Network)的API一样,Placemaker需要Yahoo!
AppID。右页的示例代码中有个能用的AppID,不过你最好自己申请一个来玩。 接着,你要做的
③
就是把这个AppID告诉那个JavaScript wrapper,之后调用它的getPlaces()函数,提供待分析的
文本、回调函数(用来处理结果)和可选的大体位置(例如en-US或者fr-FR,用来帮助Placemaker
做正确的分析)作为这个函数的参数。
注意到代码里用来把结果确定地“正规化”为位置数组的小技巧。由于存在单个匹配时只返
回一个单独的match属性,而存在多个匹配时则会返回名为matches的一个数组,我们采用
(matches || [match])这个构造来把这两种情况的返回值统一转换成数组来访问。
在涉及Flickr这边,我们只是通过一个与上个任务中类似的JSON-P调用,用地理相关参数lat
和lon调用 flickr.photos.search方法。由于我们是做全局搜索,这次调用无需指定用户ID。
如果你对客户端上的和基于JavaScript的其他地理相关技巧感兴趣,比如GeoIP以及W3C Geo
④
⑤
API,你可以在由非凡的福音传道者 Christian Heilmann维护的页面 上找到丰富的信息、demo以
及另一些很酷的东西。
——————————
① 有时你也会想得到额外的数据,比如精确度和结果包围区域。
② Wrapper一般指对现有API的封装,目的是使之更简洁易用。*
③ 在https://developer.apps.yahoo.com/wsregapp/这里申请AppID。
④ 这是对于真心崇拜地理定位的人来说的,那些不看重地理定位的人和更多从未听说过地理定位的人不会这么想。*
⑤ 参见http://isithackday.com/hacks/geo/。