这篇文档描述了如何将第一版的Google Maps API从升级到2006年4月3日发布的第二版。如果你的网站是2006年4月3日之前开发的,你应该依据该文档的说明将你的网站升级到API的最新版本。


简介

升级简介

第二版Maps API与前一个版本保持了99%的向下兼容性。这意味着第二版引进了一个新的地图类――GMap2,它拥有新的方法,提供了更高级的接口。在新的API中原来的地图类GMaps仍然存在,并且提供了与第一版API相同的接口。但是,第二版API的绝大部分新功能只能通过新的GMaps2接口来实现。

据此,你可以选择两种升级方式:

  • 不使用第二版的新功能,仍然使用GMap接口 升级Maps API的最快方法就是将<script>的URL从“v=1”修改为“v=2”。因为第二版API保留了原来的GMap接口,所以理论上来说你的网站不需要任何修改即可正常工作。但实际上,你也许需要调试一段时间。关于第一版和第二版已知的不兼容的地方可以参考不兼容性一节。如果你还有问题,可以加入Maps API讨论组

  • 升级到GMap2接口,享受第二版接口的好处 如果你想体验第二版接口的优点,比如标签窗口和自定义地图控件,那么使用GMap2替换GMap吧。首先,将Maps API的<script>标记中的URL从“v=1”修改为“v=2”。然后,依据下面的GMap2升级指南升级你的代码。

我们没有在第一版和第二版之间保留许多‘未公开‘的功能,因为我们认为这将成为升级到新版本API的最大障碍。

谁需要升级?

所有的Maps API网站都需要升级。第二版API包含了许多对Maps API的基础部分的重要改进。当绝大部分网站都已经成功升级之后,我们将关闭第一版API。

即使没有人报告错误,第一版和第二版也将共存至少一个月。如果有人报告了许多棘手的问题,我们将会保留第一版更长时间。到那时,第二版将成为默认的API,所有的网站将自动使用它。如果你遇到问题,可以报告给我们的技术支持者管理的Google Maps API讨论组

第一版和第二版的不兼容点

第一版和第二版有一点不兼容的地方,例如:

  • GXslt的浏览器支持 GXslt现在仅支持那些自身支持XSLT变换的浏览器。Safari本身不支持XSLT变换,因此GXslt不再支持Safari。如果你的程序很需要XSLT变换功能,可以包含Google的开放源代码的AJAXSLT库来实现XSLT变换。

  • openInfoWindowXslt()方法 由于GXslt的变化,GMapGMarker不再支持openInfoWindowXslt()方法。

  • 地图的初始化顺序(setMapType) 第一版允许你在调用centerAndZoom之前调用setMapType。但是第二版不允许在地图位置初始化之前调用setMapType。如果你要升级到GMap2,我们建议你使用[[GMap]]的setCenter方法来初始化中心、放大级别以及地图类型。

  • 未公开方法 第二版Maps API包含了对API内核的许多有效的的修改,因此绝大部分未公开的方法都已经改变,并且不再支持。

GMap升级到GMap2

GLatLng

现在,地理坐标和像素坐标使用不同的类来表达,即GLatLngGPoint。像setCenter等方法现在使用GLatLng而不是GPoint,所以当你升级到GMap2的时候,大部分方法调用都需要升级以反映这个变化。

第二版也包含了GLatLngBounds类,它正确地表示了国际日期变更线。

参考类参考以获得更多的信息。

放大级别的顺序

GMap2的放大级别为,0表示最远级别,而不是最近级别。这样可以实现任意高分辨率的地图,我们也可以更容易地使用高分辨率图像。你可以利用下面的公式将原来的放大级别转换为现在的放大级别:

newZoom = 17 - oldZoom

地图类型名称的改变

在第二版API中,地图类别(Map,Satellite,Hybird)被赋予了新名字。

  • G_NORMAL_MAP
  • G_SATELLITE_MAP
  • G_HYBIRD_MAP

方法名称的改变

