Leaflet Mapboxjs中瓷砖层上的maxNativeZoom是否存在问题?

Leaflet Mapboxjs中瓷砖层上的maxNativeZoom是否存在问题?,leaflet,mapbox,Leaflet,Mapbox,我目前正在从2.1.5版升级到3.1.1版。 我遇到了瓷砖层上maxNativeZoom选项的问题 基本上,它看起来好像被忽略了,并且地图一直在缩放显示白色瓷砖 我的期望是瓷砖应该自动缩放 这在版本2.1.5中运行良好 这些是小提琴: 2.1.5: 3.1.1: 下面是上面小提琴的小样本代码: L.mapbox.accessToken='pk.eyj1ijoidhzibg9tymvyzyisimeioijaxzmwwnxbumnrudmjqngqymjwin0.842ovgKydac51tg6b

我目前正在从2.1.5版升级到3.1.1版。 我遇到了瓷砖层上maxNativeZoom选项的问题

基本上,它看起来好像被忽略了,并且地图一直在缩放显示白色瓷砖

我的期望是瓷砖应该自动缩放

这在版本2.1.5中运行良好

这些是小提琴:

2.1.5:

3.1.1:

下面是上面小提琴的小样本代码: L.mapbox.accessToken='pk.eyj1ijoidhzibg9tymvyzyisimeioijaxzmwwnxbumnrudmjqngqymjwin0.842ovgKydac51tg6b9qKbg'; var map=L.mapbox.map'map',null,{maxZoom:20} .setView[40,-74.50],9; var layer=newl.mapbox.tillelayer'mapbox.streets',{maxNativeZoom:17,maxZoom:20};
map.addLayerlayer 这似乎是Mapbox.js版本3.0.0中的一个bug,该版本内部使用传单1.0.1或1.0.2

在Mapbox.js示例页面上可以看到超缩放分幅:

我看到您已经在Mapbox.js存储库上打开了一个问题:

似乎发生的是,Mapbox正确地冻结了通过maxNativeZoom的平铺的X和Y坐标,但没有冻结Z缩放值。因此,如果可用,它将显示完全不正确的分幅

此错误特定于Mapbox.js,传单的行为符合预期:

var map=L.map'map'{ 最大缩放:20 }.setView[48.86,2.35],11; L.tileLayer'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'{ 属性:“©;参与者”, maxNativeZoom:11, 最大缩放:20 }.addTomap; var$zoomLevel=document.getElementByIdzoomLevel; 地图。在“zoomend”上,显示ZoomLevel; showZoomLevel; 函数showmlevel{ $zoomLevel.innerHTML=map.getZoom; } 缩放级别:
这似乎是Mapbox.js版本3.0.0中的一个bug,该版本内部使用传单1.0.1或1.0.2

在Mapbox.js示例页面上可以看到超缩放分幅:

我看到您已经在Mapbox.js存储库上打开了一个问题:

似乎发生的是,Mapbox正确地冻结了通过maxNativeZoom的平铺的X和Y坐标,但没有冻结Z缩放值。因此,如果可用,它将显示完全不正确的分幅

此错误特定于Mapbox.js,传单的行为符合预期:

var map=L.map'map'{ 最大缩放:20 }.setView[48.86,2.35],11; L.tileLayer'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'{ 属性:“©;参与者”, maxNativeZoom:11, 最大缩放:20 }.addTomap; var$zoomLevel=document.getElementByIdzoomLevel; 地图。在“zoomend”上,显示ZoomLevel; showZoomLevel; 函数showmlevel{ $zoomLevel.innerHTML=map.getZoom; } 缩放级别:
这是我的解决办法。我还将把这个发送到MapBox。主要有两个问题

第一个问题是“最小缩放”和“最大缩放”始终被“贴图盒”平铺层设置覆盖

第二个问题是没有根据maxNativeZoom正确设置z点

这似乎对我有用。有关详细信息,请参见代码示例

