Vue组件之高德地图地址选择功能的实例代码


Posted in Javascript onJune 21, 2019

注:本文基于上一篇文章【Vue-Cli 3.0 中配置高德地图 】 ,采用直接引入高德 SDK 的方式来使用高德地图api

一、效果图

Vue组件之高德地图地址选择功能的实例代码

二、组件要实现的功能

1. 如果有传入坐标点,则定位到坐标点

2. 如果没有传入坐标点,则定位到当前所在位置

3. 定位成功要在右侧显示经纬度和地址

4. 可以通过拖动 标记 来调整定位点

5. 标记 拖动后,右侧要显示拖动后的经纬度和地址

6. 点击确定按钮,返回最后的坐标点和地名给父组件

三、 组件实现具体代码

<template>
 <div class="map-box" :style="{ width: width, height: height }">
 <div id="amap" class="amap"></div>
 <div class="detail">
  <p>经度:{{point ? point[0] : '-'}}</p>
  <p>纬度:{{point ? point[1] : '-'}}</p>
  <p>地址:{{address}}</p>
  <button size="mini" class="btnmap" @click="commit">确定</button>
 </div>
 </div> 
</template>
<script>
import AMap from 'AMap'
export default {
 props: {
 width: { type: String, default: '100%' },
 height: { type: String, default: '400px' },
 lnglat: {
  type: Array,
  validator: (value) => {
  return value.length === 2
  }
 }
 },
 data () {
 return { address: '', point: this.lnglat }
 },
 mounted () {
 this.init(this.point)
 },
 methods: {

 // 初始化
 init (lnglat) {

  // 地图实例对象 (amap 为容器的id)
  let amap = new AMap.Map('amap', {
  resizeEnable: true,
  zoom: 15
  })

  // 注入插件(定位插件,地理编码插件)
  amap.plugin(['AMap.Geolocation', 'AMap.Geocoder'])

  // 定位
  this.currentPosition(amap, lnglat)
 },

 currentPosition (map, lnglat) {
  if (lnglat) {
  // 有传入坐标点,直接定位到坐标点
  map.setCenter(lnglat)
  this.addMark(map, lnglat)

  // 获取地址
  this.getAddress(lnglat)
  } else {
  // 没有传入坐标点,则定位到当前所在位置
  let geolocation = new AMap.Geolocation({
   enableHighAccuracy: true,
   timeout: 10000,
   zoomToAccuracy: true,  
   buttonPosition: 'RB'
  })
  geolocation.getCurrentPosition((status, result) => {
   if (status === 'complete') {
   let points = [result.position.lng, result.position.lat]
   map.setCenter(points) // 设置中心点
   this.addMark(map, points) // 添加标记

   // 存下坐标与地址
   this.point = points
   this.getAddress(points)
   } else {
   console.log('定位失败', result)
   }
  })
  }
 },

 // 添加标记
 addMark (map, points) {
  let marker = new AMap.Marker({
  map: map,
  position: points,
  draggable: true, // 允许拖动
  cursor: 'move',
  raiseOnDrag: true
  })
  marker.on('dragend', (e) => {
  let position = marker.getPosition()

  // 存下坐标与地址
  this.point = [position.lng, position.lat]
  this.getAddress([position.lng, position.lat])
  })
 },

 // 根据坐标返回地址(逆地理编码)
 getAddress (points) {
  let geocoder = new AMap.Geocoder({ radius: 1000 })
  geocoder.getAddress(points, (status, result) => {
  if (status === 'complete' && result.regeocode) {
   this.address = result.regeocode.formattedAddress
  }
  })
 },

 commit () {
  this.$emit('location', this.point, this.address)
 }
 }
}
</script>

<style lang="scss" scoped>
.map-box {
 box-sizing: border-box;
 background-color: #ddd;
 padding: 15px;
 &:after {
 content: '';
 display: block;
 clear: both;
 }
 .amap, .detail {
 float: left;
 height: 100%;
 }
 .amap {
 width: 75%; 
 }
 .detail {
 width: 25%;
 background-color: #fff;
 padding: 0 15px; 
 border-left: 1px solid #eee;
 box-sizing: border-box;
 word-wrap: break-word;
 }
 .btnmap {
 width: 100%;
 margin: 30px 0 0 0;
 padding: 5px 0;
 color: #fff;
 cursor: pointer;
 background-color: #409eff;
 border: none; 
 border-radius: 3px;
 &:hover {
  background-color: #66b1ff;
 }
 }
}
</style>

