在Google Maps之中地图类型(MapType)是一个比较复杂的类,可是在Google Maps API说明之中却没有比较明确的说明,我将我对API分析之后的一些心得写出来,供大家参考。
每一个地图类型首先是一个类(class),比如地图类型的类名称是_GoogleMapMercSpec,而卫星图类型的类名称是_KeyholeMapMercSpec,这些类通过不同的方式实现了一些必需的方法和属性,然后就可以当作MapType添加到地图之中,其中比较重要的有:
tileSize | 属性 | 每一小块图片的大小 |
numZoomLevels | 属性 | 有多少个缩放级别 |
getLinkText | 方法 | 返回该地图类型的显示名称 |
getShortLinkText | 方法 | 返回该地图类型的简短显示名称 |
hasOverlay | 方法 | 该地图类型是否附有标注图片 |
getBitmapCoordinate | 方法 | 根据经纬度和缩放级别,返回该地理点在整幅图片上的坐标 |
getPixelsPerDegree | 方法 | 返回在某缩放级别下每一个地理经度范围对应的图片像素大小 |
getTileURL | 方法 | 这个最重要,根据小块图片编号获得图片的路径 |
getOverlayURL | 方法 | 在附有标注图片的情况下,根据小块图片编号或的标注图片的路径 |
initMercator | 方法 | 初始化 |
getLatLng | 方法 | 将图片坐标转化为经纬度 |
改写这些方法和属性,就可以实现自定义的地图类型,比如我见到国外有一个高手写了一个让Google Maps API能调用WMS Servers的地图类型,具体情况请前往该Blog:Google Maps API and WMS Servers.
我也写过一个让Google Maps API能调用灵图的MOSP 栅格地图发布服务的地图类型,具体可以参看K_MOSPSpec使用说明.
怎么使用这些地图类型呢?这个问题在Goolge Maps API说明之中也没有明确的说明,其实当前加载的地图类型都在数组map.mapTypes(map是地图)之中,只要生成一个新mapType的实例,添加到map.mapTypes里面即可,比如:
map.mapTypes.push(new K_MOSPSpec(map,"/51ditu/GMPubSrv.asmx?", "中国地图","51445144","51445144","image/jpeg"));
同样,要删除该地图类型,只要将相应项从该数组之中删除即可。
地图加载的时候Google已经将集成的几种地图添加到了对象之中,变量名称分别为_GOOGLE_MAP_TYPE,_SATELLITE_TYPE,_KATRINA_TYPE,_HYBRID_TYPE,因此,可以使用<b>map.setMapType(_SATELLITE_TYPE)</b>来切换地图类型,也可以用<b>map.setMapType(map.mapTypes[1]);</b>来切换.