vue对高德地图的简单使用:点击标记并获取经纬度和详细地址

本文档介绍了如何使用Vue.js结合高德地图API,逐步实现地图初始化、点击添加标记、获取详细地址、搜索提示等功能。首先在高德开放平台注册并创建应用,然后通过npm安装包初始化地图。接着,监听地图点击事件,实现点击地图添加标记,并通过逆地理编码获取地址详情。此外,还展示了如何使用输入提示插件进行搜索功能。最后,提供了完整的代码示例,包括关键词搜索、经纬度信息展示等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

第一步:先按部就班,进入高德开放平台,跟着步骤注册账号,创建应用

第二步:用npm下载包,初始化地图

第三步:实现点击地图添加标记

第四步:点击获取详细地址

第五步:搜索获取相关地区提示

第六步:全部代码(把密钥和key替换可直接运行)



 

高德地图有API的示例,但是是用JS写的,我们用的时候用vue的写法改一下就好。

官网示例地址:地图的创建-生命周期-示例中心-JS API 示例 | 高德地图API (amap.com)

 

 

第一步:先按部就班,进入高德开放平台,跟着步骤注册账号,创建应用

记住创建时服务平台要选择【web端(JS API)】,如果选隔壁的web服务有些功能用不了(比如后面的地址逆解析)。

 

第二步:用npm下载包,初始化地图

(下面代码要把里面的安全密钥和key替换成自己的)

npm i @amap/amap-jsapi-loader --save
<template>
  <div id="container" class="container"></div>
</template>

<script>
import AMapLoader from "@amap/amap-jsapi-loader";
window._AMapSecurityConfig = {
  // 安全密钥
  securityJsCode: "95869xxxxxxxxxxxxxxxxx53df87dfb",
};
export default {
  name: "TestIndex",
  methods: {
    initMap() {
      AMapLoader.load({
        // 你申请的Key
        key: "c31bea684xxxxxxxxxxxxxxxxxbbd92442",
        version: "2.0",
        // 需要用到的插件
        plugins: ["AMap.Geocoder", "AMap.AutoComplete"],
      })
        .then((AMap) => {})
        .catch((err) => {
          // 错误
          console.log(err);
        });
    },
  },
  mounted() {
    this.initMap();
  },
};
</script>

<style>
.container {
  width: 500px;
  height: 300px;
}
</style>

第三步:实现点击地图添加标记

        步骤:给map绑定点击事件,点击后可获取点击处的经纬度,根据经纬度就可以给地图添加标记。(添加标记前清除上一次标记)

<template>
  <div id="container" class="container"></div>
</template>

<script>
import AMapLoader from "@amap/amap-jsapi-loader";
window._AMapSecurityConfig = {
  // 安全密钥
  securityJsCode: "95869abfxxxxxxxxxxxxxxxx53df87dfb",
};
export default {
  name: "TestIndex",
  data() {
    return {
      // 地图实例
      map: null,
      // 标记点
      marker: "",
      // 位置信息
      form: {
        lng: "",
        lat: "",
        address: "",
        //地区编码
        adcode: "",
      },
    };
  },
  methods: {
    initMap() {
      AMapLoader.load({
        // 你申请的Key
        key: "c31bea68xxxxxxxxxxxxxxxxd92442",
        version: "2.0",
        // 需要用到的插件
        plugins: ["AMap.Geocoder", "AMap.AutoComplete"],
      })
        .then((AMap) => {
          this.map = new AMap.Map("container", {
            viewMode: "3D", //是否为3D地图模式
            zoom: 5, //初始化地图级别
            center: [105.602725, 37.076636], //初始化地图中心点位置
          });
          //点击获取经纬度;
          this.map.on("click", (e) => {
            // 获取经纬度
            this.form.lng = e.lnglat.lng;
            this.form.lat = e.lnglat.lat;
            // 清除点
            this.removeMarker();
            // 标记点
            this.setMapMarker();
          });
        })
        .catch((err) => {
          // 错误
          console.log(err);
        });
    },
    // 标记点
    setMapMarker() {
      // 自动适应显示想显示的范围区域
      this.map.setFitView();
      this.marker = new AMap.Marker({
        map: this.map,
        position: [this.form.lng, this.form.lat],
      });
      this.map.setFitView();
      this.map.add(this.marker);
    },
    // 清除点
    removeMarker() {
      if (this.marker) {
        this.map.remove(this.marker);
      }
    },
  },
  mounted() {
    this.initMap();
  },
};
</script>

<style>
.container {
  width: 500px;
  height: 300px;
}
</style>

