You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2 年之前
2 年之前
2 年之前
2 年之前
2 年之前
2 年之前
2 年之前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <div id="viewer-container" ></div>
  2. <script>
  3. let viewer = undefined
  4. function loadBuild(){
  5. let layer = new DC.TilesetLayer('layer_build').addTo(viewer)
  6. let build = new DC.Tileset(
  7. '//resource.dvgis.cn/data/3dtiles/ljz/tileset.json',
  8. {skipLevels:true}
  9. )
  10. let fs = `
  11. varying vec3 v_positionEC;
  12. void main(void){
  13. vec4 position = czm_inverseModelView * vec4(v_positionEC,1); // 位置
  14. float glowRange = 100.0; // 光环的移动范围(高度)
  15. gl_FragColor = vec4(0.2, 0.5, 1.0, 1.0); // 颜色
  16. gl_FragColor *= vec4(vec3(position.z / 100.0), 1.0); // 渐变
  17. // 动态光环
  18. float time = fract(czm_frameNumber / 360.0);
  19. time = abs(time - 0.5) * 2.0;
  20. float diff = step(0.005, abs( clamp(position.z / glowRange, 0.0, 1.0) - time));
  21. gl_FragColor.rgb += gl_FragColor.rgb * (1.0 - diff);
  22. }
  23. `
  24. build.setCustomShader(fs)
  25. layer.addOverlay(build)
  26. }
  27. function loadRoad(){
  28. let layer_road = new DC.GeoJsonLayer('layer_road','examples/data/road_ljz.geojson')
  29. layer_road.eachOverlay(item =>{
  30. if(item.polyline){
  31. DC.Util.merge(item.polyline,{
  32. material: new DC.PolylineTrailMaterialProperty({
  33. speed: 5 ,
  34. color:DC.Color.ORANGE.withAlpha(0.5)
  35. }),
  36. width:2
  37. })
  38. }
  39. })
  40. viewer.addLayer(layer_road)
  41. }
  42. function loadParabola(){
  43. let layer = new DC.PrimitiveLayer('line_layer')
  44. viewer.addLayer(layer)
  45. let center = DC.Position.fromObject({lng: 121.49536592256028, lat: 31.241616722278213})
  46. let positions = [
  47. {lng: 121.46575474842851, lat: 31.25491511358896 },
  48. {lng: 121.4813104277516, lat: 31.227003838010212 },
  49. {lng: 121.50657363869442, lat: 31.227646614453125 },
  50. {lng: 121.52418391477424, lat: 31.25831768661698 },
  51. {lng: 121.51534816216447, lat: 31.238932318412797},
  52. {lng: 121.47411195956543, lat: 31.23653254767207},
  53. {lng: 121.4948618756933, lat: 31.22694576870397},
  54. {lng: 121.49695060106232, lat: 31.275195479192174},
  55. {lng: 121.46575474842851, lat: 31.25491511358896 },
  56. {lng: 121.4813104277516, lat: 31.227003838010212 },
  57. {lng: 121.50657363869442, lat: 31.227646614453125 },
  58. {lng: 121.52418391477424, lat: 31.25831768661698 },
  59. {lng: 121.51534816216447, lat: 31.238932318412797},
  60. {lng: 121.47411195956543, lat: 31.23653254767207},
  61. {lng: 121.4948618756933, lat: 31.22694576870397},
  62. {lng: 121.49695060106232, lat: 31.275195479192174}].map(item=> DC.Position.fromObject(item))
  63. positions.forEach(item => {
  64. let line = new DC.FlowLinePrimitive(DC.Math.parabola(center,item,500),3)
  65. line.setStyle({
  66. speed: 5 * Math.random(),
  67. color: new DC.Color(0.5, 0.8, 1.0, 1.0)
  68. })
  69. layer.addOverlay(line)
  70. })
  71. }
  72. function loadCircle(){
  73. let layer_circle = new DC.PrimitiveLayer('layer-circle').addTo(viewer)
  74. let circle= new DC.ScanCirclePrimitive("121.49536592256028,31.241616722278213",5000)
  75. circle.setStyle({
  76. speed: 6 ,
  77. color: new DC.Color(0.5, 0.8, 1.0, 1.0)
  78. })
  79. layer_circle.addOverlay(circle)
  80. }
  81. function loadVLine (){
  82. let layer = new DC.PrimitiveLayer('vLine_layer')
  83. viewer.addLayer(layer)
  84. let positions =[
  85. {lng: 121.47345213010999, lat: 31.255897743532817},
  86. {lng: 121.48003080908789, lat: 31.238221981850913}
  87. ,{lng: 121.48587705354248, lat: 31.23057714185711}
  88. ,{lng: 121.4879953677747, lat: 31.262151572375352}
  89. ,{lng: 121.50906299339611, lat: 31.250152480540006}
  90. ,{lng: 121.50417770232045, lat: 31.24023424714257}
  91. ,{lng: 121.5182173410024, lat: 31.254527578802833}
  92. ,{lng: 121.50967147857085, lat: 31.35601077672074}
  93. ,{lng: 121.51899277846763, lat: 31.245648856298804} ]
  94. positions.forEach(item=>{
  95. let position = DC.Position.fromObject(item)
  96. let end = position.copy()
  97. end.alt = 1000 * Math.random()
  98. let line = new DC.FlowLinePrimitive([position,end],3)
  99. line.setStyle({
  100. speed: 5,
  101. color: new DC.Color(0.5, 0.8, 1.0, 1.0)
  102. })
  103. layer.addOverlay(line)
  104. })
  105. }
  106. DC.config.baseUrl = '../libs/dc-sdk/resources/'
  107. let viewer = new DC.Viewer('viewer-container')
  108. let baseLayer = DC.ImageryLayerFactory.createAMapImageryLayer({
  109. style: 'img',
  110. crs:'WGS84'
  111. })
  112. baseLayer.defaultBrightness = 0.05
  113. viewer.setOptions({
  114. enableFxaa:true
  115. })
  116. viewer.addBaseLayer( baseLayer)
  117. viewer.use(new DC.Effect())
  118. viewer.effect.bloom.enable = true
  119. let globeRotate = new DC.GlobeRotate(viewer,{
  120. duration:5,
  121. callback:()=>{
  122. viewer.flyToPosition("121.50995868,31.20091392,4405.64,344.2,-46.66",()=>{
  123. loadBuild()
  124. loadRoad()
  125. loadParabola()
  126. loadCircle()
  127. loadVLine()
  128. })
  129. }
  130. })
  131. globeRotate.start()
  132. }
  133. </script>