GMap接口的许多方法都被使用GLatLng类的新方法所代替,以保持与新的GMap2类的一致性。你可以根据下面的表来修改你的构造方法、方法调用和事件处理程序。

类型第一版
第二版
构造方法GMap(container, mapTypes?, width?, height?)
GMap2(container, opts?)
方法GMap.getCenterLatLng()
GMap2.getCenter()
方法GMap.getBoundsLatLng()
GMap2.getBounds()
方法GMap.getSpanLatLng()
GMap2.getBounds()
方法GMap.getZoomLevel()
GMap2.getZoom()
方法method GMap.centerAtLatLng(center)
GMap2.setCenter(center, zoom?, type?)
方法method GMap.centerAndZoom(center, zoom)
GMap2.setCenter(center, zoom?, type?)
方法method GMap.recenterOrPanToLatLng(center)
GMap2.panTo(center)
方法method GMap.zoomTo(level)
GMap2.setZoom(level)
方法method GMap.openInfoWindow(point, node, offset?, onopen?, onclose?)
GMap2.openInfoWindow(point, node, opts?)
方法method GMap.openInfoWindowHtml(point, html, offset?, onopen?, onclose?)
GMap2.openInfoWindowHtml(point, html, opts?)
方法method GMap.openInfoWindowXslt(point, node, xslturi, offset? , onopen?, onclose?)
-
方法method GMap.showMapBlowup(point, node, offset?, onopen?, onclose?)
GMap2.showMapBlowup(point, opts?)
事件GMap.click(overlay, point)
GMap2.click(overlay, point)
事件GMap.zoom(oldLevel, newLevel)
GMap2.zoomend(oldLevel, newLevel)
构造方法GMarker(point, icon?)
GMarker(point, icon?, inert?)
方法GMarker.openInfoWindow(content)
GMarker.openInfoWindow(content, opts?)
方法GMarker.openInfoWindowHtml(content)
GMarker.openInfoWindowHtml(content, opts?)
方法GMarker.openInfoWindowXslt(xml, xslt)
-
方法GMarker.showMapBlowup(zoom?, type?)
GMarker.showMapBlowup(opts?)
构造方法constructor GPolyline(points, color?, weight?, opacity?)
GPolyline(points, color?, weight?, opacity?)
构造方法GIcon(copy?)
GIcon(copy?, image?)
构造方法 GBounds(minx, miny, maxx, maxy)
GBounds(points)
常量G_MAP_TYPE
G_NORMAL_MAP
常量G_SATELLITE_TYPE
G_SATELLITE_MAP
常量G_HYBRID_TYPE
G_HYBRID_MAP
静态方法GXml.parse(xmltext)
GXml.parse(xmltext)
方法GXslt.transformToHtml(xmlnode, htmlnode)
GXslt.transformToHtml(xmlnode, htmlnode)

第二版的新特性

第二版Maps API包括了许多新功能,例如:

  • 下载的Javascript文件更小 新的Maps API的Javascript大约是老版本的Javascript文件的一半。这可以提升你的网站的用户体验。

  • 卫星地图的两个额外的放大级别 在美国、加拿大、英国、日本、欧洲以及世界上的绝大部分主要的大城市都增加了更高的分辨率的卫星图。

  • “概况”地图控件 新的“概况”地图控件GOverviewMapControl可以在屏幕的一角显示小地图。

  • 自定义地图控件 除了内建的GMarkerGPolyline类之外,你可以通过定义GOverlay的子类来实现自定义的地图控件。相关信息请查看示例程序或类参考。

  • 内存泄露更少 新版本的API包含了一个GUnload()方法,通过在unload事件中调用此方法可以销毁大部分的循环引用,包括那些在事件注册过程中隐含创建的对象。在Google Maps中,这相当于消灭了IE中的内存泄露。参考[[文档]]以获得更多的信息。

  • 调试日志 Google Maps的工程师团队内部使用的一个浮动的调试窗口可以让你在不中断程序执行和界面交互的情况下输出调试信息。只要用GLog.write()方法代替alert()方法即可。请参考类参考以获得更多的信息。