Для перевода координат из географических в пиксельные в проекции EPSG:3395 (Яндекс.Карты) использую такой код (на входе - координаты в градусах и уровень масштаба tile сервера):
long CEPSG3395::GetAbsoluteX( double Longitude, unsigned int Z ) const
{
return (long)((Longitude + 180.0)/360.0*(256 * pow(2, Z)));
}
long CEPSG3395::GetAbsoluteY( double Latitude, unsigned int Z ) const
{
double rLat = Latitude * M_PI / 180;
double a = 6378137.0;
double k = 0.0818191908426;
double zz = tan(M_PI_4 + rLat / 2) / pow((tan(M_PI_4 + asin(k * sin(rLat)) / 2)), k);
double y = (20037508.342789 - a * log(zz)) * 53.5865938 / pow( 2 ,23 - Z);
return ((long)y );
}
Помогите найти/написать/поправить этот код для проекции EPSG:3857 (Google Maps)
Подробнее о проекциях: http://www.politerm.com.ru/zuludoc/tile_servers.htm