Ulotka: Współrzędne kontenera a współrzędne warstwy?


17

Jaka jest różnica między współrzędnymi kontenera mapy a współrzędnymi warstwy ?

Z tego, co zebrałem, współrzędne kontenera mapy są zawsze względne w stosunku do rzutni mapy i chociaż współrzędne warstwy zawsze zaczynają się od tych samych wartości co współrzędne kontenera , zmieniają się po panoramowaniu mapy.

Interfejsy API odnoszące się do współrzędnych / punktu:

Odpowiedzi:


21

Krótka odpowiedź

Metody ContainPoint pochodzą z żądania funkcji w 2012 roku , a dziś są nieco mylące.

Najlepszą odpowiedzią jest opis opiekuna ulotki Vladimira Agafonkina:

„layerPoint to tak naprawdę punkt względem warstwy mapy (div zawierający kafelki i znaczniki), a nie zewnętrzny kontener mapy. Potrzebny jest map.layerPointToContainerPoint. Ale zgadzam się, że nie ma wygodnej metody, aby uzyskać go natychmiast, więc zaplanuj to do następnej wersji ”.

Długa odpowiedź

Bardziej szczegółowo:

Podstawowymi publicznymi metodami konwersji zawartymi w Ulotce, choć rzadko stosowane przez twórców aplikacji, są L.Map.project(latlng [, zoom])i L.Map.unproject(point [, zoom]).

Mapy internetowe są podzielone na siatkę kafelków, z których każda ma taką samą liczbę pikseli. Przy wyższych poziomach powiększenia mapa jest podzielona na większą liczbę kafelków o odpowiedniej większej liczbie pikseli. Rozmiar piksela mapy zależy zatem od poziomu powiększenia.

Oznacza to, że jeśli masz do czynienia z oknem demonstracyjnym Ulotki w przeglądarce, wyjście L.Map.project` dla danego języka zmieni się tylko wtedy, gdy powiększysz i pomniejszysz.

Od najnowszej wersji Ulotki (0.7.3) definicja L.Map.latLngToLayerPointbrzmi:

latLngToLayerPoint: function (latlng) {
    var projectedPoint = this.project(L.latLng(latlng))._round();
    return projectedPoint._subtract(this.getPixelOrigin());
}

Natomiast L.Map.latLngToContainerPointbrzmi:

latLngToContainerPoint: function (latlng) {
    return this.layerPointToContainerPoint(this.latLngToLayerPoint(L.latLng(latlng)));
}

ze L.Map.layerPointToContainerPointzdefiniowanym jako:

layerPointToContainerPoint: function (point) { 
    return L.point(point).add(this._getMapPanePos());
}

Metoda mapy prywatnej _getMapPanePos()zwraca przesunięcie między bieżącą pozycją mapy a jej pozycją, gdy została utworzona po raz pierwszy. Zmienia się to tylko podczas przesuwania mapy (nie podczas powiększania), więc różnica między warstwami pointPoint i containerPoint odpowiadającymi danym latlng polega na tym, że layerPoint jest pozycją latlng w kontenerze mapy <div> z mapą w jego początkowej pozycji , podczas gdy containerPoint to bieżąca pozycja latlng w kontenerze mapy <div>.


1
Człowieku - gdybym mógł głosować, zyskałbyś 100 głosów.
Saad Malik

0

EDYCJA: okazuje się, że się myliłem. Wygląda na to, że współrzędne kontenera dotyczą widocznej ramki, podczas gdy współrzędne warstwy dotyczą większego obszaru niż ten widoczny. To pytanie potrzebuje kogoś bardziej kompetentnego niż ja, aby na nie odpowiedzieć.


1
Alex - Nie wierzę, że to prawda. Współrzędne kontenera i współrzędne warstwy są określone w pikselach od początku (lewy górny róg) kontenera. Jednak gdy zaczynam przesuwać mapę, współrzędna / punkt warstwy znacznika pozostaje taki sam, a współrzędna / punkt mapy znacznika jest aktualizowany odpowiednio do lewego górnego punktu początkowego.
Saad Malik

Cześć @ SimFox3, masz rację. I powinienem był to przetestować, zanim cokolwiek powiesz! Wydaje mi się, że punkt warstwy jest współrzędną zdefiniowaną względem rodzaju utrzymywanego „okna”, które jest większe niż ekran. To jest jak buforowany widok, który bioggeruje niż ekran. Dlatego współrzędne punktu warstwy zmieniają się, ale nie często i tylko wtedy, gdy „okno” jest przesuwane. Współrzędne punktu kontenera wydają się zawsze ograniczone do współrzędnych względem widocznego widoku. Powiedziawszy to wszystko, jasne jest, że nie wiem nic więcej niż ty, więc byłoby wspaniale, gdyby twórca Ulotki. mógł się włamać!
Alex Leith,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.