Openlayers 2+HERE瓦片缓存



我需要在windows机器上创建一个离线地图演示,唯一的选择是使用tile缓存,我使用的是Openlayers 2,当我初始化OSM层时,一切都如预期:

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

调用"detect"方法并检查是否可以为tile调用函数getCanvasContext(),并且一切都很好!当我用使用XYZ层的HERE地图替换OSM时,它停止工作:

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
}
})
]
}

在这个例子中,detect方法确实被调用了,但这次函数getCanvasContext()抛出了一个异常:

代码:18
消息:无法在"HTMLCanvasElement"上执行"toDataURL":损坏的画布可能无法导出
名称:SecurityError

我能做什么?

来自https://gis.stackexchange.com/questions/71715/enabling-cors-in-openlayers:您需要在layers选项中包含tileOptions设置才能启用CORS:

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

相关内容

  • 没有找到相关文章

最新更新