var tiles = "http://ts" + ((a.x + a.y) % 3) + ".mocal-dir.com/tiles/z" + b + "/" + a.y + "_" + a.x + ".png";
if ( b == 13 && a.x >= 1319 && a.x <= 1327 && a.y >= 3198 && a.y <= 3213 ) {
return tiles;
} else if ( b == 14 && a.x >= 2639 && a.x <= 2655 && a.y >= 6396 && a.y <= 6427 ) {
return tiles;
} else if ( b == 15 && a.x >= 5278 && a.x <= 5311 && a.y >= 12792 && a.y <= 12854 ) {
return tiles;
} else if ( b == 16 && a.x >= 10557 && a.x <= 10622 && a.y >= 25585 && a.y <= 25709 ) {
return tiles;
} else if ( b == 17 && a.x >= 21114 && a.x <= 21244 && a.y >= 51171 && a.y <= 51418 ) {
return tiles;
} else if ( b == 18 && a.x >= 42229 && a.x <= 42489 && a.y >= 102343 && a.y <= 102836 ) {
return tiles;
}
return G_HYBRID_MAP.getTileLayers()[1].getTileUrl(a, b);
}
function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map"));
// Setup the map options
map.addControl(new GScaleControl());
map.addControl(new GLargeMapControl());
// Create the copyright collection
var copyCollection = new GCopyrightCollection('Bathymetry');
var copyright = new GCopyright(1, new GLatLngBounds(new GLatLng(36.1023764, -122.0361328), new GLatLng(36.6684189, -121.6406250)), 0, "© CSUMB Sea Floor Mapping Lab");
copyCollection.addCopyright(copyright);
// Setup the tile layers
var tilelayers = new Array();
tilelayers[0] = G_HYBRID_MAP.getTileLayers()[0];
tilelayers[1] = G_HYBRID_MAP.getTileLayers()[1];
tilelayers[2] = new GTileLayer(copyCollection, 13, 17);
tilelayers[2].getTileUrl = CustomGetTileUrl
tilelayers[2].getOpacity = function () { return 1.0; }; // of the non transparent part
tilelayers[2].isPng = function() { return true; };
// Setup the options for our map layer
var GMapTypeOptions = new Object();
GMapTypeOptions.minResolution = 13;
GMapTypeOptions.maxResolution = 17;
GMapTypeOptions.errorMessage = "No map data available";
// Create our custom map layer
var custommap = new GMapType(tilelayers, new GMercatorProjection(22), "CSUMB Sea Floor Mapping Lab", GMapTypeOptions);
custommap.getTextColor = function() {return "#000000";};
map.addMapType(custommap);
map.setCenter(new GLatLng(36.5205, -121.9406), 15, custommap);
}
}
涉及的类解释.
一.GCopyrightCollection
构造函数: GCopyrightCollection(prefix?:String) 从此版权集合所产生的版权消息包含以参数形式给出的通用前缀。
示例:“Imagery (C) 2006”
方法:
addCopyright(copyright:GCopyright) None 将版权信息对象添加到集合中。
getCopyrights(bounds:GLatLngBounds, zoom:Number) String[] 返回所有版权字符串,它与指定缩放级别的指定地图地区有关。示例:[ "Google", "Keyhole" ]
getCopyrightNotice(bounds:GLatLngBounds, zoom:Number) String 返回前缀和所有相关的版权字符串,它们与指定缩放级别的指定地图地区有关。示例:“Imagery (C) 2006 Google, Keyhole”
二. GCopyright 类. 版权对象包含以下信息:哪个版权消息适用于指定缩放级别的矩形地图地区。只有在实现自定义地图类型或图块层时,才需要此对象。
构造函数
构造函数 说明
GCopyright(id:Number, bounds:GLatLngBounds, minZoom:Number, text:String) 用指定的属性创建版权信息对象。
属性
属性 类型 说明
id Number 此版权信息的唯一标识符。
bounds GLatLngBounds 此信息所适用的地区。
minZoom Number 此信息所适用的最低缩放级别。
text String 版权消息文本。
三. 接口 GTileLayer 您可以实现此接口,以通过 GMapType 或 GTileLayerOverlay 提供自定义的地图图块层。此接口的实现应使用 GTileLayer 实例作为原型,因为这样可以为您实现版权处理。
构造函数GTileLayer(copyrights:GCopyrightCollection, minResolution:Number, maxResolution:Number, options?:GTileLayerOptions) 如果构造函数参数实例化为原型,则可省略它。子类构造函数必须使用 call() 调用此构造函数。可选 options 参数指定应作为对象常量传递的 GTileLayerOptions 集合。
方法
这点很重要: 地图和此图块层传递到的地图类型会调用这些方法。当实现自定义图块层时,您需要实现标记为抽象的方法。
方法 返回值 说明minResolution() Number 向地图类型返回此图块层的最低缩放级别。maxResolution() Number 向地图类型返回此图块层的最高缩放级别。getTileUrl(tile:GPoint, zoom:Number) String 抽象。向地图返回地图图块的网址,图块索引由 GPoint 的 x 和 y 属性在指定的缩放级别提供。isPng() Boolean 抽象。向地图返回图块的图像格式是否为 PNG,以及是否因此可能为透明的。否则,假定是 GIF。getOpacity() Number 抽象。向地图返回显示此图块层所用的不透明度。1.0 为不透明,0.0 为透明。getCopyright(bounds:GLatLngBounds, zoom:Number) String 抽象。向地图返回此图块层的版权消息,这与指定缩放级别的指定地图地区有关。这用于生成此图块层所属的 GMapType 的版权消息。(自 2.89 开始)
四. GTileLayerOptions 类. 此类代表 GTileLayer 接口的可选参数。它没有构造函数,但可实例化为对象常量。
属性:
opacity Number 设置图块的不透明度,范围是 0.0(不可见)到 1.0(不透明)。默认值为 1.0。
isPng Boolean 指明图块的格式是否为 PNG。
tileUrlTemplate String 指定图块网址模板,该模板可以针对每个图块请求而展开,以根据现有的图块坐标系引用唯一的图块。将模板置于 GTileLayer 构造函数中可允许您使用此坐标系动态检索图块,检索方式类似于 Google 地图检索图块的方式。模板的格式应该为:http://host/tile?x={X}&y={Y}&z={Z}.png,其中 X 和 Y 分别指纬度和经度图块坐标,Z 指缩放级别,比如 http://host/tile?x=3&y=27&z=5.png。
draggingCursor String 拖动地图时显示的光标。
var opts = {opacity:1.0, isPng:true, tileUrlTemplate:getTileUrlFunction, 'draggingCursor':'move'};
五. GMapType
Google 提供部分预定义地图类型 - 此类用于定义自定义地图类型。要在地图中显示地图类型,请使用 GMap2 构造函数或 GMap2.addMapType() 方法。要添加到(而不是整个替换)地图的图块层,另请参阅 GTileLayerOverlay。还可以对此类进行细分。如果构造函数参数实例化为原型,则可省略它。子类构造函数必须使用 call() 调用 GMapType 构造函数。
构造函数
GMapType(layers:GTileLayer[], projection:GProjection, name:String, opts?:GMapTypeOptions) 用指定的图块层、投影、名称和可选参数构造一个地图类型。
方法
这些方法多数由此地图类型传递到的目标地图调用,但部分方法可能也从地图外调用,比如 getBoundsZoomLevel()。
方法 返回值 说明
getSpanZoomLevel(center:GLatLng, span:GLatLng, viewSize:GSize) Number 向地图返回缩放级别,由中心和跨度定义的地图部分按这一缩放级别适合于指定大小(以像素表示)的地图视图。
getBoundsZoomLevel(bounds:GLatLngBounds, viewSize:GSize) None 向地图返回缩放级别,由边界定义的地图部分按这一缩放级别适合于指定大小(以像素表示)的地图视图。
getName(short?:Boolean) String 向地图返回要在 GMapTypeControl 中用作按钮标签的地图类型名称。
getProjection() GProjection 向地图返回此地图类型的投影。
getTileSize() Number 向地图返回此地图类型的地图图块大小(以像素表示)。这些图块的结构假定为二次的。所有图块层的图块大小相同。
getTileLayers() GTileLayer[] 向地图返回图块层数组。
getMinimumResolution() Number 向地图返回定义此地图类型的最低缩放级别。
getMaximumResolution() Number 向地图返回定义此地图类型的最高缩放级别。
getTextColor() String 向地图返回地图上覆盖文本的最适用颜色。用于版权控件所显示的版权消息文本的颜色。
getLinkColor() String 向地图返回地图上覆盖的超链接的最适用颜色。用于版权控件所显示的使用条款链接的颜色。
getErrorMessage() String 向地图返回区域中显示的错误消息,或有关此地图类型无地图图块处的区域或缩放级别的错误消息。
getCopyrights(bounds:GLatLngBounds, zoom:Number) String[] 向地图返回版权消息,该消息适用于由 bounds 描述的指定缩放级别的地区。这用于地图上的版权消息。
getUrlArg() String 向地图返回一个值,用作当前地图视图的永久链接中识别此地图类型的网址参数值。目前,这仅由地图应用程序使用。
getAlt() String 向地图返回此地图类型的备选文本。(自 2.86 开始)
地图类型常量 说明
G_NORMAL_MAP 该地图类型(默认地图类型)显示普通的街道地图。
G_SATELLITE_MAP 该地图类型显示卫星图像。
G_HYBRID_MAP 该地图类型显示卫星图像上的主要街道透明层。
G_PHYSICAL_MAP 该地图类型显示带有自然特征(如地形和植被)的地图。默认情况下,该地图类型不显示在地图类型控件中。(自 2.94 开始)
G_MOON_ELEVATION_MAP 该地图类型显示月球表面按海拔进行彩色编码的带阴影地形地图。默认情况下,该地图类型不显示在地图类型控件中。(自 2.95 开始)
G_MOON_VISIBLE_MAP 此地图类型显示来自月球轨道的照片。默认情况下,该地图类型不显示在地图类型控件中。(自 2.95 开始)
G_MARS_ELEVATION_MAP 该地图类型显示火星表面按海拔进行彩色编码的带阴影地形地图。默认情况下,该地图类型不显示在地图类型控件中。(自 2.95 开始)
G_MARS_VISIBLE_MAP 此地图类型显示来自火星轨道的照片。默认情况下,该地图类型不显示在地图类型控件中。(自 2.95 开始)
G_MARS_INFRARED_MAP 此地图类型显示火星表面带阴影的红外线地图,其中较热地区以亮色显示,较冷地区以暗色显示。(自 2.95 开始)
G_SKY_VISIBLE_MAP 该地图类型显示覆盖整个天体的天空拼接。(自 2.95 开始)
G_SATELLITE_3D_MAP 结合 Google 地球浏览器插件,此地图类型可以通过卫星图像显示地球的完全交互式三维模型。默认情况下,该地图类型不显示在地图类型控件中。如果将此地图类型添加到您的地图,不仅会为 Google 地球地图类型添加控件,还会在点击用户控件后处理该地图类型的初始化。如果用户当前没有在浏览器中安装 Google 地球插件,则用户第一次选择该地图类型时,系统会提示该用户下载安装该插件并重新启动浏览器。对于尚未安装该插件的用户,选择此地图类型会为地图创建 Google 地球实例并显示 Google 地球的三维视图。您可以使用 GMap2.getEarthInstance() 检索此 Google 地球实例并使用 Google 地球 API 对其进行处理。目前,标记、信息窗口和折线都可用于此三维地图类型,但是尚不支持其他功能。我们计划在以后的版本中支持更多功能。(自 2.113 开始)
G_DEFAULT_MAP_TYPES 上述前三种预定义地图类型数组(G_NORMAL_MAP、G_SATELLITE_MAP 和 G_HYBRID_MAP)。
G_MOON_MAP_TYPES 上述两种月球类型数组(G_MOON_ELEVATION_MAP 和 G_MOON_VISIBLE_MAP)。G_MARS_MAP_TYPES 上面定义的三种火星地图类型数组(G_MARS_ELEVATION_MAP、G_MARS_VISIBLE_MAP 和 G_MARS_INFRARED_MAP)。
G_SKY_MAP_TYPES 上面定义的一种天空地图类型数组 (G_SKY_VISIBLE_MAP)。
事件事件 说明newcopyright(copyright:GCopyright) 当向此地图类型中所包含的某个图块层的版权集合添加新版权时会触发此事件。
六. GMapTypeOptions 类
此类的实例用作 GMapType 构造函数的 opts? 参数。此类不存在构造函数。但是,此类可以实例化为 javascript 对象常量。
属性属性 类型 说明
shortName String 设置从 GMapType.getName(true) 中返回的地图类型的短名称。默认值与 name 相同。urlArg String 设置从 GMapType.getUrlArg() 中返回的地图类型的网址参数。默认值为空字符串。maxResolution Number 设置由 GMapType.getMaximumResolution() 返回的地图类型的最高缩放级别。默认值为所有图块层的最大值。
minResolution Number 设置由 GMapType.getMinimumResolution() 返回的地图类型的最低缩放级别。默认值为所有图块层的最小值。
tileSize Number 设置由 GMapType.getTileSize() 返回的图块大小。默认值是 256。
textColor String 设置由 GMapType.getTextColor() 返回的文本颜色。默认值是 "black"。
linkColor String 设置由 GMapType.getLinkColor() 返回的文本颜色。默认值是 "#7777cc"。
errorMessage String 设置由 GMapType.getErrorMessage() 返回的错误消息。默认值为空字符串。
alt String 对 GMapType.getAlt() 返回的地图类型设置备选文本。默认值为空字符串。(自 2.64 开始)
radius Number 按传递的 Number(以米表示)设置地图类型的半径。默认值是6378137,这是地球的赤道半径(以米表示)。(自 2.89 开始)
七. GMercatorProjection 类
所有预定义的地图类型都可以使用墨卡托投影的 GProjection 接口的这一实现方法。
构造函数
GMercatorProjection(zoomlevels:Number) 为指定的缩放级别数创建墨卡托投影。
方法 返回值 说明
fromLatLngToPixel(latlng:GLatLng, zoom:Number) GPoint 请参见 GProjection。
fromPixelToLatLng(pixel:GPoint, zoom:Number, unbounded?:Boolean) GLatLng 请参见 GProjection。
tileCheckRange(tile:GPoint, zoom:Number, tilesize:Number) None 请参见 GProjection。
getWrapWidth(zoom:Number) None 请参见 GProjection。墨卡托投影在经度方向是周期性的,因此它返回指定缩放级别下的整个地球的地图宽度(以像素表示)。(自 2.46 开始)
八. 接口 GProjection
这是地图投影接口。将地图投影实例传递到 GMapType 构造函数中。class GMercatorProjection 是通过此接口实现的,所有预定义地图类型都可使用。如果希望用不同的地图投影定义地图类型,则可实现此接口。
这些方法由地图调用。您需要实现它们。
方法 返回值 说明
fromLatLngToPixel(latlng:GLatLng, zoom:Number) GPoint 返回指定的缩放级别上指定的地理坐标对应的点的地图坐标(以像素表示)。
fromPixelToLatLng(pixel:GPoint, zoom:Number, unbounded?:Boolean) GLatLng 返回指定缩放级别上指定的地图坐标点(以像素表示)的地理坐标。标志 unbounded 在地理经度坐标超出 -180 或 180 度子午线时使地理经度坐标不重叠。
tileCheckRange(tile:GPoint, zoom:Number, tilesize:Number) Boolean 向地图返回图块索引是否在地图类型的有效范围内。否则,地图将会显示空图块。如果地图包含多个地球副本,它还可修改指向相同图块的另一实例的 tile 索引,从而修改不同图块坐标的同一图块。
getWrapWidth(zoom:Number) Number 向地图返回 x 方向的周期,即地图绕地球一周所需的像素数。默认情况下,返回 Infinity,即地图不会重复。地图使用该方法在包含多个地球副本的地图视图上计算叠加层的放置位置(这种情况通常只出现在缩放级别较低时)。(自 2.46 开始)