2012-11-09 11 views
26

Ich versuche, was ich mir vorstelle, ein ziemlich häufiger Anwendungsfall mit einem Flugblatt Multipolygon-Objekt.Einfaches Etikett auf einem Flugblatt (Geojson) Polygon

Ich schaffe das Multipolygon mit GeoJSON:

var layer = L.GeoJSON(g, style_opts); 

Was Ich mag würde, ist eine einfache Text-Label in der Mitte jedes Polygon zu setzen. (Zum Beispiel so etwas wie den Namen eines Staates in die Mitte eines jeden Staates zu setzen).

Ich habe sehe: https://groups.google.com/forum/?fromgroups=#!topic/leaflet-js/sA2HnU5W9Fw

die den Text tatsächlich überlagern, aber wenn ich ein paar Polygone hinzufügen, werden das Etikett in seltsamen Wegen nicht in die Mitte zu setzen, und ich bin derzeit nicht in der Lage um das Problem aufzuspüren.

Ich habe auch betrachtet: https://github.com/jacobtoye/Leaflet.label

aber das erscheint nur auf Polygone um das Etikett zu setzen, wenn Sie die Maus über das Polygon, und bleibt nicht statisch auf dem Polygon.

Ich denke, meine beste Vorgehensweise ist es, diesen ersten Link zu verwenden und herauszufinden, warum es den Standort ändert, aber in der Zwischenzeit, wenn jemand eine schnelle und einfache Möglichkeit kennt, ein Etikett auf einem Polygon im Prospekt zu verlegen Ich wäre sehr dankbar.

Auch, wenn ich irgendwelche fehlerhaften Annahmen über die beiden Links oben habe, bitte zögern Sie nicht, mich auszurichten.

Vielen Dank im Voraus.

Antwort

22

Das Broschüren-Etikett-Plugin erlaubt auch statische Etiketten, siehe demo. Der einzige Grund, warum die Polylinienbeschriftung nicht statisch ist, ist, dass sie sich bewegt, wenn Sie sich entlang der Polylinie bewegen.

Sie können sich wahrscheinlich besser als diese, durch zwingende bindLabel() für Polygone, aber dies ist ein einfacher Weg, um eine statische Label in die Mitte eines Polygons hinzuzufügen:

label = new L.Label() 
label.setContent("static label") 
label.setLatLng(polygon.getBounds().getCenter()) 
map.showLabel(label); 

http://jsfiddle.net/CrqkR/6/

+1

Danke für die Antwort. Hat geschafft, dass das funktioniert. Sie müssen das Label jedoch vor dem Aufruf von 'showLabel()' zur Map hinzufügen: 'label.addTo (map)' – Ben

+0

@Ben Ich habe es versucht und es funktioniert wie geschrieben. Siehe http://jsfiddle.net/CrqkR/6/ – flup

+0

Ich muss etwas falsch gemacht haben dann ... danke für das Update – Ben

12

Sie kann die -Option von L.geoJson verwenden, um ein neues L.divIcon für jedes Polygon zu erstellen.

L.geoJson(geoJsonData, { 
    onEachFeature: function(feature, layer) { 
    var label = L.marker(layer.getBounds().getCenter(), { 
     icon: L.divIcon({ 
     className: 'label', 
     html: feature.properties.NAME, 
     iconSize: [100, 40] 
     }) 
    }).addTo(map); 
    } 
); 
+1

Wie würdest du das machen, wenn du 'geoJsonData' als Feature-Layer auf der Karte auswählst? Ihre aktuelle Methode fügt beim Start die Beschriftungen zur Karte hinzu. Danke für irgendwelche Tipps. – redshift

+0

Wenn Ihre 'L.geoJson'-Ebene in einer Variablen mit dem Namen' geojson' gespeichert ist, können Sie 'geojson.clearLayers()' und dann 'geojson.addData (newGeoJsonData)' – clhenrick

+0

@redshift aufrufen. Überprüfen Sie meine Antwort hier http://stackoverflow.com/questions/31691297/how-to-remove-a-leaflet-label-when-a-topojson-layer-containing-it-is-removed/31695242#31695242 – muzaffar

Verwandte Themen