自定义平铺图像名称的倒置 Y 轴

Ale*_*xey 2 javascript leaflet

Leaflet 有一个已知问题,当您使用自定义图块提供程序而不是真实地球图像时,设置crs: L.CRS.Simple,Leaflet 会查询 Y 坐标与数学轴相比反转的图像。因此,右上角第一个图像的位置是1x-1而不是1x1

在互联网上,关于反转 Y 轴的主题相当古老,所以我的问题是:现在是否有一种正常的短且内置的方法来反转查询的 Y 轴?

我发现的唯一旧解决方案是重写 Leaflet 内部对象,例如扩展L.CRS.Simple

Iva*_*hez 5

如WMS/TMS 的 Leaflet 教程中所述,反转图块坐标的 Y 坐标的规范方法是在图块 URL 模板中使用{-y}而不是使用。{y}例如:

var layer = L.tileLayer('http://base_url/tms/1.0.0/tileset/{z}/{x}/{-y}.png');
Run Code Online (Sandbox Code Playgroud)

但请注意(从 Leaflet 1.3.1 开始)仅适用于具有非无限坐标系的地图

就您而言,您可能希望通过创建自己的L.TileLayer. 关于扩展图层的 Leaflet 教程有一个完整的指南,但是移动其图块坐标的tilelayer的TL;DR版本是:

L.TileLayer.CustomCoords = L.TileLayer.extend({
    getTileUrl: function(tilecoords) {
        tilecoords.x = tilecoords.x + 4;
        tilecoords.y = tilecoords.y - 8;
        tilecoords.z = tilecoords.z + 1;
        return L.TileLayer.prototype.getTileUrl.call(this, tilecoords);
    }
});

var layer = new L.TileLayer.CustomCoords(....);
Run Code Online (Sandbox Code Playgroud)

仅反转 Y 坐标的具体情况是:

L.TileLayer.InvertedY = L.TileLayer.extend({
    getTileUrl: function(tilecoords) {
        tilecoords.y = -tilecoords.y;
        return L.TileLayer.prototype.getTileUrl.call(this, tilecoords);
    }
});

var layer = new L.TileLayer.InvertedY(....);
Run Code Online (Sandbox Code Playgroud)