| | |
| | | <script src="${ctxPath}/static/js/track3.js"></script> |
| | | <script type="text/javascript" src="//mapopen-pub-jsapi.bj.bcebos.com/jsapiGlgeo/track.js"></script> |
| | | <script src="${ctxPath}/static/modular/system/tOrderTaxi/tOrderTaxi_info.js"></script> |
| | | <script> |
| | | var temp = "${guiji}" |
| | | // |
| | | console.log("看看数据") |
| | | console.log(temp) |
| | | // 使用正则表达式替换等号为冒号,并添加双引号 |
| | | const jsonString = temp |
| | | .replace(/\b(\w+)\b(?==)/g, '"$1"') // 将键名用双引号括起来 |
| | | .replace(/=/g, ':') // 将等号替换为冒号 |
| | | .replace(/'/g, '"'); // 确保所有引号都是双引号 |
| | | console.log(jsonString) |
| | | // 将字符串解析为JSON数组 |
| | | const jsonArray = JSON.parse(jsonString); |
| | | temp = jsonArray; |
| | | |
| | | console.log(jsonArray); |
| | | console.log(temp) |
| | | console.log(temp[0]) |
| | | console.log(temp[0].lon) |
| | | var map = new BMapGL.Map('allmap', { |
| | | style: 'grayed-out', |
| | | displayOptions: { |
| | | indoor: false, |
| | | poiText: false, |
| | | poiIcon: false, |
| | | building: false, |
| | | } |
| | | }); |
| | | var point = new BMapGL.Point(temp[0].lon, temp[0].lat); |
| | | |
| | | map.centerAndZoom(point, 18); |
| | | map.enableScrollWheelZoom(true); |
| | | map.setTilt(35); |
| | | |
| | | var track = new Track.View(map, { |
| | | lineLayerOptions: { |
| | | style: { |
| | | strokeWeight: 8, |
| | | strokeLineJoin: 'round', |
| | | strokeLineCap: 'round' |
| | | }, |
| | | } |
| | | }); |
| | | |
| | | var trackData = []; |
| | | var colorOffset = []; |
| | | for (var item of temp) { |
| | | var point = new BMapGL.Point(item.lon, item.lat); |
| | | var trackPoint = new Track.TrackPoint(point); |
| | | trackData.push(trackPoint); |
| | | // 不同速度区间对应颜色 |
| | | var choose = [0.9, 0.5, 0.1]; |
| | | var color = choose[Math.floor(Math.random() * choose.length)]; |
| | | colorOffset.push(color); |
| | | } |
| | | var startMarker = new BMapGL.Marker(trackData[0].getPoint(), { |
| | | icon: new BMapGL.Icon('https://mapopen-pub-jsapi.bj.bcebos.com/jsapiGlgeo/img/start.png', new BMapGL.Size(25, 40)), |
| | | offset: new BMapGL.Size(0, -16), |
| | | }); |
| | | map.addOverlay(startMarker); |
| | | var endMarker = new BMapGL.Marker(trackData[trackData.length-1].getPoint(), { |
| | | icon: new BMapGL.Icon('https://mapopen-pub-jsapi.bj.bcebos.com/jsapiGlgeo/img/end.png', new BMapGL.Size(25, 40)), |
| | | offset: new BMapGL.Size(0, -16), |
| | | |
| | | }); |
| | | map.addOverlay(endMarker); |
| | | var duration = 60000; |
| | | var step = duration / trackData.length; |
| | | |
| | | var trackRoad = new Track.LiveTrack({ |
| | | // visible: false, |
| | | duration: step, |
| | | linearTexture: [[0, '#f45e0c'], [0.5, '#f6cd0e'], [1, '#2ad61d']], |
| | | guideStyle: { |
| | | style:{ |
| | | traceDisappear: false, |
| | | traceStart: true, |
| | | sequence: true, |
| | | marginLength: 32, |
| | | arrowColor: '#fff', |
| | | strokeColor: 'rgba(27, 142, 236, 1)', |
| | | strokeTextureUrl: 'https://mapopen-pub-jsapi.bj.bcebos.com/jsapiGlgeo/img/down.png', |
| | | strokeTextureWidth: 64, |
| | | strokeTextureHeight: 32, |
| | | } |
| | | }, |
| | | }); |
| | | |
| | | trackRoad.setGuidTrackPath(trackData); |
| | | trackRoad.on(Track.LineCodes.GUIDE_STATUS, (e) => { |
| | | if (e.status === Track.GuidCodes.ADD_TO_MAP) { |
| | | var guidTrack = trackRoad.getGuidTrack(); |
| | | guidTrack.on(Track.LineCodes.STATUS, (status) => { |
| | | switch (status) { |
| | | case Track.StatusCodes.FINISH: |
| | | var box = trackRoad.getBBox(); |
| | | if(box){ |
| | | var bounds = [new BMapGL.Point(box[0], box[1]), new BMapGL.Point(box[2], box[3])]; |
| | | map.setViewport(bounds); |
| | | } |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | var movePoint = new Track.ModelPoint({ point: trackData[0].getPoint(), style:{ |
| | | url: 'https://mapopen-pub-jsapi.bj.bcebos.com/jsapiGlgeo/img/bus.glb', |
| | | scale: 9, |
| | | level: 18, |
| | | rotationX: 90, |
| | | rotationY: 90, |
| | | rotationZ: 0 |
| | | } }); |
| | | movePoint.setRotation(trackRoad.getGuidTrack().getStepInfoByIndex(0).angle); |
| | | |
| | | trackRoad.setMovePoint(movePoint); |
| | | |
| | | track.addTrackLine(trackRoad); |
| | | track.focusTrack(trackRoad); |
| | | |
| | | var ani; |
| | | var start = null; |
| | | var index = 0; |
| | | var finishIndex = 0; |
| | | |
| | | |
| | | function startAnimation(timestamp) { |
| | | if (!start) start = timestamp; |
| | | var progress = timestamp - start; |
| | | var next = step * (index - finishIndex); |
| | | |
| | | if(progress > next){ |
| | | if(index<trackData.length){ |
| | | movePoint.moveTo(trackData[index]); |
| | | var obj = trackRoad.getGuidTrack().getStepInfoByIndex(index); |
| | | trackRoad.setGradientColors(colorOffset.slice(0,index+1)); |
| | | index++; |
| | | }else{ |
| | | pauseAnimation(); |
| | | } |
| | | |
| | | } |
| | | ani = requestAnimationFrame(startAnimation); |
| | | } |
| | | |
| | | |
| | | function stopAnimation() { |
| | | pauseAnimation(); |
| | | index = 0; |
| | | finishIndex = index; |
| | | |
| | | start = null; |
| | | trackRoad.clearTrackPoint(); |
| | | movePoint.setPoint(trackData[0].getPoint()); |
| | | movePoint.setRotation(trackRoad.getGuidTrack().getStepInfoByIndex(0).angle); |
| | | } |
| | | function pauseAnimation() { |
| | | cancelAnimationFrame(ani); |
| | | finishIndex = index; |
| | | start = null; |
| | | } |
| | | function resumeAnimation() { |
| | | startAnimation(); |
| | | } |
| | | </script> |
| | | @} |