Преглед на файлове

"Finished to adjust the coordinates"

guliyan преди 2 години
родител
ревизия
5947f35fe0
променени са 75 файла, в които са добавени 11567 реда и са изтрити 0 реда
  1. 5 0
      markerApp/.idea/.gitignore
  2. 12 0
      markerApp/.idea/markerApp(4).iml
  3. 8 0
      markerApp/.idea/modules.xml
  4. 27 0
      markerApp/app/index.css
  5. 372 0
      markerApp/app/renderByData.js
  6. 320 0
      markerApp/app/renderByPath.js
  7. 431 0
      markerApp/assets/data/100M.txt
  8. 384 0
      markerApp/assets/data/56M.txt
  9. BIN
      markerApp/assets/demoImages/imgs/0.00.png
  10. BIN
      markerApp/assets/demoImages/imgs/0.10.png
  11. BIN
      markerApp/assets/demoImages/imgs/0.20.png
  12. BIN
      markerApp/assets/demoImages/imgs/0.30.png
  13. BIN
      markerApp/assets/demoImages/imgs/0.40.png
  14. BIN
      markerApp/assets/demoImages/imgs/0.50.png
  15. BIN
      markerApp/assets/demoImages/imgs/0.60.png
  16. BIN
      markerApp/assets/demoImages/imgs/0.70.png
  17. BIN
      markerApp/assets/demoImages/imgs/0.80.png
  18. BIN
      markerApp/assets/demoImages/imgs/0.90.png
  19. BIN
      markerApp/assets/demoImages/imgs2/0.00.png
  20. BIN
      markerApp/assets/demoImages/imgs2/0.10.png
  21. BIN
      markerApp/assets/demoImages/imgs2/0.20.png
  22. BIN
      markerApp/assets/demoImages/imgs2/0.30.png
  23. BIN
      markerApp/assets/demoImages/imgs2/0.40.png
  24. BIN
      markerApp/assets/demoImages/imgs2/0.50.png
  25. BIN
      markerApp/assets/demoImages/imgs2/0.60.png
  26. BIN
      markerApp/assets/demoImages/imgs2/0.70.png
  27. BIN
      markerApp/assets/demoImages/imgs2/0.80.png
  28. BIN
      markerApp/assets/demoImages/imgs2/0.90.png
  29. BIN
      markerApp/assets/frameImages/100M/1_0.jpg
  30. BIN
      markerApp/assets/frameImages/100M/1_1.jpg
  31. BIN
      markerApp/assets/frameImages/100M/1_10.jpg
  32. BIN
      markerApp/assets/frameImages/100M/1_11.jpg
  33. BIN
      markerApp/assets/frameImages/100M/1_12.jpg
  34. BIN
      markerApp/assets/frameImages/100M/1_13.jpg
  35. BIN
      markerApp/assets/frameImages/100M/1_14.jpg
  36. BIN
      markerApp/assets/frameImages/100M/1_15.jpg
  37. BIN
      markerApp/assets/frameImages/100M/1_16.jpg
  38. BIN
      markerApp/assets/frameImages/100M/1_17.jpg
  39. BIN
      markerApp/assets/frameImages/100M/1_2.jpg
  40. BIN
      markerApp/assets/frameImages/100M/1_3.jpg
  41. BIN
      markerApp/assets/frameImages/100M/1_4.jpg
  42. BIN
      markerApp/assets/frameImages/100M/1_5.jpg
  43. BIN
      markerApp/assets/frameImages/100M/1_6.jpg
  44. BIN
      markerApp/assets/frameImages/100M/1_7.jpg
  45. BIN
      markerApp/assets/frameImages/100M/1_8.jpg
  46. BIN
      markerApp/assets/frameImages/100M/1_9.jpg
  47. BIN
      markerApp/assets/frameImages/56M/0_0.jpg
  48. BIN
      markerApp/assets/frameImages/56M/0_1.jpg
  49. BIN
      markerApp/assets/frameImages/56M/0_10.jpg
  50. BIN
      markerApp/assets/frameImages/56M/0_11.jpg
  51. BIN
      markerApp/assets/frameImages/56M/0_12.jpg
  52. BIN
      markerApp/assets/frameImages/56M/0_13.jpg
  53. BIN
      markerApp/assets/frameImages/56M/0_14.jpg
  54. BIN
      markerApp/assets/frameImages/56M/0_15.jpg
  55. BIN
      markerApp/assets/frameImages/56M/0_16.jpg
  56. BIN
      markerApp/assets/frameImages/56M/0_17.jpg
  57. BIN
      markerApp/assets/frameImages/56M/0_2.jpg
  58. BIN
      markerApp/assets/frameImages/56M/0_3.jpg
  59. BIN
      markerApp/assets/frameImages/56M/0_4.jpg
  60. BIN
      markerApp/assets/frameImages/56M/0_5.jpg
  61. BIN
      markerApp/assets/frameImages/56M/0_6.jpg
  62. BIN
      markerApp/assets/frameImages/56M/0_7.jpg
  63. BIN
      markerApp/assets/frameImages/56M/0_8.jpg
  64. BIN
      markerApp/assets/frameImages/56M/0_9.jpg
  65. BIN
      markerApp/assets/imgs/anim-pointer.png
  66. 1 0
      markerApp/assets/imgs/marker-pointer.svg
  67. BIN
      markerApp/assets/imgs/marker.png
  68. BIN
      markerApp/assets/imgs/marker_camera.png
  69. BIN
      markerApp/assets/imgs/marker_mic.png
  70. 43 0
      markerApp/configByData.js
  71. 125 0
      markerApp/configByPath.js
  72. 0 0
      markerApp/libs/axios.min.js
  73. 9759 0
      markerApp/libs/three.js
  74. 48 0
      markerApp/renderByData/index.html
  75. 32 0
      markerApp/renderByPath/index.html

+ 5 - 0
markerApp/.idea/.gitignore

@@ -0,0 +1,5 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/

+ 12 - 0
markerApp/.idea/markerApp(4).iml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="WEB_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$">
+      <excludeFolder url="file://$MODULE_DIR$/temp" />
+      <excludeFolder url="file://$MODULE_DIR$/.tmp" />
+      <excludeFolder url="file://$MODULE_DIR$/tmp" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>

+ 8 - 0
markerApp/.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/markerApp(4).iml" filepath="$PROJECT_DIR$/.idea/markerApp(4).iml" />
+    </modules>
+  </component>
+</project>

+ 27 - 0
markerApp/app/index.css

@@ -0,0 +1,27 @@
+* {
+    padding: 0px;
+    margin: 0px;
+}
+.marker-anmi{
+    width: 25px;
+    height: 25px;
+    /* translate: -12px -0px; */
+    background-size: 100%;
+    position: absolute;
+    cursor: pointer;
+	animation-name:myfirst;
+	animation-duration:5s;
+	animation-iteration-count:infinite;    
+}
+.marker-anmi-camera{
+    /* background-image: url('../assets/imgs/marker_camera.png'); */
+    width: 25px;
+    height: 25px;
+    /* translate: -12px -0px; */
+    background-size: 100%;
+    position: absolute;
+    cursor: pointer;
+	animation-name:myfirst;
+	animation-duration:5s;
+	animation-iteration-count:infinite;    
+}

+ 372 - 0
markerApp/app/renderByData.js

