343 lines
9.6 KiB
Vue
343 lines
9.6 KiB
Vue
<template>
|
||
<view class="page-body">
|
||
<div id="txMapContainer" style="width: 100%;height: 100%;"> </div>
|
||
<div style="display: none;">
|
||
<view id="popView">
|
||
<!-- <view><image src="../../../static/logo.png"/></view> -->
|
||
<view><image src="https://mapapi.qq.com/web/lbs/javascriptGL/demo/img/em.jpg"/></view>
|
||
<view>姓名:张三</view>
|
||
<view>页面更新标志:{{ address }}</view>
|
||
<view>
|
||
<u-button>查看</u-button>
|
||
<u-button>选择</u-button>
|
||
</view>
|
||
</view>
|
||
</div>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import commonConfig from 'common/config.js';
|
||
export default {
|
||
data() {
|
||
return {
|
||
myId: uni.getStorageSync('userId') ? uni.getStorageSync('userId') : '',
|
||
//地图相关
|
||
latitude: '43.86487',
|
||
longitude: '',
|
||
address: '',
|
||
mapScale: 16, // 地图默认放大倍数
|
||
markers: [], // 地图上markers列表
|
||
cmap: null, //当前的map对象
|
||
infoWindow: null,
|
||
marker: null,
|
||
socketConnect: null,
|
||
pointMap: {},//点map
|
||
pointThread: null,
|
||
massageTypeId: null,
|
||
}
|
||
},
|
||
onLoad(e) {
|
||
let that = this;
|
||
that.massageTypeId = e.massageTypeId;
|
||
that.getLocation();
|
||
},
|
||
onReady(){
|
||
console.log('this ->',this,uni);
|
||
this.initMap();
|
||
this.initMapPointThread();
|
||
},
|
||
onShow() {
|
||
},
|
||
onUnload() {
|
||
this.closeSocket();
|
||
},
|
||
methods: {
|
||
log(...d){
|
||
console.log(this,...d);
|
||
},
|
||
getLocation(){
|
||
let that = this;
|
||
//获取地理坐标
|
||
uni.getLocation({
|
||
// type: 'wgs84',
|
||
type: 'gcj02',
|
||
//isHighAccuracy: true,
|
||
success: function(res) {
|
||
let longitude = res.longitude;
|
||
let latitude = res.latitude;
|
||
console.log('当前位置的经度:' + longitude);
|
||
console.log('当前位置的纬度:' + latitude);
|
||
getApp().globalData['longitude'] = longitude;
|
||
getApp().globalData['latitude'] = latitude;
|
||
|
||
console.log('定位成功',latitude, longitude);
|
||
if(that.cmap){
|
||
that.cmap.setCenter(new TMap.LatLng(latitude, longitude));
|
||
}
|
||
if(that.infoWindow){
|
||
that.infoWindow.setPosition(new TMap.LatLng(latitude, longitude));
|
||
}
|
||
}
|
||
});
|
||
//读取缓存里面的经纬度
|
||
let longitude = getApp().globalData['longitude'] || -1;
|
||
let latitude = getApp().globalData['latitude'] || -1;
|
||
return { latitude, longitude };
|
||
},
|
||
initMap() {
|
||
let that = this;
|
||
//读取缓存里面的经纬度
|
||
let longitude = getApp().globalData['longitude'] || -1;
|
||
let latitude = getApp().globalData['latitude'] || -1;
|
||
|
||
let center = new TMap.LatLng(latitude, longitude);//设置中心点坐标
|
||
//初始化地图
|
||
let map = new TMap.Map("txMapContainer", {
|
||
center: center
|
||
});
|
||
//初始化infoWindow
|
||
var infoWindow = that.creatInfoWindow(map);
|
||
that.infoWindow = infoWindow;
|
||
that.cmap = map;
|
||
that.address = Math.random()
|
||
|
||
let marker = that.creatMarker(map);
|
||
that.marker = marker;
|
||
console.log('marker ->',marker);
|
||
|
||
infoWindow.close();//初始关闭信息窗关闭
|
||
},
|
||
creatInfoWindow(map){
|
||
//读取缓存里面的经纬度
|
||
let longitude = getApp().globalData['longitude'] || -1;
|
||
let latitude = getApp().globalData['latitude'] || -1;
|
||
return new TMap.InfoWindow({
|
||
map,
|
||
position: new TMap.LatLng(latitude, longitude),
|
||
offset: { x: 0, y: -32 } //设置信息窗相对position偏移像素
|
||
});
|
||
},
|
||
creatMarker(map){
|
||
let that = this;
|
||
let geometries = [];
|
||
Object.keys(that.pointMap).forEach(k => {
|
||
let data = that.pointMap[k];
|
||
if(data){
|
||
let xy = data.split(',');
|
||
let x = Number(xy[0]);
|
||
let y = Number(xy[1]);
|
||
geometries.push({
|
||
id: k,
|
||
styleId: 'marker',
|
||
position: new TMap.LatLng(x, y),
|
||
properties: {
|
||
title: "marker"
|
||
}
|
||
});
|
||
}
|
||
});
|
||
//初始marker
|
||
let marker = new TMap.MultiMarker({
|
||
id: 'marker-layer',
|
||
map,
|
||
styles: {
|
||
"marker": new TMap.MarkerStyle({
|
||
"width": 24,
|
||
"height": 35,
|
||
"anchor": { x: 12, y: 35 },
|
||
"src": 'https://mapapi.qq.com/web/lbs/javascriptGL/demo/img/markerDefault.png'
|
||
})
|
||
},
|
||
geometries,
|
||
});
|
||
//监听标注点击事件
|
||
let infoWindow = that.infoWindow;
|
||
marker.on("click", function (evt) {
|
||
//设置infoWindow
|
||
that.address = Math.random()
|
||
infoWindow.open(); //打开信息窗
|
||
infoWindow.setPosition(evt.geometry.position);//设置信息窗位置
|
||
//等待一点点,
|
||
that.$nextTick(() => {
|
||
//使用弹窗模板
|
||
infoWindow.setContent(document.querySelector('#popView').innerHTML);//设置信息窗内容
|
||
})
|
||
})
|
||
|
||
return marker;
|
||
},
|
||
updateMarker(map){
|
||
let that = this;
|
||
let geometries = [];
|
||
Object.keys(that.pointMap).forEach(k => {
|
||
let data = that.pointMap[k];
|
||
if(data){
|
||
let xy = data.split(',');
|
||
let x = Number(xy[0]);
|
||
let y = Number(xy[1]);
|
||
geometries.push({
|
||
id: k,
|
||
styleId: 'marker',
|
||
position: new TMap.LatLng(x, y),
|
||
properties: {
|
||
title: "marker"
|
||
}
|
||
});
|
||
}
|
||
});
|
||
if(that.marker){
|
||
that.marker.setGeometries(geometries);
|
||
}
|
||
},
|
||
getUserId(){
|
||
return this.myId;
|
||
},
|
||
getBusinessId(){
|
||
// return '12345678900987654321';
|
||
return this.massageTypeId;
|
||
// return '98';
|
||
},
|
||
creatSocket(){
|
||
let deviceId = this.getBusinessId();
|
||
let socketConnect = uni.connectSocket({
|
||
url: commonConfig.WS_UPLOAD_MAP_PATH + deviceId,
|
||
data() {
|
||
return {
|
||
msg: ''
|
||
}
|
||
},
|
||
header: {
|
||
'content-type': 'application/json',
|
||
// 'token': token
|
||
},
|
||
method: 'GET',
|
||
success(res) {
|
||
// 这里是接口调用成功的回调,不是连接成功的回调,请注意
|
||
// uni.showLoading({
|
||
// title: '连接成功!'
|
||
// });
|
||
},
|
||
fail(err) {
|
||
// 这里是接口调用失败的回调,不是连接失败的回调,请注意
|
||
// uni.showLoading({
|
||
// title: '连接失败!'
|
||
// });
|
||
}
|
||
});
|
||
uni.onSocketOpen((res) => {
|
||
// uni.hideLoading()
|
||
// uni.showToast({
|
||
// icon: 'none',
|
||
// title: '连接成功'
|
||
// })
|
||
console.log('onOpen', res);
|
||
});
|
||
uni.onSocketError((err) => {
|
||
// this.connecting = false
|
||
// this.connected = false
|
||
// uni.hideLoading()
|
||
// uni.showModal({
|
||
// content: '网络较差,请稍后再试',
|
||
// showCancel: false
|
||
// })
|
||
console.log('onError', err);
|
||
});
|
||
uni.onSocketMessage((res) => {
|
||
let that = this;
|
||
console.log('onMessage', res)
|
||
let datas = JSON.parse(res.data)
|
||
// let data = {
|
||
// chat: {
|
||
// userHead: '../../static/logo.png'
|
||
// },
|
||
// content: datas.content,
|
||
// type: datas.type,
|
||
// sendType: datas.sendType
|
||
// }
|
||
// that.ListItem.push(data);
|
||
//解析点
|
||
this.pointMap = {};
|
||
switch(datas.type){
|
||
case 'getCoordinate': {
|
||
this.pointMap = datas.data;
|
||
//that.creatMarker(that.cmap);
|
||
that.updateMarker(datas.data);
|
||
break;
|
||
}
|
||
default: {
|
||
|
||
}
|
||
}
|
||
|
||
});
|
||
uni.onSocketClose((res) => {
|
||
console.log('onClose', res)
|
||
});
|
||
|
||
this.socketConnect = socketConnect;
|
||
uni.userSocketConnect = socketConnect;
|
||
},
|
||
sendMsg(msg){
|
||
uni.sendSocketMessage({
|
||
data: JSON.stringify(msg),
|
||
success: (...e)=> {
|
||
console.log('发送成功!',...e);
|
||
},
|
||
fail: (...e)=> {
|
||
console.log('发送失败!',...e);
|
||
},
|
||
});
|
||
},
|
||
closeSocket(){
|
||
uni.closeSocket();
|
||
//temp1.pointThread
|
||
clearInterval(this.pointThread);
|
||
},
|
||
initMapPointThread(){
|
||
let that = this;
|
||
//创建连接
|
||
if(!that.socketConnect){
|
||
that.socketConnect = uni.userSocketConnect;
|
||
} if(uni.userSocketConnect){
|
||
that.socketConnect = uni.userSocketConnect;
|
||
}else{
|
||
that.creatSocket();
|
||
}
|
||
//开始循环
|
||
that.forSendMsg();
|
||
},
|
||
forSendMsg(){
|
||
let that = this;
|
||
if(!that.mapPointThreadIsRun){
|
||
let pointThread = setInterval(()=>{
|
||
that.sendMsgFn();
|
||
},5000);
|
||
this.pointThread = pointThread;
|
||
}
|
||
},
|
||
sendMsgFn(){
|
||
let that = this;
|
||
let userId = that.getUserId();
|
||
let businessId = that.getBusinessId();
|
||
let msg = {
|
||
sendType: "getCoordinate",
|
||
userId,
|
||
businessId,
|
||
rkey : `map:location:${businessId}:*`
|
||
}
|
||
that.sendMsg(msg);
|
||
},
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss">
|
||
page {
|
||
background-color: #F7F7F7;
|
||
}
|
||
.page-body {
|
||
width: 100%;
|
||
height: 100vh;
|
||
}
|
||
</style> |