| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- // import L from 'leaflet'
- // import 'leaflet-clipper/dist/L.Clipper'
- // import * as turf from '@turf/turf'
- import config from '@/utils/map/sub/config'
- import global from '@/utils/map/sub/global'
- var toggleFlag = false
- export default {
- cpMarkLayerGroup: null, // 检查点标记图层组
- cpMemoLayerGroup: null, // 检查点备注图层组
- cpPathLayerGroup: null, // 检查点路线图层组
- init() {
- this.cpMarkLayerGroup = new L.featureGroup()
- this.cpMemoLayerGroup = new L.featureGroup()
- this.cpPathLayerGroup = new L.featureGroup()
- },
- // 即将开始地图缩放时触发本方法
- onZoomStart(e) {
- // this.cpMarkLayerGroup.remove()
- this.cpMemoLayerGroup.remove()
- this.cpPathLayerGroup.remove()
- },
- // 地图发生缩放时触发本方法
- onZoom(e) {},
- // 地图缩放结束时触发本方法
- onZoomEnd(e) {
- if (toggleFlag) {
- this.drawAllPath()
- // this.cpMarkLayerGroup.addTo(global.map)
- this.cpMemoLayerGroup.addTo(global.map)
- this.cpPathLayerGroup.addTo(global.map)
- this.cpMarkLayerGroup.bringToBack()
- this.cpMemoLayerGroup.bringToBack()
- this.cpPathLayerGroup.bringToBack()
- }
- },
- toggle(flag) {
- // console.log('toggle:', flag)
- if (flag != null) {
- toggleFlag = !flag
- }
- if (toggleFlag) {
- this.cpMarkLayerGroup.removeFrom(global.map)
- this.cpMemoLayerGroup.removeFrom(global.map)
- this.cpPathLayerGroup.removeFrom(global.map)
- toggleFlag = false
- } else {
- this.cpMarkLayerGroup.addTo(global.map)
- this.cpMemoLayerGroup.addTo(global.map)
- this.cpPathLayerGroup.addTo(global.map)
- this.cpMarkLayerGroup.bringToBack()
- this.cpMemoLayerGroup.bringToBack()
- this.cpPathLayerGroup.bringToBack()
- toggleFlag = true
- }
- },
- drawAllRoutes() {
- // console.log("[drawAllRoutes] routes", global.routes)
- if (this.cpMarkLayerGroup != null)
- this.cpMarkLayerGroup.clearLayers()
- if (this.cpMemoLayerGroup != null)
- this.cpMemoLayerGroup.clearLayers()
- for (let i = 0; i < global.routes.length; i++) {
- this.drawOneRoute(global.routes[i].id)
- }
- },
- drawOneRoute(rtId) {
- // var that = this
- var cpList = global.getRouteById(rtId).controlPointSortedListList
- if (cpList == null) {
- console.warn('[drawOneRoute] 关键数据为空', cpList)
- return
- }
- // console.warn('[drawOneRoute] cpList', cpList)
- for (var i = 0; i < cpList.length; i++) {
- let res = this.drawOnePoint(cpList[i])
- cpList[i].marker = res.marker
- cpList[i].markerMemo = res.markerMemo
- }
- },
- drawOnePoint(data) {
- // console.warn('[drawOnePoint] data', data)
- if (data == null) {
- console.warn('[drawOnePoint] 关键数据为空', data)
- return
- }
- var position = data.ciposition
- var marker = L.circleMarker([position.latitude, position.longitude], config.gStyle.checkPoint.default)
- .addTo(this.cpMarkLayerGroup)
- // .addTo(global.map)
- // .bindPopup("Hello, I'm a Marker!<br><img src='my-image.png' width='100'>").openPopup();
- // .bindTooltip(`检查点:${route.serial_num}`, config.gStyle.checkPoint.tooltip)
- var myIcon = L.divIcon({
- html: '<div>' + data.sn + '</div>',
- className: 'my-div-icon',
- iconSize: [60, 20], //宽高
- iconAnchor: [30, 35] //文字标注相对位置
- });
- var markerMemo = L.marker([position.latitude, position.longitude], {
- icon: myIcon,
- // zIndexOffset: -100
- })
- .addTo(this.cpMemoLayerGroup)
- // this.cpMarkLayerGroup.addTo(global.map)
- // this.cpMemoLayerGroup.addTo(global.map)
- this.cpMarkLayerGroup.bringToBack()
- this.cpMemoLayerGroup.bringToBack()
- return {
- marker: marker,
- markerMemo: markerMemo
- }
- },
- drawAllPath() {
- // console.log("[drawAllPath] routes", global.routes)
- if (this.cpPathLayerGroup != null) {
- this.cpPathLayerGroup.clearLayers()
- }
- for (let i = 0; i < global.routes.length; i++) {
- this.drawOnePath(global.routes[i].id)
- }
- },
- drawOnePath(rtId) {
- var cpList = global.getRouteById(rtId).controlPointSortedListList
- // console.log("[drawOnePath] cpList", cpList)
- var latlngs = []
- for (var i = 0; i < cpList.length; i++) {
- var position = cpList[i].ciposition
- if (position.latitude != null && position.longitude != null) {
- latlngs.push([position.latitude, position.longitude])
- }
- }
- var radius = config.gStyle.checkPoint.default.radius
- // var Lines = this.getIntersection(latlngs, radius) // 获取(圆与路线的)交叉点坐标
- // // var polyline = L.polyline(latlngs, config.gStyle.checkPointPath.default)
- // var polyline = L.polyline(Lines, config.gStyle.checkPointPath.default)
- // .addTo(this.cpPathLayerGroup)
- // // this.cpPathLayerGroup.addTo(global.map)
- // this.cpPathLayerGroup.bringToBack()
- },
- // 获取(圆与路线的)交叉点坐标
- getIntersection(LatLngArry, radius) {
- // var LatLngArry = [
- // [36.672562, 117.127572],
- // [36.67165, 117.129262],
- // [36.671409, 117.126752]
- // ]
- var PointArry = []
- // var Circles = []
- var radius = 20 // 圆的半径 px
- var DistanceArry = []
- var Lines = []
- for (let i = 0; i < LatLngArry.length; i++) {
- // 给定地理坐标,返回相应的像素坐标 (相对于原点像素)
- let point = global.map.latLngToLayerPoint(LatLngArry[i])
- PointArry.push(point)
- // let circle = L.circle(LatLngArry[i], {
- // radius: radius
- // }).addTo(global.map);
- // Circles.push(circle)
- if (i > 0) {
- // 计算相邻两个点之间的距离
- let distance = L.point(PointArry[i]).distanceTo(L.point(PointArry[i - 1]))
- DistanceArry.push(distance)
- // 计算圆半径占比
- let per = parseFloat(radius.toFixed(16) / distance.toFixed(16)).toFixed(16)
- // console.log('per:', per, i)
- // console.log('PointArry:', PointArry[i])
- let offsetX = parseFloat((PointArry[i].x.toFixed(16) - PointArry[i - 1].x.toFixed(16)) * per).toFixed(
- 16)
- let offsetY = parseFloat((PointArry[i].y.toFixed(16) - PointArry[i - 1].y.toFixed(16)) * per).toFixed(
- 16)
- // console.log('offset:', offsetX, offsetY)
- // 给定相对于原点像素的像素坐标, 返回相应的地理坐标(对于当前缩放级别)
- let line = [
- global.map.layerPointToLatLng([
- parseFloat(PointArry[i - 1].x) + parseFloat(offsetX),
- parseFloat(PointArry[i - 1].y) + parseFloat(offsetY)
- ]),
- global.map.layerPointToLatLng([
- parseFloat(PointArry[i].x) - parseFloat(offsetX),
- parseFloat(PointArry[i].y) - parseFloat(offsetY)
- ])
- ]
- Lines.push(line)
- }
- }
- // console.log('DistanceArry', DistanceArry)
- // console.log('Lines', Lines)
- // var polyline = L.polyline(Lines, config.gStyle.checkPointPath.default).addTo(global.map)
- return Lines
- },
- test() {},
- free() {}
- }
|