2017-05-27 2 views
-1

Ich Export Google Directions Routen als KML und sie auf einer MapBox Karte anzuzeigen, indem sie mit Omnivore zu lesen und sie auf der Karte hinzufügen,MapBox: Ausfiltern Marker in einer Broschüre Omnivore KML-Ebene

Die Google KML speichert jeweils Route als zwei Orte (Start- und Endpunkte) und eine LineString (die Route). In Mapbox möchte ich nur die Routen anzeigen, also die Marker irgendwie herausfiltern. Ich zeige Markierungen aus meiner eigenen Datenbank an und die Google-Markierungen verstopfen sie.

Hier ist mein Code. Ich ändere das Styling der LineStrings, nur um zu zeigen, dass ich das kann, aber ich weiß nicht, welche Zauberrufe man machen soll, um die Punkte nicht anzuzeigen. Danke.

runLayer = omnivore.kml('data/xxxx.kml') 
    .on('ready', function() { 
    var llBnds = runLayer.getBounds(); 
    map.fitBounds(llBnds); 

    this.eachLayer(function (layer) { 

     if (layer.feature.geometry.type == 'LineString') { 
     layer.setStyle({ 
      color: '#4E3508', 
      weight: 4 
     }); 
     } 

     if (layer.feature.geometry.type == 'Point') { 
     // 
     // Do something useful here to not display these items!! 
     // 
     }     
    }); 
    }) 
    .addTo(map); 

Antwort

0

Willkommen bei SO!

Viele mögliche Lösungen:

  • gradlinigste aus dem Code, den Sie zur Verfügung gestellt, benutzen Sie einfach die removeLayer Methode auf Ihrer runLayer Layer-Gruppe, wenn Sie eine 'Point' Funktion erhalten.

  • sauberere Lösung wäre diese Funktionen, um herauszufiltern, bevor sie sogar in Leaflet Schichten umgewandelt werden, durch eine custom GeoJSON Layer Group als drittes Argument von omnivore.kml bestanden, mit einer bestimmten filter Option:

var customLayer = L.geoJSON(null, { 
    filter: function(geoJsonFeature) { 
    // my custom filter function: do not display Point type features. 
    return geoJsonFeature.geometry.type !== 'Point'; 
    } 
}).addTo(map); 

var runLayer = omnivore.kml('data/xxxx.kml', null, customLayer); 

Sie Sie können auch die Optionen und/oder onEachFeature auf customLayer verwenden, um den gewünschten Stil direkt auf Ihren LineString anzuwenden.

+0

Danke Herr (oder Frau :) Lösung gearbeitet wurde (!) Aber wie Sie sagen Lösung zwei ist kühler, und es funktionierte auch ... nachdem ich „L.geoJSON“ auf „L.geoJson geändert ". Auch die ".addTo (map)" ist unnötig, da wir sie an Omnivore übergeben. Ich hatte versucht und gescheitert, sie zu filtern, die sie der Karte hinzugefügt wurden, aber es ist viel besser, auf den Import zu filtern und sie überhaupt nicht hinzuzufügen. danke nochmal! – user2690950

+0

'L.geoJson' ist für Broschüre 0.x. Sie sollten ein Upgrade auf Leaflet 1.x in Erwägung ziehen. – ghybs

+0

danke - version v0.2.0 wird in allen Mapbox-Beispielen verwendet, die ich gesehen habe, also wusste ich nicht besser ... – user2690950