Если вам когда-либо нужна / нужна только одна полилиния, создавайте только одну за раз, когда вы собираетесь создать следующую, скрывайте существующую (если она существует):
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](https://i.stack.imgur.com/ZHK0z.png)
фрагмент кода (примечание, не работает, поскольку 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>