四、调用组件

<template>
 <div class="box">
 <xmap width="700px" height="500px" :lnglat="[114.433703, 30.446243]" @location="location"></xmap>
 </div>
</template>
<script>
import xmap from '@/components/map'
export default {
 components: { xmap }, 
 methods: {
 location(point, address) {
  alert(`坐标:${point[0]},${point[1]} - 地址:${address}`)
 }
 }
}
</script>

总结

以上所述是小编给大家介绍的Vue组件之高德地图地址选择功能的实例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
初试jQuery EasyUI 使用介绍
Apr 01 Javascript
JavaScript类属性的访问方式详解
Feb 11 Javascript
原生javascript实现获取指定元素下所有后代元素的方法
Oct 28 Javascript
jQuery trigger()方法用法介绍
Jan 13 Javascript
浅谈jQuery中的事件
Mar 23 Javascript
jQuery自定义滚动条完整实例
Jan 08 Javascript
JavaScript判断表单为空及获取焦点的方法
Feb 12 Javascript
关于Angular2 + node接口调试的解决方案
May 28 Javascript
JS图片轮播与索引变色功能实例详解
Jul 06 Javascript
动手写一个angular版本的Message组件的方法
Dec 16 Javascript
node.js中express模块创建服务器和http模块客户端发请求
Mar 06 Javascript
前端vue+express实现文件的上传下载示例
Feb 18 Vue.js
如何提升vue.js中大型数据的性能
Jun 21 #Javascript
配置node服务器并且链接微信公众号接口配置步骤详解
Jun 21 #Javascript
微信小程序实现点击效果
Jun 21 #Javascript
JS利用prototype给类添加方法操作详解
Jun 21 #Javascript
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
Jun 21 #Javascript
微信小程序实现弹出菜单动画
Jun 21 #Javascript
js类的继承定义与用法分析
Jun 21 #Javascript
You might like
PHP开发框架总结收藏
2008/04/24 PHP
php程序之die调试法 快速解决错误
2009/09/17 PHP
ThinkPHP学习笔记(一)ThinkPHP部署
2014/06/22 PHP
Laravel 前端资源配置教程
2019/10/18 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
2020/01/02 PHP
javascript json 新手入门文档
2009/12/03 Javascript
颜色选择器 Color Picker,IE,Firefox,Opera,Safar
2010/11/25 Javascript
javascript 获取元素样式必杀技
2014/05/04 Javascript
$(&quot;&quot;).click与onclick的区别示例介绍
2014/09/25 Javascript
基于jQuery制作小图标上下滑动特效
2017/01/18 Javascript
jQuery中的一些小技巧
2017/01/18 Javascript
微信小程序 参数传递实例代码
2017/03/20 Javascript
JavaScript解析任意形式的json树型结构展示
2017/07/23 Javascript
谈谈VUE种methods watch和compute的区别和联系
2017/08/01 Javascript
JS实现把一个页面层数据传递到另一个页面的两种方式
2018/08/13 Javascript
js根据json数据中的某一个属性来给数据分组的方法
2018/10/08 Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
2019/05/30 Javascript
对node通过fs模块判断文件是否是文件夹的实例讲解
2019/06/10 Javascript
基于vue 实现表单中password输入的显示与隐藏功能
2019/07/19 Javascript
jquery css实现流程进度条
2020/03/26 jQuery
python中base64加密解密方法实例分析
2015/05/16 Python
Python连接数据库学习之DB-API详解
2017/02/07 Python
梯度下降法介绍及利用Python实现的方法示例
2017/07/12 Python
windows下python之mysqldb模块安装方法
2017/09/07 Python
matplotlib subplots 调整子图间矩的实例
2018/05/25 Python
三步实现Django Paginator分页的方法
2019/06/11 Python
Python文件操作基础流程解析
2020/03/19 Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
2020/05/20 Python
Nike挪威官网:Nike.com (NO)
2018/11/26 全球购物
巴西最大的巴士票务门户:Quero Passagem
2020/11/21 全球购物
给孩子的新年寄语
2014/04/08 职场文书
干部四风问题整改措施思想汇报
2014/10/13 职场文书
2014年社团工作总结范文
2014/11/27 职场文书
2014年小学图书室工作总结
2014/12/09 职场文书
对Golang中的FORM相关字段理解
2021/05/02 Golang
Nginx反向代理、重定向
2022/04/13 Servers