我正在使用leaflet
gMapCatcher 生成的图块。那里的文件名完全不同。例如 - 传单中的缩放级别 17 在 gMapCatcher 中是级别 0。
我需要更改 url 模板
'http://{s}.somedomain.com/blabla/{z}/{x}/{y}.png'
所以我可以插入正确目录的计算
我尝试了在模板中编写计算的简单方法,但它不起作用。
我正在使用leaflet
gMapCatcher 生成的图块。那里的文件名完全不同。例如 - 传单中的缩放级别 17 在 gMapCatcher 中是级别 0。
我需要更改 url 模板
'http://{s}.somedomain.com/blabla/{z}/{x}/{y}.png'
所以我可以插入正确目录的计算
我尝试了在模板中编写计算的简单方法,但它不起作用。
我找到了答案:
我下载了 leaflet.js(通过http://jsbeautifier.org/传递)并更改了 getTileUrl 的代码并添加了我的自定义变量:
getTileUrl: function (t) {
return o.Util.template(this._url, o.extend({
s: this._getSubdomain(t),
z: t.z,
x: t.x,
y: t.y,
z0: 17-t.z,
x0: Math.floor(t.x/1024),
x1: Math.floor(t.x%1024),
y0: Math.floor(t.y/1024),
y1: Math.floor(t.y%1024)
}, this.options))
},
在我的脚本中
L.tileLayer('img/tiles/gMapCatcher/{z0}/{x0}/{x1}/{y0}/{y1}.png').addTo(map); //gMapCatcher
L.tileLayer('img/tiles/{z}/{x}/{y}.png').addTo(map);
//other tiles
在传单 0.7 中将代码更改为
getTileUrl: function (t) {
return L.Util.template(this._url, L.extend({
s: this._getSubdomain(t),
z: t.z,
x: t.x,
y: t.y,
z0: 17-t.z,
x0: Math.floor(t.x/1024),
x1: Math.floor(t.x%1024),
y0: Math.floor(t.y/1024),
y1: Math.floor(t.y%1024)
}, this.options))
},
否则它会给出一个参考错误并找到gmapcatcher文件的位置只需进入设置并找到位置
让 shai givati 的回答更进一步,如果您不想编辑源代码,这似乎可行(尽管据我所知没有记录):
var map = L.map('map');
var layer = L.tileLayer().addTo(map);
layer.getTileUrl = function(coords)
{
var url = /* whatever logic you'd like to use to come up with a url */;
return url;
};
这样做的好处是在 tileLayer 的单个实例上工作,而不是在每个图层上全局工作。此外,它更符合其他 javascript 映射框架的行为方式,例如谷歌地图。