2017-07-03 3 views
0

Map contient deux types de marqueurs icône Cercle est ajouté par:Brochure marqueur L.Icon ne pas retirer sur la carte reload

 let circle = new customCircleMarker([item.latitude, item.longitude], { 
     color: '#2196F3', 
     fillColor: '#2196F3', 
     fillOpacity: 0.8, 
     radius: radM, 
     addressId: item.address_id 
     }).bindTooltip(`Address: <b>${item.address}</b><br/> 
        Patients from this address: <b>${item.total_patients}</b><br/> 
        Production: <b>$${item.total_production}</b><br/>`) 
     .addTo(this.mapInstance).on('click', this.circleClick); 

marqueur Icône est ajouté dans la méthode suivante:

// créer marqueur objet, passer une icône personnalisée en option, passer le contenu et les options de pop-up, ajouter à la carte

 // create marker object, pass custom icon as option, pass content and options to popup, add to map 
     L.marker([item.latitude, item.longitude], { icon: chartIcon }) 
     .bindTooltip(`Address: <b>${item.address}</b><br/> 
        Patients from this address: <b>${item.total_patients}</b><br/> 
        Production: <b>$${item.total_production}</b><br/>`) 
     .addTo(this.mapInstance).on('click', this.circleClick); 

sur la carte de compensation icône marqueur n'est pas supprimé

fonction de compensation de la carte:

if (this.mapInstance) { 
    for (let i in this.mapInstance._layers) { 
    if (this.mapInstance._layers[i]._path !== undefined) { 
     try { 
     this.mapInstance.removeLayer(this.mapInstance._layers[i]); 
     } catch (e) { 
     console.log('problem with ' + e + this.mapInstance._layers[i]); 
     } 
    } 
    } 
} 

Répondre

0

Vous vérifier une propriété _path avant de retirer. Il ignore les couches L.Marker car elles n'ont pas de propriété _path, seules les couches vectorielles (étendues à partir de L.Path) le font.

Si vous avez besoin de supprimer uniquement certains types de couches de votre carte que vous mieux loti en les regroupant dans une couche de regroupement comme L.LayerGroup ou L.FeatureGroup, puis en utilisant leur méthode clearLayers:

var layerGroup = new L.LayerGroup([ 
    new L.Marker(...), 
    new L.CircleMarker() 
]).addTo(map); 

layerGroup.clearLayers(); 

Si ce n'est pas une option vous pouvez parcourir les couches de la carte, puis vérifier l'instance de la couche:

function customClearLayers() { 
    map.eachLayer(function (layer) { 
     if (layer instanceof L.Marker || layer instanceof L.CircleMarker) { 
      map.removeLayer(layer); 
     } 
    }); 
} 
+0

Merci pour l'info. Je l'ai corrigé (y) @ iH8 –