Openlayers 2 + ЗДЕСЬ кеширование тайлов - PullRequest
0 голосов
/ 11 февраля 2019

Мне нужно создать демонстрацию автономных карт на компьютере с Windows, и единственная возможность сделать это - использовать кэширование плиток, я использую Openlayers 2, когда я инициализирую слой OSM, все работает как положено:

map = new OpenLayers.Map({
    layers: [
        new OpenLayers.Layer.OSM("OpenStreetMap (CORS)", null, {
            eventListeners: {
                tileloaded: updateStatus,
                loadend: detect
        }})
    ]
}

Вызывается метод обнаружения, который проверяет, можно ли вызвать функцию getCanvasContext () для плитки, и все работает отлично!Когда я заменяю OSM картами HERE с использованием слоя XYZ, он перестает работать:

var urlTpl = 'https://1.{base}.maps.cit.api.here.com' + '/{type}/2.1/maptile/newest/{scheme}/${z}/${x}/${y}/256/png' + '?app_id=?????&app_code=??????';

var hereLayer = {
  base: 'base',
  type: 'maptile',
  scheme: 'normal.day',
  app_id: platform['app_id'],
  app_code: platform['app_code']
};

map = new OpenLayers.Map({
    layers: [
        new OpenLayers.Layer.XYZ("HERE", [createUrl(urlTpl, hereLayer)], {
        eventListeners: {
                tileloaded: updateStatus,
                loadend: detect
            }
        })
    ]
}

В этом примере вызывается метод обнаружения, но на этот раз функция getCanvasContext () выдает исключение:

код: 18
сообщение: не удалось выполнить 'toDataURL' для 'HTMLCanvasElement': испорченные полотна не могут быть экспортированы.
name: SecurityError

Что я могу сделать?

1 Ответ

0 голосов
/ 11 февраля 2019

Из ответа в https://gis.stackexchange.com/questions/71715/enabling-cors-in-openlayers: вам нужно будет включить параметр tileOptions в параметрах layers, чтобы включить CORS:

map = new OpenLayers.Map({
    layers: [
    new OpenLayers.Layer.XYZ("HERE", [createUrl(urlTpl, hereLayer)], {
    tileOptions: {crossOriginKeyword: 'anonymous'},
    eventListeners: {
        tileloaded: updateStatus,
        loadend: detect
        }
    })
    ]
}
...