Вам наверно известно, что на сайте API Яндекс.Карт существует инструмент для определения координат.
Но с выходом версии API Яндекс.Карт 2.х использовать его стало не очень удобно, т.к изменился порядок записи координат, полученное значение необходимо предварительно куда-то скопировать и поменять местами значения.
Я решил сделать свой инструмент для определения координат с API Яндекс.Карт 2.х
А за одно рассказать о том как это сделать.
На этом примере мы разберем работу с событиями и передачу значений в форму на карте.
Посмотреть его работу можно здесь.
Перейдя по ссылке, мы увидим карту с элементами управления и формой для вывода значений координат метки, масштаба и центра карты.
В центре карты расположена метка, которая показывает необходимое местоположение.
Определить координаты можно введя адрес в строку поиска, переместить метку в то место координаты которого Вы хотите узнать или кликнув по карте левой кнопкой мыши в нужном месте.
Координаты будут показаны в форме на карте в строке «Координаты метки», кроме того там показываются текущий уровень масштаба и координаты центра карты.
Теперь рассмотрим код примера.
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Инструмент для определения координат - API Яндекс.Карт 2.0</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="http://api-maps.yandex.ru/2.0/?load=package.full&lang=ru-RU" type="text/javascript"></script>
 
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<link href="/examples/add-users-ymapsapi2/css/bootstrap.min.css" rel="stylesheet" />
 
    <style>
      html, body, #YMapsID {
        margin: 0;
        padding: 0;
        height: 100%;
      }
 
	  #coord_form{
		position: absolute;
		z-index: 1000;
		background: none repeat scroll 0% 0% rgb(255, 255, 255);
		list-style: none outside none;
		padding: 10px;
		margin: 0px;
		right: 10px;
		top: 50px;
	  }
    </style>
 
    <script type="text/javascript">
 
	var myMap, myPlacemark, coords;
 
	ymaps.ready(init);
 
        function init () {
 
		//Определяем начальные параметры карты
            myMap = new ymaps.Map('YMapsID', {
                    center: [56.326944, 44.0075], 
                    zoom: 10
                });	
 
			//Определяем элемент управления поиск по карте	
			var SearchControl = new ymaps.control.SearchControl({noPlacemark:true});	
 
			//Добавляем элементы управления на карту
			 myMap.controls
				.add(SearchControl)                
                .add('zoomControl')                
                .add('typeSelector')                 
                .add('mapTools');
 
			coords = [56.326944, 44.0075];
 
			//Определяем метку и добавляем ее на карту				
			myPlacemark = new ymaps.Placemark([56.326944, 44.0075],{}, {preset: "twirl#redIcon", draggable: true});	
 
			myMap.geoObjects.add(myPlacemark);			
 
			//Отслеживаем событие перемещения метки
			myPlacemark.events.add("dragend", function (e) {			
			coords = this.geometry.getCoordinates();
			savecoordinats();
			}, myPlacemark);
 
			//Отслеживаем событие щелчка по карте
			myMap.events.add('click', function (e) {        
            coords = e.get('coordPosition');
			savecoordinats();
			});	
 
	//Отслеживаем событие выбора результата поиска
	SearchControl.events.add("resultselect", function (e) {
		coords = SearchControl.getResultsArray()[0].geometry.getCoordinates();
		savecoordinats();
	});
 
	//Ослеживаем событие изменения области просмотра карты - масштаб и центр карты
	myMap.events.add('boundschange', function (event) {
    if (event.get('newZoom') != event.get('oldZoom')) {		
        savecoordinats();
    }
	  if (event.get('newCenter') != event.get('oldCenter')) {		
        savecoordinats();
    }
 
	});
 
    }
 
	//Функция для передачи полученных значений в форму
	function savecoordinats (){	
		var new_coords = [coords[0].toFixed(4), coords[1].toFixed(4)];	
		myPlacemark.getOverlay().getData().geometry.setCoordinates(new_coords);
		document.getElementById("latlongmet").value = new_coords;
		document.getElementById("mapzoom").value = myMap.getZoom();
		var center = myMap.getCenter();
		var new_center = [center[0].toFixed(4), center[1].toFixed(4)];	
		document.getElementById("latlongcenter").value = new_center;	
	}
 
    </script>
 
</head>
 
<body>
 
<div id="YMapsID"></div>
<div id="coord_form">
<p><label>Координаты метки: </label><input id="latlongmet" class="input-medium" name="icon_text" /><br/>
<label>Масштаб: </label><input id="mapzoom" class="input-medium" name="icon_text" /></p>
<p><label>Центр карты: </label><input id="latlongcenter" class="input-medium" name="icon_text" /></p>
</div>
 
