用高德地图实现点击地图添加标记点,获取该点的经纬度,详细地址,通过输入框进行地址搜索自动定位到输入框地址

在这里插入图片描述用高德地图实现点击地图添加标记点,获取该点的经纬度,详细地址,通过输入框进行地址搜索自动定位到输入框地址

<template>
  <div class="wrap">
    <div>
      <div>详细地址:{{ addressKeyWord }}</div>
      <div>经纬度:{{ lnglat }}</div>
      <div>备注地点名:{{ locationName }}</div>
    </div>
    <div id="container"></div>
    <a-input
      style="width: 199px"
      v-model="addressKeyWord"
      id="pickerInput"
      placeholder="请输入关键字"
    />
  </div>
</template>
<script>
export default {
  data () {
    return {
      lnglat: [116.397428, 39.90923],
      addressKeyWord: "",
      locationName: ''
    }
  },
  mounted () {
    this.handleInitMap()
  },
  methods: {
    handleInitMap () {
      this.map = new AMap.Map('container', {
        resizeEnable: true, //是否监控地图容器尺寸变化
        zoom: 14, //初始化地图层级
        center: this.lnglat//初始化地图中心点
      })
      this.handleAddMarker()
      this.map.on('click', (ev) => {
        // 触发事件的地理坐标,AMap.LngLat 类型
        var lnglat = ev.lnglat
        console.log(ev, lnglat)
        this.lnglat = [lnglat.lng, lnglat.lat]
        this.map.clearMap()
        this.handleAddMarker()
        this.map.setCenter(this.lnglat)
        // 将经纬度坐标转化为详细地址
        AMap.plugin('AMap.Geocoder', () => {
          var geocoder = new AMap.Geocoder({
            extensions: 'all'
            // city 指定进行编码查询的城市,支持传入城市名、adcode 和 citycode
          })

          var lnglat1 = [lnglat.lng, lnglat.lat]

          geocoder.getAddress(lnglat1, (status, result) => {
            if (status === 'complete' && result.info === 'OK') {
              // result为对应的地理位置详细信息
              console.log(result, '详细地址')
              this.addressKeyWord = result.regeocode.formattedAddress
              this.locationName = result.regeocode.pois[0].name
            }
          })
        })
      })
      //加载BasicControl,loadUI的路径参数为模块名中 'ui/' 之后的部分
      AMapUI.loadUI(['control/BasicControl'], (BasicControl) => {
        //缩放控件
        this.map.addControl(new BasicControl.Zoom({
          position: 'rb', //left top,左上角
          showZoomNum: false //显示zoom值
        }))
      })
      //加载PoiPicker,loadUI的路径参数为模块名中 'ui/' 之后的部分
      AMapUI.loadUI(['misc/PoiPicker'], (PoiPicker) => {
        var poiPicker = new PoiPicker({
          input: 'pickerInput' //输入框id
        })
        //监听poi选中信息
        poiPicker.on('poiPicked', (poiResult) => {
          //用户选中的poi点信息
          console.log(poiResult, "poiResult")
          let lnglat = poiResult.item.location
          this.addressKeyWord = poiResult.item.name
          this.lnglat = [lnglat.lng, lnglat.lat]
          this.map.clearMap()
          this.handleAddMarker()
          this.map.setCenter(this.lnglat)
        })
      })
    },
    handleAddMarker () {
      // 构造点标记
      const marker = new AMap.Marker({
        icon: "https://webapi.amap.com/theme/v1.3/markers/n/mark_b.png",
        position: this.lnglat
      })
      // 构造矢量圆形
      const circle = new AMap.Circle({
        center: new AMap.LngLat(this.lnglat[0], this.lnglat[1]), // 圆心位置
        radius: 1000,  //半径
        strokeColor: "#1890ff",  //线颜色
        strokeOpacity: 1,  //线透明度
        strokeWeight: 3,  //线粗细度
        fillColor: "#1890ff",  //填充颜色
        fillOpacity: 0.35 //填充透明度
      })

      // 将以上覆盖物添加到地图上
      // 单独将点标记添加到地图上
      this.map.add(marker)
      // add方法可以传入一个覆盖物数组,将点标记和矢量圆同时添加到地图上
      this.map.add([marker, circle])
    }
  },
};
</script>
<style lang="scss" scoped>
#container {
  width: 100%;
  height: 500px;
}
.wrap {
  position: relative;
  #pickerInput {
    position: absolute;
    right: 0;
    top: 50px;
    z-index: 99999;
  }
}
</style>

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值