Показать сообщение отдельно
Старый 15.10.2012, 18:39
olexandr вне форума Посмотреть профиль Отправить личное сообщение для olexandr Посетить домашнюю страницу olexandr Найти все сообщения от olexandr
  № 2  
Ответить с цитированием
olexandr
 
Аватар для olexandr

Регистрация: Aug 2007
Адрес: Ukraine, Kyiv
Сообщений: 643
Отправить сообщение для olexandr с помощью ICQ Отправить сообщение для olexandr с помощью MSN Отправить сообщение для olexandr с помощью Skype™
можно грузить тайлы карт из 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
__________________
сайт, vk