</body>
</html> | 
В начале мы определяем параметры нашей карты — центр, масштаб и добавляем метку в центр карты.
Далее мы должны отслеживать различные события.
Перемещение метки — dragend:
| myPlacemark.events.add("dragend", function (e) {			
	coords = this.geometry.getCoordinates();
	savecoordinats();
}, myPlacemark); | 
Если оно произошло, мы получаем новые координаты и вызываем функцию savecoordinats.
Код функции savecoordinats:
| function savecoordinats (){	
	var new_coords = [coords[0].toFixed(4), coords[1].toFixed(4)];	
	myPlacemark.getOverlay().getData().geometry.setCoordinates(new_coords);
	document.getElementById("latlongmet").value = new_coords;
	document.getElementById("mapzoom").value = myMap.getZoom();
	var center = myMap.getCenter();
	var new_center = [center[0].toFixed(4), center[1].toFixed(4)];	
	document.getElementById("latlongcenter").value = new_center;	
} | 
В начале мы преобразуем значения координат оставляя только четыре знака после запятой.
Затем передаем новые координаты нашей метке.
  Передаем значения координат элементу формы с id= latlongmet, уровень масштаба карты элементу — 
id = mapzoom.
Получаем координаты центра карты и после преобразования предаем элементу формы с id = latlongcenter.
Следующее отслеживаемое событие — клик по карте.
За это отвечает код:
| myMap.events.add('click', function (e) {        
    coords = e.get('coordPosition');
	savecoordinats();
}); | 
Нам нужно определить событие выбора результата поиска и перенести метку в эту точку.
| SearchControl.events.add("resultselect", function (e) {
		coords = SearchControl.getResultsArray()[0].geometry.getCoordinates();
		savecoordinats();
	}); | 
И последнее событие — это изменения области просмотра карты при изменении масштаба или перемещении карты.
За это отвечает код:
| myMap.events.add('boundschange', function (event) {
    if (event.get('newZoom') != event.get('oldZoom')) {		
        savecoordinats();
    }
	  if (event.get('newCenter') != event.get('oldCenter')) {		
        savecoordinats();
    }
 
}); | 
Надеюсь данный инструмент Вам понравиться.

Что уж очень подтормаживает на моей Xubuntu…
При нажатии на кнопку «Схема» — выпадающее меню прячется под блоком с координатами
Поправил, сместил форму в левую сторону
Здравствуйте, подскажите, как адаптировать этот код, для вставки в модуль? Спасибо!
В какой модуль Вы хотите вставлять код примера?
Модуль для вставки произвольного HTML кода для Joomla
Большое спасибо! Очень пригодилось.
Еще добавила сюда
behaviors: [«default», «scrollZoom»]
чтобы карта реагировала на прокручивание колесика мышки.
Добрый вечер! Подскажите пжл как теперь полученный переменные перевести в php и через форму отправить в базу данных для сохранения?
Спс. разобрался))) Тупил просто)))
Очень помог данный инструмент, даже не знаю, что бы я делал без него. Потратил бы кучу времени. Спасибо!
Спасибо за урок и пример, можно задать вопрос, как сделать чтобы по клику балун перемещался в нужное место?
Есть пример в документации — События карты
Admin, я не смог разабратся. могу вам заплотить за реализацию данного функционаламоя почта php84@bk.ru
Доброго дня.
Помогите пожалуйста в решении задачки:
Прокладываю с помощью «ymaps.route(..)» путь.
Возможно ли найти приблизительную середину пути для того, что-ты вставить туда метку с величиной расстояние между пунктами. Вот так вот:
http://rghost.ru/46345843/image.png
Заранее благодарю.
Добрый день! А не подскажите как еще в строку при клике отслеживать и выводить(как координаты) полный адрес метки?)))
Мое знание js оставляет желать лучшего((( 3 день мучаюсь(((
Благодарю, все отлично раюотает!
Павел, у меня такая же задача, подскажите как сделали, пожалуйста.
Отлично, только нужно в событие выбора результата поиска подправить не coords = SearchControl.getResultsArray()[0].geometry.getCoordinates();
а coords = SearchControl.getResultsArray()[e.get(‘resultIndex’)].geometry.getCoordinates();
так как у вас при любом выборе из списка поиска возвращаются координаты первого элемента(индекс 0)