javascript - 添加删除圆圈按钮

标签 javascript html google-maps google-maps-api-3

我正在尝试创建一个网站,允许我单击 map 上的标记,然后会出现一个圆圈突出显示该区域。我已将其编码为工作,但是,与信息窗口不同,我无法删除圆圈。我希望有一个删除圆圈按钮,可以删除 map 中的所有圆圈(如果 map 上显示多个圆圈),就像https://developers.google.com/maps/documentation/javascript/examples/polyline-remove中的删除按钮一样。如果没有,也许可以在单击另一个标记时使圆圈消失。

此外,当用户向标记发送垃圾邮件时,如何防止圆圈变得更加不透明?

这是我的代码:

function initialize() {
    var mapCanvas = document.getElementById('map-canvas');
    var mapOptions = {
      center: new google.maps.LatLng(37.09024, -95.712891),
      zoom: 4,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }

    var map = new google.maps.Map(mapCanvas, mapOptions)
    setMarkers(map, atm);
}

var atm = [
           ['<h1 class="big">newyork</h1>',40.714352, -74.005973,2],
           ['<h1 class="big">losangeles</h1>',34.052234, -118.243684,1],
           ['<h1 class="big">vancouver</h1>',49.25, -123.1,3],
           ];

var infowindow = new google.maps.InfoWindow({   
    maxWidth: 200
});

  function setMarkers(map, locations) {
    for (var i = 0; i < locations.length; i++) {
        var atms = locations[i];
        var myLatLng = new google.maps.LatLng(atms[1], atms[2]);
        var marker = new google.maps.Marker({
            position: myLatLng,
            map: map,
            title: atms[0],
            zIndex: atms[3]
        });


        google.maps.event.addListener(marker, 'click', (function(marker, i) {
        return function() {
         infowindow.setContent(locations[i][0]);
         infowindow.open(map, marker);
        }
       })(marker, i));

       google.maps.event.addListener(marker, 'click', (function(marker, i) {
          return function() {                     
           var myCity = new google.maps.Circle({
            center:new google.maps.LatLng(locations[i][1], locations[i][2]),
            radius:20000,
            strokeColor:"#0000FF",
            strokeOpacity:0.8,
            strokeWeight:2,
            fillColor:"#0000FF",
            fillOpacity:0.3
           });
           myCity.setMap(map)
           }
         })(marker, i));
       }
    }

google.maps.event.addDomListener(window, 'load', initialize);

希望有一个类似的函数

function removeLine() {
 flightPath.setMap(null);
}

这让我可以创造

<input onclick="removeLine();" type=button value="Remove line">

最佳答案

您可以使用 this 范围将标记的圆圈添加为自身的属性。

然后您可以简单地检索标记及其圆圈并将其从 map 中删除。这样,每个标记只会绘制一个圆圈,并防止每个标记添加多个圆圈。

markerCircles = [];

function initialize() {
    var mapCanvas = document.getElementById('map-canvas');
    var mapOptions = {
        center: new google.maps.LatLng(37.09024, -95.712891),
        zoom: 4,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };

    var map = new google.maps.Map(mapCanvas, mapOptions);
    setMarkers(map, atm);
}

var atm = [
    ['<h1 class="big">newyork</h1>', 40.714352, -74.005973, 2],
    ['<h1 class="big">losangeles</h1>', 34.052234, -118.243684, 1],
    ['<h1 class="big">vancouver</h1>', 49.25, -123.1, 3], ];

var infowindow = new google.maps.InfoWindow({
    maxWidth: 200
});

function setMarkers(map, locations) {
    for (var i = 0; i < locations.length; i++) {
        var atms = locations[i];
        var myLatLng = new google.maps.LatLng(atms[1], atms[2]);
        var marker = new google.maps.Marker({
            position: myLatLng,
            map: map,
            markerDataIndex: i,
            circle: false,
            title: atms[0],
            zIndex: atms[3]
        });


        google.maps.event.addListener(marker, 'click', function (marker, i) {
            console.log(this.markerDataIndex);
            infowindow.setContent(atm[this.markerDataIndex][0]);
            infowindow.open(map, this);
            if (!this.circle) {
                var myCity = new google.maps.Circle({
                    center: new google.maps.LatLng(atm[this.markerDataIndex][1], atm[this.markerDataIndex][2]),
                    radius: 20000,
                    strokeColor: "#0000FF",
                    strokeOpacity: 0.8,
                    strokeWeight: 2,
                    fillColor: "#0000FF",
                    fillOpacity: 0.3
                });
                myCity.setMap(map);
                markerCircles.push(this);
                this.circle = myCity;
            }
        });
    }
}

window.removeCircles = function () {
    markerCircles.forEach(function (marker, index, circleArray) {
        console.log(marker);
        marker.circle.setMap(null);
        marker.circle = false;
    });
    markerCircles = [];
}

google.maps.event.addDomListener(window, 'load', initialize);

演示 http://jsfiddle.net/robschmuecker/1pry2gwj/

关于javascript - 添加删除圆圈按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28021955/

相关文章:

javascript - 是否有一个函数可以检查一个数组是否包含另一个数组?

javascript - 如何使用索引迭代生成器?

javascript - CSS\JS - Long li 文本默认展开(应该 overflow hidden )

javascript - 在同一空间中的两个 HTML 元素之间切换可见性

javascript - 谷歌地图未捕获类型错误 : Cannot read property 'LatLng' of undefined

javascript - 谷歌地图删除以前的路线并绘制新路线

javascript - 将节点添加到 D3 树 v4

javascript - Chart.js 使用来自 MySQL 的 json 数据

javascript - 拒绝输入字段中 Alexa 排名小于 x 的网站

iphone - iOS : How to enable Audio directions on Google Maps