Здравствуйте.
Использую TileDataSource. В функции getTileUrl(tile, zoom) получаю географические координаты привязки (левого нижнего угла) тайла:
var worldSize = Math.pow(2.0, zoom);
var equatorLength = 40075016.685578488;
var Rn = 6378137.0;
var a = worldSize / equatorLength;
var b = equatorLength / 2.0;
var MercatorX = tile.x / a - b;
var MercatorY = b - tile.y / a;
var ab = 0.00335655146887969400;
var bb = 0.00000657187271079536;
var cb = 0.00000001764564338702;
var db = 0.00000000005328478445;
var xphi = Math.PI / 2 - 2 * Math.atan(1 / Math.exp(MercatorY / Rn)) ;
var latitude = xphi + ab * Math.sin(2 * xphi) + bb * Math.sin(4 * xphi) + cb * Math.sin(6 * xphi) + db * Math.sin(8 * xphi);
latitude = latitude * 180 / Math.PI;
var longitude = MercatorX * 180 / Math.PI / Rn;
Это работает верно. Но мне нужно еще получить географические координаты правого верхнего угла (или длину тайла по широте и долготе).
Я пробовал следующее:
// получить точку в пикселях, соответствующую правому верхнему углу (при размере тайла 256х256 пикселей)
var mapPixels = map.tileCoordinates.toPixels(tile, new YMaps.Point(256,256), zoom, 256);
// преобразовать полученную точку из пикселей в координаты:
var mapCoords = map.converter.localPixels
Широта и долгота получаются неверными (широта всегда равна -90). Наверное, размеры тайла нужно считать в глобальных пикселях, но как это сделать я не знаю.
Подскажите, куда копать?