javascript - Google Maps API V3 - 管理折线

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

我有这个功能,点击标记后在与项目相关的点之间画一条线。

function showDetails(itemId)
{   
    var newlatlng = itemId.position;
    var xmlhttp;

    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.open("GET", "index.php?r=items/ajaxdetails&id="+itemId.indice, 
                 false);
    xmlhttp.send();




    var checkins = JSON.parse(xmlhttp.responseText);
    var numeroCheckins = checkins.length;

    var polylineCheckins = [];

    var bounds = new google.maps.LatLngBounds();

    for (counter = 0; counter< numeroCheckins; counter++)
    {
        var posizione = new google.maps.LatLng(checkins[counter].lat,
                                               checkins[counter].long);
        polylineCheckins[counter] = posizione;
        bounds.extend(posizione);
    }

    var polyline = new google.maps.Polyline({
        path: polylineCheckins,
        strokeColor: "#FF0000",
        strokeOpacity: 0.5,
        strokeWeight: 5
        });

    polyline.setMap(map);

    map.fitBounds(bounds);
}

一切正常,但如果多次调用此函数,则始终显示前一行。我尝试使用方法 setMap(null) 但没有成功,尝试重置折线。

我想在绘制新折线之前先删除之前的折线。

感谢您的支持

最佳答案

在 map 上只为 showDetails 保留一条折线的最简单方法是创建一个全局折线变量。这样,每次调用 showDetails 时都会修改全局变量。

现在,每次 showDetails 运行时都会创建一条新的折线,但不会返回对它的引用,所以我看不到将前一行的 map 设置为 null 的方法。

  // GLOBAL 
  var detailsPolyline = new google.maps.Polyline({
    strokeColor: "#FF0000",
    strokeOpacity: 0.5,
    strokeWeight: 5
  });

showDetails 中:

detailsPolyline.setPath(polylineCheckins);
detailsPolyline.setMap(map);

map.fitBounds(bounds);

这是我使用的整个测试用例,因为我没有我自己创建对象的 php 文件

  var map;
  var mapOptions = { center: new google.maps.LatLng(0.0, 0.0), zoom: 2,
    mapTypeId: google.maps.MapTypeId.ROADMAP };

  function initialize() {
    map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
    showDetails([ {lat: 20, long: 0},
                  {lat: 20, long: 10},
                  {lat: 30, long: 20}]);

    showDetails([ {lat: 10, long: 0},
                  {lat: 10, long: 10},
                  {lat: 20, long: 20}]);
  }

  var detailsPolyline = new google.maps.Polyline({
    strokeColor: "#FF0000",
    strokeOpacity: 0.5,
    strokeWeight: 5
  });

function showDetails(checkins)
{   
    var numeroCheckins = checkins.length;
    var polylineCheckins = [];
    var bounds = new google.maps.LatLngBounds();

    for (counter = 0; counter< numeroCheckins; counter++)
        {
        var posizione = new google.maps.LatLng(checkins[counter].lat, checkins[counter].long);
        polylineCheckins[counter] = posizione;
        bounds.extend(posizione);
        }

    detailsPolyline.setPath(polylineCheckins);
    detailsPolyline.setMap(map);

    map.fitBounds(bounds);
}

关于javascript - Google Maps API V3 - 管理折线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10851421/

相关文章:

javascript - 禁用 Google map Javascript 自定义控件上的拖动

javascript - 基本 if 语句 脑放屁 HTML javascript

URL 中的 PHP 处理片段标识符

javascript - highcharts - 无法在钻取中的条形图和柱形图之间切换,反之亦然

ios - 如何在 Google MapView iOS Swift 4 上呈现来自 Web Api 的地址数组

google-maps - 如何在 angular-google-maps 指令中组合 RichMarker

javascript - 通过 Google Maps API 计算行车距离

javascript - 与 hell 相比,Svelte 'evaluate script' 时间似乎更长,preact

javascript - 需要从google map API获取纬度和经度

javascript - 谷歌地图信息窗口在不同标记上给出相同的结果