第四步:点击获取详细地址

步骤:接上一步,点击可获取经纬度,根据经纬度可解析出点击处详细地址

地理编码与逆地理编码-服务-教程-地图 JS API v2.0 | 高德地图API (amap.com)

在初始化地图的时候,实例化逆地理解析的插件:

        //地址逆解析;
          this.geoCoder = new AMap.Geocoder({
            city: "010", //城市设为北京,默认:“全国”
            radius: 1000, //范围,默认:500
          });

 

 在methods中直接定义一个函数:

// 逆解析地址
    toGeoCoder() {
      let lnglat = [this.form.lng, this.form.lat];
      this.geoCoder.getAddress(lnglat, (status, result) => {
        if (status === "complete" && result.regeocode) {
          this.form.address = result.regeocode.formattedAddress;
        }
      });
    },

注意到,每次点击都会标记一下,我们可以直接在标记点的函数里面调用toGeoCoder函数即可。

这样,经纬度、信息地址我们都保存在了data中。

 

第五步:搜索获取相关地区提示

获取输入提示数据-输入提示-示例中心-JS API 2.0 示例 | 高德地图API (amap.com)

核心代码:(query代表输入的关键词,result.tips代表提示信息列表)

在初始化地图的时候,实例化搜索提示的插件:

this.AutoComplete = new AMap.AutoComplete({ city: "全国" });
this.AutoComplete.search(query, (status, result) => {
            this.options = result.tips;
          });

第六步:全部代码(把密钥和key替换可直接运行)

        

<template>
  <div style="display: flex">
    <div>
      <div>
        <el-select
          v-model="keywords"
          filterable
          remote
          reserve-keyword
          placeholder="请输入关键词"
          :remote-method="remoteMethod"
          :loading="loading"
          :clearable="true"
          size="mini"
          @change="currentSelect"
          style="width: 500px"
        >
          <el-option
            v-for="item in options"
            :key="item.id"
            :label="item.name"
            :value="item"
            class="one-text"
          >
            <span style="float: left">{{ item.name }}</span>
            <span style="float: right; color: #8492a6; font-size: 13px">{{
              item.district
            }}</span>
          </el-option>
        </el-select>
      </div>
      <div id="container" class="container"></div>
    </div>
    <div class="info-box">
      纬度:{{ form.lat }}
      <br />
      经度:{{ form.lng }}
      <p>详细地址:{{ form.address }}</p>
    </div>
  </div>
</template>

<script>
import AMapLoader from "@amap/amap-jsapi-loader";
window._AMapSecurityConfig = {
  // 安全密钥
  securityJsCode: "95869axxxxxxxxxxxxxxx3df87dfb",
};
export default {
  name: "TestIndex",
  data() {
    return {
      // 地图实例
      map: null,
      // 标记点
      marker: "",
      // 地址逆解析
      geoCoder: null,
      // 搜索提示
      AutoComplete: null,
      // 搜索关键字
      keywords: "",
      // 位置信息
      form: {
        lng: "",
        lat: "",
        address: "",
        adcode: "", //地区编码
      },
      // 搜索节流阀
      loading: false,
      // 搜索提示信息
      options: [],
    };
  },
  methods: {
    initMap() {
      AMapLoader.load({
        // 你申请的Key
        key: "c31beaxxxxxxxxxxxxxxxxxxxx2442",
        version: "2.0",
        // 需要用到的插件
        plugins: ["AMap.Geocoder", "AMap.AutoComplete"],
      })
        .then((AMap) => {
          this.map = new AMap.Map("container", {
            viewMode: "3D", //是否为3D地图模式
            zoom: 5, //初始化地图级别
            center: [105.602725, 37.076636], //初始化地图中心点位置
          });
          //地址逆解析插件
          this.geoCoder = new AMap.Geocoder({
            city: "010", //城市设为北京,默认:“全国”
            radius: 1000, //范围,默认:500
          });
          // 搜索提示插件
          this.AutoComplete = new AMap.AutoComplete({ city: "全国" });
          //点击获取经纬度;
          this.map.on("click", (e) => {
            // 获取经纬度
            this.form.lng = e.lnglat.lng;
            this.form.lat = e.lnglat.lat;
            // 清除点
            this.removeMarker();
            // 标记点
            this.setMapMarker();
          });
        })
        .catch((err) => {
          // 错误
          console.log(err);
        });
    },
    // 标记点
    setMapMarker() {
      // 自动适应显示想显示的范围区域
      this.map.setFitView();
      this.marker = new AMap.Marker({
        map: this.map,
        position: [this.form.lng, this.form.lat],
      });
      // 逆解析地址
      this.toGeoCoder();
      this.map.setFitView();
      this.map.add(this.marker);
    },
    // 清除点
    removeMarker() {
      if (this.marker) {
        this.map.remove(this.marker);
      }
    },
    // 逆解析地址
    toGeoCoder() {
      let lnglat = [this.form.lng, this.form.lat];
      this.geoCoder.getAddress(lnglat, (status, result) => {
        if (status === "complete" && result.regeocode) {
          this.form.address = result.regeocode.formattedAddress;
        }
      });
    },
    // 搜索
    remoteMethod(query) {
      console.log(query);
      if (query !== "") {
        this.loading = true;
        setTimeout(() => {
          this.loading = false;
          this.AutoComplete.search(query, (status, result) => {
            this.options = result.tips;
          });
        }, 200);
      } else {
        this.options = [];
      }
    },
    // 选中提示
    currentSelect(val) {
      // 清空时不执行后面代码
      if (!val) {
        return;
      }
      this.form = {
        lng: val.location.lng,
        lat: val.location.lat,
        address: val.district + val.address,
        adcode: val.adcode,
      };
      // 清除点
      this.removeMarker();
      // 标记点
      this.setMapMarker();
    },
  },
  mounted() {
    this.initMap();
  },
};
</script>

