Faltblatt + Proj4Leaflet + EPSG3995 + WMS

8

Ich versuche, eine WMS-Ebene mit einer nordpolaren stereografischen Projektion (EPSG3995) auf Leaflet zu unterstützen, kann sie jedoch nicht zum Laufen bringen.

Ich habe Proj4Leaflet verwendet und die Projektion mit den von GeoServer angegebenen Auflösungen erstellt (die WMS-Ebene wird von GeoServer bereitgestellt, siehe verbundenes Bild).

EPSG3995-Auflösungen

Auf der folgenden jsfiddle: https://jsfiddle.net/gaubert/Lyojcrzo/ Ich habe versucht, es zu implementieren, und wenn Sie auf die Faltblattkarte zoomen, werden Sie sehen, dass die Kacheln nicht richtig platziert sind?

Was fehlt, damit es funktioniert? Muss ich eine Transformations- oder Projektmethode implementieren?

zoobert
quelle

Antworten:

5

Hier gibt es mehrere Probleme.


Lassen Sie mich zunächst aus http://leafletjs.com/examples/wms/wms.html zitieren (Hervorhebung von mir):

Beachten Sie auch, dass Leaflet nur sehr wenige Koordinatensysteme unterstützt : CRS:3857, CRS:3395und CRS:4326(siehe Dokumentation für L.CRS). Wenn Ihr WMS-Dienst keine Bilder in diesen Koordinatensystemen bereitstellt, müssen Sie möglicherweise Proj4Leaflet verwenden, um ein anderes Koordinatensystem in Leaflet zu verwenden. Verwenden Sie beim Initialisieren Ihrer Karte einfach das richtige CRS, und alle hinzugefügten WMS-Layer verwenden es :

var map = L.map('map', {
    crs: L.CRS.EPSG4326
});

var wmsLayer = L.tileLayer.wms('http://demo.opengeo.org/geoserver/ows?', {
    layers: 'nasa:bluemarble'
}).addTo(map);

Der Code in Ihrer Geige macht das Gegenteil, er gibt das CRS als Option für den wms-Layer an, anstatt als Option für die Karte:

wmsBKLayer = new L.tileLayer.wms('http://eumetview.eumetsat.int/geoserv/wms', {
    layers: 'bkg-raster:bkg-raster',
    crs: customCRS
}

var map = new L.map('map', {
   // No CRS option here!!
});

Geben Sie das CRS in den Kartenoptionen an , und es sollte Ihnen gut gehen.


Zweitens Objektinstanziierung. In der Broschüre wird camelCase mit dem ersten Großbuchstaben für Klassen (z. B. L.TileLayereine Klasse) und camelCase mit Kleinbuchstaben für Factory-Methoden (z. B. L.tileLayereine Factory-Methode) verwendet.

var foo = L.tileLayer(...);     // Preferred
var foo = new L.TileLayer(...); // OK, but not preferred
var foo = L.TileLayer(...);     // Nope, one cannot call a class
var foo = new L.tileLayer(...); // Nope nope nope nope, one cannot create an instance of a factory

Bitte lesen Sie « /programming/8698726/constructor-function-vs-factory-functions », wenn Sie dies verwirrend finden.


Drittens zitiert aus https://kartena.github.io/Proj4Leaflet/ :

Verwenden Sie Leaflet 1.0 Beta 1 oder Entwicklungsversionen von Leaflet? Dann müssen Sie den Entwicklungszweig von Proj4Leaflet verwenden.

Dies bedeutet, dass es keine veröffentlichte Version von proj4leaflet gibt, die mit Leaflet 1 funktioniert.

In Ihrer Geige verwenden Sie Leaflet 1.0.2 und proj4leaflet 0.7.2. Diese werden einfach nicht zusammenarbeiten.

Verwenden Sie entweder eine niedrigere Version von Leaflet oder erstellen Sie eine neuere Version von proj4leaflet (und stellen Sie sie bereit und verwenden Sie sie). Bitte beachten Sie, dass proj4leaflet möglicherweise Hilfe bei der Wartung benötigt, da @liedman dies nicht mehr unterstützen kann.

Wenn Sie Zeit haben, sollten Sie sich mit den aktuellen Betreuern in Verbindung setzen, um bei einer neuen Version zu helfen, die mit Leaflet 1.0.0 kompatibel ist.


Wenn man diese drei Probleme anspricht, funktioniert alles wieder. Ein Arbeitsbeispiel finden Sie unter:

https://playground-leaflet.rhcloud.com/giwo/edit?html,output

IvanSanchez
quelle
Vielen Dank für die schnelle Antwort. Alle Probleme wurden behoben und es funktioniert. Ich habe noch eine Frage, wenn ich darf, warum sehe ich nicht die vollständige Karte, sondern nur einen Teil Europas. Es ist ein Auflösungsproblem?
Zoobert
Ok, ich habe mich in der nicht vorhandenen Dokumentation zurechtgefunden ;-). Ich musste in der Projektion auch die Grenzen und den Ursprung definieren. Einmal hinzugefügt sah es besser aus. Danke nochmal für deine Hilfe.
Zoobert
Bitte. Wenn Sie feststellen, dass die Dokumentation fehlt, denken Sie daran, dass sowohl Leaflet als auch proj4leaflet gerne Pull-Anfragen zur Verbesserung der Dokumente erhalten!
IvanSanchez
Ist es nicht möglich, eine wms-Ebene hinzuzufügen, deren crs sich von den crs der Karte unterscheidet?
Senol Ozgur