vue 高德地图搜索功能_Vue中使用高德地图POI搜索

该博客介绍了如何在Vue项目中动态加载高德地图,并实现POI搜索功能。通过loadMap.js文件加载地图及插件,使用AMap.Autocomplete和AMap.PlaceSearch插件进行地点搜索。在组件的mounted生命周期钩子中初始化地图,监听搜索事件并显示坐标。遇到的问题包括某些高德地图key导致输入提示无效,以及回调函数this指向问题,解决方法是更换有效key和使用箭头函数确保this正确指向。
摘要由CSDN通过智能技术生成

创建 loadMap.js

/**

* 动态加载高德地图

*

* @export

* @param {*} key 高德地图key

* @param {*} plugins 高德地图插件

* @param {string} [v='1.4.14'] 高德地图版本

* @returns

*/

export default function loadMap(key, plugins, v = '1.4.14') {

return new Promise(function(resolve, reject) {

if (typeof AMap !== 'undefined') {

// eslint-disable-next-line no-undef

resolve(AMap)

return true

}

window.onCallback = function() {

// eslint-disable-next-line no-undef

resolve(AMap)

}

let script = document.createElement('script')

script.type = 'text/javascript'

script.src = `https://webapi.amap.com/maps?v=${v}&key=${key}&plugin=${plugins}&callback=onCallback`

script.onerror = reject

document.head.appendChild(script)

})

}

在.vue页面中引入loadMap.js

import loadMap from "../assets/js/loadMap";

html模板

用到的2个插件  "AMap.Autocomplete", "AMap.PlaceSearch",

import loadMap from "../assets/js/loadMap";

export default {

name: "barChart",

data() {

return {

inputContent: "",

// 地图实例

GDMap: null,

// 加载的一些插件

// 更多参考:https://lbs.amap.com/api/javascript-api/guide/abc/plugins#plugins

plugins: [

"AMap.Autocomplete",

"AMap.PlaceSearch",

"AMap.OverView",

"AMap.MouseTool",

"AMap.PolyEditor",

"AMap.RectangleEditor",

="AMap.DistrictLayer",

"AMap.CustomLayer"

],

// key

key: "3862bb74758c8d185100ed5df030949d",

//key: "64c880093eda5bd293e4d5c324e5131b", Autocomplete没有效果

// 地图版本

v: "1.4.4"

};

},

mounted() {

loadMap(this.key, this.plugins, this.v)

.then(AMap => {

this.GDMap = new AMap.Map("GDMap", {

zoom: 10

//center: [119.947, 31.7728]

});

this.GDMap.on("complete", () => {

console.log("completed");

var auto = new AMap.Autocomplete({

input: "tipinput"

});

var placeSearch = new AMap.PlaceSearch({

map: this.GDMap

}); //构造地点查询类

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

AMap.event.addListener(placeSearch,"markerClick",(e)=>{

console.log(e.data.location.lng,e.data.location.lat) // 经纬度

})

function select(e) {

placeSearch.setCity(e.poi.adcode);

placeSearch.search(e.poi.name); //关键字查询查询

}

});

})

.catch(() => {

console.log("地图加载失败!");

});

},

methods: {}

};

#panel {

position: absolute;

background-color: white;

max-height: 90%;

overflow-y: auto;

top: 10px;

right: 10px;

width: 280px;

}

遇到的问题:有的key会使输入提示无效,换个key 就好了。官网的例子回调函数要改成箭头函数,否则this指向会有问题。

来源:oschina

链接:https://my.oschina.net/u/2612473/blog/4325720

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值