zoukankan      html  css  js  c++  java
  • ol之弹窗

    ol之弹窗

    openlayers的弹窗主要通过 Overlay 添加。

    1.首先需要创建弹框dom:

    <div id="popup" ref="popup" class="ol-popup">
          <a href="#" ref="popup-closer" class="ol-popup-closer" @click="closeOverlay"></a>
          <div ref="popup-content">
            坐标:{{x}},{{y}}
          </div>
    </div>

    2.创建弹框对象

    this.overlay = new ol.Overlay({
            // 设置弹出框的容器
            element: this.$refs.popup,
            // 是否自动平移,即假如标记在屏幕边缘,弹出时自动平移地图使弹出框完全可见
            autoPan: true
          })

    3.当点击地图时打开弹框

    this.map.on('click', (e) => {
            // 获取弹框显示位置
            let coodinate = e.coordinate
            // 设置overlay的显示位置
            this.overlay.setPosition(coodinate)
            // 显示overlay
            this.map.addOverlay(this.overlay)
          })

    4.设置弹框样式

    <style scoped lang="scss">
    .ol-popup {
      position: absolute;
      background-color: #eeeeee;
      -webkit-filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
      filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
      padding: 15px;
      border-radius: 10px;
      border: 1px solid #cccccc;
      bottom: 12px;
      left: -50px;
      min- 280px;
    }
    .ol-popup:after,
    .ol-popup:before {
      top: 100%;
      border: solid transparent;
      content: " ";
      height: 0;
       0;
      position: absolute;
      pointer-events: none;
    }
    .ol-popup:after {
      border-top-color: #eeeeee;
      border- 10px;
      left: 48px;
      margin-left: -10px;
    }
    .ol-popup:before {
      border-top-color: #cccccc;
      border- 11px;
      left: 48px;
      margin-left: -11px;
    }
    .ol-popup-closer {
      text-decoration: none;
      position: absolute;
      top: 2px;
      right: 8px;
    }
    .ol-popup-closer:after {
      content: "✖";
    }
    </style>
    View Code

    5.此时点击地图时即可看到弹框,但是一般弹框的展示是有展示条件的,如点击点显示、点击面显示。

    6.如果点击的是一个要素图层,即可通过  forEachFeatureAtPixel  方法获取到点击的要素,并获取点击要素的属性值,将属性值显示在弹框上。

    this.map.on('click', (e) => {
            // 在点击时获取像素区域
            let pixel = this.map.getEventPixel(e.originalEvent)
            this.map.forEachFeatureAtPixel(pixel, (feature) => {
              // coodinate存放了点击时的坐标信息
              let coodinate = e.coordinate
              let lonlat = ol.proj.toLonLat(coodinate)
              this.x = lonlat[0]
              this.y = lonlat[1]
              // 设置overlay的显示位置
              this.overlay.setPosition(coodinate)
              // 显示overlay
              this.map.addOverlay(this.overlay)
            })
          })

    7.如果点击的是一个矢量数据发布的tile图层,则需要通过要素查询去获取电机的要素进行高亮、获取数据等操作。

     8.关闭弹框

    this.overlay.setPosition(undefined)

    注意:需要注意坐标系和投影的问题。

    钻研不易,转载请注明出处、、、、、、

  • 相关阅读:
    css引入方式
    HTML标签
    动态导入模块impoerlib
    pymysql连接数据库
    创建数据库表之引擎
    IO多路复用互动聊天,select函数监听
    欧拉筛法求素数个数
    与三角形相关的问题 WITH 有向面积
    时间复杂度的计算
    折半查找
  • 原文地址:https://www.cnblogs.com/s313139232/p/12714738.html
Copyright © 2011-2022 走看看