参考网址:
https://lbs.qq.com/service/webService/webServiceGuide/webServiceOverview
https://blog.csdn.net/l13620804253/article/details/117259244
https://www.jianshu.com/p/d331f3449a78

1、腾讯位置服务申请密钥
2、vue项目index.html引入
<script src="https://map.qq.com/api/gljs?v=1.exp&key=申请的密钥"></script>
3、引入jsonp
1)安装vue-jsonp:
cnpm install vue-jsonp --save
2)在main.js中导入
import { VueJsonp } from 'vue-jsonp'
Vue.use(VueJsonp)
4、封装组件
<template>
<div class="Map">
<div class="search_Map">
<input type="text" v-model="value" @input="search(value)" />
<div class="content">
<p v-for="(i, index) in addressList" :key="index" @click="select(i)">
{{ i.title }}
<span class="address">{{ i.address }}</span>
</p>
</div>
</div>
<div id="container"></div>
</div>
</template>
<script>
// https://lbs.qq.com/webApi/component/componentGuide/componentGeolocation
export default {
name: "TXMap", //腾讯地图
props: {
latitude: {
type: [Number, String],
required: true,
default: "",
},
longitude: {
type: [Number, String],
required: true,
default: "",
},
},
data() {
return {
value: "", //搜索内容
addressList: [], //搜索结果
selectValue: {}, //选择的某个结果
timeout: null, //搜索定时器
map: null,
marker: null,
};
},
mounted() {
this.initMap();
},
methods: {
//初始化地图
initMap() {
var center = new TMap.LatLng(this.latitude, this.longitude);
//初始化地图
this.map = new TMap.Map("container", {
rotation: 20, //设置地图旋转角度
pitch: 0, //设置俯仰角度(0~45)
zoom: 16, //设置地图缩放级别
center: center, //设置地图中心点坐标
});
},
//地址搜索
search(value) {
this.addressList = [];
clearTimeout(this.timeout);
if (value) {
let that = this;
this.timeout = setTimeout(() => {
that
.$jsonp("https://apis.map.qq.com/ws/place/v1/suggestion/", {
key: "申请的密钥",
output: "jsonp",
keyword: value,
})
.then((res) => {
console.log(res);
if (res.status === 0 && res.data) {
that.addressList = res.data;
}
})
.catch((e) => {
console.log(e);
});
}, 500);
}
},
//选择对应搜索地址
select(row) {
console.log(">>>select:", row);
this.$emit("addressInfo", row);
this.selectValue = row.location;
this.addressList = [];
let self = this;
//更新地图中心位置
self.map.setCenter(
new TMap.LatLng(this.selectValue.lat, this.selectValue.lng)
);
//判断是否存在标记点,有的话清空
if (self.marker) {
self.marker.setMap(null);
self.marker = null;
}
//初始化marker
self.marker = new TMap.MultiMarker({
id: "marker-layer", //图层id
map: self.map,
styles: {
//点标注的相关样式
marker: new TMap.MarkerStyle({
25,
height: 35,
anchor: { x: 16, y: 32 },
src: "https://mapapi.qq.com/web/lbs/javascriptGL/demo/img/markerDefault.png",
}),
},
geometries: [
{
//点标注数据数组
id: "demo",
styleId: "marker",
position: new TMap.LatLng(
self.selectValue.lat,
self.selectValue.lng
),
properties: {
title: "marker",
},
},
],
});
},
},
};
</script>
<style lang="scss" scoped>
.Map {
position: relative;
margin-bottom: 10px;
.search_Map {
position: absolute;
left: 20px;
top: 20px;
z-index: 99009;
input {
border: 1px solid #f1f1f1;
display: inline-block;
400px;
height: 40px;
padding: 10px;
color: #5a5a5a;
background: rgba(255, 255, 255, 0.904);
}
.content {
400px;
background: rgba(252, 250, 250, 0.918);
border: 1px solid #f1f1f1;
border-top: none;
font-size: 13px;
color: #5a5a5a;
max-height: 350px;
overflow-y: auto;
p {
display: inline-block;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
380px;
border-bottom: 1px solid #f1f1f1;
padding: 15px 10px;
margin: 0;
cursor: pointer;
&:hover {
background: #eff6fd;
}
.address {
font-size: 12px;
color: #b9b9b9;
margin-left: 20px;
}
}
}
}
}
#container {
min- 800px;
100%;
height: 400px;
}
</style>
4、使用
<TXMap :latitude="latitude" :longitude="longitude" @addressInfo="addressInfo" /> import TXMap from "@/components/TXMap";