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.

Polyline.js 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. /**
  2. * @Author: Caven
  3. * @Date: 2020-01-06 15:03:25
  4. */
  5. import { Cesium } from '@dc-modules/namespace'
  6. import State from '@dc-modules/state/State'
  7. import Parse from '@dc-modules/parse/Parse'
  8. import { Util } from '@dc-modules/utils'
  9. import { Transform } from '@dc-modules/transform'
  10. import { center, distance } from '@dc-modules/math'
  11. import Overlay from '../Overlay'
  12. class Polyline extends Overlay {
  13. constructor(positions) {
  14. super()
  15. this._positions = Parse.parsePositions(positions)
  16. this._delegate = new Cesium.Entity({ polyline: {} })
  17. this.type = Overlay.getOverlayType('polyline')
  18. this._state = State.INITIALIZED
  19. }
  20. set positions(positions) {
  21. this._positions = Parse.parsePositions(positions)
  22. this._delegate.polyline.positions = Transform.transformWGS84ArrayToCartesianArray(
  23. this._positions
  24. )
  25. return this
  26. }
  27. get positions() {
  28. return this._positions
  29. }
  30. get center() {
  31. return center(this._positions)
  32. }
  33. get distance() {
  34. return distance(this._positions)
  35. }
  36. _mountedHook() {
  37. /**
  38. * initialize the Overlay parameter
  39. */
  40. this.positions = this._positions
  41. }
  42. /**
  43. * Sets Text
  44. * @param text
  45. * @param textStyle
  46. * @returns {Polyline}
  47. */
  48. setLabel(text, textStyle) {
  49. this._delegate.position = Transform.transformWGS84ToCartesian(this.center)
  50. this._delegate.label = {
  51. text: text,
  52. ...textStyle
  53. }
  54. return this
  55. }
  56. /**
  57. * Sets style
  58. * @param style
  59. * @returns {Polyline}
  60. */
  61. setStyle(style) {
  62. if (!style || Object.keys(style).length === 0) {
  63. return this
  64. }
  65. delete style['positions']
  66. this._style = style
  67. Util.merge(this._delegate.polyline, this._style)
  68. return this
  69. }
  70. /**
  71. * Parse from entity
  72. * @param entity
  73. * @returns {Polyline}
  74. */
  75. static fromEntity(entity) {
  76. let polyline = undefined
  77. let now = Cesium.JulianDate.now()
  78. if (entity.polyline) {
  79. let positions = Transform.transformCartesianArrayToWGS84Array(
  80. entity.polyline.positions.getValue(now)
  81. )
  82. polyline = new Polyline(positions)
  83. polyline.attr = {
  84. ...entity?.properties?.getValue(now)
  85. }
  86. }
  87. return polyline
  88. }
  89. }
  90. Overlay.registerType('polyline')
  91. export default Polyline