3

我有一张地图,我想展示它。它由标准地图(OSM、Google 或 Bing)和 Openseamap.org 提供的图层组成。该图层生成海标作为地图的图像。这应该看起来像这样(或多或少,没有粉红色的屏幕): 带有 OpenLayers2 的 OpenSeaMap 屏幕

我正在尝试将其转移到 OpenLayers3。

我使用的 JavascriptCode 是:

var map = new ol.Map({
    target: 'map',
    layers: [
        new ol.layer.Tile({
            source: new ol.source.OSM()
        }),
        new ol.layer.Tile({
            source: new ol.source.XYZ({
                url: 'http://tiles.openseamap.org/seamark/{z}/{x}/{y}.png',
                crossOrigin: 'null'
            })
        })],
    view: new ol.View2D({
        center: ol.proj.transform([12.1, 54.18], 'EPSG:4326', 'EPSG:3857'),
        zoom: 13
    })
});

地图称为:

<div id="map" class="map"></div>

我有一个JSFiddle可以试验。我似乎无法让 SeamarkLayer 工作,尽管 Firebug 告诉我,当他们没有找到作为图像的海标时,就像在屏幕上的粉红色方块一样。

4

2 回答 2

3

问题是tiles.openseamap.org 的CORS 标头。解决方案如下,感谢OpenLayers3的GitHub上的一些帮助!

来自的资源http://tiles.openseamap.org不是跨域兼容的。两个选项:在服务器级别启用跨域资源共享或切换到画布地图(请参阅更新的 JSFiddle

于 2013-11-29T07:45:19.920 回答
2

对我来说,问题是通过删除null的引号来解决的:

    new ol.layer.Tile({
        source: new ol.source.XYZ({
            url: 'http://tiles.openseamap.org/seamark/{z}/{x}/{y}.png',
            crossOrigin: null
        })
    })]
于 2017-01-17T15:08:44.543 回答