@@ -0,0 +1,372 @@
+class MarkerRenderByData {
+    isClip = false;
+    clipX = 0;
+    container = null;
+    config = null;
+    lastPosition = null;
+    canvasEl = null;
+    ctx = null;
+    width = 0;
+    height = 0;
+    top = 0;
+    left = 0;
+    markerEls = [];
+    mouseDownStatus = false;
+    // 当前轨道索引
+    currentTrackIndex = 0;
+    // 当前轨道配置数据
+    currentTrackData = null;
+    // 当前轨道路径
+    currentTrackPath = null;
+    // 当前角度,0-1 表示0-Math.PI*2
+    currentAngle = 0;
+    // 当前帧步
+    currentFrameStep = 0;
+    // 轨道下的图像数据
+    trackImageMap = {
+
+    }
+
+    // 轨道帧数据
+    trackFrameMap = {}
+
+    handler = {}
+    currentFrameData = null;
+
+    downloadImagesCount = 0
+    downloadingImagesCount = 0
+    downloadStartedAt = 0
+    // 相机
+    camera = null;
+    scene = null;
+    renderer = null;
+    constructor(options){
+        this.container = options.container
+        this.container.style.cursor = 'grab'
+        this.config = options.config
+        this.isClip = options.isClip
+        this.currentTrackData = this.config.tracks[0]
+        this.generateEl()
+        this.fetchTrackData()
+        this.createMarkers(50)
+    }
+    resize(){
+        const rect = this.container.getBoundingClientRect()        
+        this.width = rect.width
+        this.height = rect.height
+        if(this.isClip){
+            this.clipX = (this.config.globalMeta.photoSize[0] / this.config.globalMeta.photoSize[1]) * this.height - this.width
+        }
+        this.top = rect.top
+        this.left = rect.left
+        this.canvasEl.width = rect.width
+        this.canvasEl.height = rect.height
+        this.renderFrameData()
+    }
+    on(type, fn){
+        this.handler[type] = fn
+    }
+    
+    fetchTrackData(){
+        const vm = this
+        vm.downloadStartedAt = new Date().getTime()
+        this.config.tracks.forEach(track => {
+            this.fetchFrameData(track)
+            vm.downloadImagesCount += track.steps
+        })
+
+    }
+
+    fetchFrameData(track){
+        const vm = this
+        axios.get(`${track.dataUrl}`).then(function(response){
+            const trackDatas = response.data
+            vm.parseTrackData(track.name, trackDatas)
+            vm.preDownloadImages(track.name)
+            vm.changeTrack(null)
+        });
+    }
+
+    /**
+     * 解析数据
+     * @param {*} trackName 
+     * @param {*} trackDatas 
+     */
+    parseTrackData(trackName, trackDatas){
+        const frames = {}
+        const lines = trackDatas.split('\n')
+        let currentIndex = 0
+        for(let index = 0;index<lines.length;index++){
+            const lineStr = lines[index]
+            if(lineStr.indexOf('.jpg')>-1){
+                // 头
+                currentIndex = `frame-${lineStr.split('.')[0]}`
+                frames[currentIndex] = []
+            }else{
+                // 体
+                if(lineStr.length > 0){
+                    const originData = {
+                        name: lineStr.split('|')[0],
+                        originPosition: lineStr.split('|')[1],
+                        screenPosition: lineStr.split('|')[2],
+                        type: lineStr.split('|')[3]
+                    }
+                    frames[currentIndex].push(originData)
+                }
+            }
+        }
+        this.trackFrameMap[trackName] = frames
+    }
+
+    generateEl(){
+        const rect = this.container.getBoundingClientRect()
+        const canvasEl = document.createElement('canvas')
+        this.canvasEl = canvasEl   
+        this.width = rect.width
+        this.height = rect.height
+        if(this.isClip){
+            this.clipX = (this.config.globalMeta.photoSize[0] / this.config.globalMeta.photoSize[1]) * this.height - this.width
+        }
+        this.top = rect.top
+        this.left = rect.left
+        canvasEl.width = rect.width
+        canvasEl.height = rect.height
+        const ctx = canvasEl.getContext('2d')
+        this.ctx = ctx;
+        canvasEl.addEventListener('mousemove', this.mouseMoveHandler)
+        canvasEl.addEventListener('mousedown', this.mouseDownHandler)
+        canvasEl.addEventListener('mouseup', this.mouseUpHandler)
+        this.container.appendChild(canvasEl)
+    }
+
+    /**
+     * 获取当前轨道帧数据
+     */
+     renderFrameData(){
+        const images = this.trackImageMap[this.currentTrackData.name]
+        this.currentFrameData = this.trackFrameMap[this.currentTrackData.name][`frame-${this.currentFrameStep}`]
+        if(images){
+            const frame = images[this.currentFrameStep]
+            if(frame){
+                console.log('url: ', frame.image.src)
+                this.ctx.clearRect(0,0,this.width,this.height)
+                if(this.isClip){
+                    const _clipX = this.clipX/2
+                    this.ctx.drawImage(frame.image, _clipX, 0, frame.image.width - _clipX*2, frame.image.height, 0, 0, this.width + _clipX, this.height)
+                }else{
+                    this.ctx.drawImage(frame.image, 0, 0, frame.image.width, frame.image.height, 0, 0, this.width, this.height)
+                }
+                this.updateMarkers(frame)
+            }else{
+                console.log('no frame data')
+            }
+        }else{
+            console.log('no images')
+        }
+    }
+
+    /**
+     * 创建markers
+     */
+    createMarkers(count){
+        for(let i=0;i<count;i++){
+            const divEl = document.createElement('div')
+            divEl.setAttribute('d-markerId', i)
+            divEl.style.display = 'none'
+            divEl.className = 'marker-anmi'
+            this.markerEls.push({
+                marker: null,
+                el: divEl
+            })
+            divEl.addEventListener('click', this.clickMarker)
+            this.container.appendChild(divEl)
+        }
+    }
+
+    clickMarker =(ev)=>{
+        const fn = this.handler['markerClicked']
+        if(fn){
+            const markerId = ev.target.getAttribute('d-marker-name')
+            fn(markerId)
+        }
+    }
+
+    updateMarkers(){
+        this.markerEls.forEach(markerItem => {
+            markerItem.el.style.display = 'none'
+        })
+        if(!this.currentFrameData){
+            return
+        }
+        for(let i=0;i<this.currentFrameData.length;i++){
+            const markerData = this.currentFrameData[i]
+            const markerItem = this.markerEls[i]
+            const photoWidth = this.config.globalMeta.photoSize[0]
+            const photoHeight = this.config.globalMeta.photoSize[1]
+            try {
+                markerItem.el.setAttribute('d-marker-name', markerData.name)
+                const markerTop = Number(markerData.screenPosition.split(',')[1])
+                const markerLeft = Number(markerData.screenPosition.split(',')[0])
+                const top = markerTop / photoHeight * this.height
+                let width = 0
+                if(this.isClip){
+                    width = markerLeft / photoWidth * (this.width + this.clipX) - this.clipX/4
+                }else{
+                    width = markerLeft / photoWidth * this.width
+                }
+                if( (markerTop >= 0 && markerTop <= photoHeight) && (markerLeft >= 0 && markerLeft <= photoWidth && width <= this.width)){
+                    const imageUrl = "url('"+this.config.globalMeta.markerIcon[markerData.type.split('\r')[0]]+"')"
+                    setTimeout(()=>{
+                        markerItem.el.style.backgroundImage = imageUrl
+                    },0)
+                    markerItem.el.style = 'block'
+                    markerItem.el.style.top = `${top+this.top}px`
+                    markerItem.el.style.left = `${width+this.left}px`
+                }else{
+                    console.log('out of bounds')
+                }
+            } catch (error) {
+                // console.error('update markers:', error)
+            }
+        }
+    }
+
+    scenePositionToScreenLocation(position){
+        const {camera, width, height} = this
+        const centerX = width / 2
+        const centerY = height / 2
+        const ppv = position.project(camera)
+        return {
+            x: Math.round(centerX*ppv.x + centerX),
+            y: Math.round(-centerY*ppv.y + centerY)
+        }
+    }
+
+    /**
+     * 预加载图片
+     */
+    preDownloadImages(trackName){
+        // 总步数
+        if(this.trackImageMap[trackName]){
+            return
+        }
+        const vm = this
+        const frameDatas = []
+        this.trackImageMap[trackName] = frameDatas
+        const stepCount = this.currentTrackData.steps
+        for(let i=0;i<stepCount;i++){
+            const image = new Image()
+            const frameData = this.getFrameData(trackName, i)
+            image.onload = ()=>{
+                vm.downloadingImagesCount++
+                frameDatas[i].image = image
+                if(vm.downloadImagesCount === vm.downloadingImagesCount){
+                    const fn = this.handler['imagesDownloaded']
+                    if(fn){
+                        const at = new Date().getTime()
+                        fn(at - vm.downloadStartedAt)
+                    }
+                    console.log('downloadFinished')
+                    vm.renderFrameData()
+                }
+            }
+            image.src = frameData.imageUrl
+            frameDatas.push({
+                step: i,
+                frameData: frameData
+            })
+        }
+    }
+
+    /**
+     * 获取帧数据
+     * 首先通过公式取,再以值修正
+     */
+    getFrameData(trackName, step){
+        const track = this.config.tracks.find(item => {
+            return item.name === trackName
+        })
+        let imageUrl = track.photoUrl
+        imageUrl = imageUrl.replace('{prefixName}', track.prefixName)
+        imageUrl = imageUrl.replace('{step}', step)
+        const frame = this.trackFrameMap[track.name][`frame-${step}`]
+        return {
+            imageUrl: imageUrl,
+            frame: frame
+        }
+    }
+
+    changeTrack(type){
+        const lastTrackIndex = this.currentTrackIndex
+        if(type === 'next'){
+            // 切换下一个轨道
+            this.currentTrackIndex++
+        }
+        if(type === 'prev'){
+            // 切换上一个轨道
+            this.currentTrackIndex--
+        }
+        if(this.currentTrackIndex > this.config.tracks.length){
+            this.currentTrackIndex = this.config.tracks.length - 1
+        }
+        if(this.currentTrackIndex < 0){
+            this.currentTrackIndex = 0
+        }
+        if(this.currentTrackIndex !== lastTrackIndex){
+            if(this.config.tracks[this.currentTrackIndex]){
+                this.currentTrackData = this.config.tracks[this.currentTrackIndex]
+                console.log('change track', this.currentTrackData)
+                const fn = this.handler['trackChanged']
+                if(fn){
+                    fn(this.currentTrackData.name)
+                }
+                setTimeout(() => {                
+                    this.renderFrameData()
+                }, 0);
+            }
+        }
+    }
+
+
+    mouseMoveHandler = (ev)=>{
+        if(this.mouseDownStatus){
+            const diffX = ev.clientX - this.lastPosition.x
+            const diffY = ev.clientY - this.lastPosition.y
+            if(Math.abs(diffX) > Math.abs(diffY)){
+                // 水平方向移动,触发图像更新
+                if(Math.abs(diffX) > 10){
+                    // 阈值
+                    this.currentFrameStep += ev.clientX > this.lastPosition.x ? 1 : -1
+                    this.currentFrameStep = this.currentFrameStep%this.currentTrackData.steps
+                    if(this.currentFrameStep < 0){
+                        this.currentFrameStep = this.currentTrackData.steps + this.currentFrameStep
+                    }
+                    this.renderFrameData()
+                    this.lastPosition = {
+                        x: ev.clientX,
+                        y: ev.clientY
+                    }
+                }
+            }else{
+                // 竖直方向移动,触发轨道切换
+                if(Math.abs(diffY)>20){
+                    this.changeTrack(ev.clientY > this.lastPosition.y ? 'next' : 'prev')
+                    this.lastPosition = {
+                        x: ev.clientX,
+                        y: ev.clientY
+                    }
+                }
+            }
+        }
+    }
+    mouseDownHandler = (ev)=>{
+        this.mouseDownStatus = true
+        this.lastPosition = {
+            x: ev.clientX,
+            y: ev.clientY
+        }
+    }
+    mouseUpHandler = (ev)=>{
+        this.mouseDownStatus = false
+    }
+}

