vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
1.首先在index.html引入高德地图的秘钥。如图:
注意:如果使用关键字搜索功能要加上plugin=AMap.Autocomplete,AMap.PlaceSearch,否则功能无法使用,并会报错
2.定位功能,代码如下:
constmap=newAMap.Map(this.$refs.container,{
resizeEnable:true
})//创建Map实例
constoptions={
'showButton':true,//是否显示定位按钮
'buttonPosition':'LB',//定位按钮的位置
'buttonOffset':newAMap.Pixel(10,20),//定位按钮距离对应角落的距离
'showMarker':true,//是否显示定位点
'showCircle':true,//是否显示定位精度圈
'circleOptions':{//定位精度圈的样式
'strokeColor':'#0093FF',
'noSelect':true,
'strokeOpacity':0.5,
'strokeWeight':1,
'fillColor':'#02B0FF',
'fillOpacity':0.25
},
zoomToAccuracy:true//定位成功后是否自动调整地图视野到定位点
}
AMap.plugin(['AMap.Geolocation'],function(){
constgeolocation=newAMap.Geolocation(options)
map.addControl(geolocation)
geolocation.getCurrentPosition()
})
//下面是点击地图时加入mark。注意:要在绑定事件前记录this,否则在绑定的回调方法中使用this将是该事件的this
const_this=this
AMap.event.addListener(map,'click',function(e){
map.clearMap()//清除地图上所有添加的覆盖物
newAMap.Marker({
position:e.lnglat,
map:map
})
_this.handleMap(e.lnglat.getLng(),e.lnglat.getLat())
})
3.关键字搜索功能
html部分代码(注意ref,id,class的名字要和官网保持一致,否则可能出不来想要的效果):
script代码:
exportdefault{
name:'Map',
props:[],
data(){
return{
placeSearch:null
}
},
mounted(){
this.mapInit()
},
methods:{
mapInit(){
constmap=newAMap.Map(this.$refs.container,{
resizeEnable:true
})//创建Map实例
constoptions={
'showButton':true,//是否显示定位按钮
'buttonPosition':'LB',//定位按钮的位置
'buttonOffset':newAMap.Pixel(10,20),//定位按钮距离对应角落的距离
'showMarker':true,//是否显示定位点
'showCircle':true,//是否显示定位精度圈
'circleOptions':{//定位精度圈的样式
'strokeColor':'#0093FF',
'noSelect':true,
'strokeOpacity':0.5,
'strokeWeight':1,
'fillColor':'#02B0FF',
'fillOpacity':0.25
},
zoomToAccuracy:true//定位成功后是否自动调整地图视野到定位点
}
//注意:要在绑定事件前记录this,否则在绑定的回调方法中使用this将是该事件的this
const_this=this
//输入提示
constautoOptions={
input:'tipinput'
}
constauto=newAMap.Autocomplete(autoOptions)
this.placeSearch=newAMap.PlaceSearch({
map:map
})//构造地点查询类
AMap.event.addListener(auto,'select',this.select)//注册监听,当选中某条记录时会触发
//点击搜索出的mark点事件
AMap.event.addListener(this.placeSearch,'markerClick',function(e){
_this.$emit('bMapDate',e.data.location.lng,e.data.location.lat)
})
},
select(e){
this.placeSearch.setCity(e.poi.adcode)
this.placeSearch.search(e.poi.name)//关键字查询查询
},
handleMap(o,a){
this.$emit('bMapDate',o,a)
}
}
}
整体完成代码: