Удаление слоев GeoJson из Google Maps

Я пытаюсь удалить массив слоев GeoJson из Google Maps, используя библиотеку turf.js для сглаживания ломаных линий.

Я могу хорошо создать слой и добавить их на карту, но когда я пытаюсь удалить слои, я получаю следующий код ошибки:

Uncaught TypeError: a.getId is not a function

Чтобы добавить слои, я делаю это, просматривая мой файл GeoJson...

else if(Type==="LineString" && Pype==="isobar") {
//DO ISOBARS STUFF=================================
//GET LNG/LAT======================================
CorrLEN     = dataID1.features[i].geometry.coordinates.length;
var Corrds =[];
var Corrs =[];
var LNGLAT ={};
var CORRS  = new Object();
var  x=0;
for (x=0;x<CorrLEN;x++){
var  a = x-1;
LNGLAT = (dataID1.features[i].geometry.coordinates[x]); 
Corrds.push(LNGLAT);
}
//=================================================================
//GET COLOUR INFO===================================================
var STCL = dataID1.features[i].properties.strokeColor;
var STOP = dataID1.features[i].properties.strokeOpacity;
var STSW = dataID1.features[i].properties.strokeWeight;
//=================================================================
LL     = turf.linestring(Corrds);  
curved = turf.bezier(LL,20000, 0.35);  
curved.properties = {weight:STSW,color:STCL};
map.data.setStyle(function(feature) {
return {strokeWeight:feature.getProperty('weight'),
        strokeColor: feature.getProperty('color')
       };            
 });
IsoBars.push(curved);

Затем я использую следующие функции, чтобы добавить или удалить слои

//SHOW ISOBARS (works fine)
function ShowIsoBars() {
for (var i = 0; i < IsoBars.length; i++) { 
map.data.addGeoJson(IsoBars[i]);
}} 

//HIDE ISOBARS (Gets the error) Uncaught TypeError: a.getId is not a function
function HideIsoBars() {
for (var i = 0; i < IsoBars.length; i++) { 
map.data.remove(IsoBars[i]);
}} 

Спасибо заранее,

1 ответ

Я нашел решение, взяв новые сглаженные координаты, а затем используя их в новом google.maps.Polyline примерно так

 var Path =[];
 var  x=0;
 for (x=0;x<CorrLEN;x++){
 Path.push(new google.maps.LatLng(curved.geometry.coordinates[x][1],curved.geometry.coordinates[x][0])); 
 } 
 var IsoBar = new google.maps.Polyline({
           path: Path,
           geodesic: true,
           strokeColor: STCL,
           strokeOpacity: STOP,
           strokeWeight: STSW
           });

 IsoBars.push(IsoBar);

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

function ShowIsoBars() {
for (var i = 0; i < IsoBars.length; i++) { 
IsoBars[i].setMap(map);
}}

function HideIsoBars() {
for (var i = 0; i < IsoBars.length; i++) { 
IsoBars[i].setMap(null);
}}

Я нашел, а не удалил все объекты из слоя. Было проще уничтожить и воссоздать слой, что позволяет обойти ошибку:

  //Remove layer from map if it exists
  if (mapLayer != null) {

    mapLayer.setMap(null);
  }

  //create new layer
  mapLayer = new window.google.maps.Data({ map: googleMap });
Другие вопросы по тегам