Files
location_point/pages/index/index.vue
2026-02-23 16:31:39 +08:00

640 lines
15 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<view>
<u-navbar :is-back="isBack" title="经纬度拾取">
</u-navbar>
<map style="width: 100vw; height: 40vh;" id="maps" class="map" :show-location="true"
:enable-satellite="satellite" :theme="theme" :scale="scale" :markers="markers" @regionchange="regionchange"
@tap="tapAction"></map>
<view class="selectPointPosition">
<view>已选位置:</view>
<view>经度{{longitude}}纬度{{latitude}}</view>
</view>
<view class="cameraInfo">
<view class="btnListBox">
<view>操作:</view>
<u-icon name="map-fill" size="56" @click="reGetLocation()" style="margin-right: 20rpx;"></u-icon>
</view>
<u-section title="已选择设备" :sub-title="cameara.number==null?'请选择':cameara.number"
@click="goToSelectCamera()"></u-section>
<view class="cameraItem" v-if="cameara.number!=null">
<view class="editItem">
<view class="editItemBtn" @click="goToEdit()">
<u-icon name="edit-pen" size="36" style="margin-right: 20rpx;"></u-icon>
<text>编辑其它信息</text>
</view>
</view>
<view class="cameraItemLi">
<view>设备编码</view>
<view>{{cameara.number}}</view>
</view>
<view class="cameraItemLi">
<view>设备类型</view>
<view>{{cameara.type}}</view>
</view>
<view class="cameraItemLi">
<view>纬度</view>
<view v-if="cameara.latitude">{{cameara.latitude}}</view>
<view class="unKnow" v-if="!cameara.latitude"></view>
</view>
<view class="cameraItemLi">
<view>经度</view>
<view v-if="cameara.longitude">{{cameara.longitude}}</view>
<view class="unKnow" v-if="!cameara.longitude"></view>
</view>
<view class="btnList">
<u-button size="mini" class="btn" type="info" @click="moveTo(10000)">聚焦历史点位</u-button>
<u-button size="mini" class="btn" type="info" @click="moveTo(100)">聚焦手选位置</u-button>
<u-button size="mini" class="btn" type="info" @click="moveTo(1)">聚焦当前位置</u-button>
</view>
<view class="btnList1">
<u-button size="mini" type="primary" class="btn" @click="updateAction(0)">设置黑色点为当前设备位置</u-button>
<u-button size="mini" type="primary" class="btn" @click="updateAction(1)">设置红色点为当前设备位置</u-button>
</view>
</view>
</view>
<view class="tipsList">
<view></view>
<view>黑色图标为用户当前位置</view>
<view>红色图标为用户手动选中位置点击地图可以收到选择</view>
<view>黄色图标为设备旧位置</view>
</view>
<view v-for="item in logs">
{{item}}
</view>
<u-popup v-model="leftModelShow">
<u-search placeholder="日照香炉生紫烟" v-model="keyword"></u-search>
<view>出淤泥而不染濯清涟而不妖</view>
</u-popup>
<u-action-sheet :list="list" v-model="showActionList"></u-action-sheet>
</view>
</template>
<script>
import dayjs from "dayjs"
import config from "../../libs/config/config.js"
export default {
data() {
return {
theme: 'satellite',
satellite: true,
isBack: false,
leftModelShow: false,
latitude: "", // 默认定在首都
longitude: "",
scale: 16, // 默认16
markers: [],
markerHeight: 30,
timer: null,
logs: [],
keyword: '',
accuracy: '', //位置的精确度
altitude: '', //高度,单位 m
horizontalAccuracy: '', //水平精度,单位 m
cameara: {
id: "",
camera_name: "",
camera_code: "",
longitude: "",
latitude: "",
images: "",
remarks: "",
type: "",
},
showActionList: false,
list: [{
text: '点赞',
color: 'blue',
fontSize: 28,
subText: '感谢您的点赞'
}, {
text: '分享'
}, {
text: '评论'
}],
};
},
onShow() {
const returnedTarget = Object.assign(this.$store.state.equip.currentData, this.$store.state.equip.currentDataDetails);
this.cameara=returnedTarget
this.$store.dispatch('queryCurrentDataDetails', {})
},
onReady() {
this._mapContext = uni.createMapContext("maps", this);
this.timer = setInterval(() => {
//this.getLocationInfo()
}, 2000)
this.getLocationInfo()
//this.bindMapClickAction();
// this.addMarkers();
},
methods: {
tapAction(e) {
console.log(e)
let point = e.detail;
point.iconPath = '../../static/address_2.png';
point.id = 100
this.latitude = point.latitude;
this.longitude = point.longitude;
this._mapContext.moveToLocation({
latitude: point.latitude,
longitude: point.longitude,
})
let list = JSON.parse(JSON.stringify(this.markers));
let isFrist = 0;
list.forEach(function(item) {
if (item.id == 100) {
isFrist = 1;
item.latitude = point.latitude;
item.longitude = point.longitude;
} else {
}
});
if (isFrist == 0) {
this.markers = this.markers.concat(point);
} else {
this.markers = list;
}
},
bindMapClickAction() {
var that = this;
var maps = this._mapContext.$getAppMap();
maps.onclick = function(point) {
console.log(point);
point.iconPath = '../../static/address_2.png';
point.id = 100
that.latitude = point.latitude;
that.longitude = point.longitude;
that._mapContext.moveToLocation({
latitude: point.latitude,
longitude: point.longitude,
})
let list = JSON.parse(JSON.stringify(that.markers));
let isFrist = 0;
list.forEach(function(item) {
if (item.id == 100) {
isFrist = 1;
item.latitude = point.latitude;
item.longitude = point.longitude;
} else {
}
});
if (isFrist == 0) {
that.markers = that.markers.concat(point);
} else {
that.markers = list;
}
//that.markers = list;
console.log(_item)
// if (_item.length > 0) {
// console.log("=============平移:", point.latitude)
// console.log("=============平移:", point.longitude)
// that._mapContext.translateMarker({
// markerId: 100,
// destination: {
// latitude: point.latitude,
// longitude: point.longitude,
// },
// fail(e) {
// console.log(e)
// }
// })
// } else {
// console.log("=============新增")
// that.markers = that.markers.concat(point);
// }
};
},
goToEdit() {
let url = "../addEquip/addEquip?cameara=" + JSON.stringify(this.cameara)
uni.navigateTo({
url: url
});
},
add() {
uni.navigateTo({
url: '../addEquip/addEquip'
});
},
updateAction(index) {
let cameara = JSON.parse(JSON.stringify(this.cameara))
let selfClick = this.markers.filter(item => {
if (item.id == 100) {
return item
}
})
selfClick = selfClick[0];
console.log("=========================selfClick:", JSON.stringify(selfClick))
let selfAuto = this.markers.filter(item => {
if (item.id == 1) {
return item
}
})
selfAuto = selfAuto[0];
console.log("=========================selfAuto:", JSON.stringify(selfAuto))
this.cameara = cameara;
// 用户当前位置
if (index == 0) {
cameara.latitude = selfAuto.latitude;
cameara.longitude = selfAuto.longitude;
} else {
// 用户手选位置
cameara.latitude = selfClick.latitude;
cameara.longitude = selfClick.longitude;
}
this.$store.dispatch('updateEquipDetails', {data: cameara})
},
// 拖拽地图
regionchange(event) {
console.log("========中心点改变1")
if (event.type == 'regionchange') {
//this.getCenterLanLat()
}
},
// 获取当前地图中心的经纬度
getCenterLanLat() {
console.log("========中心点改变2")
let self = this
self._mapContext.getCenterLocation({
altitude:true,
type: 'gcj02',
success: (res) => {
let address = {
latitude: res.latitude,
longitude: res.longitude
}
let list = JSON.parse(JSON.stringify(self.markers));
let isFrist = 0;
list.forEach(function(item) {
if (item.id == 1000) {
isFrist = 1;
item.latitude = res.latitude;
item.longitude = res.longitude;
}
});
if (isFrist == 0) {
console.log("========中心点改变20")
self.markers = self.markers.concat({
id: 1000,
width: 50,
height: 50,
latitude: address.latitude,
longitude: address.longitude,
iconPath: "../../static/address_3.png",
});
} else {
console.log("========中心点改变21")
self.markers = list;
}
},
fail: (err) => {
// console.log('获取当前地图中心的经纬度2', err);
}
})
},
tapMap(e) {
var that = this;
var id = e.currentTarget.id;
var maps = this._mapContext.$getAppMap();
console.log("============maps:", maps)
maps.onclick = function(point) {
console.log(point);
point.iconPath = '../../static/address_2.png';
point.id = 100
that._mapContext.moveToLocation({
latitude: point.latitude,
longitude: point.longitude,
})
let list = JSON.parse(JSON.stringify(that.markers));
let isFrist = 0;
list.forEach(function(item) {
if (item.id == 100) {
isFrist = 1;
item.latitude = point.latitude;
item.longitude = point.longitude;
} else {
}
});
if (isFrist == 0) {
that.markers = that.markers.concat(point);
} else {
that.markers = list;
}
//that.markers = list;
console.log(_item)
// if (_item.length > 0) {
// console.log("=============平移:", point.latitude)
// console.log("=============平移:", point.longitude)
// that._mapContext.translateMarker({
// markerId: 100,
// destination: {
// latitude: point.latitude,
// longitude: point.longitude,
// },
// fail(e) {
// console.log(e)
// }
// })
// } else {
// console.log("=============新增")
// that.markers = that.markers.concat(point);
// }
};
},
goToSelectCamera() {
uni.navigateTo({
url: '../listPage/listPage'
});
console.log("获取周围美食");
},
reGetLocation() {
this.getLocationInfo();
},
// 确认授权后,获取用户位置
getLocationInfo() {
const that = this;
uni.getLocation({
isHighAccuracy: true,
highAccuracyExpireTime: 3500,
accuracy: 'best',
altitude:true,
type: "gcj02",
success: function(res) {
console.log("============================定位结果res:",res);
// 暂时
that.longitude = res.longitude; //118.787575;
that.latitude = res.latitude; //32.05024;
//精确度信息
that.accuracy = res.accuracy;
that.altitude = res.altitude;
that.horizontalAccuracy = res.horizontalAccuracy;
that._mapContext.moveToLocation({
latitude: res.latitude,
longitude: res.longitude,
})
let list = JSON.parse(JSON.stringify(that.markers));
let isFrist = 0;
list.forEach(function(item) {
if (item.id == 1) {
isFrist = 1;
item.latitude = res.latitude;
item.longitude = res.longitude;
} else {
}
});
if (isFrist == 0) {
that.markers.push({
id: 1,
width: 50,
height: 50,
latitude: res.latitude,
longitude: res.longitude,
iconPath: "../../static/address_1.png",
width: that.markerHeight, //宽
height: that.markerHeight, //高
color: '#FFFFFF'
})
} else {
that.markers = list;
}
},
fail(err) {
uni.showToast({
icon: "error",
title: "获取位置出错"
})
console.log(err)
}
});
},
getList() {
console.log("获取周围美食");
console.log(this.markers.length)
},
historyPosition() {
const returnedTarget = Object.assign(this.$store.state.equip.currentData, this.$store.state.equip.currentDataDetails);
let cameara=returnedTarget
if (cameara.longitude) {
console.log("==============更新旧点")
// cameara.longitude = info[0];
// cameara.latitude = info[1];
let point = {};
point.iconPath = '../../static/address_4.png';
point.id = 10000
point.latitude = cameara.latitude;
point.longitude = cameara.longitude;
let list = JSON.parse(JSON.stringify(this.markers));
let isFrist = 0;
list.forEach(function(item) {
if (item.id == 10000) {
isFrist = 1;
item.latitude = cameara.latitude;
item.longitude = cameara.longitude;
}
});
if (isFrist == 0) {
this.markers = this.markers.concat(point);
} else {
this.markers = list;
}
console.log("=====================this.markers:", JSON.stringify(this.markers))
} else {
let list = JSON.parse(JSON.stringify(this.markers));
let _index = 10000;
list.forEach(function(item, index) {
if (item.id == 10000) {
_index = index
}
});
if (_index != 10000) {
list.splice(_index, _index)
}
this.markers = list;
}
},
moveTo(index) {
let point_list = this.markers.filter(item => {
if (item.id == index) {
return item
}
})
let point = point_list[0];
if (point_list.length > 0) {
this._mapContext.moveToLocation({
latitude: point.latitude,
longitude: point.longitude,
})
}
},
getById(id) {
this.$u.post(config.api + '/xfhrshInternet/service/selPicture', {
subjectId: id
}).then(res => {
if(res.code==0){
this.$store.dispatch('setCurrentEquipDtails', {data: res.data[0]})
}
//this.camera_list = res;
});
},
},
onUnload: function() {
if (this.timer) {
clearInterval(this.timer);
this.timer = null;
}
},
onLoad() {
// 监听事件
uni.$on('updateCamera', (cameara) => {
setTimeout(() => {
this.historyPosition()
}, 2500)
})
},
onUnload() {
// 移除监听事件
uni.$off('updateCamera');
},
};
</script>
<style lang="scss">
.u-nav-slot {
padding: 0 20rpx 0 0;
}
.cameraInfo {
margin-top: 20rpx;
margin-bottom: 20rpx;
.btnListBox {
display: flex;
width: 300rpx;
justify-content: space-around;
align-items: center;
margin-bottom: 20rpx;
margin-left: 10rpx;
}
}
.cameraItem {
margin: 0 24rpx;
margin-top: 30rpx !important;
border: 1px solid #A3A8A8;
border-radius: 10rpx;
padding: 10rpx;
.editItem {
display: flex;
flex-direction: row;
justify-content: flex-end;
margin: 20rpx 0;
.editItemBtn {
border: 1rpx solid #A3A8A8;
border-radius: 4rpx;
padding: 4rpx 4rpx;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
}
}
.cameraItemLi {
display: flex;
flex-direction: row;
justify-content: space-between;
.unKnow {
color: red;
}
}
}
.btn {
margin-top: 10rpx;
}
.btnList {
display: flex;
flex-direction: row;
width: 100%;
justify-content: space-around;
}
.btnList1 {
display: flex;
flex-direction: row;
width: 100%;
justify-content: space-around;
}
.tipsList {
margin: 10rpx;
}
.selectPointPosition {
display: flex;
justify-content: space-between;
}
</style>