Как установить экстент для слоя VectorTile в OpenLayers 4.2.0?

1

В настоящее время я добавляю серию слоев Mapbox VectorTile в Open Layers 4.2.0. Однако возникает проблема; всякий раз, когда я уменьшаю масштаб, вся моя карта становится серым, а моя вкладка в консоли на консоли заполняется 404, объясняя, что есть плитка, которая не найдена на стороне Mapbox. Это, конечно, имеет смысл, потому что не все плитки загружены для Mapbox.

Чтобы разработать немного кода:

Здесь загружается слой Mapbox:

var source = new ol.source.VectorTile({
    format: new ol.format.MVT(),
    tilePixelRatio: 16,
    url: 'https://{a-d}.tiles.mapbox.com/v4/' + layer.id + '/{z}/{x}/{y}.vector.pbf?access_token=' + this.mapboxGlToken
});

return new ol.layer.VectorTile({
    source:        source,
    minResolution: layer.minres,
    maxResolution: layer.maxres,
    style:         this.styles.normal,
    filter:        layer.filter,
    name:          layer.name
});

Это фактически покажет карту (+ векторная плитка, которые являются красными границами провинций Нидерландов):

Изображение 174551

Ура! Однако, если я посмотрю на моей вкладке в сети Firefox:

Изображение 174551

В Mapbox много ошибок 404. Сначала я думал, что могу игнорировать их, но они заставляют мое приложение прекратить рисовать любую дополнительную плитку, что очень раздражает. Я предполагаю, что это происходит, потому что Open Layers пытается загрузить фрагмент, который находится за пределами границ слоя Mapbox.

Я много гугл и много пробовал. Вот что я пробовал:

В документации по VectorTile в Open layers 4.2.0 указан параметр TileGrid (http://openlayers.org/en/latest/apidoc/ol.source.VectorTile.html). Я пробовал много побочных эффектов этой функции, но это не решает мою проблему. Это либо больше ничего не отображает, а замораживать мой браузер, он держится за исходную проблему. Я также не знаю, как это работает, но заявив, что у него есть вариант, я думал, что могу дать ему завихрение.

Итак, как установить уровень для слоя? Как я могу сказать, что слой загружает только фрагменты из {x1,y1} в {x2,y2}? Я честно не знаю, и любая помощь будет оценена.

  • 1
    Вы поняли это?
Теги:
openlayers
mapbox

1 ответ

0
Лучший ответ

Оказалось, что я запутываю ol.source.VectorTile и ol.layer.VectorTile (источник или слой). Класс ol.layer.VectorTile 'имел параметр степени, и это правильный способ его установить.

Есть некоторые причуды с определением степени. Каждый набор картографических карточек имеет свою собственную (или ограничивает, как он называется):

Изображение 174551

lat1, lng1, lat2, lng2 должны быть преобразованы из lat1, lng1, lat2, lng2 в пиксели (исправьте меня, если я ошибаюсь здесь). Способ сделать это - запустить с веб-консоли:

ol.proj.fromLonLat([lat1, lng1]).concat(ol.proj.fromLonLat([lat2, lng2]))

Это даст вам правильную степень.

Эта степень должна быть реализована как таковая:

new ol.layer.VectorTile({
    source:        source,
    extent:        [convertedlat1, convertedLng1, convertedLat2, convertedLng2], // <---
    minResolution: layer.minres,
    maxResolution: layer.maxres,
    style:         this.styles.normal,
    filter:        layer.filter,
    name:          layer.name
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню