地图 自定义地图类型

使用google map API呈现的地图,最大级别只能呈现19级,而实际上,google对外最大提供22级别的地图,通过网址:http://mt3.google.cn/vt/v=w2.119&hl=zh-CN&gl=cn&x="+column+"&y="+row+"&z="+(level-1)+"&s="  可以获得google地图的瓦片,各参数的含义为:x 为此瓦片所在的横坐标地址,y为此瓦片所在的纵坐标,z为缩放级别,至于x 和y 的值如何算出来,可以参考其他资料,我也会在专门的一篇博文中进行介绍。
比如在地址栏中输入:
http://mt3.google.cn/vt/v=w2.119&hl=zh-CN&gl=cn&x=0&y=0&z=22&s=  仍可以获得图片。
如果不满足只使用google map 级别的地图,或者想自定义地图类型,此时就需要扩展google map API中的GProjection()接口,下面开始贴代码:
var Cditu = new GCopyright(1, new GLatLngBounds(new GLatLng(-90,-180),new GLatLng(90,180) ),0,"google map"); 
var copyright = new GCopyrightCollection("");
copyright.addCopyright(Cditu);
var dituTileLayer = new GTileLayer(copyright, 0, 22);
dituTileLayer.getTileUrl = function(tile, zoomlevel,x) { url = G_NORMAL_MAP.getTileLayers()[0].getTileUrl(tile,zoomlevel,x);


return url;

};
function dituProjection(){}
dituProjection.prototype = new GProjection();

dituProjection.prototype.fromLatLngToPixel = function(latlng,  zoom){
     return (G_NORMAL_MAP.getProjection()).fromLatLngToPixel(new GLatLng(latlng.lat(),latlng.lng()),zoom);
};

dituProjection.prototype.fromPixelToLatLng = function(pixel,zoom,unbounded)
{
var latlng = (G_NORMAL_MAP.getProjection()).fromPixelToLatLng(pixel,zoom,unbounded);
return latlng;
}

dituProjection.prototype.tileCheckRange = function(tile, zoom, tilesize)
{
return (G_NORMAL_MAP.getProjection()).tileCheckRange(tile,zoom,tilesize);
}
dituProjection.prototype.getWrapWidth = function(zoom)
{
return (G_NORMAL_MAP.getProjection()).getWrapWidth(zoom);
}

var ditu = new GMapType([dituTileLayer],
new dituProjection(),
"Ditu",
{ shortName: "ditu", alt: "layer from ditu.google.com" }
);

猜你喜欢

转载自lynneahui.iteye.com/blog/671747