+ 320 - 0
markerApp/app/renderByPath.js

@@ -0,0 +1,320 @@
+class MarkerRenderByPath {
+    isClip = false;
+    clipX = 0;
+    container = null;
+    config = null;
+    lastPosition = null;
+    canvasEl = null;
+    ctx = null;
+    width = 0;
+    height = 0;
+    top = 0;
+    left = 0;
+    markerEls = [];
+    mouseDownStatus = false;
+    // 当前轨道索引
+    currentTrackIndex = 0;
+    // 当前轨道配置数据
+    currentTrackData = null;
+    // 当前轨道路径
+    currentTrackPath = null;
+    // 当前角度,0-1 表示0-Math.PI*2
+    currentAngle = 0;
+    // 当前帧步
+    currentFrameStep = 0;
+    // 轨道下的图像数据
+    trackImageMap = {
+
+    }
+
+    downloadImagesCount = 0
+    downloadingImagesCount = 0
+    downloadStartedAt = 0    
+    handler = {}
+    // 相机
+    camera = null;
+    constructor(options){
+        this.container = options.container
+        this.container.style.cursor = 'grab'
+        this.config = options.config
+        this.isClip = options.isClip
+        this.currentTrackData = this.config.tracks[0]
+        this.generateEl()
+        this.createMarkers()
+        this.changeTrack(null)
+        this.preDownloadImages()
+        this.camera = new THREE.PerspectiveCamera(75, this.width / this.height, 0.1, 1000);        
+    }
+
+    on(type, fn){
+        this.handler[type] = fn
+    }
+
+    resize(){
+        const rect = this.container.getBoundingClientRect()        
+        this.width = rect.width
+        this.height = rect.height
+        if(this.isClip){
+            this.clipX = (this.config.globalMeta.photoSize[0] / this.config.globalMeta.photoSize[1]) * this.height - this.width
+        }
+        this.top = rect.top
+        this.left = rect.left
+        this.canvasEl.width = rect.width
+        this.canvasEl.height = rect.height
+        this.renderFrameData()
+    }    
+
+    generateEl(){
+        const rect = this.container.getBoundingClientRect()
+        const canvasEl = document.createElement('canvas')
+        this.canvasEl = canvasEl     
+        this.width = rect.width
+        this.height = rect.height
+        if(this.isClip){
+            this.clipX = (this.config.globalMeta.photoSize[0] / this.config.globalMeta.photoSize[1]) * this.height - this.width
+        }
+        this.top = rect.top
+        this.left = rect.left
+        canvasEl.width = rect.width
+        canvasEl.height = rect.height
+        const ctx = canvasEl.getContext('2d')
+        this.ctx = ctx;
+        canvasEl.addEventListener('mousemove', this.mouseMoveHandler)
+        canvasEl.addEventListener('mousedown', this.mouseDownHandler)
+        canvasEl.addEventListener('mouseup', this.mouseUpHandler)
+        this.container.appendChild(canvasEl)
+    }
+
+    /**
+     * 获取当前轨道帧数据
+     */
+     renderFrameData(){
+        const images = this.trackImageMap[this.currentTrackData.name]
+        if(images){
+            const frame = images[this.currentFrameStep]
+            if(frame){
+                this.ctx.clearRect(0,0,this.width,this.height)
+                this.ctx.drawImage(frame.image, 0, 0, frame.image.width, frame.image.height, 0, 0, this.width, this.height)
+                this.updateCamera(frame)
+                this.updateMarkers(frame)
+            }
+        }
+    }
+
+    updateCamera(frame){
+        const {camera} = this
+        const _point = frame.frameData.cPoint
+        const _target = frame.frameData.cTarget
+        const cpoint = new THREE.Vector3(_point[0], _point[1], _point[2])
+        camera.position.copy(cpoint)
+        camera.lookAt(new THREE.Vector3(_target[0], _target[1], _target[2]))
+        camera.updateMatrix()
+        camera.updateMatrixWorld()
+        camera.updateWorldMatrix()
+        camera.updateProjectionMatrix()
+    }
+
+    /**
+     * 创建markers
+     */
+    createMarkers(){
+        this.config.markers.forEach(marker =>{
+            const divEl = document.createElement('div')
+            divEl.setAttribute('d-markerId', marker.id)            
+            divEl.className = 'marker-anmi'
+            marker._point = new THREE.Vector3(marker.position[0], marker.position[1], marker.position[2])
+            this.markerEls.push({
+                marker: marker,
+                el: divEl
+            })
+            divEl.addEventListener('click', this.clickMarker)
+            this.container.appendChild(divEl)
+        })
+    }
+
+    clickMarker =(ev)=>{
+        const fn = this.handler['markerClicked']
+        if(fn){
+            const markerId = ev.target.getAttribute('d-markerId')
+            fn(markerId)
+        }
+    }
+
+    updateMarkers(frame){
+        this.markerEls.forEach(markerItem => {
+            const imageUrl = "url('"+this.config.globalMeta.markerIcon[markerItem.marker.type.split('\r')[0]]+"')"
+            setTimeout(()=>{
+                markerItem.el.style.backgroundImage = imageUrl
+            },0)
+            const sP = this.scenePositionToScreenLocation(new THREE.Vector3().copy(markerItem.marker._point))
+            markerItem.el.style.top = `${sP.y}px`
+            markerItem.el.style.left = `${sP.x}px`
+            // 每step多少度
+            const stepAngle = 360 / this.currentTrackData.steps * frame.step
+            // const angle = frame.step * stepAngle
+            if(markerItem.marker.visibleRange[0] <= stepAngle && markerItem.marker.visibleRange[1] >= stepAngle){
+                markerItem.el.style.display = 'block'
+            }else{
+                markerItem.el.style.display = 'none'
+            }
+        })
+    }
+
+    scenePositionToScreenLocation(position){
+        const {camera, width, height} = this
+        const centerX = width / 2
+        const centerY = height / 2
+        const ppv = position.project(camera)
+        return {
+            x: Math.round(centerX*ppv.x + centerX),
+            y: Math.round(-centerY*ppv.y + centerY)
+        }
+    }
+
+    /**
+     * 预加载图片
+     */
+    preDownloadImages(){
+        // 总步数
+        if(this.trackImageMap[this.currentTrackData.name]){
+            return
+        }
+        const vm = this
+        this.config.tracks.forEach(track => {
+            vm.downloadImagesCount += track.steps
+        })
+        this.config.tracks.forEach(track => {
+            const frameDatas = []
+            this.trackImageMap[track.name] = frameDatas
+            const stepCount = track.steps
+            for(let i=0;i<stepCount;i++){
+                const image = new Image()
+                const frameData = this.getFrameData(i / stepCount, track)
+                image.onload = ()=>{
+                    vm.downloadingImagesCount++
+                    frameDatas.push({
+                        step: i,
+                        image: image,
+                        frameData: frameData
+                    })
+                    if(vm.downloadImagesCount === vm.downloadingImagesCount){
+                        const fn = this.handler['imagesDownloaded']
+                        if(fn){
+                            const at = new Date().getTime()
+                            fn(at - vm.downloadStartedAt)
+                        }
+                        console.log('downloadFinished')
+                        vm.changeTrack(null)
+                        vm.renderFrameData()
+                    }
+                }
+                image.src = frameData.imageUrl
+            }
+        })
+    }
+
+    /**
+     * 获取帧数据
+     * 首先通过公式取,再以值修正
+     */
+    getFrameData(step, track){
+        // 首先通过公式取,再以值修正
+        const fixData = track.stepParams.find(stepParamItem => {
+            return Math.abs(stepParamItem.stepValue - step) < 0.05
+        })
+        let imageUrl = ''
+        let cPoint = null
+        let cTarget = null
+        if(fixData){
+            // 有修正数据,使用修正数据
+            imageUrl = fixData.photoUrl,
+            cTarget = fixData.target,
+            cPoint = fixData.camera_position
+        }else{
+            // 使用轨道数据
+            imageUrl = track.photoUrl.replace('{prefixName}', track.prefixName)
+            imageUrl = imageUrl.replace('{step}', step*track.steps.toFixed(0))
+            cTarget = track.target
+            const cPath = new THREE.Path()
+            cPath.absarc(track.origin[0], track.origin[1], track.radis)
+            const point = cPath.getPointAt(Number(step))
+            cPoint = [point.x, track.height, point.y]
+        }        
+        return {
+            cPoint: cPoint,
+            imageUrl: imageUrl,
+            cTarget: cTarget
+        }
+    }
+
+    changeTrack(type){
+        if(type === 'next'){
+            // 切换下一个轨道
+            this.currentTrackIndex++
+        }
+        if(type === 'prev'){
+            // 切换上一个轨道
+            this.currentTrackIndex--
+        }
+        if(this.currentTrackIndex > this.config.tracks.length){
+            this.currentTrackIndex = this.config.tracks.length - 1
+        }
+        if(this.currentTrackIndex < 0){
+            this.currentTrackIndex = 0
+        }
+        if(this.config.tracks[this.currentTrackIndex]){
+            this.currentTrackData = this.config.tracks[this.currentTrackIndex]
+            const cPath = new THREE.Path()
+            cPath.absarc(this.currentTrackData.origin[0], this.currentTrackData.origin[1], this.currentTrackData.radis)
+            this.currentTrackPath = cPath
+            this.preDownloadImages()
+            const fn = this.handler['trackChanged']
+            if(fn){
+                fn(this.currentTrackData.name)
+            }
+            this.renderFrameData()
+        }
+    }
+    
+    mouseMoveHandler = (ev)=>{
+        if(this.mouseDownStatus){
+            const diffX = ev.clientX - this.lastPosition.x
+            const diffY = ev.clientY - this.lastPosition.y
+            if(Math.abs(diffX) > Math.abs(diffY)){
+                // 水平方向移动,触发图像更新
+                if(Math.abs(diffX) > 10){
+                    // 阈值
+                    this.currentFrameStep += ev.clientX > this.lastPosition.x ? -1 : 1
+                    this.currentFrameStep = this.currentFrameStep%this.currentTrackData.steps
+                    if(this.currentFrameStep < 0){
+                        this.currentFrameStep = this.currentTrackData.steps + this.currentFrameStep
+                    }
+                    this.renderFrameData()
+                    this.lastPosition = {
+                        x: ev.clientX,
+                        y: ev.clientY
+                    }
+                }
+            }else{
+                // 竖直方向移动,触发轨道切换
+                if(Math.abs(diffY)>20){
+                    this.changeTrack(ev.clientY > this.lastPosition.y ? 'next' : 'prev')
+                    this.lastPosition = {
+                        x: ev.clientX,
+                        y: ev.clientY
+                    }
+                }
+            }
+        }
+    }
+    mouseDownHandler = (ev)=>{
+        this.mouseDownStatus = true
+        this.lastPosition = {
+            x: ev.clientX,
+            y: ev.clientY
+        }
+    }
+    mouseUpHandler = (ev)=>{
+        this.mouseDownStatus = false
+    }
+}

