我需要创建一个离线地图演示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
我能做什么?
从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
}
})
]
}