<style>
.container {
  width: 500px;
  height: 300px;
}
</style>

要实现在vue点击高德地图获取经纬度详细地址,可以按照以下步骤进行: 1.vue项目中安装 `vue-amap` 插件。可以使用npm安装,命令如下: ``` npm install vue-amap --save ``` 2. 在 `main.js` 中引入 `vue-amap` 进行初始化配置。 ```javascript import VueAMap from 'vue-amap'; Vue.use(VueAMap); VueAMap.initAMapApiLoader({ key: 'your amap key', plugin: ['AMap.Geocoder'] }); ``` 其中 `your amap key` 是你的高德地图开发者Key,需要在高德开放平台上申请。 3. 在组件中引入 `Amap` 组件,在 `mounted` 钩子函数中进行地图初始化以及监听地图点击事件。 ```vue <template> <div> <div id="map" style="height: 500px;"></div> </div> </template> <script> export default { data() { return { map: null, geocoder: null, marker: null, address: '', lnglat: null } }, mounted() { this.initMap(); this.initGeocoder(); this.addMapClickEvent(); }, methods: { initMap() { this.map = new AMap.Map('map', { zoom: 13, center: [116.397428, 39.90923] }); }, initGeocoder() { this.geocoder = new AMap.Geocoder({ city: "北京" }); }, addMapClickEvent() { let self = this; this.map.on('click', function(e) { self.lnglat = e.lnglat; self.getAddressByLngLat(); self.addMarker(); }); }, getAddressByLngLat() { let self = this; this.geocoder.getAddress(this.lnglat, function(status, result) { if (status === 'complete' && result.regeocode) { self.address = result.regeocode.formattedAddress; } }); }, addMarker() { if (this.marker) { this.map.remove(this.marker); } this.marker = new AMap.Marker({ position: this.lnglat, }); this.map.add(this.marker); } } } </script> ``` 4. 在 `data` 中定义需要用到的变量,如 `map` 表示地图对象、 `geocoder` 表示逆地址解析对象、 `marker` 表示标记点对象、 `address` 表示详细地址、 `lnglat` 表示经纬度。 5. 在 `mounted` 钩子函数中,先调用 `initMap` 方法初始化地图对象,然后调用 `initGeocoder` 方法初始化逆地址解析对象,最后调用 `addMapClickEvent` 方法监听地图点击事件。 6. 在 `addMapClickEvent` 方法中,使用 `map.on('click', function(e) {...})` 监听地图点击事件,在回调函数中获取点击位置经纬度保存到 `lnglat` 变量中,然后调用 `getAddressByLngLat` 方法通过经纬度获取详细地址调用 `addMarker` 方法在地图上添加标记点。 7. 在 `getAddressByLngLat` 方法中,调用逆地址解析对象的 `getAddress` 方法,根据经纬度获取详细地址地址保存到 `address` 变量中。 8. 在 `addMarker` 方法中,先判断是否已有标记点,如果有则先移除旧的标记点,然后创建新的标记添加到地图上。 9. 最后,在模板中使用 `id="map"` 定义地图容器,添加样式 `style="height: 500px;"`。
评论 67
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值