import * as turf from "@turf/turf"; const mapRoam = { coord:[ [ 123.13255714786649, 23.067683098974722 ], [ 122.93636587570226, 23.188425587402776 ], [ 122.73982043428656, 23.308924483009175 ], [ 122.54291884301844, 23.429177925979 ], [ 122.34565912727214, 23.549184049216148 ], [ 122.14803931858805, 23.668940978328354 ], [ 121.95005745486677, 23.78844683161317 ], [ 121.7517115805666, 23.90769972004486 ], [ 121.61410438678931, 23.99015603989342 ] ], entityModel:null, url:'http://localhost/Model/model/Cesium_Air.glb', // 两点插值去重 getTurfLineChunk(){ var line = turf.lineString([[123.13255714786649,23.067683098974722], [121.61410438678931,23.99015603989342]]); var chunk = turf.lineChunk(line, 15, {units: 'miles'}); const val = turf.cleanCoords(line).geometry.coordinates; const std = []; chunk.features.filter(item=>{ for(var i in item.geometry.coordinates){ std.push(item.geometry.coordinates[i]) } }) var line = turf.lineString(std); }, startRoam(){ this.trackView(); }, closeRoam(){ if(this.entityModel == null)return Viewer.clock.shouldAnimate = false; Viewer.entities.removeAll() this.entityModel = null; }, trackView(){ const myPositions= this.coord; Viewer.clock.shouldAnimate = true var start = Cesium.JulianDate.fromDate(new Date(2015, 2, 25, 16)); var stop = Cesium.JulianDate.addSeconds( start, this.coord.length - 1, new Cesium.JulianDate() ); Viewer.clock.startTime = start.clone(); Viewer.clock.stopTime = stop.clone(); Viewer.clock.currentTime = start.clone(); Viewer.clock.clockRange = Cesium.ClockRange.LOOP_STOP; Viewer.clock.multiplier = 1; var position = computeCirclularFlight(); this.entityModel = Viewer.entities.add({ availability: new Cesium.TimeIntervalCollection([ new Cesium.TimeInterval({ start: start, stop: stop, }), ]), position: position, orientation: new Cesium.VelocityOrientationProperty(position), model: { uri: this.url, minimumPixelSize: 64, scale: 0.5 }, path: { resolution: 1, material: new Cesium.PolylineGlowMaterialProperty({ glowPower: 0.1, color: Cesium.Color.RED, }), width: 16, }, }); this.entityModel.model.show = true function computeCirclularFlight(){ var property = new Cesium.SampledPositionProperty(); property.setInterpolationOptions({ interpolationDegree: 2, interpolationAlgorithm: Cesium.HermitePolynomialApproximation, }); for (var i = 0; i < myPositions.length; i++) { var time = Cesium.JulianDate.addSeconds( start, i, new Cesium.JulianDate() ); var position = Cesium.Cartesian3.fromDegrees( myPositions[i][0], myPositions[i][1], 5 ); property.addSample(time, position); } return property; } }, } export default mapRoam;