Листовка: Координати контейнера проти координат шару?


17

Яка різниця між координатами контейнерів карт та координатами шару ?

З того, що я зібрав, координати контейнерів карт завжди відносяться до вікна перегляду карти, і хоча координати шарів завжди починаються з тих же значень, що і координатні контейнери , вони змінюються, коли карта переміщується.

API, що посилаються на координати / точки:

Відповіді:


21

Коротка відповідь

Методи контейнераPoint датуються запитом на функції ще в 2012 році , і сьогодні вони дещо заплутані.

Найкраща відповідь - опис супроводу листівки Володимира Агафонкіна:

"layerPoint - це фактично точка відносно шару карти (div, який містить плитки та маркери), а не зовнішній контейнер карти. Вам потрібен map.layerPointToContainerPoint. Але я погоджуюся, що немає зручного способу отримати його негайно, тому плануйте це для наступної версії. "

Довга відповідь

Більш детально:

Основними методами публічної конверсії в Leaflet, хоча їх розробники додатків рідко використовуються, є L.Map.project(latlng [, zoom])і L.Map.unproject(point [, zoom]).

Веб-карти розбиті на сітку плиток, кожна з однаковою кількістю пікселів. При більш високих рівнях масштабування карта поділяється на більшу кількість плиток з відповідною більшою кількістю пікселів. Таким чином, розмір пікселя карти залежить від рівня збільшення.

Це означає, що якщо ви переплутаєтесь із демонстраційним вікном Leaflet у вашому браузері, вихід L.Map.project` для даної latlng зміниться лише при збільшенні та зменшенні.

Щодо останньої версії Leaflet (0.7.3), визначення наступного L.Map.latLngToLayerPoint:

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

На відміну від цього, L.Map.latLngToContainerPointчитається:

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

з L.Map.layerPointToContainerPointвизначеним:

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

Метод приватної карти _getMapPanePos()повертає зсув між поточною позицією карти та її позицією під час її створення. Це змінюється лише під час панорамування карти (не під час збільшення), тому різниця між шаромPoint та контейнеромPoint, що відповідає даному latlng, полягає в тому, що layerPoint - це положення latlng у контейнері карти <div> з картою у його початковому положенні , тоді як containerPoint - поточне положення latlng в контейнері карти <div>.


1
Людина - якби я міг подати заяву, ти би отримав відкликання в 100 разів.
Саад Малик

0

EDIT: виявляється, я помилявся. Координати контейнерів, схоже, є для видимого кадру, тоді як координати шару мають більшу площу, ніж видима. На це питання потрібен хтось більш обізнаний, ніж я, щоб відповісти на нього.


1
Алекс - Я не вірю, що це правильно. Координати контейнерів і координати шару обоє вказані в пікселях від початку (зліва вгорі) контейнера. Однак, коли я починаю панорамувати карту, координата шару / точка маркера залишається такою ж, тоді як координата / точка для маркера оновлюється відповідно до верхньої лівої точки початку.
Саад Малик

Привіт @ SimFox3, ти маєш рацію. І я повинен був перевірити це, перш ніж щось сказати! Тепер я маю на увазі, що точка шару - це координата, яка визначається відносно свого роду "вікна", яке тримається, тобто більше, ніж екрана. Це схоже на кешований вид, який є біогенером, ніж екран. Ось чому координати точок шару змінюються, але не часто, і лише при переміщенні "вікна". Координати точки контейнера завжди обмежені координатами відносно видимого виду. Сказавши все це, зрозуміло, що я не знаю більше, ніж ви, тож було б чудово, якби розробив Leaflet. міг чіпнути!
Алекс Лейт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.