【问题标题】:Openlayers source tileWMS? TypeError: a.addEventListener is not a functionOpenlayers 源 tileWMS? TypeError:a.addEventListener 不是函数
【发布时间】:2017-12-31 12:08:16
【问题描述】:

我想在我的瓦片地图中添加功能,当我尝试使用时出现问题

ol.source.TileWMS

错误信息是:

TypeError: a.addEventListener 不是函数

但它适用于

ol.source.OSM

我的代码:

var projection = new ol.proj.Projection({
    code: 'EPSG:32719',
    extent: [441867.78, 1116915.04, 833978.56, 10000000.00]
});

var extent = [576631.5686027373,8119272.722829757,655823.9357532839,8286730.359291008];

var wmsSource = new  ol.source.TileWMS({
    url: 'http://192.168.5.94:8080/geoserver/wms',
    params: {'LAYERS': 'layer'},
    ratio: 1,
    serverType: 'geoserver'
});

var wmsLayers = [
    new ol.layer.Tile({
        extent: extent,
        source: wmsSource
    })
];

var raster = new ol.layer.Tile({
    source: new ol.source.OSM()
});

var source = new ol.source.Vector({wrapX: false});

var vector = new ol.layer.Vector({
    source: source
});

var view = new ol.View({
    projection: projection,
    center: [593169.72792, 8174979.55243],
    //center: ol.proj.fromLonLat([-16.5088, -68.1388], projection),
    extent: extent,
    zoom: 12
});

var map = new ol.Map({
    controls: ol.control.defaults().extend([
        new ol.control.ScaleLine()
    ]),
    layers: [wmsLayers, vector],
    target: 'map',
    view: view
});

var draw; // global so we can remove it later

function addInteraction(){
    draw = new ol.interaction.Draw({
        source: source,
        type: 'Point'
    });
    map.addInteraction(draw);
}

map.on('singleclick', function(evt) {
    var coordinate = map.getEventCoordinate(evt.originalEvent);
    console.log(coordinate);
    document.getElementById('latitud').value = coordinate[0];
    document.getElementById('longitud').value = coordinate[1];
    addInteraction();
});

addInteraction();

只需更改此行以更改我的图层,当我使用 OSM 时,一切正常...但是当我使用 TileWMS 时出现错误

图层:[wmsLayers,矢量],

TileWMS 和 Vector 源有冲突吗?

【问题讨论】:

    标签: javascript openlayers-3 jstilemap


    【解决方案1】:

    ol.Map.layers 需要一个图层数组 - 数组中的第一个对象是一个数组。

    试试这个:

    var wmsLayer = new ol.layer.Tile({
       extent: extent,
       source: wmsSource
    });
    
    var map = new ol.Map({
       layers: [wmsLayer, vector],
       target: 'map',
       view: view
    });
    

    【讨论】:

      最近更新 更多