Wie beschriftet man Geojson-Punkte in der Broschüre?

11

Wie werden Beschriftungen für Geojson-Punkte in einer Merkblattkarte angezeigt?

Es gibt Leaflet.label , das jetzt zugunsten von L.Tooltip veraltet ist , aber nur Text beim Hover anzeigt. Ich möchte die Textbeschriftungen direkt auf der Karte anzeigen, ohne dass eine Benutzerinteraktion erforderlich ist.

Beispieleingabe - https://gist.github.com/maphew/e168430e999fc738eeb3448feda121cd

Gewünschtes Ergebnis (grüne Punkte mit Textbeschriftungen, die anderen grafischen Elemente dienen nur dem Kontext):

simulierte Karte von Punkten mit Textbeschriftungen

Update: Ich möchte Text erstellen, der sich wie im Bild unten in die Karte einfügt, und keinen Popup-Tooltip.

Bild mit unerwünschtem Teil durchgestrichen

matt wilkie
quelle
3
Verwenden Sie einfach die Tooltip-Option permanent? Von leafletjs.com/reference-1.1.0.html#tooltip-option :Whether to open the tooltip permanently or only on mouseover
BradHards
3
Verwenden Sie L.Markers mit L.DivIcons.
IvanSanchez
Wenn Sie dies nicht nur in der Broschüre lösen können, können Sie Ihre Punkte in GeoServer (oder ähnlichem) ablegen und als WMS-Kachelebene laden , wobei der Stil Beschriftungen anzeigt . In diesem Beispiel werden die blauen Etiketten auf diese Weise erreicht
Stephen Lead
@IvanSanchez Ich kann das nicht zum Laufen bringen. Das benutzerdefinierte HTML kommt nicht durch. Siehe meinen Versuch bei jsfiddle.net/maphew/q0refcwx/1
Matt Wilkie

Antworten:

11

Hier ist eine Implementierung, die dem Vorschlag von @BradHards folgt, die permanentOption für den Tooltip zu verwenden. Die opacityOption blendet sowohl Text- als auch Hintergrundcontainer gleichermaßen aus.

var data_points = {
    "type": "FeatureCollection",
    "name": "test-points-short-named",
    "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
    "features": [
    { "type": "Feature", "properties": { "name": "1" }, "geometry": { "type": "Point", "coordinates": [ -135.02507178240552, 60.672508785052223 ] } },
    { "type": "Feature", "properties": { "name": "6"}, "geometry": { "type": "Point", "coordinates": [ -135.02480935075292, 60.672888247036376 ] } },
    { "type": "Feature", "properties": { "name": "12"}, "geometry": { "type": "Point", "coordinates": [ -135.02449372349508, 60.672615176262731 ] } },
    { "type": "Feature", "properties": { "name": "25"}, "geometry": { "type": "Point", "coordinates": [ -135.0240752514004, 60.673313811878423 ] } }
    ]};

var pointLayer = L.geoJSON(null, {
  pointToLayer: function(feature,latlng){
    label = String(feature.properties.name) // Must convert to string, .bindTooltip can't use straight 'feature.properties.attribute'
    return new L.CircleMarker(latlng, {
      radius: 1,
    }).bindTooltip(label, {permanent: true, opacity: 0.7}).openTooltip();
    }
  });
pointLayer.addData(data_points);
mymap.addLayer(pointLayer);

Bildschirmfoto

Vollständiges Arbeitsbeispiel: https://jsfiddle.net/maphew/gtdkxj8e/3/

So entfernen Sie den Etikettenhintergrund

Siehe Tooltip-Stil für das Überschreiben von Broschüren? Weitere Informationen zum Ändern des CSS und zum vollständigen Entfernen des Tooltip-Beschriftungsrahmens in der Leaflet.js-Karte? das Dreieck Zeiger zum Entfernen ohne die CSS zu berühren (fügen Sie einfach direction: "center"auf .bindTooltip!)

Javascript:

.bindTooltip(label, {permanent: true, 
   direction: "center",
   className: "my-labels"}).openTooltip();

CSS:

.leaflet-tooltip.my-labels {
  background-color: transparent;
  border: transparent;
  box-shadow: none;
  }

Screenshot: Etiketten ohne Containergrafiken

Vollständiges Arbeitsbeispiel: https://jsfiddle.net/maphew/gtdkxj8e/7/

matt wilkie
quelle
1
Wenn Sie diesen Weg wählen, können Sie das CSS von QuickInfos ändern oder dem QuickInfo Klassennamen hinzufügen (QuickInfo erbt von Divoverlay), um die Hintergrundfarben, Rahmen, Schatten usw. zu entfernen. .leaflet-tooltip {background-color: transparent;border: transparent;}
Diffusion_net
Vielen Dank, dass Sie @Diffusion_net! Diese Schlüsselwörter führten mich zu verwandten Fragen und zu einer vollständigeren Lösung (jetzt zur Beantwortung hinzugefügt).
Matt Wilkie