当前位置:首页 » 《我的小黑屋》 » 正文

Vue2(vue-amap) 最新高德地图获取坐标与地址信息+搜索功能

22 人参与  2024年11月11日 14:02  分类 : 《我的小黑屋》  评论

点击全文阅读


效果

第一步:首先我们先去高德地图开放平台申请一个Key

第二步:

需要安装地图插件

npm install vue-amap --save

第三步:

// 引入vue-amapimport VueAMap from 'vue-amap'Vue.use(VueAMap)VueAMap.initAMapApiLoader({  key: '你的Key',  // key  plugin: [  'AMap.Geolocation',  //定位空间,用来获取和展示用户主机所在的经纬度位置    ' AMap.Autocomplete ',  //输入提示插件    ' AMap.PlaceSearch ', //POI搜索插件    ' AMap.Scale ',   //右下角缩略图插件,比例尺    ' AMap.OverView ', //地图鹰眼插件    ' AMap.ToolBar ',  //地图工具条    ' AMap.MapType ',  //类别切换空间,实现默认图层与卫星图,实施交通层之间切换的控制    ' AMap.PolyEditor ', //编辑 折线多边形    ' AMap.CircleEditor ',    "AMap.Geocoder",     //地图编码   'AMap.AMapManager',   'AMap.Marker'  ],  // 高德 sdk 版本,默认为 1.4.4  v: '1.4.4',  uiVersion: '1.0' //ui版本})//高德的安全密钥window._AMapSecurityConfig = {  securityJsCode: '你的密钥',}

添加标签

              <div style="border: 1px solid #cccccc">                  <!-- //搜索框 -->                  <el-amap-search-box                    id="search"                    :search-option="searchOption"                    :on-search-result="onSearchResult"                  />                  <!-- 地图 -->                  <el-amap                    class="amap-box"                    :zoom="amap.zoom"                    :center="amap.center"                    :plugin="amap.plugin"                    :events="amap.events"                  >                    <!-- 当前位置图标 -->                    <el-amap-marker                      v-for="(marker, index) in amap.markers"                      :key="'marker' + index"                      :position="marker.position"                    />                    <!-- 位置名称显示 -->                    <el-amap-text                      v-for="(marker, index) in amap.markers"                      :key="'text' + index"                      :text="marker.text"                      :offset="marker.offset"                      :position="marker.position"                    />                  </el-amap>                </div>

数据源:

