2013-07-15 7 views
6

Mam standardową mapę ulotek przedstawiającą warstwę kafelków. Teraz ulotka tylko pozwala używać panTo sposób wykorzystujący długość i szerokość geograficzną, na przykład,Ulotka: współrzędne PanTo Web Mercator (EPSG 3857)

map.panTo(new L.LatLng(40.17, -98.12)); 

Jak użyję powyżej metody panto jeśli moje współrzędne są w EPSG:3857 np (3679364.68,-9096106.74)?

Jest to całkiem proste w Otworkach, ponieważ po zdefiniowaniu rzutowania mapy wszystko działa w tej projekcji. Ale ulotka zawsze działa na zasadzie latania na zewnątrz.

Dowolny prosty sposób na wykonanie tej czynności przy użyciu biblioteki ulotek ?

Dzięki!

Odpowiedz

5

mogę dostać pracy, jeśli mogę użyć proj4js bibliotekę do transformacji współrzędnych w ten sposób:

var source = new Proj4js.Proj('EPSG:3857'); 
var dest = new Proj4js.Proj('EPSG:4326'); 
var p = new Proj4js.Point(-9096106.74,3679364.68); //this takes x,y 
Proj4js.transform(source, dest, p); 
this.map.setView(new L.LatLng(p.y, p.x),zoom); 

Ale to jeszcze nie jest idealnym rozwiązaniem, ponieważ opodatkowuje mi za megabajt na tym bibliotekę. Wciąż szukam rozwiązania dla ulotek. Wiedząc, że wewnętrznie ulotka używa już EPSG: 3857 do pobierania płytek, nie powinno to być takie trudne.

Update 

Aby to zrobić wyłącznie w ulotce, spójrz na odpowiedź @ ARsla. Jedyny powód, dla którego nadal akceptuję to jako moją odpowiedź, ponieważ wciąż czuję się nieswojo wykonując takie obliczenia projekcji (nie, że są one złe), i właśnie z tego powodu nie akceptuję tej odpowiedzi. Plus proj4js jako dodatkowe zalety wspierania wielu innych baz danych.

+0

Czy biblioteka proj4js nie jest podobna do 70kb? Zgadzam się jednak, życzyłem sobie tej funkcjonalności również w ulotce. –

+0

@RyanM To prawda i zwykle chętnie bym z niego korzystał. Ale w tej konkretnej aplikacji walczę, aby zapisać na bajtach bardzo dosłownie. Boli więc importowanie innej biblioteki do tak trywialnego zadania, że ​​Leaflet już wie, jak to zrobić w środku. – Shaunak

2

Nie znalazłem również żadnej wbudowanej metody konwersji EPSG: 3857 współrzędnych na LatLng.

ulotce klasa CRS L.CRS.EPSG3857 ma tylko project metodę, która konwertuje L.LatLng do L.Point w EPSG: 3857 współrzędne. https://github.com/Leaflet/Leaflet/blob/master/src/geo/crs/CRS.EPSG3857.js

Ale jest to dość łatwo rozszerzyć go unproject metody:

L.CRS.EPSG3857.unproject = function (point) { // Point -> LatLng 
    var earthRadius = 6378137; 
     projectionPoint = L.point(point).divideBy(earthRadius); 

    return this.projection.unproject(projectionPoint); 
}; 

Wtedy można go używać z panTo metody:

map.panTo(map.options.crs.unproject([1372720.6476878107, 5690559.995203462])); 

czyli

map.panTo(L.CRS.EPSG3857.unproject([1372720.6476878107, 5690559.995203462])); 
9

Ulotka umożliwia korzystanie Metoda panTo przez unproject 3857 punkt. Jeśli nie chcesz korzystać z biblioteki proj4js, uzyskasz ją również w ulotce.

var point = new L.Point(3679364.68,-9096106.74); // Lon/Lat 
var earthRadius = 6378137; 
var latlng = L.Projection.SphericalMercator.unproject(point.divideBy(earthRadius)); 

map.panTo(new L.LatLng(latlng.lat, latlng.lng)); 
+0

+1 Dzięki! świetna odpowiedź! Nadal czuję się nieswojo wykonując takie obliczenia projekcji (nie to, że się mylą) i właśnie z tego powodu nie akceptuję tej odpowiedzi. Plus proj4js jako dodatkowe zalety wspierania wielu innych baz danych. – Shaunak

Powiązane problemy