+ 431 - 0
markerApp/assets/data/100M.txt

@@ -0,0 +1,431 @@
+0.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|1156 ,237|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|1113 ,320|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|775 ,237|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|831 ,166|camera
+入口摄像头|-1.9242851734161377,4.160922050476074,0.3136809468269348|1791 ,468|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|801 ,152|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|1117 ,390|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|842 ,169|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|972,774|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|640,673|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|444,499|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|627 ,503|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|700 ,398|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|881 ,460|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|967 ,581|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|836 ,535|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|1025 ,540|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|1542 ,619|camera
+主变#2|0,0,0|910 ,437|mics
+主变#1|0,0,0|716 ,445|mics
+SVG变#2|0,0,0|1050 ,482|mics
+SVG变#1|0,0,0|943 ,547|mics
+
+1.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|1226 ,279|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|1141 ,350|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|865 ,210|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|952 ,147|camera
+入口摄像头|-1.9242851734161377,4.160922050476074,0.3136809468269348|1804 ,648|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|960 ,139|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|1154 ,421|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|951 ,155|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|845 ,757|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|596 ,595|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|493 ,401|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|659 ,432|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|775 ,350|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|915 ,448|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|926 ,564|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|835 ,505|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|994 ,550|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|1482 ,736|camera
+主变#2|0,0,0|948 ,425|mics
+主变#1|0,0,0|765 ,397|mics
+SVG变#2|0,0,0|1058 ,497|mics
+SVG变#1|0,0,0|931 ,539|mics
+
+2.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|1265 ,330|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|1151 ,379|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|949 ,199|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|1059 ,155|camera
+入口摄像头|-1.9242851734161377,4.160922050476074,0.3136809468269348|1714 ,835|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|1102 ,146|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|1163 ,457|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|1050 ,156|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|731 ,713|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|575 ,513|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|569 ,311|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|705 ,378|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|846 ,319|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|936 ,436|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|893 ,549|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|837 ,478|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|966 ,544|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|1347 ,835|camera
+主变#2|0,0,0|977 ,420|mics
+主变#1|0,0,0|821 ,359|mics
+SVG变#2|0,0,0|1051 ,507|mics
+SVG变#1|0,0,0|915 ,528|mics
+
+3.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|1263 ,413|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|1118 ,430|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|1067 ,206|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|1197 ,195|camera
+入口摄像头|-1.9242851734161377,4.160922050476074,0.3136809468269348|-- ,--|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|1289 ,202|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|1138 ,509|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|1179 ,195|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|606 ,612|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|606 ,396|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|718 ,218|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|800 ,307|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|960 ,297|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|967 ,436|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|852 ,513|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|852 ,436|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|910 ,530|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|1070 ,917|camera
+主变#2|0,0,0|1012 ,427|mics
+主变#1|0,0,0|912 ,327|mics
+SVG变#2|0,0,0|1020 ,519|mics
+SVG变#1|0,0,0|887 ,501|mics
+
+4.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|1224 ,469|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|1079 ,460|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|1129 ,235|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|1264 ,244|camera
+入口摄像头|-1.9242851734161377,4.160922050476074,0.3136809468269348|-- ,--|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|1388 ,271|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|1099 ,544|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|1239 ,240|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|562 ,531|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|654 ,327|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|832 ,182|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|874 ,284|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1032 ,301|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|978 ,428|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|835 ,494|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|872 ,416|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|874 ,518|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|857 ,929|camera
+主变#2|0,0,0|1025 ,434|mics
+主变#1|0,0,0|974 ,322|mics
+SVG变#2|0,0,0|995 ,527|mics
+SVG变#1|0,0,0|877 ,478|mics
+
+5.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|1122 ,538|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|1001 ,484|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|1199 ,291|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|1325 ,334|camera
+入口摄像头|-1.9242851734161377,4.160922050476074,0.3136809468269348|-- ,--|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|1481 ,400|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|1015 ,571|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|1295 ,322|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|561 ,402|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|762 ,249|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|1013 ,164|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|990 ,272|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1130 ,322|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|976 ,447|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|829 ,448|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|910 ,386|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|841 ,484|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|572 ,838|camera
+主变#2|0,0,0|1003 ,436|mics
+主变#1|0,0,0|1060 ,337|mics
+SVG变#2|0,0,0|932 ,533|mics
+SVG变#1|0,0,0|865 ,460|mics
+
+6.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|1036 ,563|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|940 ,486|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|1232 ,334|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|1336 ,404|camera
+入口摄像头|-1.9242851734161377,4.160922050476074,0.3136809468269348|-- ,--|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|1500 ,506|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|954 ,579|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|1304 ,386|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|607 ,332|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|859 ,219|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|1136 ,178|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|1072 ,279|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1170 ,365|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|-- ,--|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|841 ,421|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|945 ,375|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|833 ,462|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|445 ,737|camera
+主变#2|0,0,0|-- ,--|mics
+主变#1|0,0,0|1120 ,355|mics
+SVG变#2|0,0,0|904 ,524|mics
+SVG变#1|0,0,0|878 ,437|mics
+
+7.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|934 ,584|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|882 ,482|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|1241 ,395|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|1308 ,490|camera
+入口摄像头|-1.9242851734161377,4.160922050476074,0.3136809468269348|221 ,900|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|1467 ,627|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|890 ,584|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|1276 ,462|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|674 ,275|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|960 ,213|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|1247 ,223|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|1145 ,314|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|-- ,--|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|-- ,--|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|857 ,405|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|977 ,387|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|819 ,431|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|363 ,627|camera
+主变#2|0,0,0|-- ,--|mics
+主变#1|0,0,0|1154 ,405|mics
+SVG变#2|0,0,0|878 ,519|mics
+SVG变#1|0,0,0|890 ,431|mics
+
+8.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|824 ,579|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|820 ,483|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|1218 ,465|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|1241 ,569|camera
+入口摄像头|-1.9242851734161377,4.160922050476074,0.3136809468269348|96 ,736|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|1374 ,755|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|824 ,596|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|1216 ,548|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|756 ,241|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|1056 ,232|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|1338 ,303|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|1205 ,367|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1236 ,489|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|-- ,--|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|883 ,403|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|1007 ,403|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|838 ,434|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|340 ,514|camera
+主变#2|0,0,0|-- ,--|mics
+主变#1|0,0,0|-- ,--|mics
+SVG变#2|0,0,0|-- ,--|mics
+SVG变#1|0,0,0|908 ,431|mics
+
+9.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|742,559|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|793,460|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|1178,541|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|1141,646|camera
+入口摄像头|-1.9242851734161377,4.160922050476074,0.3136809468269348|91,526|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|1224,867|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|801,501|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|1125,611|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|901,224|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|1192,279|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|1438,410|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|1273,446|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1242,573|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|962,484|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|945,404|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|1063,437|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|862,432|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|407,388|camera
+主变#2|0,0,0|1021,562|mics
+主变#1|0,0,0|1210,526|mics
+SVG变#2|0,0,0|869,505|mics
+SVG变#1|0,0,0|957,437|mics
+
+10.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|676,488|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|787,414|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|1080,606|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|967,693|camera
+入口摄像头|-1.9242851734161377,4.160922050476074,0.3136809468269348|232,292|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|957,933|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|789,473|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|967,649|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|1091,232|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|1332,365|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|1488,572|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|1302,552|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1193,665|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|984,505|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|1025,415|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|1114,483|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|926,417|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|572,252|camera
+主变#2|0,0,0|1015,575|mics
+主变#1|0,0,0|1195,610|mics
+SVG变#2|0,0,0|875,474|mics
+SVG变#1|0,0,0|1017,449|mics
+
+11.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|656,438|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|793,388|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|978,632|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|832,691|camera
+入口摄像头|-1.9242851734161377,4.160922050476074,0.3136809468269348|379,174|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|759,922|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|791,446|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|843,650|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|1200,271|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|1379,452|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|1444,694|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|1273,634|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1114,721|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|979,515|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|1061,436|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|1118,519|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|963,420|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|707,197|camera
+主变#2|0,0,0|968,581|mics
+主变#1|0,0,0|1142,667|mics
+SVG变#2|0,0,0|900,475|mics
+SVG变#1|0,0,0|1041,469|mics
+
+12.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|661,377|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|806,357|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|868,628|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|706,656|camera
+入口摄像头|-1.9242851734161377,4.160922050476074,0.3136809468269348|562,80|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|581,859|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|808,424|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|729,618|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|1289,325|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|1385,545|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|1336,799|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|1199,696|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1012,749|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|969,521|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|1085,462|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|1105,554|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|995,423|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|856,159|camera
+主变#2|0,0,0|935,579|mics
+主变#1|0,0,0|1062,701|mics
+SVG变#2|0,0,0|917,466|mics
+SVG变#1|0,0,0|1053,488|mics
+
+13.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|684,320|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|826,329|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|759,600|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|600,589|camera
+入口摄像头|-1.9242851734161377,4.160922050476074,0.3136809468269348|753,22|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|442,754|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|824,399|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|632,559|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|1343,396|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|1336,636|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|1170,875|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|1089,744|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|891,751|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|946,573|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|1087,489|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|1066,585|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|1016,433|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|1003,151|camera
+主变#2|0,0,0|894,569|mics
+主变#1|0,0,0|959,718|mics
+SVG变#2|0,0,0|926,458|mics
+SVG变#1|0,0,0|1047,509|mics
+
+14.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|736,279|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|862,314|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|678,559|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|541,516|camera
+入口摄像头|-1.9242851734161377,4.160922050476074,0.3136809468269348|961,9|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|373,639|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|859,376|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|576,494|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|1366,487|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|1248,722|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|977,917|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|966,771|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|785,733|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|912,572|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|1081,523|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|1025,635|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|1036,454|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|1154,177|camera
+主变#2|0,0,0|891,564|mics
+主变#1|0,0,0|863,717|mics
+SVG变#2|0,0,0|944,461|mics
+SVG变#1|0,0,0|1036,536|mics
+
+15.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|848,225|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|934,293|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|619,453|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|538,380|camera
+入口摄像头|-1.9242851734161377,4.160922050476074,0.3136809468269348|1272,41|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|386,443|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|929,351|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|569,370|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|1332,615|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|1058,794|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|695,873|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|790,740|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|669,647|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|874,546|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|1055,556|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|944,617|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|1053,478|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|1358,257|camera
+主变#2|0,0,0|842,526|mics
+主变#1|0,0,0|744,660|mics
+SVG变#2|0,0,0|977,459|mics
+SVG变#1|0,0,0|1009,553|mics
+
+16.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|936,205|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|986,285|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|624,381|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|587,294|camera
+入口摄像头|-1.9242851734161377,4.160922050476074,0.3136809468269348|1467,104|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|464,326|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|984,356|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|609,287|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|1260,687|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|913,798|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|549,787|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|696,687|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|633,575|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|862,519|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|1042,562|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|897,604|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|1057,492|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|1461,334|camera
+主变#2|0,0,0|845,490|mics
+主变#1|0,0,0|695,600|mics
+SVG变#2|0,0,0|1000,459|mics
+SVG变#1|0,0,0|989,555|mics
+
+17.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|1075,215|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|1067,300|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|698,286|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|723,199|camera
+入口摄像头|-1.9242851734161377,4.160922050476074,0.3136809468269348|1702,278|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|653,203|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|1070,368|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|736,200|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|1098,761|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|727,741|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|442,615|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|629,579|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|654,465|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|870,484|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|997,576|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|849,566|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|1053,540|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|1548,502|camera
+主变#2|0,0,0|877,453|mics
+主变#1|0,0,0|688,504|mics
+SVG变#2|0,0,0|1035,467|mics
+SVG变#1|0,0,0|960,554|mics