var customTileLayer=函数url,选项{ var formatPattern=/\.?:png | jpg\d*?=$|\?/; var TileLayer extend=L.mapbox.TileLayer.extend{ _setTileJSON:函数json{ //util.strictjson,“对象”; /*我们必须为此创建一个函数,因为util在mapbox中是私有的*/ “对象”; if!this.options.format{ var match=json.tiles[0].matchformatPattern; 如果匹配{ this.options.format=匹配[1]; } } var minZoom=this.options.minZoom | | json.minZoom | | 0; var maxZoom=this.options.maxZoom | json.maxZoom | 18; L.扩展此选项{ tiles:json.tiles, 属性:this.options.sanitizerjson.attribute, minZoom:minZoom, maxZoom:maxZoom, tms:json.scheme=='tms', //边界:json.bounds&&util.lboundsjson.bounds /*我们必须为此创建一个函数,因为util在mapbox中是私有的*/ 边界:json.bounds&&lBoundsjson.bounds }; 这是._tilejson=json; 这是重画; 归还这个; }, getTileUrl:函数tilePoint{ var tiles=this.options.tiles, 索引=Math.floorMath.abstilePoint.x+tilePoint.y%tiles.length, url=分幅[索引]; tilePoint.z=这个; var templated=L.Util.templateurl,tilePoint; if!模板化的| |!this.options.format{ 返回模板; }否则{ 返回模板化的.replaceformatPattern, L.Browser.retina?this.scalePrefix:'.'.+this.options.format; } } }; 返回新的tileLayerExtendurl,选项; }; var lBounds=函数{ 返回新的L.LatLngBounds[[uU[1]、[uU[0]、[[uU[3]、[uU[2]]; }; var strict=函数ux,类型{ 如果typeof!==类型{ 抛出新错误“无效参数:”+type+“应为”; } }; L.mapbox.accessToken='pk.eyj1ijoidhzibg9tymvyzyisimeioijaxzmwwnxbumnrudmjqngqymjwin0.842ovgKydac51tg6b9qKbg'; var map=L.mapbox.map'map',null, {maxZoom:20} .setView[40,-74.50],9; var layer=newcustomtilelayer'mapbox.streets',{maxNativeZoom:17,maxZoom:20}; var$zoomLevel=document.getElementByIdzoomLevel; map.addLayerlayer; $zoomLevel.innerHTML=map.getZoom; 地图。关于“zoomend”,函数E{ var zoom=e.target.getZoom; $zoomLevel.innerHTML=zoom; }; 正文{margin:0;padding:0;} 容器{位置:绝对;顶部:0;底部:0;宽度:100%;高度:100%;} 地图{高度:100%;宽度:100%;}
这是我的解决办法。我还将把这个发送到MapBox。主要有两个问题

第一个问题是“最小缩放”和“最大缩放”始终被“贴图盒”平铺层设置覆盖

第二个问题是没有根据maxNativeZoom正确设置z点

这似乎对我有用。有关详细信息,请参见代码示例

var customTileLayer=函数url,选项{ var formatPattern=/\.?:png | jpg\d*?=$|\?/; var TileLayer extend=L.mapbox.TileLayer.extend{ _setTileJSON:函数json{ //util.strictjson,“对象”; /*我们必须为此创建一个函数,因为util在mapbox中是私有的*/ “对象”; if!this.options.format{ var match=json.tiles[0].matchformatPattern; 如果匹配{ this.options.format=匹配[1]; } } var minZoom=this.options.minZoom | | json.minZoom | | 0; var maxZoom=this.options.maxZoom | json.maxZoom | 18; L.扩展此选项{ tiles:json.tiles, 属性:this.options.sanitizerjson.attribute, minZoom:minZoom, maxZoom:maxZoom, tms:json.scheme=='tms', //边界:json.bounds&&util.lboundsjson.bounds /*我们必须为此创建一个函数,因为util在mapbox中是私有的*/ 边界:json.bounds&&lBoundsjson.bounds }; 这是._tilejson=json; 这是重画; 归还这个; }, getTileUrl:函数tilePoint{ var tiles=this.options.tiles, 索引=Math.floorMath.abstilePoint.x+tilePoint.y%tiles.length, url=分幅[索引]; tilePoint.z=这个; var templated=L.Util.templateurl,tilePoint; if!模板化的| |!this.options.format{ 返回模板; }否则{ 返回模板化的.replaceformatPattern, L.Browser.retina?this.scalePrefix:'.'.+this.options.format; } } }; 返回新的tileLayerExtendurl,选项; }; var lBounds=函数{ 返回新的L.LatLngBounds[[uU[1]、[uU[0]、[[uU[3]、[uU[2]]; }; var strict=函数ux,类型{ 如果typeof!==类型{ 抛出新错误“无效参数:”+type+“应为”; } }; L.mapbox.accessToken='pk.eyj1ijoidhzibg9tymvyzyisimeioijaxzmwwnxbumnrudmjqngqymjwin0.842ovgKydac51tg6b9qKbg'; var map=L.mapbox.map'map',null,{maxZoom:20} .setView[40,-74.50],9; var layer=newcustomtilelayer'mapbox.streets',{maxNativeZoom:17,maxZoom:20}; var$zoomLevel=document.getElementByIdzoomLevel; map.addLayerlayer; $zoomLevel.innerHTML=map.getZoom; 地图。关于“zoomend”,函数E{ var zoom=e.target.getZoom; $zoomLevel.innerHTML=zoom; }; 正文{margin:0;padding:0;} 容器{位置:绝对;顶部:0;底部:0;宽度:100%;高度:100%;} 地图{高度:100%;宽度:100%;}
非常感谢你的回答。你有没有遇到过这种直接打电话给传单的方法?没有,对不起。L.mapbox.TileLayer似乎非常自定义L.TileLayer,因此解决方法可能与修复此错误的正确方法无异。请告诉我您对我的解决方案的看法。很糟糕,我不得不扩展mapbox层,但它似乎可以工作。谢谢。非常感谢你的回答。你有没有遇到过这种直接打电话给传单的方法?没有,对不起。L.mapbox.TileLayer似乎非常自定义L.TileLayer,因此解决方法可能与修复此错误的正确方法无异。请告诉我您对我的解决方案的看法。很糟糕,我不得不扩展mapbox层,但它似乎可以工作。谢谢,干得好!一定要在mapbox.js repo上做一个公关,否则我不确定人们会理解你修改了什么。谢谢!我今晚要做那件事。我以前从未这样做过,所以这将是令人兴奋的;如果你在第一次公关中遇到任何困难,请随时询问Mapbox的同事,我相信他们会很乐意帮助你的!您在GitHub上也有一些资源。继续努力!干得好!一定要在mapbox.js repo上做一个公关,否则我不确定人们会理解你修改了什么。谢谢!我今晚要做那件事。我以前从未这样做过,所以这将是令人兴奋的;如果你在第一次公关中遇到任何困难,请随时询问Mapbox的同事,我相信他们会很乐意帮助你的!您在GitHub上也有一些资源。继续努力!