Не могу победить небольшую проблемку:
Изначально, известен адрес и координаты точки. Рисуется точка на карте (по известным координатам), с возможностью перетаскивания по карте. После каждого перетаскивания, определяются новые координаты точки и записываются в поле geocoords1. Т.е. в этом случае все работает.
Если воспользоваться поиском (поле geopoint1), то результат поиска отобразится на карте, найденная точка будет доступна для перетаскивания, но не будут определяться новые координаты точки после перетаскивания.
На кнопку "Искать" навешан вызов функции showAddress(value), которая определяет координаты точки и рисует ее на карте.
Действия при завершении перемещения точки:
YMaps.Events.observe(geoResult, geoResult.Events.DragEnd, function (obj) {
...
}
описаны в блоке обработчика для события window.onLoad.
geopoint1: <input type="text" id="geopoint1" name="geopoint1" value="Екатеринбург, ул. Антона Валека, 13" style="width:235px;" />
<input type="button" value="Искать" onclick="javascript:showAddress(document.getElemen tById('geopoint1').value) ;return false;" />
<br />geocoords1: <input type="text" id="geocoords1" name="geocoords1" value="60.592695,56.838844" style="width:235px;" disabled="disabled" />
<script src="http://api-maps.yandex.ru/1.1/index.xml?key=YANDEX " type="text/javascript"></script>_API_KEY
<script type="text/javascript">
var map, geoResult, s;
var new_coords;
// Создание обработчика для события window.onLoad
YMaps.jQuery(function () {
// Создание экземпляра карты и его привязка к созданному контейнеру
map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]
// установка центра карты и элементов управления
map.setCenter(new YMaps.GeoPoint(60.592695,56.838844), 12);
map.addControl(new YMaps.SmallZoom(), new YMaps.ControlPosition(YMaps.ControlPosition.TOP_LE FT, new YMaps.Point(5,5))
// Создание стиля для значка метки
s = new YMaps.Style(
s.iconStyle = new YMaps.IconStyle(
s.iconStyle.href = "images/house_icon.png";
s.iconStyle.offset = new YMaps.Point(-10, -15);
s.iconStyle.size = new YMaps.Point(30, 20);
// определение точек
var geopoint = new YMaps.GeoPoint(60.592695,56.838844);
geoResult = new YMaps.Placemark(geopoint, {draggable: true, style: s}
// добавление описания к точкам
geoResult.description = 'Екатеринбург, ул. Антона Валека, 13';
// добавление точек на карту
map.addOverlay(geoResult);
// действия при завершении перемещения точки
YMaps.Events.observe(geoResult, geoResult.Events.DragEnd, function (obj) {
new_coords = obj.getGeoPoint().copy(
// Задаем контент для балуна
geoResult.description = new_coords;
obj.update(
// новые координаты записываем в соответствующее поле формы
document.getElementById("geocoords1").value = new_coords;
}
}
// Функция для отображения результата геокодирования
// Параметр value - адрес объекта для поиска
function showAddress (value) {
// Удаление предыдущего результата поиска / начальной точки
map.removeOverlay(geoResult);
// Запуск процесса геокодирования
var geocoder = new YMaps.Geocoder(value, {results: 1, boundedBy: map.getBounds()}
// Создание обработчика для успешного завершения геокодирования
YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
// Если объект был найден, то добавляем его на карту
// и центрируем карту по области обзора найденного объекта
if (this.length()) {
geoResult = this.get(0);
geoResult.setOptions({draggable: true, style: s}
map.addOverlay(geoResult);
map.setBounds(geoResult.getBounds()
} else {
alert("Ничего не найдено");
}
}
// Процесс геокодирования завершен неудачно
YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (geocoder, error) {
alert("Произошла ошибка: " + error);
})
}
</script>
<div id="YMapsID" style="width:300px;height:200px"></div>