html高德搜索引擎,vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)...

本文详细介绍了在Vue项目中如何使用高德地图进行地图定位及关键字搜索功能,包括引入秘钥、配置选项、监听事件及处理结果等关键步骤,同时也分享了在实际开发中遇到的问题及解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)

发布时间:2020-09-26 00:02:16

来源:脚本之家

阅读:164

作者:MrsTing

1.首先在index.html引入高德地图的秘钥。如图:

e2f10581bbeb37c6c354b930169ac207.png

注意:如果使用关键字搜索功能要加上plugin=AMap.Autocomplete,AMap.PlaceSearch,否则功能无法使用,并会报错

2. 定位功能,代码如下:

const map = new AMap.Map(this.$refs.container, {

resizeEnable: true

}) // 创建Map实例

const options = {

'showButton': true, // 是否显示定位按钮

'buttonPosition': 'LB', // 定位按钮的位置

'buttonOffset': new AMap.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() {

const geolocation = new AMap.Geolocation(options)

map.addControl(geolocation)

geolocation.getCurrentPosition()

})

//下面是点击地图时加入mark。注意:要在绑定事件前记录this,否则在绑定的回调方法中使用this将是该事件的this

const _this = this

AMap.event.addListener(map, 'click', function(e) {

map.clearMap() // 清除地图上所有添加的覆盖物

new AMap.Marker({

position: e.lnglat,

map: map

})

_this.handleMap(e.lnglat.getLng(), e.lnglat.getLat())

})

3.关键字搜索功能

html部分代码(注意ref,id,class的名字要和官网保持一致,否则可能出不来想要的效果):

请输入关键字:

script代码:

export default {

name: 'Map',

props: [],

data() {

return {

placeSearch: null

}

},

mounted() {

this.mapInit()

},

methods: {

mapInit() {

const map = new AMap.Map(this.$refs.container, {

resizeEnable: true

}) // 创建Map实例

const options = {

'showButton': true, // 是否显示定位按钮

'buttonPosition': 'LB', // 定位按钮的位置

'buttonOffset': new AMap.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

// 输入提示

const autoOptions = {

input: 'tipinput'

}

const auto = new AMap.Autocomplete(autoOptions)

this.placeSearch = new AMap.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)

}

}

}

整体完成代码:

请输入关键字:

export default {

name: 'Map',

props: [],

data() {

return {

placeSearch: null

}

},

mounted() {

this.mapInit()

},

methods: {

mapInit() {

const map = new AMap.Map(this.$refs.container, {

resizeEnable: true

}) // 创建Map实例

const options = {

'showButton': true, // 是否显示定位按钮

'buttonPosition': 'LB', // 定位按钮的位置

'buttonOffset': new AMap.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() {

const geolocation = new AMap.Geolocation(options)

map.addControl(geolocation)

geolocation.getCurrentPosition()

})

const _this = this

AMap.event.addListener(map, 'click', function(e) {

map.clearMap() // 清除地图上所有添加的覆盖物

new AMap.Marker({

position: e.lnglat,

map: map

})

_this.handleMap(e.lnglat.getLng(), e.lnglat.getLat())

})

// 输入提示

const autoOptions = {

input: 'tipinput'

}

const auto = new AMap.Autocomplete(autoOptions)

this.placeSearch = new AMap.PlaceSearch({

map: map

}) // 构造地点查询类

AMap.event.addListener(auto, 'select', this.select)// 注册监听,当选中某条记录时会触发

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)

}

}

}

.map-chart{

position: relative;

margin-bottom:15px;

width: 100%;

height: 400px;

border: 1px #dddddd solid;

}

/deep/ .amap-logo,/deep/ .amap-copyright {

display: none!important;

}

#container {

margin-bottom:15px;

width: 100%;

height: 400px;

border: 1px #dddddd solid;

z-index: 99999999;

}

.button-group {

position: absolute;

bottom: 20px;

right: 20px;

font-size: 12px;

padding: 10px;

}

.button-group .button {

height: 28px;

line-height: 28px;

background-color: #0D9BF2;

color: #FFF;

border: 0;

outline: none;

padding-left: 5px;

padding-right: 5px;

border-radius: 3px;

margin-bottom: 4px;

cursor: pointer;

}

.button-group .inputtext {

height: 26px;

line-height: 26px;

border: 1px;

outline: none;

padding-left: 5px;

padding-right: 5px;

border-radius: 3px;

margin-bottom: 4px;

cursor: pointer;

}

#tip {

background-color: #fff;

padding-left: 10px;

padding-right: 10px;

position: absolute;

font-size: 12px;

right: 10px;

top: 20px;

border-radius: 3px;

border: 1px solid #ccc;

line-height: 30px;

}

.amap-info-content {

font-size: 12px;

}

#myPageTop {

position: absolute;

top: 5px;

right: 10px;

background: #fff none repeat scroll 0 0;

border: 1px solid #ccc;

margin: 10px auto;

padding:6px;

font-family: "Microsoft Yahei", "微软雅黑", "Pinghei";

font-size: 14px;

z-index: 99999999;

}

#myPageTop label {

margin: 0 20px 0 0;

color: #666666;

font-weight: normal;

}

#myPageTop input {

width: 170px;

}

#myPageTop .column2{

padding-left: 25px;

}

由于我在项目中使用了dialog,搜索出来的结果会在蒙版后面显示,去掉scope和加/deep/、>>>都没用,最后在index.html加样式。代码如下:

.amap-sug-result {

z-index: 2999!important;

}

效果:

6ebb95b0e3c61821fd614db7546f4065.png

以上就是踩了无数坑总结出来的经验。。。

到此这篇关于vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)的文章就介绍到这了,更多相关vue 高德地图定位搜索内容请搜索亿速云以前的文章或继续浏览下面的相关文章希望大家以后多多支持亿速云!

Vue项目集成高德地图并实现定位搜索功能,首先需要在index.html中引入高德地图API并正确设置插件参数。以下是如何通过高德地图的JavaScript API实现定位功能的示例代码:(代码示例,参数说明,mermaid流程图,扩展内容,此处略) 参考资源链接:[Vue项目高德地图定位关键字搜索实例与实战教程](https://wenku.csdn.net/doc/6401aba0cce7214c316e8eb3) 在实现关键字搜索功能时,你需要使用AMap.Autocomplete和AMap.PlaceSearch插件。当用户输入关键字时,可以使用这些插件提供的方法来获取搜索结果,并将结果显示在地图上。搜索功能的实现也需要考虑错误处理和用户体验的优化。例如,在搜索结果较多时,可以使用地图标记来高亮显示结果点,并提供滚动或筛选的选项给用户。请确保在开发过程中,注意代码的可维护性和性能优化,这对于大型项目来说尤为重要。 关于常见的问题解决策略,你可以参考《Vue项目高德地图定位关键字搜索实例与实战教程》这本书。它不仅为你提供了实现上述功能实例代码,还详细介绍了在实战中可能遇到的问题和解决方法。通过学习这些内容,你可以更快地掌握如何在Vue项目集成使用高德地图,并有效避免常见的开发陷阱。 参考资源链接:[Vue项目高德地图定位关键字搜索实例与实战教程](https://wenku.csdn.net/doc/6401aba0cce7214c316e8eb3)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值