VUE——自动定位+拖拽选址+搜索选址

简介:

地图加载完成后,进行自动定位到设备当前所在位置(显示当前周边),拖拽地图进行选择地址,点击搜索按钮,搜索框内输入时会提示相关点,通过搜索结果进行搜索选择地址

组件部分:

< template >
< div >
< button  @click="addRadius" >增加范围 </ button >
< button  @click="startSearch" >搜索 </ button >
< p >{{address}} </ p >
< hr >
< div  class= "amap-page-container" >
< input  v-if="toSearch"  type= "text"  class= "search-input"  id= "search" >
< el-amap
vid= "amap"
:zoom="zoom"
class= "amap-demo"
:center="center"
:amapManager="amapManager"
:events="events"
>
< el-amap-circle
vid= "circle"
:center="center"
:radius="radius"
fill-opacity= "0.2"
strokeColor= "#38f"
strokeOpacity= "0.8"
strokeWeight= "1"
fillColor= "#38f"
>
</ el-amap-circle >
</ el-amap >
</ div >
< ul >
< li  v-for="item  in result"  :key="item.id" >{{item.name}} </ li >
</ ul >
</ div >
</ template >

注:el-amap-circle只是为了更直观的看到效果,可以省略。

< style  scoped >
.amap-page-container {
height300px;
position: relative;
}
.search-input{
border1px solid red;
position: absolute;
z-index5;
width80%;
left10%;
padding5px;
}
.toolbar{
margin-top15px;
}
</ style >

js部分:

< script >
import {AMapManager}  from  "vue-amap"
let amapManager= new AMapManager();
export  default {
data() {
let vm =  this;
return {
zoom: 16,
center: [ 121.329402, 31.228667],
result:[],
address: "",
radius: 100,
toSearch: false,
amapManager,
map: null,
events:{
init(o){
vm.map=o;
//方法一
// AMapUI.loadUI(['misc/PositionPicker'], function(PositionPicker) {
// var positionPicker = new PositionPicker({
// mode: 'dragMap',
// map: o
// });
// positionPicker.on('success', function(positionResult){
// vm.result=positionResult.regeocode.pois;
// vm.address=positionResult.regeocode.formattedAddress;
// vm.center=[positionResult.position.lng,positionResult.position.lat]
// })
// positionPicker.start();
// })
}
}
};
},
watch:{
map: function(){
if( this.map!= null){
this.startDrag();
}
}
},
methods:{
startDrag(){ //方法二
let vm= this;
let map= this.amapManager.getMap();
AMapUI.loadUI([ 'misc/PositionPicker'],  function(PositionPicker) {
var positionPicker =  new PositionPicker({
mode:  'dragMap',
map: map
});
//定位
let geolocation;
map.plugin( 'AMap.Geolocation'function () {
geolocation= new AMap.Geolocation({
showButton:  true//显示定位按钮,默认:true
showMarker:  false//定位成功后在定位到的位置显示点标记,默认:true
extensions: 'all'
})
map.addControl(geolocation);
geolocation.getCurrentPosition();
AMap.event.addListener(geolocation,  'complete'function(data){
positionPicker.start();
}); //返回定位信息
})
positionPicker.on( 'success'function(positionResult){
vm.result=positionResult.regeocode.pois;
vm.address=positionResult.regeocode.formattedAddress;
vm.center=[positionResult.position.lng,positionResult.position.lat]
})
positionPicker.on( 'fail'function(failResult){
console.log(failResult)
})
// positionPicker.start();
})
},
addRadius(){
this.radius+= 10;
},
startSearch() {
let vm= this;
let map= this.amapManager.getMap();
this.toSearch= true;
AMapUI.loadUI([ 'misc/PoiPicker'],  function(PoiPicker) {
var poiPicker =  new PoiPicker({
input:  'search'//输入框id
});
//监听poi选中信息
poiPicker.on( 'poiPicked'function(poiResult) {
//用户选中的poi点信息
vm.center=[poiResult.item.location.lng,poiResult.item.location.lat]
});
});
},
}
};
</ script >

说明:

    拖拽选点使用的是UI组件里面的misc/PositionPicker,new一个positionPicker实例,对拖拽进行配置,可以选择拖拽地图还是marker,具体配置请自行参照参考手册点击打开链接,此处以拖拽地图为例,

positionPicker实例有success方法和fail方法,分别对应拖拽选址成功和失败,返回的参数为拖拽后的地址以及周边,失败信息。
定义好后,positionPicker.start(),则可以开始拖拽(若不调用开始方法,则无法进行拖拽)
有两种写法(JS中已经给注释)
1,地图加载完成后,即在init方法中,直接进行定义
2,地图init完成后  记录当前map实例,监控map实例,若map初始化完成,则调用方法,进行相关操作
此处以第2中为例

监控map实例,当map实例存在时,将中心点定位到当前设备所在地点,定位成功后启动拖拽选择功能

拓展:

若只使用定位功能

可以在el-amap上绑定plugin属性,

:plugin="plugin"

在data中进行定位插件绑定,配置定位的参数

// plugin: [{ //方法一
// pName: 'Geolocation',
// events: {
// init(o) {
// // o 是高德地图定位插件实例
// o.getCurrentPosition((status, result) => {
// console.log(status);
// console.log(result);
// if (result && result.position) {
// self.lng = result.position.lng;
// self.lat = result.position.lat;
// self.center = [self.lng, self.lat];
// self.loaded = true;
// self.$nextTick();
// }
// });
// }
// }
// }]


搜索

此处使用的是UI组件里面的'misc/PoiPicker' new一个PoiPicker实例并绑定搜索框,选中的搜索出来的某一条结果,讲改结果的经纬路设为中心点,即可实现搜索选择地址的效果

效果如下:


此案例的git地址:前往git

原文发布时间:
原文作者:kindCoder
本文来源CSDN博客如需转载请紧急联系作者

相关文章
|
1天前
|
JavaScript
Vue学习之--------深入理解Vuex之多组件共享数据(2022/9/4)
这篇文章通过一个实际的Vue项目案例,演示了如何在Vuex中实现多组件间共享数据。文章内容包括在Vuex的state中新增用户数组,创建Person.vue组件用于展示和添加用户信息,以及在Count组件中使用Person组件操作的数据。通过测试效果展示了组件间数据共享和状态更新的流程。
Vue学习之--------深入理解Vuex之多组件共享数据(2022/9/4)
|
1天前
|
JavaScript
Vue学习之--------深入理解Vuex之模块化编码(2022/9/4)
这篇文章详细介绍了Vuex的模块化编码和命名空间的使用,旨在让代码更易于维护并提高数据分类的明确性。内容包括模块化和命名空间的概念、如何在store中配置模块、以及如何在组件中使用模块化的数据。文章通过实战项目案例,展示了如何拆分`store/index.js`文件,创建`count.js`和`person.js`模块,并在`Count.vue`和`Person.vue`组件中使用这些模块。最后,文章还提供了测试效果和一些使用注意点。
Vue学习之--------深入理解Vuex之模块化编码(2022/9/4)
|
1天前
|
JavaScript 前端开发 开发者
Vue学习之--------深入理解Vuex、原理详解、实战应用(2022/9/1)
这篇文章详细介绍了Vuex的基本概念、使用场景、安装配置、基本用法、实际应用案例以及注意事项,通过一个数字累加器的实战示例,帮助开发者深入理解Vuex的原理和应用。
|
1天前
|
存储 JavaScript API
vue后台管理权限码处理
【8月更文挑战第19天】vue后台管理权限码处理
8 0
|
1天前
|
JavaScript
Vue学习之--------深入理解Vuex之getters、mapState、mapGetters(2022/9/3)
这篇文章深入探讨了Vuex中的getters概念和用法,以及如何通过mapState、mapGetters、mapActions和mapMutations四个辅助函数简化组件中的Vuex状态访问和操作,通过实际项目案例展示了这些概念的应用和效果。
|
4天前
|
JavaScript
Vue中如何设置在执行删除等危险操作时给用户提示(二次确认后执行对应的操作)
这篇文章介绍了在Vue项目中如何实现执行删除等危险操作时的二次确认机制,使用Element UI的`el-popconfirm`组件来弹出确认框,确保用户在二次确认后才会执行删除操作。
Vue中如何设置在执行删除等危险操作时给用户提示(二次确认后执行对应的操作)
|
4天前
|
JavaScript
如何创建一个Vue项目(手把手教你)
这篇文章是一篇手把手教读者如何创建Vue项目的教程,包括使用管理员身份打开命令行窗口、找到存放项目的位置、通过vue-cli初始化项目、填写项目信息、进入项目目录、启动项目等步骤,并提供了一些常见第三方库的引入方法。
如何创建一个Vue项目(手把手教你)
|
4天前
|
前端开发
StringBoot+Vue实现游客或用户未登录系统前、可以浏览商品等信息、但是不能购买商品或者加入购物车等操作。登录系统显示用户的登录名(源码+讲解)
这篇文章介绍了使用StringBoot+Vue实现用户登录状态判断的方法,包括前端加载用户信息和后端设置session的源码示例。
|
1天前
|
JavaScript
Vue学习之--------路由的query、params参数、路由命名(3)(2022/9/5)
这篇文章详细介绍了Vue路由中的query参数、命名路由、params参数以及props配置的使用方式,并通过实际项目案例展示了它们在开发中的应用和测试结果,同时解释了`<router-link>`的`replace`属性如何影响浏览器历史记录。
Vue学习之--------路由的query、params参数、路由命名(3)(2022/9/5)
|
1天前
|
JavaScript
Vue学习之--------VueX(2022/8/31)
这篇文章是关于VueX的基础知识介绍,涵盖了VueX中的state、mutations、getters和actions的定义和使用,以及Action提交mutation而非直接变更状态,以及mutations的同步执行特性。
Vue学习之--------VueX(2022/8/31)