Отображаемый уровень масштабирования против уровня масштабирования плитки: плотность пикселей? - PullRequest
0 голосов
/ 09 января 2019

Плитки поставляются с уровнем масштабирования, и в зависимости от просматриваемой области листовка заполняет дисплей плитками с определенным уровнем масштабирования.

В настоящее время, если я правильно понимаю, количество пикселей на дисплее и количество пикселей в плитке тесно связаны друг с другом. Или, на самом деле, это, вероятно, пиксели html / css, которые больше не являются пикселями устройства.

Я считаю, что на самом деле это два принципиально разных параметра масштабирования, особенно когда (мобильные) устройства имеют разную плотность пикселей (window.devicePixelRatio).

Мой вопрос: возможно ли контролировать, какой уровень масштабирования плиток отображается в зависимости от отображаемого уровня масштабирования (геопространственное расстояние или расстояние до экрана)?

Причина, по которой я спрашиваю, заключается в том, что уровень детализации часто отличается для разных уровней масштабирования. На некоторых устройствах отображение листов с более высокой детализацией может действительно хорошо выглядеть. Некоторые источники карт, такие как топографические карты из http://geoportail.gouv.fr, даже резко меняют стиль карты между различными уровнями. Я хочу поиграть с возможностью отображения, скажем, уровня масштабирования 15 на большой физической области на дисплее hdpi, где листовка обычно отображает уровень масштабирования 14 или 13.

Я обнаружил, что, изменив параметр "tileSize", передаваемый конструктору TileLayer, выбрав значение ниже значения по умолчанию 256, я получаю почти то, что хочу. Однако: позиционирование далеко. Есть ли простое решение для этого?

Ответы [ 2 ]

0 голосов
/ 10 января 2019

После некоторого копания в исходном коде я заметил, как IvanSanchez указал, что функциональность действительно присутствует.

detectRetina применяет масштабирование «один вверх», то есть увеличение zoom на единицу и деление длины сторон плиток на два, , если , устройство имеет devicePixelRatio >= 2.

Я хочу применить произвольное смещение по желанию. Это можно сделать сразу для слоя, инициализировав его параметрами

let zoomOffset = 2;
let options = {
    "detectRetina" : false, 
    "zoomOffset" : zoomOffset, 
    "tileSize" : 256 / Math.pow(2, zoomOffset)
}

Однако даже удобнее иметь возможность делать это в режиме реального времени при просмотре, поэтому я написал этот плагин L.Control: Leaflet.Control.DetailLevel

0 голосов
/ 09 января 2019

Я хочу поиграть с возможностью отображения, скажем, уровня масштабирования 15 на большой физической области на дисплее hdpi, где листовка обычно отображает уровень масштабирования 14 или 13.

Кажется, что то, что вы хотите, уже реализовано с помощью опции detectRetina L.TileLayer s . Цитирование документов ::

Если true и пользователь находится на дисплее сетчатки, он будет запрашивать четыре плитки половинного указанного размера и больший уровень масштабирования вместо одного, чтобы использовать высокое разрешение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...