IGNF / geoportal-extensions

French Geoportal Extensions for well-known javascript mapping libraries (Leaflet and OpenLayers)
https://ignf.github.io/geoportal-extensions/
Other
64 stars 33 forks source link

CRS en Lambert 93 mais obligé d'appeler setView en WGS84 #291

Closed sylvainonweb closed 3 years ago

sylvainonweb commented 3 years ago

Le fait que le CRS soit défini en Lambert 93 permet il d'appeler setView ou d'ajouter des marqueurs en utilisant des coordonnées Lambert 93 ou faut il obligatoirement le faire en WGS84 ?

Votre environnement

Type d'issue

[ ] Report de bug [ ] Requête d'une nouvelle fonctionnalité [X] Question

Contexte

Le code suivant (définition des coordonnées de paris et chalon en WGS 84) fonctionne correctement. `

`

Je m'attendais à pouvoir définir la variable chalon plutôt en Lambert 93 comme suit : var chalon = [841126, 6633116]; (vu que le CRS est en Lambert 93).

Pouvez vous me dire s'il est possible via votre librairie de ne pas avoir à convertir les coordonnées en WGS84 lors de l'appel à setView ou l'ajout de marqueurs ?

sylvainonweb commented 3 years ago

Bonjour, personne pour me répondre ?

elias75015 commented 3 years ago

Bonjour,

notre extension géoportail pour Leaflet intègre le plugin Proj4Leaflet qui permet de gérer l'affichage de données sur une carte ayant une projection définie par l'utilisateur.

Cependant, ce plugin ne surcharge pas l'interface Leaflet a proprement parler, qui elle ne gère que des coordonnées géographiques (voir doc setView de Leaflet).

Ainsi, pour s'en rendre compte, nous pouvons observer les exemples proj4Leaflet (https://kartena.github.io/Proj4Leaflet/examples/wmts/ par exemple) :

var crs = new L.Proj.CRS('EPSG:3006',
    '+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs',
    {
        resolutions: [
            4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8
        ],
        origin: [-1200000.000000, 8500000.000000 ],
        bounds:  L.bounds( [-1200000.000000, 8500000.000000], [4305696.000000, 2994304.000000])
    }),
    map = new L.Map('map', {
        crs: crs,
        continuousWorld: true,
    });

new L.TileLayer('https://api.lantmateriet.se/open/topowebb-ccby/v1/wmts/token/'+ token +'/?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=topowebb&STYLE=default&TILEMATRIXSET=3006&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&FORMAT=image%2Fpng', {
    maxZoom: 9,
    minZoom: 0,
    continuousWorld: true,
    attribution: '&copy; <a href="https://www.lantmateriet.se/en/">Lantmäteriet</a> Topografisk Webbkarta Visning, CCB',
}).addTo(map);
//Set view over Stockholm Södermalm
map.setView([59.3167, 18.0667], 7);

--> La map est définie grace au plugin proj4Leaflet en EPSG:3006 --> map.setView() est toujours appelé en coordonnées géographiques.

Malheureusement, je ne vois pas de solution directe à votre problème...

Un contournement (très peu élégant) m'est venu à l'esprit (pas convaincu que cela marche...) : map.fitBounds(mongeojson.getBounds()), avec un geojson ajouté avec des features dont les coordonnées sont définies en L93 (voir cet exemple)...

Sinon, peut-être existe t-il d'autres plugins Leaflet pour faire le job...

sylvainonweb commented 3 years ago

Réponse très complète, même si elle ne m'arrange pas vraiment ! ps : je me doutais un petit peu de la réponse mais je voulais être sûr. Merci