vue 腾讯地图webServiceAPI 和 javaScriptAPI GL 选点 (2)

地图选点 就干两个事儿        一:点击地图 出现marker(具体看自己的需求,我记录的是有且只有一个) 并记录经纬度   二:通过点击地图获取经纬度并且 逆地址解析 (通过经纬度查询出具体地址)

1、点击地图 出现marker(有且只有一个) 文档中并没有明确说怎么做

      我个人做法是 既然选择是有且只有一个 ,每次点击地图时,先移除所有marker 后 再创建一个marker

 2、在我上篇(1)中的 initMap 函数中加上下面代码可以实现点击地图marker有且只有一个

var markerFlag = null;

// 创建marker
function createMarker(latLng) {
        if (!markerFlag) {
          markerFlag = new TMap.MultiMarker({
            id: "marker-layer",
            map: map,
            geometries: [
              {
                id: "marker",
                styleId: "marker",
                position: latLng
              }
            ]
          });
        }
      }


//移除marker
function removeMarker() {
            if (markerFlag) {
                markerFlag.setMap(null);
                markerFlag = null;
            }
        }


map.on("click", ev => {
  console.log(ev) // 可以打印看看,ev.latLng 这个获取的经纬度是已经 new TMap.LatLng(latitude, longitude)  处理过的
  removeMarker()
  createMarker(ev.latLng);
})

 

3、根据点击地图获取经纬度 并进行 逆地址解析  (使用的是WebServiceAPI) 

// 在methods中写

// 既然marker有且 只有一个 那每次点击地图时获取的经纬度可以 赋值给data里面的 latitude 和 longitude   因为需要经纬度参数
getAddress() {
      const KEY = "写你自己的key"; //写你自己的key
      let url = "https://apis.map.qq.com/ws/geocoder/v1";
      this.$jsonp(url, {
        key: KEY,
        get_poi: 0,
        output: "jsonp",
        location: `${this.latitude},${this.longitude}` // 经纬度  String类型
      }).then(json => {
        console.log(json)  //这里你就可以看得到请求回来的东西啦   想怎么存取 自己的事儿
console.log(json.result.formatted_addresses.recommend) }).
catch(error => { console.log(error) }) } // 在上一步中的 地图点击事件中写 map.on("click", evt => { this.latitude = evt.latLng.lat; this.longitude = evt.latLng.lng this.getAddress() removeMarker() createMarker(evt.latLng); });

 

posted @ 2020-06-30 20:12  敲代码的树先生  阅读(576)  评论(0编辑  收藏  举报