vue中使用vue-amap高德地图组件选择经纬度

0.背景

在实际应用中,往往会有在地图中选择经纬度坐标的需求,比如添加一个店铺啥的,饿了么出品的高德地图组件vue-amap比较好使,本文讲解vue-amap的实际应用。实现的效果在地图中点击任意地方可获取相应的经纬度,同时也可以搜索。

1.安装vue-amap

在你的工程根目录下执行以下命令:

npm install --save vue-amap

2.封装组件AMap.vue

话不多说直接上代码。

<template>
  <div>
    <el-dialog
      width="60%" top="50px"
      :before-close="cancel"
      :closable="false"
      :mask-closable="false"
      :visible="visible"
      :close-on-click-modal="false"
    >
      <span>
       <el-amap-search-box
          class="search-box"
          :search-option="searchOption"         
          :on-search-result ="querySearch"   
      > </el-amap-search-box>
        <div id="amap-container" style="width:100%;height:500px;">
          <el-amap class="amap-box" :vid="'amap-vue'" :center="center" :plugin="plugin" :events="events" :zoom="zoom">
            <el-amap-marker :position="center"></el-amap-marker>
              <el-amap-marker
              v-for="(marker,index) in markersArray"
              :key ="'marker'+index"
              :position ="marker">
              </el-amap-marker>
          </el-amap>
        </div>
      </span>
      <span slot="footer" class="dialog-footer">
        <el-button @click="cancel">取 消</el-button>
        <el-button type="primary" @click="confirm">确 定</el-button>
      </span>
    </el-dialog>
  </div>
</template>

<script>
import Vue from 'vue'
import VueAMap from 'vue-amap';
Vue.use(VueAMap);

export default {
    name: "AMap",
    components: {},
    data () {
        return {
          mapApiKey:"79ccbd32716b72f5baxsf4tjif97c1b", //您申请的key值
          markersArray: [106.797248,26.642313],
          zoom: 15,
          lnglatInfo: {
              lng: '',
              lat: '',
              addr: ''
          }
          ,searchOption: {
                city: "全国",
                citylimit: false,
              }
          ,center: [106.797248,26.642313]
          ,plugin: [
            {
              pName: 'Scale',
              events: {
                init(instance) {
                  // console.log(instance)
                }
              }
            },
            {
              pName: 'ToolBar',
              position:'RT',
              events: {
                init(instance) {
                  // console.log(instance)
                }
              }
            }
          ]
          ,events: {
            init(o){
              // console.log(o.getCenter());
            },
            zoomchange: (e) => {
                console.log(e);
            },  
            zoomend: (e) => {
                //获取当前缩放zoom值
                // console.log(this.$refs.map.$$getInstance().getZoom());
                console.log(e);
            },
            click: e => {
            //地图中的点击事件
              this.center =  [e.lnglat.lng,e.lnglat.lat];
              this.markersArray = [];
              this.markersArray.push(this.center)
              this.lnglatInfo.lat = e.lnglat.lat;
              this.lnglatInfo.lng = e.lnglat.lng;
            }
          },
      }
  },
  props: {
    visible: Boolean
  },
  created () {},
  watch: {},
  mounted() {
    this.init()
  },
  methods: {
    // 初始化地图
    init() {
        let _self =this;
        VueAMap.initAMapApiLoader({
          key: _self.mapApiKey,
          plugin: ['AMap.Autocomplete', 'AMap.PlaceSearch', 'AMap.Scale', 'AMap.OverView', 'AMap.ToolBar', 'AMap.MapType', 'AMap.PolyEditor', 'AMap.CircleEditor','AMap.Geocoder'],
          // 高德 sdk 版本
          v: '1.4.15'
      });
    }, 
   
    //点击搜索后触发的事件
      querySearch(pois){
        this.input = document.querySelector('.search-box-wrapper input').value 
        this.center = [pois[0].lng,pois[0].lat]        //选择了第一个值
        this.markersArray = [];    //标记点先清空  
        this.markersArray.push([pois[0].lng,pois[0].lat])   //把搜索的位置的第一个值存入标记中并显示标记点
        this.lnglatInfo.lat = pois[0].lat;
        this.lnglatInfo.lng = pois[0].lng;
      },
    /***
     * 确认,并返回选择的经纬度
     */
    confirm: function () {
      this.$emit('map-confirm', this.lnglatInfo)
    },
    /***
     * 取消
     */
    cancel: function () {
      this.$emit('cancel')
    }
  }
}
</script>

<style lang="less" scoped>
.serachinput {
  width: 300px;
  box-sizing: border-box;
  padding: 9px;
  border: 1px solid #dddee1;
  line-height: 20px;
  font-size: 16px;
  height: 38px;
  color: #333;
  position: relative;
  border-radius: 4px;
  -webkit-box-shadow: #666 0px 0px 10px;
  -moz-box-shadow: #666 0px 0px 10px;
  box-shadow: #666 0px 0px 10px;
}
::v-deep .el-dialog__header {
  border-bottom: 0 !important;
}
.search-box{
  width:100%;
  height:40px;
}
::v-deep .el-vue-search-box-container .search-box-wrapper .search-btn{
  background-color: #409eff;
  border-color: #409eff;
  color:#fff;
  width: 70px;
  border-radius: 4px;
}
::v-deep .el-vue-search-box-container .search-box-wrapper input{
  height: 40px;
  line-height: 40px;
  border: 1px solid #dcdfe6;
}
</style>

3.使用方法

