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.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. /**
  2. * @Author: Caven
  3. * @Date: 2023-01-07 15:49:26
  4. */
  5. import { DeveloperError, EllipsoidTerrainProvider } from '@cesium/engine'
  6. class BaseLayerPicker {
  7. constructor(options) {
  8. if (!options.globe) {
  9. throw new DeveloperError('globe is required')
  10. }
  11. this._globe = options.globe
  12. this._imageryProviders = []
  13. this._terrainProviders = []
  14. this._selectedImagery = undefined
  15. this._selectedTerrain = undefined
  16. }
  17. set selectedImagery(imagery) {
  18. if (!imagery || !imagery.providers) {
  19. new DeveloperError('imagery format error')
  20. }
  21. const imageryLayers = this._globe.imageryLayers
  22. if (!this._selectedImagery) {
  23. for (let i = imagery.providers.length - 1; i >= 0; i--) {
  24. imageryLayers.addImageryProvider(imagery.providers[i], 0)
  25. }
  26. } else if (
  27. this._selectedImagery &&
  28. imagery.id !== this._selectedImagery.id
  29. ) {
  30. imageryLayers.removeAll()
  31. for (let i = imagery.providers.length - 1; i >= 0; i--) {
  32. imageryLayers.addImageryProvider(imagery.providers[i], 0)
  33. }
  34. }
  35. this._selectedImagery = imagery
  36. }
  37. get selectedImagery() {
  38. return this._selectedImagery
  39. }
  40. set selectedTerrain(terrian) {
  41. if (this.selectedImagery !== terrian) {
  42. this._globe.depthTestAgainstTerrain = !(
  43. terrian instanceof EllipsoidTerrainProvider
  44. )
  45. this._globe.terrainProvider = terrian
  46. this._selectedTerrain = terrian
  47. }
  48. }
  49. get selectedTerrain() {
  50. return this._selectedTerrain
  51. }
  52. /**
  53. *
  54. * @param provider
  55. * @returns {BaseLayerPicker}
  56. */
  57. addImageryProvider(provider) {
  58. let providers = []
  59. let len = this._imageryProviders.length + 1
  60. if (Array.isArray(provider)) {
  61. providers = provider.slice(0)
  62. } else {
  63. providers = [provider]
  64. }
  65. this._imageryProviders.push({
  66. id: `dc-imagery-${len}`,
  67. providers
  68. })
  69. return this
  70. }
  71. /**
  72. *
  73. * @param provider
  74. * @returns {BaseLayerPicker}
  75. */
  76. addTerrainProvider(provider) {
  77. this._terrainProviders.push(provider)
  78. return this
  79. }
  80. /**
  81. *
  82. * @param index
  83. * @returns {BaseLayerPicker}
  84. */
  85. changeImagery(index) {
  86. if (index > this._imageryProviders.length - 1) {
  87. new DeveloperError('index error ')
  88. return this
  89. }
  90. this.selectedImagery = this._imageryProviders[index]
  91. return this
  92. }
  93. /**
  94. *
  95. * @param index
  96. * @returns {BaseLayerPicker}
  97. */
  98. changeTerrain(index) {
  99. if (index > this._terrainProviders.length - 1) {
  100. new DeveloperError('index error ')
  101. return this
  102. }
  103. this.selectedTerrain = this._terrainProviders[index]
  104. }
  105. }
  106. export default BaseLayerPicker