You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenLayers如何实现点击地图添加带经纬度的动态标记并移除旧标记

解决方案

核心实现逻辑如下:

  • 新增一个独立的矢量图层用于承载标记点,挂载到当前地图实例上
  • 点击地图时先清空该图层的所有旧要素,再创建新的标记点添加到图层,即可同时实现标记展示和旧标记自动清除的需求

修改后的完整代码如下:

initLocationPicker: function (){
    // 初始化矢量图层和数据源,专门用于存放标记点
    const markerSource = new ol.source.Vector();
    const markerLayer = new ol.layer.Vector({
        source: markerSource,
        // 可以自定义标记样式,不需要也可以去掉使用默认样式
        style: new ol.style.Style({
            image: new ol.style.Circle({
                radius: 6,
                fill: new ol.style.Fill({color: '#3b82f6'}),
                stroke: new ol.style.Stroke({color: '#fff', width: 2})
            })
        })
    });

    var map = new ol.Map({
        layers: [
            new ol.layer.Tile({
                source: new ol.source.OSM()
            }),
            // 把标记图层加入地图图层列表
            markerLayer
        ],
        target: 'map',
        view: new ol.View({
            // 原代码center是4326坐标系的经纬度,需转成地图默认的3857投影才会显示到正确位置
            center: ol.proj.fromLonLat([13.4050,52.5200]),
            zoom: 2
        })
    });
    var formId = this.formId;
    var form = document.forms[formId];
    map.on('singleclick', function (evt) {
        var lonlat = ol.proj.transform(evt.coordinate, 'EPSG:3857', 'EPSG:4326');
        var lon = lonlat[0];
        var lat = lonlat[1];
        console.log(lonlat);
        form.elements.longitude.value = lon
        form.elements.latitude.value = lat

        // 清空旧标记
        markerSource.clear();
        // 创建新标记
        const marker = new ol.Feature({
            geometry: new ol.geom.Point(evt.coordinate)
        });
        // 添加新标记到数据源
        markerSource.addFeature(marker);
    });
},

补充说明:如果项目是模块化引入OpenLayers,需要提前导入对应依赖:Feature、Vector、VectorSource、Style、Circle、Fill、Stroke、Point等相关类。

内容的提问来源于stack exchange,提问作者Jo4energy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 19:54:04