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.

BaseLayerPicker.js 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /**
  2. * @Author : Caven Chen
  3. */
  4. import { Cesium } from '../../namespace'
  5. const { ImageryLayer } = Cesium
  6. class BaseLayerPicker {
  7. constructor(options) {
  8. if (!options.globe) {
  9. throw new Error('globe is required')
  10. }
  11. this._globe = options.globe
  12. this._imageryLayers = []
  13. this._selectedImageryLayer = undefined
  14. this._count = 0
  15. }
  16. set selectedImageryLayer(imageryLayer) {
  17. if (!imageryLayer || !imageryLayer.layers) {
  18. new Error('imagery format error')
  19. }
  20. if (
  21. this._selectedImageryLayer &&
  22. imageryLayer.id === this._selectedImageryLayer.id
  23. ) {
  24. return
  25. }
  26. if (
  27. this._selectedImageryLayer &&
  28. imageryLayer.id !== this._selectedImageryLayer.id
  29. ) {
  30. for (let i = 0; i < this._selectedImageryLayer.cache.length; i++) {
  31. this._globe.imageryLayers.remove(this._selectedImageryLayer.cache[i])
  32. }
  33. imageryLayer.cache = []
  34. }
  35. for (let i = imageryLayer.layers.length - 1; i >= 0; i--) {
  36. let layer = imageryLayer.layers[i]
  37. let imagery = ImageryLayer.fromProviderAsync(layer, imageryLayer.options)
  38. layer && this._globe.imageryLayers.add(imagery, 0)
  39. imageryLayer.cache.push(imagery)
  40. }
  41. this._selectedImageryLayer = imageryLayer
  42. }
  43. get selectedImageryLayer() {
  44. return this._selectedImageryLayer
  45. }
  46. /**
  47. *
  48. * @param imageryLayer
  49. * @param options
  50. * @returns {BaseLayerPicker}
  51. */
  52. addImageryLayer(imageryLayer, options = {}) {
  53. let imageryLayers = []
  54. if (Array.isArray(imageryLayer)) {
  55. imageryLayers = imageryLayer.slice(0)
  56. } else {
  57. imageryLayers = [imageryLayer]
  58. }
  59. this._count++
  60. this._imageryLayers.push({
  61. id: `imagery-no-${this._count}`,
  62. layers: imageryLayers,
  63. cache: [],
  64. })
  65. return this
  66. }
  67. /**
  68. *
  69. * @param index
  70. * @returns {BaseLayerPicker}
  71. */
  72. changeImageryLayer(index) {
  73. if (index > this._imageryLayers.length - 1) {
  74. throw new Error('index error')
  75. }
  76. this.selectedImageryLayer = this._imageryLayers[index]
  77. return this
  78. }
  79. }
  80. export default BaseLayerPicker