+ 384 - 0
markerApp/assets/data/56M.txt

@@ -0,0 +1,384 @@
+0.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|1223,227|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|1154,276|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|757,211|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|843,169|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|823,237|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|1162,398|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|850,158|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|918,673|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|507,571|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|314,435|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|539,460|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|652,399|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|873,449|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|943,522|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|787,503|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|1029,491|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|1712,606|camera
+主变#2|0,0,0|898,431|mic
+主变#1|0,0,0|705,429|mic
+SVG变#2|0,0,0|1030,456|mic
+SVG变#1|0,0,0|935,518|mic
+
+1.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|1343,258|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|1225,294|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|906,191|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|1023,165|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|1018,212|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|1239,423|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|1023,149|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|768,657|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|485,503|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|428,356|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|622,407|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|777,361|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|935,438|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|919,517|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|819,481|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|1018,500|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|1659,727|camera
+主变#2|0,0,0|978,430|mic
+主变#1|0,0,0|759,399|mic
+SVG变#2|0,0,0|1059,478|mic
+SVG变#1|0,0,0|935,512|mic
+
+1.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|1415,309|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|1251,334|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|1043,195|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|1187,177|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|1257,247|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|1268,464|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|1178,164|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|622,621|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|497,443|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|568,300|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|713,371|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|899,351|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|981,441|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|874,509|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|841,467|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|979,509|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|1462,839|camera
+主变#2|0,0,0|1038,437|mic
+主变#1|0,0,0|859,379|mic
+SVG变#2|0,0,0|1100,498|mic
+SVG变#1|0,0,0|927,513|mic
+
+3.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|1431,351|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|1234,358|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|1163,196|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|1327,196|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|1442,258|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|1259,494|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|1309,177|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|517,556|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|551,378|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|722,252|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|817,332|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1014,320|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|1034,448|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|864,506|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|874,443|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|935,498|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|1161,891|camera
+主变#2|0,0,0|1084,436|mic
+主变#1|0,0,0|958,358|mic
+SVG变#2|0,0,0|1084,505|mic
+SVG变#1|0,0,0|924,479|mic
+
+4.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|1394,403|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|1187,386|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|1278,221|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|1449,230|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|1611,316|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|1213,529|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|1417,214|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|473,486|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|642,328|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|898,230|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|938,316|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1141,348|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|1055,442|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|851,489|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|914,427|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|888,494|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|807,901|camera
+主变#2|0,0,0|1120,448|mic
+主变#1|0,0,0|1084,359|mic
+SVG变#2|0,0,0|1059,517|mic
+SVG变#1|0,0,0|920,496|mic
+
+5.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|1301,440|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|1115,396|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|1367,245|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|1534,277|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|1744,389|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|1139,550|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|1496,254|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|497,410|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|769,285|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|1085,218|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|1117,335|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1235,389|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|1086,440|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|850,462|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|968,413|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|851,471|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|489,839|camera
+主变#2|0,0,0|1135,472|mic
+主变#1|0,0,0|1126,420|mic
+SVG变#2|0,0,0|1018,534|mic
+SVG变#1|0,0,0|918,475|mic
+
+6.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|1162,478|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|1022,413|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|1421,296|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|1569,344|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|1806,502|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|1042,575|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|1523,317|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|572,359|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|914,268|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|1269,240|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|1193,330|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1269,412|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|1084,458|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|880,451|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|1042,443|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|837,464|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|270,747|camera
+SVG变#2|0,0,0|972,540|mic
+SVG变#1|0,0,0|933,449|mic
+
+7.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|978,507|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|914,423|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|1423,358|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|1518,423|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|1765,624|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|927,583|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|1475,391|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|677,324|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|1054,276|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|1427,287|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|909,448|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|835,454|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|165,640|camera
+SVG变#2|0,0,0|921,547|mic
+
+8.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|786,496|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|811,409|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|1367,403|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|1387,493|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|1594,741|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|1349,449|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|799,294|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|1185,289|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|1548,341|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1400,519|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|168,519|camera
+
+9.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|628,462|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|731,389|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|1246,448|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|1174,533|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|1300,825|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|1156,491|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|928,276|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|1294,315|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|1615,414|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|1387,460|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1345,572|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|252,414|camera
+主变#1|0,0,0|1307,531|mic
+
+10.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|523,422|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|677,369|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|1089,489|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|938,561|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|942,868|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|935,514|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|1061,285|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|1378,363|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|1619,509|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|1371,521|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1243,632|camera
+升压区监控#2|-0.21572043001651764,-1.175750732421875,0.09536571800708771|988,440|camera
+升压区监控#4双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1114,489|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|396,344|camera
+主变#1|0,0,0|1240,583|mic
+
+11.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|496,369|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|678,338|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|922,492|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|718,547|camera
+入口摄像头|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|179,261|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|602,836|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|736,499|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|1197,299|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|1438,417|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|1555,599|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|1316,573|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1115,665|camera
+升压区监控#3|-0.21572043001651764,-1.175750732421875,0.09536571800708771|972,536|camera
+升压区监控#2|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1033,443|camera
+升压区监控#4双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1112,505|camera
+升压区监控#1|-0.21572043001651764,-1.175750732421875,0.09536571800708771|904,430|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|586,289|camera
+主变#2|0,0,0|905,562|mic
+主变#1|0,0,0|1147,619|mic
+SVG变#1|0,0,0|1006,472|mic
+
+12.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|519,326|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|699,321|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|766,490|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|544,513|camera
+入口摄像头|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|444,198|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|346,765|camera
+外墙无人机监控|
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|577,471|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|1312,339|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|1446,490|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|1401,687|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|1213,625|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|964,687|camera
+升压区监控#3|-0.21572043001651764,-1.175750732421875,0.09536571800708771|910,552|camera
+升压区监控#2|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1065,451|camera
+升压区监控#4双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1090,528|camera
+升压区监控#1|-0.21572043001651764,-1.175750732421875,0.09536571800708771|948,428|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|788,262|camera
+主变#2|0,0,0|866,555|mic
+主变#1|0,0,0|1030,638|mic
+SVG变#2|0,0,0|848,469|mic
+SVG变#1|0,0,0|1021,482|mic
+
+13.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|584,297|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|752,293|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|637,472|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|432,464|camera
+入口摄像头|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|704,165|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|199,667|camera
+外墙无人机监控|-2.23610258102417,-1.5728330612182617,0.2683399021625519|754,428|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|472,428|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|1386,399|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|1386,564|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|1169,756|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|1066,667|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|804,684|camera
+升压区监控#3|-0.21572043001651764,-1.175750732421875,0.09536571800708771|880,558|camera
+升压区监控#2|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1076,482|camera
+升压区监控#4双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1044,558|camera
+升压区监控#1|-0.21572043001651764,-1.175750732421875,0.09536571800708771|976,441|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|983,265|camera
+主变#2|0,0,0|818,564|mic
+主变#1|0,0,0|899,660|mic
+SVG变#2|0,0,0|874,467|mic
+SVG变#1|0,0,0|1021,501|mic
+
+14.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|653,266|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|800,278|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|540,427|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|378,400|camera
+入口摄像头|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|946,154|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|146,561|camera
+外墙无人机监控|-2.23610258102417,-1.5728330612182617,0.2683399021625519|797,417|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|416,372|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|1414,453|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|1268,623|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|897,774|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|897,677|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|667,654|camera
+升压区监控#3|-0.21572043001651764,-1.175750732421875,0.09536571800708771|850,540|camera
+升压区监控#2|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1075,499|camera
+升压区监控#4双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|981,569|camera
+升压区监控#1|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1013,450|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|1155,281|camera
+主变#2|0,0,0|791,538|mic
+主变#1|0,0,0|770,645|mic
+SVG变#2|0,0,0|897,462|mic
+SVG变#1|0,0,0|1004,512|mic
+
+15.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|746,243|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|861,271|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|498,385|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|385,345|camera
+入口摄像头|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|1185,168|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|185,467|camera
+外墙无人机监控|-2.23610258102417,-1.5728330612182617,0.2683399021625519|853,416|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|425,322|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|1397,521|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|1107,668|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|624,764|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|741,668|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|568,616|camera
+升压区监控#3|-0.21572043001651764,-1.175750732421875,0.09536571800708771|766,540|camera
+升压区监控#2|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1063,533|camera
+升压区监控#4双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|915,575|camera
+升压区监控#1|-0.21572043001651764,-1.175750732421875,0.09536571800708771|1023,463|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|1314,314|camera
+主变#2|0,0,0|729,533|mic
+主变#1|0,0,0|666,620|mic
+SVG变#2|0,0,0|938,448|mic
+SVG变#1|0,0,0|984,520|mic
+
+16.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|843,219|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|927,264|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|499,326|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|441,281|camera
+入口摄像头|-1.9242851734161377,4.160922050476074,0.3136809468269348|1417,198|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|279,379|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|--,--|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|481,264|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|1335,573|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|918,678|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|431,695|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|619,633|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|514,564|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|801,509|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|--,--|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|858,568|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|1037,474|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|1467,357|camera
+主变#2|0,0,0|767,495|mics
+主变#1|0,0,0|597,578|mics
+SVG变#2|0,0,0|952,455|mics
+
+17.jpg
+主控制楼周界#1|-1.557329535484314,0.7895857095718384,0.7896454334259033|843,219|camera
+主控制楼周界#2|-0.8556689620018005,0.795291543006897,0.7896454334259033|927,264|camera
+主控制楼周界#3|-0.8335169553756714,-1.096359133720398,0.7896454334259033|499,326|camera
+主控制楼周界#4|-1.5609389543533325,-1.1048190593719482,0.7896454334259033|441,281|camera
+入口摄像头|-1.9242851734161377,4.160922050476074,0.3136809468269348|1417,198|camera
+围栏监控#4|-2.23610258102417,-1.5728330612182617,0.2683399021625519|279,379|camera
+外墙无人机监控|-1.0054996013641357,0.7870161533355713,0.24854230880737305|--,--|camera
+楼顶监控|27.4335994720459,-3.741879940032959,0.9351580142974854|481,264|camera
+围栏监控#1|1.6852420568466187,1.2772496938705444,0.2852483093738556|1335,573|camera
+围栏监控#2|1.6871438026428223,-0.3902778923511505,0.2852483093738556|918,678|camera
+围栏监控#3|1.098610520362854,-1.9922888278961182,0.2683399021625519|431,695|camera
+升压区监控#6|0.7365515232086182,-1.097273588180542,0.22333593666553497|619,633|camera
+升压区监控#5双光|-0.21572043001651764,-1.175750732421875,0.09536571800708771|514,564|camera
+升压区监控#3|-0.08920668065547943,-0.06902019679546356,0.11885321140289307|801,509|camera
+升压区监控#2|0.37339407205581665,0.5036653876304626,0.218866765499115|--,--|camera
+升压区监控#4双光|0.45949751138687134,-0.06394636631011963,0.11356461048126221|858,568|camera
+升压区监控#1|0.20076310634613037,0.8292624950408936,0.2256995439529419|1037,474|camera
+危化房监控|-0.19672724604606628,3.344426155090332,0.2501046657562256|1467,357|camera
+主变#2|0,0,0|767,495|mics
+主变#1|0,0,0|597,578|mics
+SVG变#2|0,0,0|952,455|mics
+SVG变#1|0,0,0|960,526|mics

