This commit is contained in:
Iruka 2025-01-16 12:19:15 +08:00
parent 00b9275927
commit c427138970

View File

@ -11,6 +11,7 @@
:change:centerPoint="leaflet.centerPointEmitHandler" :landMap="mapObj.landMap"
:change:landMap="leaflet.drawEmitHandler" :davice="mapObj.davice" :change:davice="leaflet.markerEmitHandler"
:updateMarker="mapObj.updateMarker" :change:updateMarker="leaflet.updateMarkerEmitHandler"
:ranging="mapObj.ranging" :change:ranging="leaflet.rangingEmitHandler">
</view>
<!-- 工具 -->
@ -23,9 +24,12 @@
<view @click="mapToCenterPoint">
<i class="iconfont icon-dingwei"></i>
</view>
<view @click="navigation">
<view @click="mapNavigation">
<i class="iconfont icon-luxian"></i>
</view>
<view @click="mapRanging" :style="mapObj.ranging ? 'background: deepskyblue;':''">
<i class="iconfont icon-ceju"></i>
</view>
</view>
<view class="tdt">
<image src="../static/images/map/logo.png"></image>GS20240568 - 甲测资字1100471
@ -495,6 +499,7 @@
showMapType: false, //
mapType: "img_w", //
centerPoint: 0, //
ranging: false, //
},
pop: {
show: false,
@ -700,7 +705,7 @@
this.mapObj.centerPoint++;
},
//
navigation() {
mapNavigation() {
this.$showConfirm(`导航至"${this.title}"`).then(res => {
if (res.confirm) {
const centerPoint = JSON.parse(this.mapObj.landMap.centerPoint);
@ -713,7 +718,6 @@
if (uni.getSystemInfoSync().platform === 'android') { // Android
url =
`androidamap://route/plan/?sourceApplication=${appName}&sid=BGVIS1&did=BGVIS2&dlat=${lat}&dlon=${lng}&dname=${encodeURIComponent(name)}&mode=driving`;
// `androidamap://route/plan/?sourceApplication=${appName}&sid=BGVIS1&did=BGVIS2&dlat=${lat}&dlon=${lng}&mode=driving`;
} else if (uni.getSystemInfoSync().platform === 'ios') { // iOS
url = `iosamap://path?sourceApplication=${appName}&mldl=${lat},${lng}`;
}
@ -730,8 +734,18 @@
}
});
},
toNavigation() {
//
mapRanging() {
if (this.mapObj.ranging) {
this.mapObj.ranging = false;
this.$toast("测距已关闭")
return;
}
this.$showConfirm(`开启测距,开启后再次点击关闭。`).then(res => {
if (res.confirm) {
this.mapObj.ranging = true;
}
});
},
//
mapUpdateMarker(e) {
@ -900,6 +914,9 @@
_imgs: null,
_device: null,
_markers: {},
drawing: {
ranging: null,
}
};
},
mounted() {},
@ -953,6 +970,16 @@
}
this.updateMarkerColor(e);
},
//
rangingEmitHandler(e) {
if (e == true || e == false) {
if (e) {
this.ranging(1);
} else {
this.ranging(0);
}
}
},
//
initMap() {
@ -1352,6 +1379,100 @@
}
}
},
//
ranging(type) {
const that = this;
if (type == 1) { //
that.drawing.ranging = {
latlngs: [],
gap: [],
pop: [],
item: null,
}
that.map.off('click');
that.map.on('click', (e) => {
//
that.drawing.ranging.latlngs.push(e.latlng);
if (that.drawing.ranging.latlngs.length > 1) {
if (that.drawing.ranging.item) {
that.drawing.ranging.item.setLatLngs(that.drawing.ranging.latlngs);
} else {
that.drawing.ranging.item = L.polyline(that.drawing.ranging.latlngs, {
color: "red"
});
that.map.addLayer(that.drawing.ranging.item);
}
//
const prev = that.drawing.ranging.latlngs[that.drawing.ranging.latlngs.length - 2];
const gap = L.latLng(prev).distanceTo(e.latlng);
that.drawing.ranging.gap.push(gap);
let sumgap = that.drawing.ranging.gap.reduce((acc, curr) => acc + curr, 0);
if (sumgap > 1000) {
sumgap = (sumgap / 1000).toFixed(2);
let marker = L.marker(e.latlng, {
icon: L.divIcon({
html: `<span>${sumgap}公里</span>`,
className: 'my-div-icon'
})
}).addTo(that.map);
that.drawing.ranging.pop.push(marker);
} else {
let marker = L.marker(e.latlng, {
icon: L.divIcon({
html: `<span>${Math.round(sumgap)}m</span>`,
className: 'my-div-icon'
})
}).addTo(that.map);
that.drawing.ranging.pop.push(marker);
}
} else {
//marker
let marker = L.marker(e.latlng, {
icon: L.divIcon({
html: '<span>起点</span>',
className: 'my-div-icon'
})
}).addTo(that.map);
that.drawing.ranging.pop.push(marker);
}
});
} else if (type == 2) { //
if (that.drawing.ranging.latlngs.length) {
that.drawing.ranging.latlngs.pop();
}
if (that.drawing.ranging.pop.length) {
let pop = that.drawing.ranging.pop.pop();
that.map.removeLayer(pop);
}
if (that.drawing.ranging.item) {
that.drawing.ranging.item.setLatLngs(that.drawing.ranging.latlngs);
// if (that.drawing.ranging.latlngs.length > 1) {
// //
// let start = that.drawing.ranging.latlngs[0];
// let end = that.drawing.ranging.latlngs[that.drawing.ranging.latlngs.length - 1];
// const gap = L.latLng(start).distanceTo(end);
// }
}
} else { //
if (!that.drawing.ranging) {
return;
}
that.drawing.ranging.latlngs = null;
if (that.drawing.ranging.pop && that.drawing.ranging.pop.length) {
that.drawing.ranging.pop.forEach(x => {
that.map.removeLayer(x);
});
}
that.drawing.ranging.pop = null;
if (that.drawing.ranging.item) {
that.map.removeLayer(that.drawing.ranging.item);
}
that.drawing.ranging.item = null;
that.map.off('click');
}
},
}
}
</script>
@ -1404,6 +1525,20 @@
.device-orange span {
color: #fbc902;
}
/* 测距 */
.my-div-icon {
background-color: transparent;
}
.my-div-icon span {
white-space: nowrap;
display: block;
border-radius: 4px;
background-color: #fff;
width: fit-content;
padding: 2px 5px;
}
}
}
</style>