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.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <div id="viewer-container" ></div>
  2. <script>
  3. let viewer = undefined
  4. function generatePosition(num,isAdd) {
  5. let list = []
  6. for (let i = 0; i < num; i++) {
  7. let lng = 121.49536592256028 + Math.random() * 0.04 * (isAdd ? 1 :-1)
  8. let lat = 31.241616722278213 + Math.random() * 0.04 * (isAdd ? 1 :-1)
  9. list.push({lng,lat})
  10. }
  11. return list
  12. }
  13. function loadCircle(){
  14. let layer_circle = new DC.PrimitiveLayer('layer-circle').addTo(viewer)
  15. let positions = generatePosition(5)
  16. positions = positions.concat(generatePosition(5,true))
  17. positions.forEach(item=>{
  18. let circle= new DC.ScanCirclePrimitive(item,200)
  19. circle.setStyle({
  20. speed: 8 * Math.random() ,
  21. color:DC.Color.GREEN
  22. })
  23. layer_circle.addOverlay(circle)
  24. })
  25. }
  26. function loadVLine (){
  27. let layer = new DC.PrimitiveLayer('vLine_layer')
  28. viewer.addLayer(layer)
  29. let positions = generatePosition(50,true)
  30. positions = positions.concat(generatePosition(50,))
  31. positions.forEach(item=>{
  32. let position = DC.Position.fromObject(item)
  33. let end = position.copy()
  34. end.alt = 5000 * Math.random()
  35. let line = new DC.FlowLinePrimitive([position,end],0.5)
  36. line.setStyle({
  37. speed: 6 * Math.random(),
  38. color: DC.Color.fromCssColorString("rgb(141,172,172)"),
  39. percent:0.1,
  40. gradient:0.01
  41. })
  42. layer.addOverlay(line)
  43. })
  44. }
  45. function loadBuild(){
  46. let layer = new DC.TilesetLayer('layer_build').addTo(viewer)
  47. let build = new DC.Tileset(
  48. '//resource.dvgis.cn/data/3dtiles/ljz/tileset.json',
  49. {skipLevels:true}
  50. )
  51. let fs = `
  52. varying vec3 v_positionEC;
  53. void main(void){
  54. vec4 position = czm_inverseModelView * vec4(v_positionEC,1); // 位置
  55. float glowRange = 100.0; // 光环的移动范围(高度)
  56. gl_FragColor = vec4(0.1, 0.1, 0.2, 1.0) ; // 颜色
  57. // 动态光环
  58. float time = fract(czm_frameNumber / 360.0);
  59. time = abs(time - 0.5) * 2.0;
  60. float diff = step(0.005, abs(clamp(position.z / glowRange, 0.0, 1.0) - time));
  61. gl_FragColor.rgb += gl_FragColor.rgb * (1.0 - diff);
  62. }
  63. `
  64. build.setCustomShader(fs)
  65. layer.addOverlay(build)
  66. }
  67. function loadRiver(){
  68. let layer_river = new DC.GeoJsonLayer('layer_river','examples/data/hpj.geojson').addTo(viewer)
  69. layer_river.eachOverlay(item => {
  70. DC.Util.merge(item.polygon,{
  71. outline:false,
  72. material: new DC.WaterMaterialProperty({
  73. normalMap:'../assets/icon/waterNormalsSmall.jpg',
  74. frequency: 1000.0,
  75. animationSpeed: 0.01,
  76. amplitude: 100,
  77. specularIntensity: 1
  78. })
  79. })
  80. })
  81. }
  82. function loadRoad(){
  83. let layer_road = new DC.GeoJsonLayer('layer_road','examples/data/road_ljz.geojson')
  84. let colors=[
  85. DC.Color.fromCssColorString("rgb(34,80,186)"),
  86. DC.Color.fromCssColorString("rgb(247,155,251)"),
  87. DC.Color.fromCssColorString("rgb(97,234,181)"),
  88. DC.Color.fromCssColorString("rgb(203,77,46)")
  89. ]
  90. layer_road.eachOverlay(item =>{
  91. if(item.polyline){
  92. DC.Util.merge(item.polyline,{
  93. material: new DC.PolylineTrailMaterialProperty({
  94. speed: 10,
  95. color: colors[Math.floor(4*Math.random())]
  96. }),
  97. width:2
  98. })
  99. }
  100. })
  101. viewer.addLayer(layer_road)
  102. }
  103. DC.config.baseUrl = '../libs/dc-sdk/resources/'
  104. let viewer = new DC.Viewer('viewer-container')
  105. let baseLayer = DC.ImageryLayerFactory.createBaiduImageryLayer({
  106. style: 'dark',
  107. crs:'WGS84'
  108. })
  109. baseLayer.defaultBrightness = 0.05
  110. viewer.addBaseLayer( baseLayer)
  111. viewer.setOptions({
  112. enableFxaa:true
  113. })
  114. viewer.use(new DC.Effect())
  115. viewer.effect.bloom.enable = true
  116. viewer.flyToPosition("121.49437363,31.2070558,2705.19,0.6,-43.06",()=>{
  117. loadRiver()
  118. loadCircle()
  119. loadVLine()
  120. loadBuild()
  121. loadRoad()
  122. })
  123. }
  124. </script>