vue高德地图,实现poi搜索功能,然后点击marker保存地址

8158921-50a76999e138f579.jpeg

高德地图的poi不能点击信息窗口然后获取当前的经纬度,然后我百度了一下,自己修改了样式,最后就成功了。

要先引入cdn高德的地址
html
<template>
    <div style="display:flex;width:100%">
        <input type="text" v-model="address"><button @click="search">搜索</button>
        <div id="result" class="amap_lib_placeSearch">
            <div class="amap_lib_placeSearch_list amap-pl-pc"  v-for="(item,index) in poiArr"  
            @click="openMarkerTipById1(index,$event)" 
            @mouseout="onmouseout_MarkerStyle(index+1,$event)" 
            :key="index">
                <div class="poibox" style="border-bottom: 1px solid #eaeaea">
                    <div class="amap_lib_placeSearch_poi poibox-icon" :class="index==selectedIndex?'selected':''">{{index+1}}</div>    
                    <div class="poi-img" v-if="item.url" :style="'background-image:url('+item.url+'?operate=merge&amp;w=90&amp;h=56&amp;position=5)'"
                    ></div>
                    <h3 class="poi-title" >
                        <span class="poi-name">{{item.name}}</span>
                    </h3>
                    <div class="poi-info">
                        <p class="poi-addr">地址:{{item.address}}</p>
                        <p class="poi-tel">电话:{{item.tel}}</p>
                    </div>
                        <div class="clear"></div>
                </div>
            </div>
        </div>
        <div id="iCenter"></div>
    </div>
