在谷歌地图中按纬度/经度删除标记

时间:2013-08-14 11:54:02

标签: php javascript jquery google-maps google-maps-api-3

我的谷歌地图中有一组标记。在我的地图的右侧,我有地图中标记的地点列表。现在,在点击位置时,应更改针/标记的颜色。为此我想我会删除纬度和经度的标记(我将点击位置链接),并用新图像放置一个新标记。但我不知道如何删除纬度和经度或地点的标记。请帮忙。

<script type='text/javascript'>
$(document).ready(function() {
    var map = null;
    var infowindow = new google.maps.InfoWindow();
    function createMarker(place) {

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

        var address = place.formatted_address;



        marker.setPosition(place.geometry.location);
        marker.setTitle(address);
        marker.setVisible(true);
        address = address + '<a href="#" class="link" title="Been there" alt="' + address + '">B</a>&nbsp;<a class="link" href="#" title="Want to go" alt="' + address + '">W</a>&nbsp;<a class="link" href="#" alt="' + address + '" title="Favourite">F</a>';
        $('#trip_location').append(address);
        google.maps.event.addListener(marker, 'click', function(e) {
            infowindow.setContent('<div><strong>' + marker.title + '</strong><br>');
            infowindow.open(map, marker);
        });
        google.maps.event.trigger(marker, 'click');
    }



    function initialize() {
        var mapOptions = {
            center: new google.maps.LatLng(-33.8688, 151.2195),
            zoom: 13,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById('map_canvas'),
                mapOptions);
        var input = /** @type {HTMLInputElement} */(document.getElementById('searchTextField'));

        var autocomplete = new google.maps.places.Autocomplete(input);
        autocomplete.bindTo('bounds', map);
        google.maps.event.addListener(autocomplete, 'place_changed', function() {
            infowindow.close();
            input.className = '';
            var place = autocomplete.getPlace();
            if (!place.geometry) {
                // Inform the user that the place was not found and return.
                input.className = 'notfound';
                return;
            }
            var location = place.geometry.location;
            var address = place.formatted_address;
            createMarker(place);
        });
    }

    $('#trip_location').on('click', '.link', function(e) {

        e.preventDefault();
        var location = $(this).attr('alt');
    });


    $('.clear').click(function() {
        $('#searchTextField').val('');
    });
    google.maps.event.addDomListener(window, 'load', initialize);
});

我将通过谷歌的自动填充功能向谷歌地图添加多个标记。标记的位置将列在页面的右侧。当用户点击地点时,它应该替换标记图标。

1 个答案:

答案 0 :(得分:2)

您可以保留对与地点相关联的每个标记的引用,而不是删除和替换,只需在其上调用setIcon即可传递新设置。请参阅文档:https://developers.google.com/maps/documentation/javascript/reference#Marker

编辑:有问题的新代码。

添加了标记数组以包含标记,使用数据属性来保存标记id,在触发链接元素点击事件时拉动markerid属性值。

注意:未经测试,因此可能有错误。

$(document).ready(function() {
    var map = null;
    var markers = [];
    var infowindow = new google.maps.InfoWindow();
    function createMarker(place) {

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

        var address = place.formatted_address;



        marker.setPosition(place.geometry.location);
        marker.setTitle(address);
        marker.setVisible(true);

        markers.push(marker);
        address = address + '<a href="#" class="link" title="Been there" alt="' + address + '" data-markerid='" + (markers.length - 1) + "'>B</a>&nbsp;<a class="link" href="#" title="Want to go" alt="' + address + '">W</a>&nbsp;<a class="link" href="#" alt="' + address + '" title="Favourite" data-markerid='" + (markers.length - 1) + "'>F</a>';


        $('#trip_location').append(address);
        google.maps.event.addListener(marker, 'click', function(e) {
            infowindow.setContent('<div><strong>' + marker.title + '</strong><br>');
            infowindow.open(map, marker);
        });
        google.maps.event.trigger(marker, 'click');
    }



    function initialize() {
        var mapOptions = {
            center: new google.maps.LatLng(-33.8688, 151.2195),
            zoom: 13,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById('map_canvas'),
                mapOptions);
        var input = /** @type {HTMLInputElement} */(document.getElementById('searchTextField'));

        var autocomplete = new google.maps.places.Autocomplete(input);
        autocomplete.bindTo('bounds', map);
        google.maps.event.addListener(autocomplete, 'place_changed', function() {
            infowindow.close();
            input.className = '';
            var place = autocomplete.getPlace();
            if (!place.geometry) {
                // Inform the user that the place was not found and return.
                input.className = 'notfound';
                return;
            }
            var location = place.geometry.location;
            var address = place.formatted_address;
            createMarker(place);
        });
    }

    $('#trip_location').on('click', '.link', function(e) {

        e.preventDefault();
        var location = $(this).attr('alt');
        var markerid = $(this).data('markerid');
        var marker = markers[markerid];
    });


    $('.clear').click(function() {
        $('#searchTextField').val('');
    });
    google.maps.event.addDomListener(window, 'load', initialize);
});