<template>
    <div>
        <a-form-model :model="formData" ref="formData" :label-col="labelCol" :wrapper-col="wrapperCol">
            <a-form-model-item label="经纬度:">
                <a-tag color="blue">
                    经度:{{formData.lng}}
                </a-tag>
                <a-tag color="purple">
                    纬度:{{formData.lat}}
                </a-tag>
                <a-button type="primary" size="small" @click="showAMap">打开地图选择</a-button>
            </a-form-model-item>
        </a-form-model>
    <AMap @cancel="showMap = false" @map-confirm="confirmLocation" :visible="showMap" ></AMap>
    </div>
</template>

<script>
import AMap from "@/pages/mch/components/AMap";

export default {
    name: "demo",
    components:{AMap},
    data() {
        return {
            showMap:false,
             labelCol: { xs: 24, sm: 24, md: 24, lg: 4 },
            wrapperCol: { xs: 24, sm: 24, md: 24, lg: 18 },
            formData:{
                lat:'',
                lng:''
            }
        }
    },
    mounted() {
    },
    created(){
    },
    methods: {
        confirmLocation(e) {
            this.latlng.lat = e.lat
            this.latlng.lng = e.lng
            this.showMap = false
        },
        showAMap(){
            this.showMap = true;
        }
    },
}
</script>
<style lang="less" scoped>
</style>

4.效果

选择前:
在这里插入图片描述
打开地图选择:
在这里插入图片描述选择后:
在这里插入图片描述

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 要在Vue项目使用vue-amap,首先需要安装vue-amap模块。可以通过npm命令来安装: ``` npm install vue-amap --save ``` 安装完成后,在Vue项目的入口文件引入vue-amap模块,并进行初始化: ``` import VueAMap from 'vue-amap'; Vue.use(VueAMap); VueAMap.initAMapApiLoader({ // 高德的key key: 'your amap key', // 插件集合 plugin: ['AMap.Geolocation', 'AMap.MarkerClusterer'], // 高德 sdk 版本,默认为 1.4.15 v: '1.4.15', }); ``` 其,`your amap key`需要替换成你自己的高德地图应用的key。 接下来,在组件引入`vue-amap`的组件,并使用`amap`标签来显示地图: ``` <template> <div> <amap :zoom="zoom" :center="center"> <amap-marker :position="center"></amap-marker> </amap> </div> </template> <script> export default { data() { return { zoom: 13, center: [116.397428, 39.90923], }; }, }; </script> ``` 以上代码实现了在Vue组件显示一个地图,并在地图上显示一个标记。具体使用方式可以参考vue-amap的文档。 ### 回答2: Vue-amap 是一个基于Vue高德地图组件库,可以方便地在Vue项目使用高德地图服务。 要使用vue-amap,需要按照以下步骤进行操作: 1. 首先,安装vue-amap库。可以通过npm或者yarn来进行安装。在终端执行以下命令: ``` npm install --save vue-amap ``` 或者 ``` yarn add vue-amap ``` 2. 在Vue项目的入口文件(通常是main.js),引入vue-amap并注册为Vue的插件。在代码添加以下内容: ```javascript import VueAMap from 'vue-amap'; Vue.use(VueAMap); ``` 3. 在需要使用高德地图组件,可以通过`VueAMap.initAMapApiLoader`方法进行配置和初始化。在代码添加以下内容: ```javascript VueAMap.initAMapApiLoader({ key: 'your-amap-key', // 高德地图API的key // 插件集合 plugin: ['AMap.Scale', 'AMap.OverView', 'AMap.ToolBar', 'AMap.MapType', 'AMap.Geolocation'], // 高德地图 SDK 版本,默认为 1.4.4 v: '1.4.4' }); ``` 在这里,需要将`your-amap-key`替换为你申请到的高德地图API的key。 4. 然后,就可以在组件使用vue-amap提供的地图组件了。例如,在组件的模板添加以下内容: ```html <vue-amap id="mapContainer" :zoom="13" :center="['116.397428', '39.90923']"> <div class="amap-marker" :position="['116.397428', '39.90923']"></div> </vue-amap> ``` 在这里,使用`vue-amap`标签来包裹地图组件,并通过`:zoom`和`:center`属性设置地图缩放级别和心点。在`vue-amap`标签内,可以添加其他地图相关的组件。 这样,就可以在Vue项目使用vue-amap来显示高德地图了。在实际开发,还可以根据需要使用vue-amap提供的其他功能和API来实现更多的地图操作和交互。 ### 回答3: Vue-amap是一个基于Vue.js高德地图组件库,提供了丰富的地图展示和操作功能。要使用vue-amap,首先需要在项目安装它。 1. 在项目目录下打开终端,运行以下命令来安装vue-amap: ``` npm install vue-amap --save ``` 2. 在需要使用地图组件,引入vue-amap: ```javascript import AMap from 'vue-amap'; ``` 3. 调用Vue.use()方法并添加参数AMap: ```javascript Vue.use(AMap); ``` 4. 在项目的入口文件(main.js),加载高德地图的SDK: ```javascript AMap.initAMapApiLoader({ key: 'your-amap-api-key', plugin: ['AMap.Geolocation'] }); ``` 注意:replace 'your-amap-api-key'为你注册高德地图开发者账号后获得的API Key。 5. 在组件的template使用vue-amap提供的地图组件: ```html <template> <div> <amap-map :zoom="13" :center="[lng, lat]"> <amap-marker :position="[lng, lat]"></amap-marker> </amap-map> </div> </template> ``` 上述代码展示了一个简单的地图,包含一个标记点在指定的经纬度上。 至此,我们已经完成了vue-amap的基本配置,可以在Vue项目使用高德地图的各种功能了。根据官方文档,还可以使用更多的组件和API来控制地图的交互、显示等,以满足具体需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值