Googlemaps - удаление предыдущего маркера - PullRequest
1 голос
/ 11 сентября 2009

После нескольких советов о том, как очистить маркеры на GoogleMap, у меня есть карта, на которой я хотел бы, чтобы отображался только один маркер (в основном последний нажатый маркер). Я бы хотел, чтобы пользователь мог передумать и щелкнуть несколько раз, но не иметь запутанную карту предыдущих кликов и т. Д.

Я пробовал map.clearOverlay (); функция, но, кажется, окончательно очистить всю карту.

function initialize() {

    if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("googlemap"));

        map.setCenter(new GLatLng(50.401515,-4.866943), 8);

        GEvent.addListener(map,"click", function(overlay,latlng) {     
            if (latlng) {   
                var myHtml = "" + latlng ;
                split=myHtml.indexOf(",");       
                x=Math.round(myHtml.slice(1,split)*1000000)/1000000;
                y=Math.round(myHtml.slice(split+1,myHtml.length-1)*1000000)/1000000;
                document.collector.latitude.value=x;
                document.collector.longitude.value=y;
                lat="<br />Latitude: " + x;
                lon="<br />Longitude: " + y;
                latlon=""+lat+lon;

                //map.openInfoWindow(latlng, latlon);
                map.clearOverlay();
                map.addOverlay(new GMarker(latlng));
            }
        });
        map.addControl(new GLargeMapControl3D());
        map.addControl(new GMapTypeControl());
    }
}

1 Ответ

1 голос
/ 11 сентября 2009

Не проверено, но следует делать то, что вы хотите - обратите внимание, что метод <a href="http://code.google.com/apis/maps/documentation/reference.html#GMarker.setLatLng" rel="nofollow noreferrer">setLatLng</a> для GMarker был введен в API версии 2.88:

function initialize() {

    if (GBrowserIsCompatible()) {
        var marker;

        function showNewMarker(latlng) {
            marker = new GMarker(latlng);
            map.addOverlay(marker);
            showMarker = updateExistingMarker;
        }

        function updateExistingMarker(latlng) {
            marker.setLatLng(latlng);
        }

        var showMarker = showNewMarker;

        var map = new GMap2(document.getElementById("googlemap"));

        map.setCenter(new GLatLng(50.401515,-4.866943), 8);

        GEvent.addListener(map,"click", function(overlay,latlng) {     
            if (latlng) {   
                var myHtml = "" + latlng ;
                split=myHtml.indexOf(",");       
                x=Math.round(myHtml.slice(1,split)*1000000)/1000000;
                y=Math.round(myHtml.slice(split+1,myHtml.length-1)*1000000)/1000000;
                document.collector.latitude.value=x;
                document.collector.longitude.value=y;
                lat="<br />Latitude: " + x;
                lon="<br />Longitude: " + y;
                latlon=""+lat+lon;

                //map.openInfoWindow(latlng, latlon);
                map.clearOverlay();
                showMarker(latlng);
            }
        });
        map.addControl(new GLargeMapControl3D());
        map.addControl(new GMapTypeControl());
    }
}

Работает с использованием переменной showMarker, содержащей ссылку на функцию. Начинается указание на функцию showNewMarker, которая создает маркер, добавляет его на карту, а затем изменяет showMarker, указывая на функцию updateExistingMarker, которая просто использует setLatLng для перемещения маркера на Новая позиция. Это означает, что при последующих щелчках существующий маркер будет перемещен в место щелчка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...