的OpenLayers 2 +这里平铺缓存

问题描述 投票:0回答:1

我需要创建一个离线地图演示Windows机器要做到这一点是使用瓷砖缓存唯一的选择上,我使用的OpenLayers 2,当我初始化一个OSM层一切正常:

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

“检测”方法被调用,并检查是否功能getCanvasContext()可以被称为一个瓷砖和一切的伟大工程!当我更换OSM在这里映射使用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 消息:未能执行上“HTMLCanvasElement”“toDataURL”:被污染的帆布​​不得出口。 名称:引发SecurityError

我能做什么?

javascript cors maps cross-domain openlayers
1个回答
1
投票

https://gis.stackexchange.com/questions/71715/enabling-cors-in-openlayers一个答案:你将需要包括tileOptionslayers选项来启用CORS设置:

map = new OpenLayers.Map({
    layers: [
    new OpenLayers.Layer.XYZ("HERE", [createUrl(urlTpl, hereLayer)], {
    tileOptions: {crossOriginKeyword: 'anonymous'},
    eventListeners: {
        tileloaded: updateStatus,
        loadend: detect
        }
    })
    ]
}
© www.soinside.com 2019 - 2024. All rights reserved.