3

Я создал форму карты Google, которая позволяет пользователям вводить адрес в текстовое поле и геокодировать запись. Затем он помещает маркер на карту. Это прекрасно работает, но я хочу добавить дополнительный addListener, поэтому, когда пользователь нажимает на карту, он добавит еще один контакт, на который они нажимают. По какой-то причине мой 'click' addListener не работает. Как я могу добавить несколько таких слушателей?Добавление нескольких событий addListener в форму карты Google с геокодированием

Я прикрепил мой curent код:

function initialize() { 
    var mapOptions = { 
     center: new google.maps.LatLng(40.7,-74.0), 
     zoom: 13, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    var map = new google.maps.Map(document.getElementById('map_canvas'), 
     mapOptions); 

    var input = document.getElementById('searchTextField'); 
    var autocomplete = new google.maps.places.Autocomplete(input); 

    autocomplete.bindTo('bounds', map); 

    var marker = new google.maps.Marker({ 
     map: map, 
     draggable: true 
    }); 

    google.maps.event.addListener(autocomplete, 'place_changed', function() { 
     var place = autocomplete.getPlace(); 
     if (place.geometry.viewport) { 
     map.fitBounds(place.geometry.viewport); 
     } else { 
     map.setCenter(place.geometry.location); 
     map.setZoom(16); 
     } 

     var image = "http://www.google.com/mapfiles/marker_green.png"; 
     marker.setIcon(image); 
     marker.setPosition(place.geometry.location); 



     var address = ''; 
     if (place.address_components) { 
     address = [(place.address_components[0] && 
        place.address_components[0].short_name || ''), 
        (place.address_components[1] && 
        place.address_components[1].short_name || ''), 
        (place.address_components[2] && 
        place.address_components[2].short_name || '') 
        ].join(' '); 
     } 
    }); 
    } 
    google.maps.event.addDomListener(window, 'load', initialize); 

google.maps.event.addListener(map, 'click', function() { 
    //alert("Hello! I am an alert box!!"); 

    var marker1 = new google.maps.Marker({ 
     map: map, 
     draggable: true 
    }); 
    var image = "http://www.google.com/mapfiles/marker_green.png"; 
     marker1.setIcon(image); 
     marker1.setPosition(new google.maps.LatLng(40.7,-74.0)); 
    map.addOverlay(marker1); 
}); 

Спасибо

ответ

1

Карта нажмите событие возвращает позицию мыши.

Обновление: Чтобы стереть старый маркер при добавлении нового, вам нужно сохранить экземпляр маркера вне области прослушивателя, после чего вы можете стереть его в начале события прослушивателя.

var singleMarker; 

google.maps.event.addListener(map, 'click', function(event) { 

    //if marker exists, erase marker 
    if(singleMarker){ 
     singleMarker.setMap(null); 
    } 

    singleMarker = new google.maps.Marker({ 
     position: event.latLng, //mouse click position 
     map: map, 
     draggable: true, 
     icon: "http://www.google.com/mapfiles/marker_green.png" 
    }); 
}); 

Обновлено fiddle example.

+0

Спасибо, Брайан! Это отлично работает. Единственная проблема заключается в том, что он добавляет новый маркер, не удаляя старый каждый клик. Как удалить последний маркер при добавлении нового? (Я попробовал просто добавить «marker1.setMap (null) 'но это не позволяет мне добавить новый маркер) – AtomicCharles

+0

Обновлен ответ –

+0

Спасибо, Брайан! – AtomicCharles

1

Вы можете использовать

google.maps.event.addListener(map,'click', function()... 

добавить событие OnClick для объекта карты. Вот ссылка: http://code.google.com/apis/maps/documentation/javascript/reference.html#Map

Вы также можете использовать Карты Google Рисование библиотеки Инструменты: http://code.google.com/apis/maps/documentation/javascript/overlays.html#drawing_tools

+0

Спасибо Мано. Я просто изменил 'google.maps.event.addListener (marker1, 'click', function() {...' to 'google.maps.event.addListener (map, 'click', function() {...' Если вы считаете, что это связано с тем, как я загружаю функцию initialize()? – AtomicCharles

+0

AtomicCharles - вы исправили это? У меня такое чувство, что у меня такая же проблема? – kayakpim