選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

Polyline.js 2.2KB

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