DevFest归来
上次Google的北京DevFest活动,来自美国的工程师Pamela Fox介绍了地图API中的一些新的功能,这些功能在目前的谷歌中文地图大多得到了很好的支持,因此,在这里对这些API做一些介绍,让很多因为时间和名额的关系没能参加这次活动的朋友一起来分享这顿技术大餐。
一、强大的地址解析器 —— 反向地址解析(Reverse Geocoding)
熟悉谷歌地图API的朋友可能已经知道在谷歌地图API里有一个叫做GClientGeocoder 的类,这个类提供了geocode功能,能够把用户指定的地址转换成为地理坐标,也就是我们常说的地址解析。但是,一直以来,在谷歌中文地图上我们只能用这个API来解析省市县级别的地址,如果你指定的地址包括乡镇街道等等更精细的信息,API就无能为力了。幸运的是,就在前不久,谷歌中文地图的geocode功能已经放开,能够支持到乡镇街道等等更为精细的地址解析了,比如,我们现在可以用下面的这行代码就可以直接取得"五道口"的地理坐标了:
new GClientGeocoder().getLatLng("五道口", callback);
如果你还没有用过地址解析器,可以来这里试试 。
而Pamela Fox这次给我们带来的好消息是,GClientGeocoder不仅能够把地址解析成地理坐标,而且还能够把地理坐标还原成地址,也就是反向地址解析。你或许要问,反向解析,这有什么用?好吧,我也不知道你会把这个功能用在哪里,试试下面的这个反向解析的例子,你肯定会比我更清楚你准备要怎么来用。拿起你的鼠标猛击地图吧!
二、小巧灵活的搜索工具 —— 本地搜索栏(Local Search)
曾经有朋友抱怨说谷歌地图左下角的Logo有时候似乎有点碍事,这里且不讨论Logo在这里的"合法"地位,但就这个Logo来说,如果有方法把它变成一个灵活的搜索框,你,难道还会抱怨吗?看看下面地图的右下角
这就是本地搜索栏,而且,在你使用谷歌地图API创建一个GMap2对象的时候,只需要这样一行代码,你就可以拥有这样一个搜索栏了:
GMap2.enableGoogleBar();
当然,API还提供了很多参数用来对这个搜索栏进行定制,比如,改变搜索结果的显示样式和位置、改变搜索栏的初始状态和搜索框里的提示信息、改变搜索的数据源等等,另外,你也可以使用AJAX Search API的相关内容来定制自己的本地搜索框,更详细的说明请参考开发文档 ;
三、不用再为用户定位费神了 —— 地点探测(Location Detection)
如果你想让你的用户在登录你的地图应用时,不需要不停的缩放和拖拽地图就能够快速定位他在地图的位置,仅仅使用现有的API,实现这样的用户体验估计让你贡献了不少脑细胞。现在,一切都简单了,在你的应用里导入AJAX API的加载器,也就是google.loader,使用这个加载器提供的ClientLocation类,就可以根据用户加载AJAX类库时的IP,自动解析用户所在的地理位置,取得包括地理坐标、城市、国家、国家代码、与IP关联的地区名等在内的所有信息。一段典型的示例代码如下:
var loc = google.loader.ClientLocation;
if(loc && loc.latitude && loc.longitude)
map.setCenter(new GLatLng(loc.latitude, loc.longitude), DEFAULT_LEVEL);
} else {
map.setCenter(DEFAULT_CENTER, DEFAULT_LEVEL);
}
注意,AJAX API是一个独立的类库,就是说,需要使用一个新的<script>标签来导入一个新的AJAX类库。这是一个简单小巧的类库,支持谷歌搜索、谷歌地图等等API类库的动态加载,可惜的是目前还不支持中文地图API的动态加载。但是,这并不妨碍我们在中文地图API环境中使用ClientLocation来进行地点探测。
四、可以不加载类库就使用谷歌地图?—— 静态地图(Static Map)
是的,我们常用的地图是需要浏览器支持JavaScript、需要加载一系列的JavaScript类库和图片、支持用户点击拖拽的动态地图。如果你的用户环境不支持JavaScript,或者,你只是想使用地图来做一些简单的示意,只有在用户需要的时候才激活动态地图,那么,静态地图就可以派上用场了。
其实,所谓静态地图就是对动态地图的一个截图,所以,使用静态地图也非常简单,只需要一个<img>标签就可以搞定。当然,这个截图不需要你去进行实际的截图操作,你要做的就是给这个<img>标签的src属性指定一个固定的URL,在这个URL中设定你所需要的地图边界、缩放层次等等就可以了,比如:
如果需要的话,你同样可以在这个静态地图上添加各种标记和折线,这里也有一个静态地图的向导 ,试试看?
静态地图详细的文档在这里
五、浏览器就是一切 —— 扩展地图API
谷歌地图API提供了丰富的扩展接口,这些扩展接口中有些是直接在地图API类库中定义的,有些则已经成为独立的类库,Pamela主要为我们介绍了这几种扩展,这里作一下简单的介绍:
1、自定义地图
这是在谷歌地图API中定义的一系列扩展接口,使用这些接口,你可以定义你自己地图,比如,把地图上的图片换成你自己的全景图片,或者,使用你自己的卫星图片或历史图片替换地图上的某个图块(Tile)等等,但这些往往需要复杂的数学计算和服务器端支持,所以实现起来就不是那么easy了。当然,地图API中也有一些相对简单的扩展接口,比如,定义你自己的控件(GControl) 、叠加层(GOverlay) 等等。
2、Flash API
这是一个独立于JavaScript API的类库,允许你在Flash环境下嵌入和使用谷歌地图,并具有JavaScript类库类似的功能。这是一个新近发布的类库,所以现在还没有中文文档,在API的使用过程中有什么问题,可以看看它的开发文档(英文) 或者用户论坛(英文)。
这是一个使用Flash API的例子 ,还有一个使用键盘控制的Flash驾车游戏 。
3、Earth API
谷歌地球(GoogleEarth)的强悍是人所共知的,把这样一个强悍的3D模型嵌入到浏览器中,并且使用JavaScript来与这个3D模型沟通,像在谷歌地图上一样在这个嵌入式的谷歌地球上添加标记和折线,这就有点太神奇了吧。
Earth API就是这样可以控制这个嵌入式谷歌地球并可以在这个3D模型上展示数据的JavaScript独立类库,但是,使用它的前提是你已经安装了谷歌地区的浏览器插件,如果你还没有安装请到这里下载 ,目前这个插件只支持Windows环境下的FireFox和IE6/7。更多信息请参考它的中文文档 和英文论坛 。
在你使用谷歌地图API 的过程中,如果遇到问题和困难,请访问谷歌地图API社区论坛 ,在那里有很多专家和热心的好手们会帮你解决问题:
Chen fei
Links to this post:
Create a Link
<< Home