首页 文章

如何为倒Y坐标的非地理平铺网格设置传单?

提问于
浏览
0

我有一个在我们的游戏服务器上生成 Map 图块的在线游戏 . 我在实际生成在线 Map 方面取得了一些成功,但事情总是不太正确 .

Map 图块以tile / / / 图案存储,遗憾的是,不是从左上角或左下角开始,而是在中心,因此x和y可以是负值和正值 .

我一直在尝试几种方法,每种方法都有很大的缺点 . 我唯一的成功就是使用了传单0.7.7,它开箱即用,只需要很少的代码 .

这是它应该如何看(传单0.7.7)https://panel.chrani.net/map.php

相同的代码,当前的传单,乱码的y轴和破碎的缩放(传单1.2)https://panel.chrani.net/map2.php

改动的代码,当前的传单,良好的下半部分,破碎的缩放(传单1.2)https://panel.chrani.net/map5.php

我不能对此做出正面或反面,几乎所有可用的帮助都是指地理资料和投影地理服务等等 .

我有几乎从-80开始的图片网格,-80在最大缩放级别上达到80,80 . 没有变换,没有翻译 . 我怎样才能在leflet中表现出来?

我会很感激任何关于在哪里寻找的指针 .

1 回答

  • 1

    Map 图块以图块/ / / 图案存储

    不,你错了 . 您的tilelayer将 tms 选项设置为 true ,这意味着该模式为 tile/{z}/{x}/{-y} . 2016年3月更改了TMS tilelayers的行为,请参阅https://github.com/Leaflet/Leaflet/issues/4338 .

    这里的问题是TMS假设 y tile坐标有一个最大值,这是无法使用无限CRS的 .

    我建议您重新设置切片以反转 y 坐标 . 否则,可能会破解tilelayer的 getTileUrl 方法以反转 y 坐标 .

    var tiles = L.tileLayer('https://panel.chrani.net/tiles/{z}/{x}/{y}.png', {});
    
    tiles.getTileUrl = function(coords) {
      coords.y = -coords.y;
      return L.TileLayer.prototype.getTileUrl.bind(tiles)(coords);
    }
    
    var map = new L.Map('leaflet', {
      crs: L.CRS.Simple,
      layers: [tiles],
      center: [0, 0],
      zoom: 0
    });
    

    调用 L.TileLayer.prototype.getTileUrl.bind(...)(...) 是hackish,但the whole hack works .

相关问题