BIN
markerApp/assets/demoImages/imgs/0.00.png


BIN
markerApp/assets/demoImages/imgs/0.10.png


BIN
markerApp/assets/demoImages/imgs/0.20.png


BIN
markerApp/assets/demoImages/imgs/0.30.png


BIN
markerApp/assets/demoImages/imgs/0.40.png


BIN
markerApp/assets/demoImages/imgs/0.50.png


BIN
markerApp/assets/demoImages/imgs/0.60.png


BIN
markerApp/assets/demoImages/imgs/0.70.png


BIN
markerApp/assets/demoImages/imgs/0.80.png


BIN
markerApp/assets/demoImages/imgs/0.90.png


BIN
markerApp/assets/demoImages/imgs2/0.00.png


BIN
markerApp/assets/demoImages/imgs2/0.10.png


BIN
markerApp/assets/demoImages/imgs2/0.20.png


BIN
markerApp/assets/demoImages/imgs2/0.30.png


BIN
markerApp/assets/demoImages/imgs2/0.40.png


BIN
markerApp/assets/demoImages/imgs2/0.50.png


BIN
markerApp/assets/demoImages/imgs2/0.60.png


BIN
markerApp/assets/demoImages/imgs2/0.70.png


BIN
markerApp/assets/demoImages/imgs2/0.80.png


