vue-amap-marker相关问题,信息窗体及自定义图片的偏移问题

  vue-amap所引用的地图组件为高德地图组件,相关事件及属性也大都可以在高德地图的原生文档中找到实例。

  首先,在查文档的时候发现坐标点属性为marker,相关的各种属性都可以直接在marker这个对象里添加,再绑定事件的时候遇到了一个问题,就是文档上的点击事件(由events触发)都是在el-amap-marker标签里绑定的,然而我接到手里的项目中,events绑定在了el-amap里面,然后我在对照其他项目的时候发现只有自己接受的项目里是绑定在“错误”的位置。但是又不能删掉,因为这里确定了坐标中心等一系列内容。在经过查询文档无果后,通过部门前辈得知绑定在外面的events事件不会与marker里的冲突。

页面部分:

  <el-amap
        vid="amap"
        :events="events"
        :center="center"
        :zoom="zoom"
        viewMode="3D"
        :amap-manager="amapManager"
        map-style="amap://styles/fresh"
      >
        <el-amap-marker
          v-for="(marker, index) in mapData"
          :key="'marker' + index"
          :position="marker.position"
          :title="marker.text"
          :icon="marker.icon"
          :offset="marker.offset"
      :label="marker.label"// marker的label标签
          :events="marker.events"  //通过事件来显示对应的信息窗体
        >
        </el-amap-marker>
        <el-amap-info-window
          v-if="poiInfoWindow"
          isCustom="true"
          :position="poiInfoWindow.position"
          :visible="poiInfoWindow.visible"
          :offset="poiInfoWindow.offset"
        >
          <div class="slot-info-window scale" @click="closePoiwindow">
            <div class="info-title">
              {{ poiInfoWindow.title}}
            </div>
            <div class="info-content scale">
              <p>11111:<span>{{ poiInfoWindow.value }}</span></p>
              <p>22222:<span>{{poiInfoWindow.ratio}}</span></p>
            </div>
          </div> //自定义的信息窗体的结构和内容样式自行调整
        </el-amap-info-window>
      </el-amap>

js部分:


private poiInfoWindow: any = {
    content: null,
    visible: false,
    offset: [130, 40],
    title: ' 啦啦啦啦啦',
    datas: [{ ratio: 2, value: 10 }],
    position: [1, 1],
  };//此处数据随意填写即可

  private getMapData() { const scenicOptPar
= {}; scenicOpt(scenicOptPar).then((res: any) => { if ( res.status === 200 && res.data && res.data.obj && res.data.obj.length ) { const data = res.data.obj; const marker: any = []; data.forEach((v: any, n: number) => { v.position = [v.lng, v.lat]; marker.push({ id: n, position: v.position, text: v.name, value: v.value, ratio: v.ratio, content: '', icon: 'img/icon.png',//可选可不选,有默认坐标点图案 offset: [-20, -50],//设置偏移量是因为把坐标点换成自己的图片后会有偏移
        label: {
         offset: [10,10]
              content: "<div class='info'>我是 marker 的 label 标签</div>", //设置文本标注内容
              direction: 'right' //设置文本标注方位
            },//label标签为一个对象可在内部设置具体内容及样式
           events: {
              click: (e: any) => {
                this.openPoiwindow(e, n);
              },
            },
          });
        });
        this.mapData = marker;
      }
    });
     private openPoiwindow(e: any, n: any) {
    this.mapData.forEach((v: any, idx: number) => {
      this.mapData[
        idx
      ].content = `<i title="${v.text}" class="duoyou-poi-icon"></i>`;//这里的content并无实际意义
      if (v.id === n) {
        this.mapData[idx].content = `<i class="duoyou-poi-icon"></i>`;//同上
        this.poiInfoWindow.visible = true;
        this.poiInfoWindow.title = v.text;
        this.poiInfoWindow.position = v.position;//控制窗体显示在所点击的坐标上
        this.poiInfoWindow.value = v.value;
        this.poiInfoWindow.ratio = (v.ratio * 100).toFixed(2);
      }
    });
  }
}

  在完成坐标点替换为自定义图标时发现图标位置与原坐标点不符,所以设置了偏移来校准位置,百度得知这个偏移是通病,因为设置完图标,图标的锚点默认在左上角,今天在看高德地图原生文档的时候发现官方给出了一个anchor 属性来设置锚点方位,特此记录。

posted @ 2021-08-18 15:39  妄欢  阅读(2220)  评论(0编辑  收藏  举报