openlayers6 添加道路图层 并点击道路高亮显示

在OpenLayers 6中,你可以通过以下步骤添加一个道路图层并实现点击道路高亮显示的功能:

  1. 添加基本的道路图层。
  2. 监听click事件以获取点击的要素。
  3. 高亮显示点击的道路。

以下是实现上述功能的示例代码:




import 'ol/ol.css';
import { Map, View } from 'ol';
import TileLayer from 'ol/layer/Tile';
import VectorLayer from 'ol/layer/Vector';
import OSM from 'ol/source/OSM';
import VectorSource from 'ol/source/Vector';
import { Fill, Stroke, Style } from 'ol/style';
import { click } from 'ol/events/condition';
import { LineString } from 'ol/geom';
 
// 创建地图
const map = new Map({
  target: 'map',
  layers: [
    new TileLayer({
      source: new OSM(),
    }),
    // 添加道路图层
    roadsLayer
  ],
  view: new View({
    center: [0, 0],
    zoom: 2,
  }),
});
 
// 创建道路图层
const roadsLayer = new VectorLayer({
  source: new VectorSource({
    url: 'path/to/roads/geojson', // 道路数据的GeoJSON URL
    format: new GeoJSON()
  }),
  style: new Style({
    stroke: new Stroke({
      color: 'blue',
      width: 3,
    }),
  }),
});
 
// 添加到地图
map.addLayer(roadsLayer);
 
// 监听点击事件
map.on('click', (evt) => {
  // 获取被点击的要素
  const feature = map.forEachFeatureAtPixel(evt.pixel, (feature) => feature, {
    layerFilter: (layer) => layer === roadsLayer
  });
 
  if (feature) {
    // 高亮显示点击的道路
    roadsLayer.getSource().forEachFeature((f) => {
      if (f === feature) {
        f.setStyle(new Style({
          stroke: new Stroke({
            color: 'red',
            width: 5,
          })
        }));
      } else {
        f.setStyle(null);
      }
    });
    map.render();
  }
});

在这个例子中,我们首先创建了一个新的矢量图层roadsLayer,并且从一个GeoJSON URL加载了道路数据。然后我们监听了地图的click事件,当用户点击地图时,我们检查点击事件是否发生在roadsLayer上。如果点击了道路,我们就通过遍历图层源中的所有要素,并为点击的要素设置一个高亮样式,而其他要素则设置为null(即没有样式),这样它们就会正常渲染,但不再被高亮显示。

none
最后修改于:2024年08月06日 21:58

评论已关闭

推荐阅读

DDPG 模型解析,附Pytorch完整代码
2024年11月24日
DQN 模型解析,附Pytorch完整代码
2024年11月24日
AIGC实战——Transformer模型
2024年12月01日
Socket TCP 和 UDP 编程基础(Python)
2024年11月30日
python , tcp , udp
如何使用 ChatGPT 进行学术润色?你需要这些指令
2024年12月01日
AI
最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
2024年11月24日
ChatGPT 和 DALL·E 2 配合生成故事绘本
2024年12月01日
omegaconf,一个超强的 Python 库!
2024年11月24日
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
2024年12月01日
[超级详细]如何在深度学习训练模型过程中使用 GPU 加速
2024年11月29日
Python 物理引擎pymunk最完整教程
2024年11月27日
MediaPipe 人体姿态与手指关键点检测教程
2024年11月27日
深入了解 Taipy:Python 打造 Web 应用的全面教程
2024年11月26日
基于Transformer的时间序列预测模型
2024年11月25日
Python在金融大数据分析中的AI应用(股价分析、量化交易)实战
2024年11月25日
AIGC Gradio系列学习教程之Components
2024年12月01日
Python3 `asyncio` — 异步 I/O,事件循环和并发工具
2024年11月30日
llama-factory SFT系列教程:大模型在自定义数据集 LoRA 训练与部署
2024年12月01日
Python 多线程和多进程用法
2024年11月24日
Python socket详解,全网最全教程
2024年11月27日