【openlayers框架学习】九:openlayers中的交互类(select和draw)


文章目录

    • openlayers进阶
      • [28 openlayers中的事件](#28 openlayers中的事件)
      • [29 openlayers中select交互类的使用](#29 openlayers中select交互类的使用)
      • [30 openlayers中select常见的配置选项](#30 openlayers中select常见的配置选项)
      • [31 openlayers中绘制交互类(Draw)](#31 openlayers中绘制交互类(Draw))

openlayers进阶

28 openlayers中的事件

html 复制代码
常用进行事件交互的对象:map\view\source

29 openlayers中select交互类的使用

Interaction->Draw

Interaction->Select

js 复制代码
import './style.css';
import Map from 'ol/Map';
import 'ol/ol.css';
import View from 'ol/View';
import TileLayer from 'ol/layer/Tile';
import { XYZ } from 'ol/source';
import VectorSource from 'ol/source/Vector';
import GeoJSON from 'ol/format/GeoJSON.js';
import VectorLayer from 'ol/layer/Vector.js';
import Style from 'ol/style/Style';
import Fill from 'ol/style/Fill';
import Stroke from 'ol/style/Stroke';
import Select from 'ol/interaction/Select.js';
const center = [114.25, 30.59];
const view = new View({
    center: center,
    zoom: 4,
    projection: "EPSG:4326",
});
//城市矢量地图-高德地图瓦片
const gaodeSource = new XYZ({
    url: 'http://wprd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}',
});
const gaodeLayer = new TileLayer({
    source: gaodeSource,
});
const map = new Map({
    target: "map",
    view: view,
    layers: [gaodeLayer],
});
//加载矢量地图 将一些矢量数据(很多格式 如GEOJSON)加载到底图上
const vectorSource = new VectorSource({
    url:'https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json',
    //处理对应的矢量数据格式
    format: new GeoJSON(),
});
const vectorLayer = new VectorLayer({
    source: vectorSource,
    style: new Style({
        fill: new Fill({
            // color: "red", //填充为红色
            color: "rgba(255,0,0,0.6)", //填充为红色
        }),
        stroke: new Stroke({
            color:"green",
        }),
    }),
});
//加载数据需要发送请求 => 异步 在回调函数中处理数据
// vectorSource.on("change",function(){
//     console.log(this.getFeatures());
// });
//GeoJSON的数据格式 记录的是要素信息的集合 要素信息 包括自定义属性 几何信息(经纬度-形状)
map.addLayer(vectorLayer);
const select = new Select();
map.addInteraction(select);
select.on('select',function(e){
    console.log(e);
    const f = e.selected[0];
    f.setStyle(new Style({
        fill: new Fill({
            color:"rgba(0,255,0,0.6)",
        }),
    }));
});

30 openlayers中select常见的配置选项

main.js

js 复制代码
import './style.css';
import Map from 'ol/Map';
import 'ol/ol.css';
import View from 'ol/View';
import TileLayer from 'ol/layer/Tile';
import { XYZ } from 'ol/source';
import VectorSource from 'ol/source/Vector';
import GeoJSON from 'ol/format/GeoJSON.js';
import VectorLayer from 'ol/layer/Vector.js';
import Style from 'ol/style/Style';
import Fill from 'ol/style/Fill';
import Stroke from 'ol/style/Stroke';
import Select from 'ol/interaction/Select.js';
import { pointerMove } from 'ol/events/condition';
const center = [114.25, 30.59];
const view = new View({
    center: center,
    zoom: 4,
    projection: "EPSG:4326",
});
//城市矢量地图-高德地图瓦片
const gaodeSource = new XYZ({
    url: 'http://wprd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}',
});
const gaodeLayer = new TileLayer({
    source: gaodeSource,
});
const map = new Map({
    target: "map",
    view: view,
    layers: [gaodeLayer],
});
//加载矢量地图 将一些矢量数据(很多格式 如GEOJSON)加载到底图上
const vectorSource = new VectorSource({
    url:'https://geo.datav.aliyun.com/areas_v3/bound/100000_full.json',
    //处理对应的矢量数据格式
    format: new GeoJSON(),
});
const vectorLayer = new VectorLayer({
    source: vectorSource,
    style: new Style({
        fill: new Fill({
            // color: "red", //填充为红色
            color: "rgba(255,0,0,0.6)", //填充为红色
        }),
        stroke: new Stroke({
            color:"green",
        }),
    }),
});
//加载数据需要发送请求 => 异步 在回调函数中处理数据
// vectorSource.on("change",function(){
//     console.log(this.getFeatures());
// });
//GeoJSON的数据格式 记录的是要素信息的集合 要素信息 包括自定义属性 几何信息(经纬度-形状)
map.addLayer(vectorLayer);
const select = new Select({
    condition:pointerMove,  //鼠标移动时触发,默认是点击时触发
    filter:function(feature, layer){
        return layer === vectorLayer; //过滤图层
    }
});
map.addInteraction(select);
select.on('select',function(e){
    console.log(e);
    const f = e.selected[0];
    f.setStyle(new Style({
        fill: new Fill({
            color:"rgba(0,255,0,0.6)",
        }),
    }));
});

31 openlayers中绘制交互类(Draw)

Interaction->Draw

main.js

js 复制代码
import './style.css';
import Map from 'ol/Map';
import 'ol/ol.css';
import View from 'ol/View';
import TileLayer from 'ol/layer/Tile';
import { XYZ } from 'ol/source';
import VectorSource from 'ol/source/Vector';
import GeoJSON from 'ol/format/GeoJSON.js';
import VectorLayer from 'ol/layer/Vector.js';
import Style from 'ol/style/Style';
import Fill from 'ol/style/Fill';
import Stroke from 'ol/style/Stroke';
import Draw from 'ol/interaction/Draw.js';
const center = [114.25, 30.59];
const view = new View({
    center: center,
    zoom: 4,
    projection: "EPSG:4326",
});
//城市矢量地图-高德地图瓦片
const gaodeSource = new XYZ({
    url: 'http://wprd0{1-4}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}',
});
const gaodeLayer = new TileLayer({
    source: gaodeSource,
});
const map = new Map({
    target: "map",
    view: view,
    layers: [gaodeLayer],
});

//加载矢量地图 
const vectorSource = new VectorSource();
const vectorLayer = new VectorLayer({
    source: vectorSource,
    style: new Style({
        stroke: new Stroke({
            color:"red",
            width:4,
        }),
    }),
});

const draw = new Draw({
    type:'LineString',
    source: vectorLayer.getSource(),
});

map.addInteraction(draw);
map.addLayer(vectorLayer);
相关推荐
mldong几秒前
给流程设计器加国际化,我没引 vue-i18n
前端·javascript·vue.js
IMPYLH1 分钟前
HTML 的 <strong> 元素
前端·html
P.D.Wei5 分钟前
[Leetcode 3524] 求出数组的X值I
python·学习
边境悍匪6 分钟前
蜗牛学苑 Java 智能体学习 Day46|贯穿项目 2 思维导图复盘
java·开发语言·vue.js·学习·spring
开开心心就好6 小时前
批量提取PDF中的图片,直接导出原图
前端·javascript·支持向量机·智能手机·pdf·html·启发式算法
M78佐菲8 小时前
ARM学习笔记(1)
linux·arm开发·笔记·嵌入式硬件·学习
Setsuna_F_Seiei8 小时前
前端转型 Agent 开发 05 之 Agent Hooks 与 Checkpointer(让 Agent 从全自动转变人为可掌控)
前端·agent·ai编程
益达丫9 小时前
Socket编程揭秘:端口、IP与进程通信的底层逻辑
linux·笔记
无敌贵点大王10 小时前
RTThread学习记录11——RT-Thread 设备模型吃透:UART/ADC/PWM/PIN 到底有什么区别?
c语言·stm32·学习·链表
百万蹄蹄向前冲10 小时前
风扇转了一晚上MVP专家团翻车事故
前端·人工智能