можно грузить тайлы карт из OpenStreetMaps
правда придеться на зума самому считать количество доступных тайлов, потом текущие координаты переводить в адреса тайлов
Добавлено через 4 минуты
Код AS3:
/**
* Преобразование координат меркатора в геокоординаты
* @param mp координаты меркатора
* @param z масштаб
* @return геокоординаты
*/
public static function getGeoFromMercator(mp:MercatorPosition, z:int):GeoPosition {
var _mp:MercatorParams = getMercatorParams(z);
var _lat:Number = Math.atan(sinh((_mp.width / 2 - mp.y) / _mp.c / 180 * Math.PI)) / Math.PI * 180;
var _lon:Number = (mp.x - _mp.width / 2) / _mp.c;
return new GeoPosition(_lat, _lon);
}
/**
* Преобразование геокоординат в координаты меркатора
* @param gp геокоординаты
* @param z масштаб
* @return координаты меркатора
*/
public static function getMercatorFromGeo(gp:GeoPosition, z:int):MercatorPosition {
var _point:Point = getPointFromGeo(gp, z);
return new MercatorPosition(_point.x, _point.y);
}
/**
* Преобразование геокоординат в точку с дробными координатами
* @param gp геокоординаты
* @param z масштаб
* @return точка с дробными координатами
*/
public static function getPointFromGeo(gp:GeoPosition, z:int):Point {
//if (_lat == 90 || _lat == 0 || _lon == 180 || _lon == 0)
//return new MercatorPosition(0, 0);
//if (_lon > 5 && _lon < 175)
//if (_lat > 5 && _lat < 85)
var _lat:Number = gp.latitude;
var _lon:Number = gp.longitude;
var _mp:MercatorParams = getMercatorParams(z);
var _x:Number = _mp.width / 2 + (_lon * _mp.c);
var _y:Number = _mp.width / 2 - (Math.log(Math.tan(Math.PI / 4 + _lat / 180 * Math.PI / 2))) * 180 / Math.PI * _mp.c;
return new Point(_x, _y);
}
/**
* Получение параметров С и W для данного масштаба
* @param z масштаб
* @return параметры С и W
*/
public static function getMercatorParams(z:int):MercatorParams {
var _w:int = getTilesWidth(z);
var _c:Number = _w / 360;
return new MercatorParams(_c, _w);
}
/**
* Получение максимальной ширины тайлов в одной стороне для заданного масштаба
* @param z масштаб
* @return количество тайлов
*/
public static function getTilesWidth(z:int):int {
return getTilesCount(z) * 256;
}
/**
* Получение количества тайлов в одной стороне для заданного масштаба
* @param z масштаб
* @return количество тайлов
*/
public static function getTilesCount(z:int):int {
return 1 << z;
}
Добавлено через 5 минут
Ну и собственно, сам шаблон URL -
http://b.tile.openstreetmap.org/[z]/[x]/[y].png