Удалить поли линию с карты - PullRequest
0 голосов
/ 11 мая 2018

Я хочу удалить линию поли за старым маркером при нажатии на новый маркер.

Я пробовал приведенный ниже скрипт, используя, как только я получаю ArrPolines не определена, это ошибка.

Буду признателен за любые идеи относительно того, как удалить предыдущую линию поли для предыдущего выбранного маркера.

function selectPlane () {if (! Planes [this.planeIcao]) return;var old = выбранный;Выбрано = this.planeIcao;if (Planes [old]) {/ * Удалить выделение в ранее выбранной плоскости.* / Planes [old] .marker.setIcon (getIconForPlane (Planes [old]));;

// установить полилинию нулевой ArrPolines [s] .setMap (null);

    }
    Planes[Selected].marker.setIcon(getIconForPlane(Planes[Selected]));
    refreshSelectedInfo();
}

Вот сценарий:

    Map=null;
    CenterLat=45.0;
    CenterLon=9.0;
    Planes={};
    NumPlanes = 0;
    Selected=null
    function getIconForPlane(plane) {
        var r = 255, g = 255, b = 0;
        var maxalt = 40000; /* Max altitude in the average case */
        var invalt = maxalt-plane.altitude;
        var selected = (Selected == plane.Icao);
        if (invalt < 0) invalt = 0;
        b = parseInt(255/maxalt*invalt);
        return {
            strokeWeight: (selected ? 2 : 1),
            path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW,
            scale: 5,
            fillColor: 'rgb('+r+','+g+','+b+')',
            fillOpacity: 0.9,
            rotation: plane.Trak
        };
    }
    function selectPlane() {
        if (!Planes[this.planeIcao]) return;
        var old = Selected;
        Selected = this.planeIcao;
        if (Planes[old]) {
            /* Remove the highlight in the previously selected plane. */
            Planes[old].marker.setIcon(getIconForPlane(Planes[old]));
        }
        Planes[Selected].marker.setIcon(getIconForPlane(Planes[Selected]));
        refreshSelectedInfo();
    }

    function refreshGeneralInfo() {
        var i = document.getElementById('geninfo');
        i.innerHTML = NumPlanes+' planes on screen.';
    }




    //once plane selected it will draw the polyline
    function refreshSelectedInfo() {
            var i = document.getElementById('selinfo');
        var p = Planes[Selected];
        if (!p) return;
$.get('http://radar1.ddns.net:8090/VirtualRadar/AircraftList.json?fIcoS=' + p.Icao + '&trFmt=fa', function(poll) {
    var ArrPolines = [];
     var NumSteps = poll.acList.length;
        for(s = 0; s < NumSteps; s++)
        {
            var CoordsSel = poll.acList[s].Cot;

            var Cnt = 0;
            var ArrCoords = [];
            var NumCoords = -1;


            for(i = 0; i < CoordsSel.length; i++)
            {
                Cnt = Cnt +1;
                if(Cnt == 1){var Lat = CoordsSel[i];}
                if(Cnt == 2){var Lon = CoordsSel[i];}
                if(Cnt == 3){var Alt = CoordsSel[i];}
                if(Cnt == 4)
                {
                    var Alt2 = CoordsSel[i];
                    NumCoords = NumCoords +1;
                    var Pos = {lat: Lat, lng: Lon};

                    ArrCoords[NumCoords] = Pos;
                    if(NumCoords == 5)
                    {
                        //map.setCenter(Pos);
                    }
                    Cnt = 0;
                }
                if(i == (CoordsSel.length-1))
                {
                }
            }

             ArrPolines[s] = new google.maps.Polyline
            (
                {
                    path: ArrCoords,
                    geodesic: true,
                    strokeColor: '#000000',
                    strokeOpacity: 1.0,
                    strokeWeight: 2
                }
            );
            ArrPolines[s].setMap(Map);
        }
})

    }
    function fetchData() {
            var  mylat = Map.getCenter().lat(); 
        var mylng = Map.getCenter().lng();
        $.getJSON('http://radar1.ddns.net:8090/VirtualRadar/AircraftList.json?lat='+mylat+'&lng='+mylng+'&fDstL=0&fDstU=1000', function(data) {
            var stillhere = {}
            var acs = data.acList;
            for (var j=0; j < acs.length; j++) {
                var plane = acs[j];
                var marker = null;
                stillhere[plane.Icao] = true;
                plane.flight = $.trim(plane.flight);
                if (Planes[plane.Icao]) {
                    var myplane = Planes[plane.Icao];
                    marker = myplane.marker;
                    var icon = marker.getIcon();
                    var newpos = new google.maps.LatLng(plane.Lat, plane.Long);
                    marker.setPosition(newpos);
                    marker.setIcon(getIconForPlane(plane));
                    myplane.Lat = plane.Lat;
                    myplane.Long = plane.Long;
                    myplane.track = plane.track;
                    if (myplane.Icao == Selected)
                        refreshSelectedInfo();
                } else {
                    marker = new google.maps.Marker({
                        position: new google.maps.LatLng(plane.Lat, plane.Long),
                        map: Map,
                        icon: getIconForPlane(plane)
                    });
                    plane.marker = marker;
                    marker.planeIcao = plane.Icao;
                    Planes[plane.Icao] = plane;
                    /* Trap clicks for this marker. */
                    google.maps.event.addListener(marker, 'click', selectPlane);
                }
                if (plane.flight.length == 0)
                    marker.setTitle(plane.Icao)
                else
                    marker.setTitle(plane.flight+' ('+plane.Icao+')')
            }
            NumPlanes = acs.length;
            /* Remove idle planes. */
            for (var p in Planes) {
                if (!stillhere[p]) {
                    Planes[p].marker.setMap(null);
                    delete Planes[p];
                }
            }
        });
    }
    function initialize() {
        var mapOptions = {
            center: new google.maps.LatLng(CenterLat, CenterLon),
            zoom: 5,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        Map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
        /* Setup our timer to poll from the server. */
        window.setInterval(function() {
            fetchData();
            refreshGeneralInfo();
        }, 1000);
    }

1 Ответ

0 голосов
/ 11 мая 2018

Если вам когда-либо нужна / нужна только одна полилиния, создавайте только одну за раз, когда вы собираетесь создать следующую, скрывайте существующую (если она существует):

if (polyline && polyline.setMap) {
  polyline.setMap(null);
}
polyline = new google.maps.Polyline({
  path: ArrCoords,
  geodesic: true,
  strokeColor: '#000000',
  strokeOpacity: 1.0,
  strokeWeight: 2
});
polyline.setMap(Map);

подтверждение концепции скрипта

screenshot of resulting map

фрагмент кода (примечание, не работает, поскольку SO находится на https / service onhttp, скрипка работает)

var Map = null;
var CenterLat = 45.0;
var CenterLon = 9.0;
var Planes = {};
var NumPlanes = 0;
var Selected = null
var polyline;

function getIconForPlane(plane) {
  var r = 255,
    g = 255,
    b = 0;
  var maxalt = 40000; /* Max altitude in the average case */
  var invalt = maxalt - plane.altitude;
  var selected = (Selected == plane.Icao);
  if (invalt < 0) invalt = 0;
  b = parseInt(255 / maxalt * invalt);
  return {
    strokeWeight: (selected ? 2 : 1),
    path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW,
    scale: 5,
    fillColor: 'rgb(' + r + ',' + g + ',' + b + ')',
    fillOpacity: 0.9,
    rotation: plane.Trak
  };
}

function selectPlane() {
  console.log("selectPlane")
  if (!Planes[this.planeIcao]) return;
  var old = Selected;
  Selected = this.planeIcao;
  console.log("selectPlane " + Selected)
  if (Planes[old]) {
    /* Remove the highlight in the previously selected plane. */
    Planes[old].marker.setIcon(getIconForPlane(Planes[old]));
  }
  Planes[Selected].marker.setIcon(getIconForPlane(Planes[Selected]));
  refreshSelectedInfo();
}

function refreshGeneralInfo() {
  var i = document.getElementById('geninfo');
  i.innerHTML = NumPlanes + ' planes on screen.';
}

//once plane selected it will draw the polyline
function refreshSelectedInfo() {
  console.log("refreshSelectedInfo");
  var i = document.getElementById('selinfo');
  var p = Planes[Selected];
  if (!p) return;
  console.log("refreshSelectedInfo " + p.Icao);
  $.get('http://radar1.ddns.net:8090/VirtualRadar/AircraftList.json?fIcoS=' + p.Icao + '&trFmt=fa', function(poll) {
    var ArrPolines = [];
    var NumSteps = poll.acList.length;
    for (s = 0; s < NumSteps; s++) {
      var CoordsSel = poll.acList[s].Cot;

      var Cnt = 0;
      var ArrCoords = [];
      var NumCoords = -1;


      for (i = 0; i < CoordsSel.length; i++) {
        Cnt = Cnt + 1;
        if (Cnt == 1) {
          var Lat = CoordsSel[i];
        }
        if (Cnt == 2) {
          var Lon = CoordsSel[i];
        }
        if (Cnt == 3) {
          var Alt = CoordsSel[i];
        }
        if (Cnt == 4) {
          var Alt2 = CoordsSel[i];
          NumCoords = NumCoords + 1;
          var Pos = {
            lat: Lat,
            lng: Lon
          };

          ArrCoords[NumCoords] = Pos;
          if (NumCoords == 5) {
            //map.setCenter(Pos);
          }
          Cnt = 0;
        }
        if (i == (CoordsSel.length - 1)) {}
      }
    }
    if (polyline && polyline.setMap) {
      polyline.setMap(null);
    }
    polyline = new google.maps.Polyline({
      path: ArrCoords,
      geodesic: true,
      strokeColor: '#000000',
      strokeOpacity: 1.0,
      strokeWeight: 2
    });
    polyline.setMap(Map);
  })

}

function fetchData() {
  var mylat = Map.getCenter().lat();
  var mylng = Map.getCenter().lng();
  $.getJSON('http://radar1.ddns.net:8090/VirtualRadar/AircraftList.json?lat=' + mylat + '&lng=' + mylng + '&fDstL=0&fDstU=1000', function(data) {
    var stillhere = {}
    var acs = data.acList;
    for (var j = 0; j < acs.length; j++) {
      var plane = acs[j];
      var marker = null;
      stillhere[plane.Icao] = true;
      plane.flight = $.trim(plane.flight);
      if (Planes[plane.Icao]) {
        var myplane = Planes[plane.Icao];
        marker = myplane.marker;
        var icon = marker.getIcon();
        var newpos = new google.maps.LatLng(plane.Lat, plane.Long);
        marker.setPosition(newpos);
        marker.setIcon(getIconForPlane(plane));
        myplane.Lat = plane.Lat;
        myplane.Long = plane.Long;
        myplane.track = plane.track;
        if (myplane.Icao == Selected)
          refreshSelectedInfo();
      } else {
        marker = new google.maps.Marker({
          position: new google.maps.LatLng(plane.Lat, plane.Long),
          map: Map,
          icon: getIconForPlane(plane)
        });
        plane.marker = marker;
        marker.planeIcao = plane.Icao;
        Planes[plane.Icao] = plane;
        /* Trap clicks for this marker. */
        google.maps.event.addListener(marker, 'click', selectPlane);
      }
      if (plane.flight.length == 0)
        marker.setTitle(plane.Icao)
      else
        marker.setTitle(plane.flight + ' (' + plane.Icao + ')')
    }
    NumPlanes = acs.length;
    /* Remove idle planes. */
    for (var p in Planes) {
      if (!stillhere[p]) {
        Planes[p].marker.setMap(null);
        delete Planes[p];
      }
    }
  });
}

function initialize() {
  var mapOptions = {
    center: new google.maps.LatLng(CenterLat, CenterLon),
    zoom: 5,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  Map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
  /* Setup our timer to poll from the server. */
  window.setInterval(function() {
    fetchData();
    refreshGeneralInfo();
  }, 1000);
}
google.maps.event.addDomListener(window, "load", initialize);
html,
body,
#map_canvas {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js?libraries=geometry,places&ext=.js"></script>
<div id="geninfo"></div>
<div id="map_canvas"></div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...