【问题标题】:Inverted Y axis of custom tile images names自定义平铺图像名称的倒 Y 轴
【发布时间】:2019-11-26 16:05:06
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript leaflet


    【解决方案1】:

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

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

    但是,请注意(从 Leaflet 1.3.1 开始)only works for maps with a non-infinite coordinate system

    在您的情况下,您可能希望通过创建自己的 L.TileLayer 子类来解决此问题。 Leaflet tutorial about extending layers 上有一个完整的指南,但是 TL;DR 版本的 tilelayer 可以改变其 tile 坐标:

    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(....);
    

    而只是反转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(....);
    

    【讨论】:

    • 谢谢!到目前为止我见过的最干净的解决方案,对我来说是新的。也许您有一些关于为什么社区经常需要的这种功能不是内置的信息?类似于“TileLayer”对象的“InvertedY”设置。我读过coord。系统无限,扩展等,但我确信它可以在本地完成
    • Leaflet issue tracker 没有任何此类功能请求,因此我不同意这是“经常需要”。你会发现最接近的是github.com/Leaflet/Leaflet/issues/4338。不过,请随意提出要求(如果您能提出实施建议,那就更好了)。
    • 在我的例子中,我的瓦片是四边形,所以我没有用 z/x/y 请求它们,而是计算一个四边形来找到瓦片。在这种情况下否定 Y 轴不起作用,并且我的图块被错误地翻转。有解决方案吗?这是我的公式:jsfiddle.net/a991fjgj
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 2021-01-09
    • 1970-01-01
    相关资源
    最近更新 更多