Spec-Zone.ru › D3.js 7

d3-плитка

Квадродеревянные плитки часто используются для представления большой геометрии и изображений с несколькими разрешениями, как в «плавающих» картах. d3.tile предоставляет удобный механизм для вычисления координат плиток, которые должны быть видны в данном окне просмотра. В отличие от специализированных библиотек для «плавающих» карт, таких как Leaflet, крошечный API низкого уровня d3.tile не зависит от способа отображения плиток и предлагает большую гибкость. d3.tile хорошо сочетается с d3-geo для географических карт и d3-zoom для взаимодействия.

Примеры можно посмотреть в коллекции d3-tile на Observable.

Установка

Если вы используете NPM, npm install d3-tile. В противном случае скачайте последнюю версию. Также вы можете загрузить её напрямую как отдельную библиотеку. Поддерживаются ES-модули, AMD, CommonJS и обычные среды. В обычной среде экспортируется d3 глобальная переменная:

<script src="https://cdn.jsdelivr.net/npm/d3-tile@1"></script>
<script>

const tile = d3.tile();
const tiles = tile({k: 256, x: 480, y: 250});

</script>

Справочник по API

d3.плитка() · Исходный код, Примеры

Создаёт новую структуру плиток с настройками по умолчанию.

const tile = d3.tile();
плитка(…аргументы) · Исходный код, Примеры

Вычисляет набор плиток для отображения, учитывая текущие настройки, вычисляя масштаб и сдвиг путём вызова соответствующих функций доступа с заданными аргументами. Возвращает массив массивов [x, y, z], представляющих целочисленные координаты x (горизонтальные), y (вертикальные) и z (увеличение) видимых плиток, пересекающих текущее окно просмотра. Возвращаемый массив плиток также имеет свойства tiles.scale и tiles.translate, которые вместе с x и y каждой плитки определяют предполагаемое расположение плитки в окне просмотра.

Например, следующая функция вычисляет пиксельные координаты верхнего левого угла заданной плитки в текущем окне просмотра:

function position(tile, tiles) {
  const [x, y] = tile;
  const {translate: [tx, ty], scale: k} = tiles;
  return [(x + tx) * k, (y + ty) * k];
}

И в использовании:

const tile = d3.tile();
const tiles = tile({k: 256, x: 480, y: 250});
for (const t of tiles) {
  console.log(`tile ${t} is at ${position(t, tiles)}`);
}

Дополнительную информацию о координатах плиток можно найти в Увеличиваемые плитки.

плитка.область([область]) · Исходный код

Если задано область, устанавливает область видимости для данной структуры плиток в заданный массив [[x0, y0], [x1, y1]], где [x0, y0] — верхний левый угол, а [x1, y1] — нижний правый угол, и возвращает структуру плиток. Если область не задана, возвращает текущую область видимости, которая по умолчанию равна [[0, 0], [960, 500]].

const tile = d3.tile().extent([[100, 200], [300, 400]]);

Установка области видимости подразумевает установку размера области видимости.

плитка.размер([размер]) · Исходный код

Если задан размер, устанавливает размер области просмотра для данной структуры плиток в заданный массив чисел [ширина, высота] и возвращает эту структуру плиток. Если размер не задан, возвращает текущий размер области видимости, который по умолчанию равен [960, 500].

const tile = d3.tile().size([200, 200]);

Это удобный метод для установки области видимости области видимости в [[0, 0], [ширина, высота]].

плитка.масштаб([масштаб]) · Исходный код

Если задан масштаб, устанавливает функцию масштабирования этой структуры плиток и возвращает эту структуру плиток. Если масштаб — функция, она вызывается при вызове структуры плиток, получив те же аргументы, что и структура плиток; эта функция должна вернуть число, указывающее желаемую ширину и высоту плитки мира [0, 0, 0].

const tile = d3.tile().scale(t => t.scale).translate(t => t.translate);
const tiles = tile({scale: 1024, translate: [100, 200]});

Если масштаб не является функцией, он предполагается как константа и оборачивается в функцию.

const tile = d3.tile().scale(1024).translate([100, 200]);

Если масштаб не задан, возвращает текущую функцию масштабирования структуры, которая по умолчанию:

function scale(transform) {
  return transform.k;
}

Этот параметр по умолчанию совместим с преобразованием d3-zoom.

плитка.сдвиг([сдвиг]) · Исходный код

