如果觉得 GTileLayerOverlay
太受限制,则您可以定义自己的自定义地图类型,并开发全新的显示样式。要执行此操作,请构造一个 GMapType
对象,并使用 GMap2.addMapType()
方法将其添加到地图。
从头构造地图类型是一个复杂的过程。您需要构建一种方式,在提供当前图标的情况下,定义和检索在地图上显示的动态数据,并需要确定怎样引用和显示图块。您怎么做由您自己决定,但我们可以通过说明 Google 地图怎样实现其图块引用来向您提供一些帮助。
Google 地图坐标
Google 地图 API 使用三种坐标系:
* 像素坐标,引用图块上的一个点
* 图块坐标,引用图块层中的一个图块
* 缩放层,定义总的图块数
下面对其中每个系统进行讨论。
像素坐标
Google 地图中的每个图块都包含 256 x 256 个像素。可以使用 GPoint(x,y) 对来引用特定图块上的某个点。每个图块的原点 (0,0) 表示为图块的西北角。因此,对于表示整个地球的单个图块,原点设置为在北极,经度 -180 度,您可以在该位置看到阿拉斯加。x(经度)值越往东越大,而 y(纬度)值越往南越大,一直到东南角 (255,255)。
在高一级的缩放级别,像素空间在 x 和 y 方向都扩大一倍。例如,在缩放级别 1,地图包括 4 个 256x256 像素的图块,产生 512x512 的像素空间。在缩放级别 19,地图上的每个 x 和 y 像素均可以使用 0 和·256 * 219 之间的值来引用。
图块坐标
引用整个地图上这样一个唯一的点通常是不实际的。在较高的缩放级别,Google 地图 API 不能使用一个图像文件显示整个地球。因此确定正在使用哪个图块,然后相对于该图块的原点计算像素坐标非常有用。您实现的任何自定义地图都需要进行相同的计算。
Google 地图中的图块从与像素相同的原点开始计算,以便使原点图块始终处于地图的西北角。图块使用从该原点算起的 x,y
坐标进行索引。例如,在缩放级别 2,当地球分为 16 个图块时,每个图块可以通过一个唯一的 x,y
对来引用:
(0, 1), (0, 2), (0, 3)
(1, 1), (1, 2), (1, 3)
(3, 1), (3, 2), (3, 3)
因此索引特殊缩放级别的特殊点可以使用两个 GPoint
值:一个引用正在使用的图块,一个引用图块 256 x 256 像素图像中的坐标。
如果不是少许简单缩放级别,则实现图块叠加层是一个麻烦的任务,因为您需要添加逻辑来确定处理哪个特定的图块。Google 地图·API 可让您构建一个 GTileLayer
,将 GTileLayerOptions
参数作为对象常量传递。GTileLayerOptions
参数包含 tileUrlTemplate
属性,可根据图块坐标将图块请求映射到网址。叠加层的构造函数可能如下所示:
var tileLayerOverlay = new GTileLayerOverlay(
new GTileLayer(null, null, null, {
tileUrlTemplate: 'http://domain.com/myimage_{Z}_{X}_{Y}.png',
isPng:true,
opacity:1.0
})
);
map.addOverlay(tlo);
此模板方案可让您像处理 Google 地图一样处理使用图块坐标命名的一组图块。