1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/onlymry-vue-antd-admin

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
Tmap.vue 5.6 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
yanlitian Отправлено 5 лет назад 597ce7f
<template>
<div class="tmap">
<div class="btn">
<button @click="getMapCenter">获取中心</button>
<button @click="change2D">2D视图</button>
<button @click="change3D">3D视图</button>
<div>
<input type="text" placeholder="请输入地名" v-model="keywords" />
<button @click="searchEvent">搜索</button>
</div>
</div>
<div class="map" id="container" ref="tmap" style="height:400px"></div>
</div>
</template>
<script>
import jsonp from "jsonp";
export default {
name: "TMap",
data() {
return {
map: {},
center: {},
TMap: {},
marker: {},
keywords: ""
};
},
props: {
tMapKey: {
default: "OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77",
type: String
}
},
mounted() {
this.$nextTick(() => {
this.loadScript(() => {
setTimeout(()=>{
this.initTMap();
},200)
});
});
},
methods: {
initTMap() {
// this.$refs.tmap
// 获取地图ContainerDom
let tMapDom = document.getElementById("container");
// 把挂载在window上面的Tmap对象放到组件内部
this.TMap = window.TMap;
window.console.log(tMapDom);
// 初始化地图中心
let defaultcenter = new this.TMap.LatLng(
25.031639292195205,
102.66665434472793
);
// 创建地图对象
this.map = new this.TMap.Map(tMapDom, {
center: defaultcenter, //设置地图中心点坐标
zoom: 17, //设置地图缩放级别
pitch: 43.5, //设置俯仰角
rotation: 45 //设置地图旋转角度
});
this.createMarker(defaultcenter);
// 创建信息窗口
let info = new this.TMap.InfoWindow({
map: this.map,
position: this.map.getCenter(),
offset: { x: -3, y: -35 } //向上偏移35像素坐标,向左偏移3像素坐标
}).close();
// 监听地图点击事件
this.map.on("click", event => {
// var lat = evt.latLng.getLat();
// var lng = evt.latLng.getLng();
window.console.log(event);
// 设置当前地图中心点
this.setMapCenter(event.latLng);
// 如果存在marker伤处marker
if (this.marker) {
this.marker.setMap(null);
this.marker = null;
}
// 重新创建marker
this.createMarker(event.latLng);
let poi = event.poi;
if (poi) {
// 拾取到POI
// 设置信息窗口
info
.setContent(poi.name)
.setPosition(poi.latLng)
.open();
} else {
// 没有拾取到POI
info.close();
}
});
},
// 地点搜索
searchEvent() {
// https://apis.map.qq.com/ws/place/v1/search?keyword=酒店&boundary=nearby(39.908491,116.374328,1000)&key=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77
// https://apis.map.qq.com/ws/place/v1/search
jsonp(
`https://apis.map.qq.com/ws/place/v1/search?keyword=${this.keywords}&key=${this.tMapKey}&boundary=region(云南,0)`,
null,
(err, data) => {
if (err) {
console.error(err.message);
} else {
console.log(data);
}
}
);
},
// 创建信息窗口
// 创建marker
createMarker(defaultcenter) {
this.marker = new this.TMap.MultiMarker({
id: "marker-layer", //图层id
map: this.map,
styles: {
//点标注的相关样式
marker: new this.TMap.MarkerStyle({
width: 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: defaultcenter,
properties: {
title: "marker"
}
}
]
});
},
// 2d视角
change2D() {
this.map.setViewMode("2D");
},
// 3D视角
change3D() {
this.map.setViewMode("3D");
//设置斜角
this.map.setPitch(70);
},
// 获取中心
// 也就是初始化的位置
getMapCenter() {
window.console.log(this.map.getCenter());
this.setMapCenter(this.map.getCenter());
},
// 设置中心位置
setMapCenter(center) {
window.console.log(center);
// 平滑移动到某个位置
this.map.easeTo(
{
center: new this.TMap.LatLng(center.getLat(), center.getLng()),
zoom: 17,
rotation: 90
},
{ duration: 2000 }
);
},
// 加载javascript GL SDK
loadScript(callback) {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = `https://map.qq.com/api/gljs?v=1.exp&key=${this.tMapKey}&callback=init`;
document.body.appendChild(script);
if (script.readyState) {
//IE
//这里只有反人类设计的IE才有
script.onreadystatechange = function() {
if (
script.readyState == "complete" ||
script.readyState == "loaded"
) {
script.onreadystatechange = null;
//callback&&callback()是判断传入的回调函数是不是空的如果是空的就不执行,如果不是空的就执行
callback && callback();
}
};
} else {
//非IE
script.onload = function() {
callback && callback();
};
}
}
},
destroyed() {
this.map.destroy();
}
};
</script>
<style>
</style>

Комментарий ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/onlymry-vue-antd-admin.git
git@gitlife.ru:oschina-mirror/onlymry-vue-antd-admin.git
oschina-mirror
onlymry-vue-antd-admin
onlymry-vue-antd-admin
dev