2017-11-13 3 views
1

Ich möchte GeoJSON anders als von Leaflet standardmäßig zur Verfügung gestellt werden. Leider wird das Ändern der style()-Funktion nicht ausreichen, da ich eine größere Kontrolle über die erstellten Vektorgrafiken benötige.Benutzerdefinierte Leaflet-Renderer für GeoJSON

Was ist der idiomatische Weg, dies zu tun? Ich denke, ich kann viele Teile des Standard-SVG-Renderers wiederverwenden, der in src/layers/vector/SVG.js gefunden wird. Ich möchte es jedoch nur für eine GeoJSON-Schicht/eine FeatureGroup ersetzen. Da keiner von diesen von Path erbt, scheint dies nicht möglich.

Ich habe versucht, die SVG-Klasse in einer sehr einfachen Art und Weise erstrecken:

import {SVG} from 'leaflet/src/layer/vector/SVG' 

export default class CustomSVG extends SVG { 
    _updatePoly (layer, closed) { 
    console.log('Custom renderer in action') 
    super._updatePoly(layer, closed) 
    } 
} 

und setzen Sie ihn dann als Renderer während Leaflet Initialisierung, aber dies nicht mit einem TypeError: max2 is undefined (es ist ein nicht behandelter Versprechen Ablehnung, die von den Stämmen Ich benutze react-leaflet).

Was fehlt mir?

+0

Welche Art von "größere Kontrolle über die Vektorgrafik" benötigen Sie? – IvanSanchez

Antwort

0

las ich die Dokumentation wieder und ich scheinen this bit about the GeoJSON options verpasst zu haben:

style: Eine Funktion, die Path options für Styling GeoJSON Linien und Polygone definiert, intern aufgerufen, wenn Daten hinzugefügt wird. Der Standardwert ist noch keine Standardwerte außer Kraft setzen:

function (geoJsonFeature) { 
    return {} 
} 

Die Pfadoptionen auf der anderen Seite einen Renderer nehmen, die ich nur die Wiedergabe von dieser besonderen GeoJSON Schicht außer Kraft setzen kann. Hoffe, das hilft jedem anderen!