</template>
js
<script>
export default {
  data() {
    return {
      address:'',//保存地址的汉字名字
      map:'',//保存地址的经纬度
      address:'',//搜索的地区
      poiArr: [],//左边搜索出来的数组
      windowsArr: [],//信息窗口的数组
      marker: [],
      mapObj: "",//地图对象
      selectedIndex: -1
    };
  },
  mounted() {
        this.mapInit()
        this.placeSearch("")
  },
   methods: {
     //创建一个map
    mapInit() {
      this.mapObj = new AMap.Map("iCenter", {
        resizeEnable: true
      })
    },
    //根据名字地址去搜索结果
    placeSearch(name) {
      var MSearch;
      this.mapObj.plugin(
        ["AMap.PlaceSearch", "AMap.ToolBar", "AMap.Scale"],
        () => {
          this.mapObj.addControl(new AMap.ToolBar())
          this.mapObj.addControl(new AMap.Scale())
          MSearch = new AMap.PlaceSearch({
            //构造地点查询类
            city: "" //城市
          });
          AMap.event.addListener(MSearch,"complete",this.keywordSearch_CallBack) //返回地点查询结果
          MSearch.search(name); //关键字查询
        }
      );
    },
    //结果的回调
    keywordSearch_CallBack(data) {
      var poiArr = data.poiList.pois
      var resultCount = poiArr.length
      this.poiArr = poiArr; //左边要渲染的数据
      for (var i = 0; i < resultCount; i++) {
        this.addmarker(i, poiArr[i])
        this.poiArr[i].url = this.poiArr[i].photos? this.poiArr[i].photos[0]? this.poiArr[i].photos[0].url: "": ""
      }
      this.mapObj.setFitView()
    },
    //添加marker&infowindow
    addmarker(i, d) {
      var lngX = d.location.getLng();
      var latY = d.location.getLat();
      var markerOption = {
        map: this.mapObj,
        position: new AMap.LngLat(lngX, latY)
      };
      var mar = new AMap.Marker(markerOption);
      this.marker.push(new AMap.LngLat(lngX, latY));
      var infoWindow = new AMap.InfoWindow({
        content:
          "<h3>" +
          d.name +
          "</h3>" +
          this.TipContents(d.name, d.address) +
          `</br><a  id="me"  href="javascript:;">保存地址</a>`,
        size: new AMap.Size(300, 0),
        autoMove: true,
        offset: new AMap.Pixel(0, -30)
      });
      this.windowsArr.push(infoWindow);
      var _this = this;
      var aa = (e) => {
        var obj = mar.getPosition();
        this.map = obj //这里保存的地址经纬度
        this.address = d.name //这里保存的是地址名字
        window.removeEventListener("click", _this.demo)
        infoWindow.open(_this.mapObj, obj);
        window.addEventListener("click", _this.demo)
      }
      AMap.event.addListener(mar, "click", aa)
    },
    TipContents(name, address) {
      //窗体内容
      if (
        name == "" ||
        name == "undefined" ||
        name == null ||
        name == " undefined" ||
        typeof name == "undefined"
      ) {
        type = "暂无";
      }
      if (
        address == "" ||
        address == "undefined" ||
        address == null ||
        address == " undefined" ||
        typeof address == "undefined"
      ) {
        address = "暂无";
      }
      var str = `地址:${address}`
      return str
    },
    demo(e) {
      if (e.target.id === `me`) {
        e.stopPropagation();
        this.saveAddress();
      }
    },
    saveAddress() {
      alert('我已经保存地址了');
    },
    
    openMarkerTipById1(pointid, thiss) {
      //根据id 打开搜索结果点tip
      thiss.currentTarget.style.background = "#CAE1FF";
      this.selectedIndex = pointid
      this.map = this.marker[pointid]
      window.removeEventListener("click", this.demo);
      this.windowsArr[pointid].open(this.mapObj, this.marker[pointid])
      window.addEventListener("click", this.demo);
    },
    onmouseout_MarkerStyle(pointid, thiss) {
      //鼠标移开后点样式恢复
      thiss.currentTarget.style.background = ""
    },
    search() {
        this.mapObj=''
        this.mapInit()
        this.placeSearch(this.address)
    }
  },
};
</script>
css
<style lang="scss" scoped>
#iCenter {
  height: 500px;
  position: relative;
  display: flex;
  flex: 1;
}
#result {
  width: 210px;
  position: relative;
  height: 500px;
  overflow-y: scroll;
  border-right: 1px solid #ccc;
}
.amap_lib_placeSearch {
  height: 100%;
  overflow-y: scroll;
}
.amap_lib_placeSearch_page {
  position: absolute;
  bottom: 0;
  width: 100%;
}
#me {
  border-top: 1px solid #ccc;
  margin-top: 6px;
  padding-top: 6px;
  width: 100%;
  display: block;
}
.amap_lib_placeSearch .poibox {
  border-bottom: 1px solid #eaeaea;
  cursor: pointer;
  padding: 5px 0 5px 10px;
  position: relative;
  min-height: 35px;
}
.amap_lib_placeSearch_poi {
  background: url(https://webapi.amap.com/theme/v1.3/markers/n/mark_b.png)
    no-repeat;
  height: 31px;
  width: 19px;
  cursor: pointer;
  left: -1px;
  text-align: center;
  color: #fff;
  font: 12px arial, simsun, sans-serif;
  padding-top: 3px;
}
.amap_lib_placeSearch .poibox .poi-title {
  margin-left: 25px;
  font-size: 13px;
  overflow: hidden;
}
.amap_lib_placeSearch .amap_lib_placeSearch_poi {
  position: absolute;
}
.amap_lib_placeSearch .poibox .poi-info {
  word-break: break-all;
  margin: 0 0 0 25px;
  overflow: hidden;
}
.amap_lib_placeSearch .poibox .poi-info p {
  color: #999;
  font-family: Tahoma;
  line-height: 20px;
  font-size: 12px;
}
.amap_lib_placeSearch .poibox .poibox-icon {
  margin-left: 7px;
  margin-top: 4px;
}
.amap-pl-pc .poi-img {
  float: right;
  margin: 3px 8px 0;
  width: 90px;
  height: 56px;
  overflow: hidden;
}
.poibox {
  cursor: pointer;
}
.poibox:hover {
  background: #f6f6f6;
}
.selected {
  background-image: url(https://webapi.amap.com/theme/v1.3/markers/n/mark_r.png) !important;
}
.amap-info-content {
  width: 200px !important;
}
</style>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345