BIN
markerApp/assets/demoImages/imgs2/0.90.png


BIN
markerApp/assets/frameImages/100M/1_0.jpg


BIN
markerApp/assets/frameImages/100M/1_1.jpg


BIN
markerApp/assets/frameImages/100M/1_10.jpg


BIN
markerApp/assets/frameImages/100M/1_11.jpg


BIN
markerApp/assets/frameImages/100M/1_12.jpg


BIN
markerApp/assets/frameImages/100M/1_13.jpg


BIN
markerApp/assets/frameImages/100M/1_14.jpg


BIN
markerApp/assets/frameImages/100M/1_15.jpg


BIN
markerApp/assets/frameImages/100M/1_16.jpg


BIN
markerApp/assets/frameImages/100M/1_17.jpg


BIN
markerApp/assets/frameImages/100M/1_2.jpg


BIN
markerApp/assets/frameImages/100M/1_3.jpg


BIN
markerApp/assets/frameImages/100M/1_4.jpg


BIN
markerApp/assets/frameImages/100M/1_5.jpg


BIN
markerApp/assets/frameImages/100M/1_6.jpg


BIN
markerApp/assets/frameImages/100M/1_7.jpg


BIN
markerApp/assets/frameImages/100M/1_8.jpg


BIN
markerApp/assets/frameImages/100M/1_9.jpg


BIN
markerApp/assets/frameImages/56M/0_0.jpg


BIN
markerApp/assets/frameImages/56M/0_1.jpg


BIN
markerApp/assets/frameImages/56M/0_10.jpg


BIN
markerApp/assets/frameImages/56M/0_11.jpg


BIN
markerApp/assets/frameImages/56M/0_12.jpg


BIN
markerApp/assets/frameImages/56M/0_13.jpg


BIN
markerApp/assets/frameImages/56M/0_14.jpg


BIN
markerApp/assets/frameImages/56M/0_15.jpg


BIN
markerApp/assets/frameImages/56M/0_16.jpg


BIN
markerApp/assets/frameImages/56M/0_17.jpg


BIN
markerApp/assets/frameImages/56M/0_2.jpg


BIN
markerApp/assets/frameImages/56M/0_3.jpg


BIN
markerApp/assets/frameImages/56M/0_4.jpg


BIN
markerApp/assets/frameImages/56M/0_5.jpg


BIN
markerApp/assets/frameImages/56M/0_6.jpg


BIN
markerApp/assets/frameImages/56M/0_7.jpg


BIN
markerApp/assets/frameImages/56M/0_8.jpg


BIN
markerApp/assets/frameImages/56M/0_9.jpg


BIN
markerApp/assets/imgs/anim-pointer.png


+ 1 - 0
markerApp/assets/imgs/marker-pointer.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1667304784111" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9516" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M782.8 112.2C713.5 42.9 617.7 0 512 0 300.5 0 129 171.5 129 383c0 84 27.1 161.8 73.2 225.3L512 1024l302.6-406.5c50.2-65 80.4-145.9 80.4-234.5 0-105.7-42.9-201.5-112.2-270.8zM512 563.2c-99.3 0-180.2-80.4-180.2-180.2 0-99.8 80.9-179.7 180.2-179.7s180.2 80.4 180.2 180.2S611.3 563.2 512 563.2z" p-id="9517" fill="#1296db"></path></svg>

BIN
markerApp/assets/imgs/marker.png


BIN
markerApp/assets/imgs/marker_camera.png


BIN
markerApp/assets/imgs/marker_mic.png


+ 43 - 0
markerApp/configByData.js