Если задан сдвиг, устанавливает функцию сдвига этой структуры плиток и возвращает эту структуру плиток. Если сдвиг — функция, она вызывается при вызове структуры плиток, получив те же аргументы, что и структура плиток; эта функция должна вернуть массив чисел [x, y], указывающий желаемые координаты центра плитки мира [0, 0, 0].

const tile = d3.tile().scale(t => t.scale).translate(t => t.translate);
const tiles = tile({scale: 1024, translate: [100, 200]});

Если сдвиг не является функцией, он предполагается как константа [x, y] и оборачивается в функцию.

const tile = d3.tile().scale(1024).translate([100, 200]);

Если сдвиг не задан, возвращает текущую функцию сдвига структуры, которая по умолчанию:

function translate(transform) {
  return [transform.x, transform.y];
}

Этот параметр по умолчанию совместим с преобразованием d3-zoom.

плитка.clampX([зажим]) · Исходный код, Примеры

Если задан зажим, устанавливает, будут ли видимые плитки зажиматься по оси x, и возвращает эту структуру плиток. Если зажим не задан, возвращает, включен ли зажим по оси x, по умолчанию он включен. Если зажим по оси x отключен, структура плиток может вернуть плитки, которые находятся вне обычных пределов 0 ≤ x < 2^z плитки мира [0, 0, 0].

const tile = d3.tile().clampX(false);

См. d3.tileWrap для преобразования этих координат в обернутые координаты в мире и Обёрнутые плитки для примера.

плитка.clampY([зажим]) · Исходный код

Если задан зажим, устанавливает, будут ли видимые плитки зажиматься по оси y, и возвращает эту структуру плиток. Если зажим не задан, возвращает, включен ли зажим по оси y, по умолчанию он включен. Если зажим по оси y отключен, структура плиток может вернуть плитки, которые находятся вне обычных пределов 0 ≤ y < 2^z плитки мира [0, 0, 0].

const tile = d3.tile().clampY(false);

См. d3.tileWrap для преобразования этих координат в обернутые координаты в мире и Обёрнутые плитки для примера. Также см. плитка.clampX.

плитка.зажим([зажим]) · Исходный код

Если задан зажим, устанавливает плитка.clampX и плитка.clampY в указанное логическое значение зажим и возвращает эту структуру плиток. Если зажим не задан, возвращает true, если оба плитка.clampX и плитка.clampY равны true, и false в противном случае.

const tile = d3.tile().clamp(false);
плитка.размерПлитки([размерПлитки]) · Исходный код, Примеры

Если задан размерПлитки, устанавливает ширину и высоту плитки этой структуры плиток в заданное число размерПлитки и возвращает эту структуру плиток. Если размерПлитки не задан, возвращает текущий размер плитки структуры, который по умолчанию равен 256. 256 и 512 — наиболее распространённые размеры плиток.

const tile = d3.tile().tileSize(512);
плитка.zoomDelta([zoomDelta]) · Исходный код, Примеры

Если задан zoomDelta, устанавливает смещение масштабирования для этой структуры плиток в указанное число zoomDelta и возвращает эту структуру плиток. Если zoomDelta не задан, возвращает текущее смещение масштабирования, которое по умолчанию равно 0. Смещение масштабирования влияет на выбор координаты z на основе текущего масштаба; значение по умолчанию 0 выбирает z, ближайшее к отображаемому размеру; значение смещения масштабирования -1 использует z - 1, давая плитки в два раза больше (более низкое разрешение); значение смещения масштабирования +1 использует z + 1, давая плитки в два раза меньше (более высокое разрешение). Последнее может быть уместным для отображения плиток 256×256 в пространстве 128×128 на экране высокого разрешения.

const tile = d3.tile().zoomDelta(2);
d3.tileWrap(плитка) · Исходный код, Примеры

При заданных координатах плитки [x, y, z], где x и y могут находиться вне плитки мира [0, 0, 0], возвращает обернутые координаты плитки [x′, y′, z], где j = 2 ^ z, x′ = x - ⌊x / j⌋ * j и y′ = y - ⌊y / j⌋ * j. Эта функция чаще всего используется в сочетании с плитка.clampX для обеспечения горизонтального обёртывания веб-плиток Меркатора.

d3.tileWrap([-1, 0, 1]) // [1, 0, 1]
d3.tileWrap([-1, 0, 2]) // [3, 0, 2]

Пример можно посмотреть в Обёрнутые плитки.

© 2010–2023 Michael Bostock
Licensed under the BSD License.
https://github.com/d3/d3-tile

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API