Показать сообщение отдельно
  #17 (permalink)  
Старый 28.04.2010, 16:38
Кандидат Javascript-наук
Отправить личное сообщение для Jurasmi Посмотреть профиль Найти все сообщения от Jurasmi
 
Регистрация: 25.11.2008
Сообщений: 115

moscowMapAtYandex({
	//id блока с картой в качестве фона
	mapId:'map', 
	//точки, координаты, которых известны (не менее двух)
	//это "характерные" точки (например точки на МКАДе)
	pointArr:[
		{
			pixel:[102, 292], //в пикселях на картинке (от левого-нижнего угла) (ОХ, OY)
			coord:[37.589093, 55.909067] //(Longitude/Latitude) - географические координаты из yandex maps
		},
		{
			pixel:[24, 158], 
			coord:[37.386533, 55.713611]
		}
	]
});


function moscowMapAtYandex(setup){
	var map = document.getElementById(setup.mapId),
		OX1 = setup.pointArr[0].pixel[0],
		OX2 = setup.pointArr[1].pixel[0],
		OY1 = setup.pointArr[0].pixel[1],
		OY2 = setup.pointArr[1].pixel[1],
		lon1 = setup.pointArr[0].coord[0],
		lon2 = setup.pointArr[1].coord[0],
		lat1 = setup.pointArr[0].coord[1],
		lat2 = setup.pointArr[1].coord[1],
		deltaOX = Math.abs(OX1 - OX2),
		deltaOY = Math.abs(OY1 - OY2),
		deltaLat = Math.abs(lat1 - lat2),
		deltaLon = Math.abs(lon1 - lon2),
		oxPixPrice = deltaLon/deltaOX,//"цена" одного пикселя по OX
		oyPixPrice = deltaLat/deltaOY,//"цена" одного пикселя по OY
		Olon = lon1-OX1*oxPixPrice,//долгота левого-нижнего угла картинки
		Olat = lat1-OY1*oyPixPrice;//широта левого-нижнего угла картинки
	
	var pointList = map.getElementsByTagName('a'); //точки на карте
	for(i=0; i<=pointList.length-1; i++){
		var curPoint = pointList[i],
			curPointLon = curPoint.getElementsByTagName('span')[0].innerHTML,//здесь записана долгота из Яндекса
			curPointLat = curPoint.getElementsByTagName('span')[1].innerHTML,//здесь записана широта из Яндекса
			curPointOX = Math.round((curPointLon-Olon)/oxPixPrice),
			curPointOY = Math.round((curPointLat-Olat)/oyPixPrice);
			
		curPoint.style.left = curPointOX+'px';
		curPoint.style.bottom = curPointOY+'px';
	}
}


Если нужны пояснения - пиши, может помогу.
Мне тут ссылок надавали, но они на английском, я пока не во всех разобрался.
http://stackoverflow.com/questions/2...a-given-picure
Ответить с цитированием