Wednesday 19 July 2017

gdal - Calculate lat lon bounds for individual tile generated from gdal2tiles


I have multiple tile sources generated using gdal2tiles I'd like to present on the same map. So when presenting a tile I need to determine which source to serve it up from, checking against the bounds.



Anyone know how to calculate the lat lon bounds for a single tile based purely on zoom, x, and y (from the file structure generated by gdal2tiles)? BTW: I'm using Google Maps API v3 in case there's a need to call some functionality from the API to help with calculations.


The reason I'm restricted to purely zoom, x, and y is because the tiles aren't just getting called by an overlay on the map but also some custom print functionality that allows printing outside of the map.



Answer



The math is described at:


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


…including the source code for command line utility and an online demonstration.


It is also pretty simple math:


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))));
}

Note the difference between XYZ/Google vs TMS in y axis.


Google Maps API V3 gives you the required functions too via .fromPointToLatLng() of map.getProjection().


No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...