export default {  name: "vehicleSpotInspection",  data() {    const vm = this;    return {      address: "",//需要传给后端的字段      // form对象      dataForm: getFormData(),      // 地图搜索对象      searchOption: {        city: "全国",        citylimit: true,      },      lng: 0,      lat: 0,      // 地图对象      amap: {        zoom: 16,        center: [116.319802, 39.98294],        events: {          // 点击获取地址的数据          click(e) {            const { lng, lat } = e.lnglat;            vm.dataForm.lon = lng;            vm.dataForm.lat = lat;            // 这里通过高德 SDK 完成。            var geocoder = new AMap.Geocoder({              radius: 100,              extensions: "all",            });            geocoder.getAddress([lng, lat], function (status, result) {              if (status === "complete" && result.info === "OK") {                if (result && result.regeocode) {                  console.log("点击获取地址的数据", result);                  vm.dataForm.orgAddr = result.regeocode.formattedAddress;                  vm.dataForm.province =                    result.regeocode.addressComponent.province;                  vm.dataForm.city = result.regeocode.addressComponent.city;                  vm.dataForm.district =                    result.regeocode.addressComponent.district;                  vm.dataForm.lat = lat ? lat.toString() : "";                  vm.dataForm.lon = lng ? lng.toString() : "";                  vm.amap.markers = [];                  const obj = {                    position: [lng, lat],                    text: result.regeocode.formattedAddress,                    offset: [0, 30],                  };                  vm.amap.markers.push(obj);                  vm.sure();                }              }            });            // this.$nextTick().then(() => {            //           // 在这里执行你需要在 DOM 更新后执行的代码            //         });          },        },        plugin: [          {            // 定位            pName: "Geolocation",            events: {              init(o) {                // o是高德地图定位插件实例                o.getCurrentPosition((status, result) => {                  console.log("定位:", result);                  if (result && result.position) {                    // 设置经度                    vm.lng = result.position.lng;                    // 设置维度                    vm.lat = result.position.lat;                    vm.address = result.formattedAddress; //获取具体位置                    console.log("定位address", vm.address);                    // 设置坐标                    vm.amap.center = [vm.lng, vm.lat];                    let op = {                      position: [vm.lng, vm.lat, vm.address],                      text: vm.address, //提交之后显示的位置                      offset: [0, 30],                    };                    vm.amap.markers.push(op);                    // 页面渲染好后                    // this.$nextTick().then(() => {                    //   // 在这里执行你需要在 DOM 更新后执行的代码                    // });                  }                });              },            },          },        ],        //        markers: [],      },    };  },

方法:

 // 点击获取地址的数据    // 地图点击事件处理函数    onMapClick(e) {      const { lng, lat } = e.lnglat;      // 更新数据属性      this.dataForm.lon = lng;      this.dataForm.lat = lat;      // 使用 this.$amap 创建 Geocoder 实例      var geocoder = new this.$amap.Geocoder({        radius: 100,        extensions: "all",      });      geocoder.getAddress([lng, lat], (status, result) => {        if (status === "complete" && result.info === "OK") {          if (result && result.regeocode) {            console.log("点击获取地址的数据", result);            this.dataForm.orgAddr = result.regeocode.formattedAddress;            this.dataForm.province = result.regeocode.addressComponent.province;            this.dataForm.city = result.regeocode.addressComponent.city;            this.dataForm.district = result.regeocode.addressComponent.district;            this.dataForm.lat = lat.toString();            this.dataForm.lon = lng.toString();            // 更新标记            this.amap.markers = [              {                position: [lng, lat],                text: result.regeocode.formattedAddress,                offset: [0, 30],              },            ];            // 调用其他方法,例如 sure()            this.sure();          }        }      });    },    // 地图搜索回调    onSearchResult(pois) {      const vm = this;      vm.amap.markers = [];           // 根据是否有搜索结果来启用或禁用搜索框           this.searchDisabled = pois && pois.length === 0;      let latSum = 0;      let lngSum = 0;      console.log("地图回调", pois);      if (pois.length > 0) {        pois.forEach((poi, index) => {          const { lng, lat } = poi;          if (index === 0) {            lngSum = lng;            latSum = lat;            const obj = {              position: [poi.lng, poi.lat],              text: poi.name,              offset: [0, 30],            };            vm.amap.markers.push(obj);            console.log("地图搜索回调", poi);            vm.dataForm.orgAddr = poi.name;            vm.dataForm.lat = poi.lat ? poi.lat.toString() : "";            vm.dataForm.lon = poi.lng ? poi.lng.toString() : "";          }        });        vm.amap.center = [lngSum, latSum];      }    },    // 定位成功后更新位置信息的函数    updateLocationInfo(position) {      this.dataForm.lat = position.lat;      this.dataForm.lng = position.lng;      this.dataForm.orgAddr = position.formattedAddress; // position 对象中有 formattedAddress 属性      console.log("更新位置", this.dataForm);      // 更新地图中心点和标记      this.amap.center = [this.dataForm.lng, this.dataForm.lat];      this.amap.markers = [        {          position: [this.dataForm.lng, this.dataForm.lat],          text: this.address,//这里改成后台提供的字段可以提交给后台          offset: [0, 30],        },      ];    },    // 提交方法    sure() {      const vm = this;      console.log(this.amap.markers);      this.$emit("updateLocation", vm.dataForm);    },

遇到的问题:1.有的可能会提示 找不到AMap模块 可以引入 import AMap from 'AMap'


点击全文阅读


本文链接:http://zhangshiyu.com/post/184604.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1