openlayers6实现可拖拽点位,点位可拖拽移动点击移动

openlayers6实现可拖拽点位

实现功能:需要实现地图上点击出现点位,此点位可拖拽,并且点击移动,从而实现地图选点的功能

使用技术:openlayers6 + react + 高德地图底图

1. 第一步:初始化地图容器

html代码:新增dom节点

<div id="testMap" style={
    {width: '100vw', height: '100vh'}}></div>

2. 第二步:初始化地图

js代码:初始化时调用方法初始化高德地图

loadMap = () =>{
   
    // 添加点位图层
    var vectorSource = new VectorSource({
   
        features: [],
    });
    this.vectorLayer = new VectorLayer({
   
        source: vectorSource,
        zIndex: 100
    });

    // 需要转换坐标系 - 将4326转化为3857坐标系
    let m_center = [lngCenter, latCenter];//地图中心点-经纬度坐标
    m_center = olProj.transform(m_center, 'EPSG:4326', 'EPSG:3857');
    // 使用高德道路图
    this.map = new Map({
   
        target: 'testMap',
        layers: [
            new TileLayer({
   
                source: new XYZ({
   
                    url: mapURL["aMap-vec-d"]
                })
            }),
            this.vectorLayer
        ],
        view: new View({
   
            center: m_center,
            zoom: 10,
            minZoom: 5,
            maxZoom: 18,
            expandZoomRange: true,
            projection: 'EPSG:3857'
        }),
    });
    // 调用选点方法
    this.mapClick();
}

3. 第三步:增加地图选点方法

mapClick = () => {
   
    this.map.on('singleclick', (e) => {
   
        // 获取当前点位坐标
        let point = e.coordinate;
        if(this.iconFeature){
   
            // 将地图回中
            // this.map.getView().setCenter(point);
            // 将点位清除再绘制
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现在 Vue 中使用 OpenLayers 实现聚合点位点击事件,可以按照以下步骤进行: 1. 在 Vue 中安装 OpenLayers:可以使用命令 `npm install ol` 安装 OpenLayers。 2. 在 Vue 中创建地图容器:可以在 Vue 的 `template` 中创建一个 `div` 容器作为地图容器。 3. 在 Vue 中使用 OpenLayers 创建地图:可以在 Vue 的 `methods` 中创建一个函数,使用 OpenLayers 创建地图。 4. 在地图中添加聚合点位图层:在创建地图的过程中,可以添加一个聚合点位图层。 5. 监听聚合点位图层的点击事件:可以在创建地图的过程中,使用 OpenLayers 提供的 `on` 方法监听聚合点位图层的点击事件。 6. 在点击事件中获取聚合点位的信息:在监听到聚合点位图层的点击事件后,可以获取聚合点位的信息并进行相应处理。 以下是一个基本的 Vue 组件代码示例,用于实现 OpenLayers 中聚合点位点击事件: ```html <template> <div id="map"></div> </template> <script> import 'ol/ol.css'; import { Map, View } from 'ol'; import { fromLonLat } from 'ol/proj'; import { Cluster, OSM, Vector } from 'ol/source'; import { Tile as TileLayer, Vector as VectorLayer } from 'ol/layer'; import Feature from 'ol/Feature'; import Point from 'ol/geom/Point'; export default { name: 'Map', mounted() { this.initMap(); }, methods: { initMap() { const source = new Cluster({ distance: 40, source: new Vector({ url: 'data/kml/2012_Earthquakes_Mag5.kml', format: new KML({ extractStyles: false, }), }), }); const clusterLayer = new VectorLayer({ source: source, }); const map = new Map({ target: 'map', layers: [ new TileLayer({ source: new OSM(), }), clusterLayer, ], view: new View({ center: fromLonLat([-117.1497, 32.6965]), zoom: 12, }), }); clusterLayer.getSource().on('addfeature', function (event) { const cluster = event.feature; if (cluster.get('features').length > 1) { const coordinates = cluster.getGeometry().getCoordinates(); const feature = new Feature(new Point(coordinates)); feature.set('cluster', cluster); source.addFeature(feature); } }); clusterLayer.getSource().on('click', function (event) { const feature = map.forEachFeatureAtPixel(event.pixel, function (feature) { return feature; }); if (feature && feature.get('cluster')) { const cluster = feature.get('cluster'); const features = cluster.get('features'); const coordinate = cluster.getGeometry().getCoordinates(); console.log(features); console.log(coordinate); } }); }, }, }; </script> <style> #map { height: 400px; } </style> ``` 在上述代码示例中,我们使用 OpenLayers 创建了一个聚合点位图层,并在地图中添加了该图层。然后,我们使用 `on` 方法来监听聚合点位图层的点击事件,并在点击事件中获取聚合点位的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值