8 votos

Folleto + Proj4Leaflet + EPSG3995 +WMS

Estoy tratando de apoyar una capa WMS con un Norte Polar Estereográfica proyección (EPSG3995) en el Prospecto, pero no puede hacer que funcione.

He utilizado Proj4Leaflet y han creado la proyección de las resoluciones dadas por Geoserver (la capa WMS es servido por geoserver, se unió a ver imagen).

EPSG3995 Resolutions

En el siguiente jsfiddle: https://jsfiddle.net/gaubert/Lyojcrzo/ He probado a ponerlo en marcha y si el zoom en el folleto mapa, verás que las baldosas están fuera de lugar ?

Qué es lo que falta para que funcione ? Qué necesito para implementar una transformación o método de proyecto ?

5voto

IvanSanchez Puntos 491

Hay varios problemas aquí.


En primer lugar, permítanme citar http://leafletjs.com/examples/wms/wms.html (el énfasis es mío):

También tenga en cuenta que el Prospecto admite muy pocos sistemas de coordenadas: CRS:3857, CRS:3395 y CRS:4326 (Consulte la documentación de L.CRS). Si su servicio WMS no sirve de imágenes en los sistemas de coordenadas, es posible que necesite usar Proj4Leaflet el uso de un sistema de coordenadas diferente en el Prospecto. Aparte de eso, sólo utilizar el derecho de CRS al inicializar el mapa, y cualquiera de las capas WMS añadido va a usar:

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);

El código en su violín hace lo contrario, se especifica el CRS como una opción para la capa wms, en lugar de como una opción para el mapa:

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!!
});

Especificar la CRS en las opciones del mapa, y usted debería estar bien.


Segundo, la creación de instancias de objeto. Folleto utiliza camelCase con la primera letra en mayúsculas para las clases (por ejemplo L.TileLayer es una clase), y camelCase comenzando con la letra minúscula para los métodos de fábrica (por ejemplo L.tileLayer es un método de fábrica).

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

Por favor, lea "https://stackoverflow.com/questions/8698726/constructor-function-vs-factory-functions" si usted encuentra este confuso.


Tercero, citando https://kartena.github.io/Proj4Leaflet/ :

Está usted usando Folleto 1.0 beta 1 o versiones de desarrollo de Folleto? Entonces usted necesita para utilizar la rama de desarrollo de Proj4Leaflet.

Esto significa que no hay ninguna versión de proj4leaflet que trabaja con Prospecto 1.

En su violín, está utilizando el Folleto de la versión 1.0.2 y proj4leaflet 0.7.2. Aquellos que simplemente no trabajan juntos.

Utilizar una versión inferior de Prospecto, o construir (y de implementar y usar una versión más reciente de proj4leaflet. Por favor, tenga en cuenta que proj4leaflet podría utilizar un poco de ayuda con su mantenimiento, como @liedman ya no puede soportar.

Si usted tiene el tiempo, le sugiero que ponerse en contacto con la corriente de los mantenedores, con el fin de ayudar con una nueva versión compatible con el Prospecto 1.0.0.


Si uno se dirige a estos tres problemas, todo va a funcionar de nuevo. Ver un ejemplo de trabajo en:

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

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X