@@ -0,0 +1,43 @@
+// 整体配置
+const config = {
+    // 整体配置
+    globalMeta: {
+        // 图片大小
+        photoSize: [1920, 1080],
+        // 图标类型,记住地址是以当前html路径为基础
+        markerIcon: {
+            'mic': '../assets/imgs/marker_mic.png',
+            'camera': '../assets/imgs/marker_camera.png',
+        },
+    },
+    // 相机运行轨道说明
+    // 因为是无人机拍摄,涉及到离散点抽取,因此不设置数学轨道,改而传递位置
+    tracks: [
+        // 轨道1,例如低轨道
+        {
+            // 图标前缀
+            prefixName: '0_',
+            name: '56M',
+            // 细分步数
+            steps: 18,
+            dataUrl: '../assets/data/56M.txt',
+            // 图片集,step为替换符
+            photoUrl: '../assets/frameImages/56M/{prefixName}{step}.jpg',
+            // 例如多个轨道时,在页面组件如何排序使用
+            sort: 0
+        },
+        // 轨道1,例如低轨道
+        {
+            // 图标前缀
+            prefixName: '1_',
+            name: '100M',
+            dataUrl: '../assets/data/100M.txt',
+            // 细分步数
+            steps: 18,
+            // 图片集,step为替换符
+            photoUrl: '../assets/frameImages/100M/{prefixName}{step}.jpg',
+            // 例如多个轨道时,在页面组件如何排序使用
+            sort: 1
+        },
+    ]
+}

+ 125 - 0
markerApp/configByPath.js

@@ -0,0 +1,125 @@
+// 整体配置
+const config = {
+    // 整体配置
+    globalMeta: {
+        // 图片大小
+        photoSize: [1920, 1080],
+        // 窗口大小
+        viewportSize: [1920, 1080],
+        // 图标类型,记住地址是以当前html路径为基础
+        markerIcon: {
+            'mic': '../assets/imgs/marker_mic.png',
+            'camera': '../assets/imgs/marker_camera.png',
+        },
+    },
+    // 相机运行轨道说明
+    // 因为是无人机拍摄,涉及到离散点抽取,因此不设置数学轨道,改而传递位置
+    tracks: [
+        // 轨道1,例如低轨道
+        {
+            name: 'track-1',
+            // 图标前缀
+            prefixName: '0_',
+            // 相机在每个的指向位置,位置为世界坐标系下,默认是0,0,0,不建议更改
+            target: [0,0,0],
+            // 函数式轨道
+            // 轨道圆心
+            origin: [0,0,0],
+            // 轨道高度
+            height: 56,
+            // 半径
+            radis: 60,
+            // 细分步数
+            steps: 18,
+            // 图片集,step为替换符
+            photoUrl: '../assets/frameImages/56M/{prefixName}{step}.jpg',
+            // 微调的参数,做修正
+            stepParams: [
+                // 0.1表示 把相机轨道分为n分,每份的值
+                {
+                    // 名称
+                    name: '0',
+                    // 细分段数
+                    stepValue: 0,
+                    // 相机位置,世界坐标系
+                    camera_position: [0, 0, 10],
+                    // 相机指向位置,世界坐标系,如果前面的target已经配置,这里可以省略,就取前面的target
+                    target: [0,0,0],
+                    // 图像地址
+                    photoUrl: '../assets/frameImages/56M/0_1.jpg'
+                },
+                //……
+            ],
+            // 例如多个轨道时,在页面组件如何排序使用
+            sort: 0
+        },
+        {
+            name: 'track-2',
+            // 相机在每个的指向位置,位置为世界坐标系下,默认是0,0,0,不建议更改
+            target: [0,0,0],
+            // 图标前缀
+            prefixName: '1_',
+            // 函数式轨道
+            // 轨道圆心
+            origin: [0,0,0],
+            // 轨道高度
+            height: 100,
+            // 半径
+            radis: 60,
+            // 细分步数
+            steps: 18,
+            // 图片集,step为替换符
+            photoUrl: '../assets/frameImages/100M/{prefixName}{step}.jpg',
+            // 微调的参数,做修正
+            stepParams: [
+                // 0.1表示 把相机轨道分为n分,每份的值
+                {
+                    // 名称
+                    name: '0',
+                    // 细分段数
+                    stepValue: 0,
+                    // 相机位置,世界坐标系
+                    camera_position: [0, 0, 10],
+                    // 相机指向位置,世界坐标系,如果前面的target已经配置,这里可以省略,就取前面的target
+                    target: [0,0,0],
+                    // 图像地址
+                    photoUrl: '../assets/frameImages/100M/0_0.jpg'
+                },
+                //……
+            ],
+            // 例如多个轨道时,在页面组件如何排序使用
+            sort: 1
+        }
+    ],
+
+    // 标记
+    markers: [
+        {
+            id: 'marker-001',
+            name: 'xxxx',
+            type: 'camera',
+            // 标记位置,世界空间坐标系,可以不与模型绑定
+            position: [-0.19672724604606628,3.344426155090332,0.2501046657562256],
+            // 可见范围,目前是取的上述轨道的 点迹 索引,例如下面表示 从 第3张 到 第50张可见
+            // 这里如果不好用,可以改为[0.2, 0.5],表示step 在0.2 - 0.5 范围可见
+            // 使用 0 - 360 ° 作为范围,确定起始点
+            visibleRange: [30,80],
+            // 是否可用/生效,预留字段
+            enable: true
+        },
+        {
+            id: 'marker-002',
+            name: 'yyy',
+            type: 'mic',
+            // 标记位置,世界空间坐标系,可以不与模型绑定
+            position: [-10,-10,-10],
+            // 可见范围,目前是取的上述轨道的 点迹 索引,例如下面表示 从 第3张 到 第50张可见
+            // 这里如果不好用,可以改为[0.2, 0.5],表示step 在0.2 - 0.5 范围可见
+            // 使用 0 - 360 ° 作为范围,确定起始点
+            visibleRange: [30,80],
+            // 是否可用/生效,预留字段
+            enable: true
+        },
+        // ……
+    ]
+}

Файловите разлики са ограничени, защото са твърде много
+ 0 - 0
markerApp/libs/axios.min.js


Файловите разлики са ограничени, защото са твърде много
+ 9759 - 0
markerApp/libs/three.js


+ 48 - 0
markerApp/renderByData/index.html

@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>测试Marker-ByData</title>
+    <!-- <script src="./libs/three.js"></script> -->
+    <script src="../libs/axios.min.js"></script>
+    <script src="../app/renderByData.js"></script>
+    <script src="../configByData.js"></script>
+    <link rel="stylesheet" href="../app/index.css">
+</head>
+<style>
+	#render-container{
+		width: 100vw;
+		height: 100vh;
+	}
+</style>
+<body>
+    <div>Header <span id="info"></span></div>
+    <div id="render-container"></div>
+    <!-- <div id="render-container" style="width: 960px; height: 540px"></div> -->
+    <script>
+        const infoEl = document.getElementById('info')
+        const container = document.getElementById('render-container')
+        const markerRender = new MarkerRenderByData({
+            container: container,
+            config: config,
+            // 是否裁剪
+            // isClip: false,
+            isClip: true
+        })
+
+        markerRender.on('imagesDownloaded', (timing)=>{
+            console.log('imagesDownloaded,', timing)
+        })
+
+        markerRender.on('trackChanged', (trackId)=>{
+            infoEl.textContent = `track: ${trackId}`
+        })
+
+        markerRender.on('markerClicked', (markerId)=>{
+            console.log('click marker:', markerId)
+        })
+    </script>
+</body>
+</html>

+ 32 - 0
markerApp/renderByPath/index.html

@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>测试Marker-ByPath</title>
+    <script src="../libs/three.js"></script>
+    <script src="../app/renderByPath.js"></script>
+    <script src="../configByPath.js"></script>
+    <link rel="stylesheet" href="../app/index.css">
+</head>
+<body>
+    <div>Header <span id="info"></span></div>
+    <div id="render-container" style="width: 960px; height: 540px"></div>
+    <script>
+        const infoEl = document.getElementById('info')
+        const container = document.getElementById('render-container')
+        const markerRender = new MarkerRenderByPath({
+            container: container,
+            config: config
+        })
+        markerRender.on('trackChanged', (trackId)=>{
+            infoEl.textContent = `track: ${trackId}`
+        })
+
+        markerRender.on('markerClicked', (markerId)=>{
+            console.log('click marker:', markerId)
+        })
+    </script>
+</body>
+</html>

Някои файлове не бяха показани, защото твърде много файлове са промени