计算从gdal2tiles生成的单个图块的经度边界


16

我想使用同一张地图上显示的gdal2tiles生成多个图块源。因此,在显示图块时,我需要确定边界是从哪个来源提供的。

有人知道如何纯粹基于zoom,x和y(从gdal2tiles生成的文件结构)计算单个图块的纬度范围吗?顺便说一句:我正在使用Google Maps API v3,以防需要从API调用某些功能来帮助进行计算。

我只限于缩放,x和y的原因是,图块不仅会被地图上的叠加层调用,而且还具有一些自定义打印功能,可以在地图外进行打印。

Answers:


22

数学描述如下:

http://www.maptiler.org/google-maps-coordinates-tile-bounds-projection/

…包括命令行实用程序的源代码和在线演示。

这也是非常简单的数学运算:

function tile2long(x,z) { return (x/Math.pow(2,z)*360-180); }

function tile2lat(y,z) {
    var n=Math.PI-2*Math.PI*y/Math.pow(2,z);
    return (180/Math.PI*Math.atan(0.5*(Math.exp(n)-Math.exp(-n))));
}

请注意y轴上XYZ / Google与TMS之间的差异。

谷歌地图API V3为您提供所需的功能也通过 .fromPointToLatLng()map.getProjection()


我只是想了解上述解决方案,因为我有同样的问题。您是说上述解决方案中的我吗?1.首先将x,y转换为tile2long()和tile2lat()并缩放为经度/纬度。2.使用在步骤中创建的经/纬度创建边界?我该怎么办?
维沙尔

@Petr你有C ++的东西吗?
Majid Hojati

它没有考虑瓷砖尺寸吗?
穆罕默德·乌默尔

据我所知,这导致一个点,瓷砖是一个区域或表面。您能否提供边界框代码?提前致谢。
赫伯特

从这篇文章中gist.github.com/tmcw/4954720,TMS是相同的图块,但向后索引。这是转换公式:Math.floor(Math.pow(2,z)-y-1)
Haggai


0

这是我的工作代码:

谷歌图像地图类型叠加层的jsfiddle示例

jsfiddle谷歌覆盖图像的另一个示例

function tile2long(x,z) {

  return (x/Math.pow(2,z)*360-180);

}





function tile2lat(y,z) {

  var n=Math.PI-2*Math.PI*y/Math.pow(2,z);

  return (180/Math.PI*Math.atan(0.5*(Math.exp(n)-Math.exp(-n))));

}





 var x = coord.x;

 var y = coord.y;

 var z = zoom;



 var NW_long = tile2long(x,z);



 var SW_long = tile2long(x,z);

 var SW_lat =  tile2lat(y+1,z);



 var NE_long = tile2long(x+1,z);

  var NE_lat =  tile2lat(y,z);







  var export_bbox = SW_long + ',' + SW_lat + ',' + NE_long + ',' + NE_lat;



     var url_param = '&format=png&size=256,256&transparent=true&f=image&bboxSR=4326&imageSR=4326';





   var url_layers =''





       var root_url = 'https://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer/export?bbox=';



     var tile_url = root_url + export_bbox + url_param + url_layers;

maptiler从coodinate编号和缩放获取bbox

如何计算谷歌坐标数缩放,转换,纬度长等。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.