Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

GatheringPlaceGraphics.js 2.0KB

pirms 4 gadiem
pirms 4 gadiem
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /**
  2. * @Author: Caven
  3. * @Date: 2020-08-30 17:17:52
  4. */
  5. import { Cesium } from '@dc-modules/namespace'
  6. import Parse from '@dc-modules/parse/Parse'
  7. import { Transform } from '@dc-modules/transform'
  8. import { PlotUtil } from '@dc-modules/utils'
  9. const HALF_PI = Math.PI / 2
  10. const FITTING_COUNT = 100
  11. class GatheringPlaceGraphics {
  12. constructor(options) {
  13. this._positions = options?.positions || []
  14. this.t = 0.4
  15. }
  16. set positions(positions) {
  17. this._positions = positions
  18. }
  19. get positions() {
  20. return this._positions
  21. }
  22. get hierarchy() {
  23. return this._createHierarchy()
  24. }
  25. _createHierarchy() {
  26. let pnts = Parse.parsePolygonCoordToArray(
  27. Transform.transformCartesianArrayToWGS84Array(this._positions)
  28. )[0]
  29. if (this._positions.length === 2) {
  30. let mid = PlotUtil.mid(pnts[0], pnts[1])
  31. let d = PlotUtil.distance(pnts[0], mid) / 0.9
  32. let pnt = PlotUtil.getThirdPoint(pnts[0], mid, HALF_PI, d, true)
  33. pnts = [pnts[0], pnt, pnts[1]]
  34. }
  35. let mid = PlotUtil.mid(pnts[0], pnts[2])
  36. pnts.push(mid, pnts[0], pnts[1])
  37. let normals = []
  38. for (let i = 0; i < pnts.length - 2; i++) {
  39. let pnt1 = pnts[i]
  40. let pnt2 = pnts[i + 1]
  41. let pnt3 = pnts[i + 2]
  42. let normalPoints = PlotUtil.getBisectorNormals(this.t, pnt1, pnt2, pnt3)
  43. normals = normals.concat(normalPoints)
  44. }
  45. let count = normals.length
  46. normals = [normals[count - 1]].concat(normals.slice(0, count - 1))
  47. let pList = []
  48. for (let i = 0; i < pnts.length - 2; i++) {
  49. let pnt1 = pnts[i]
  50. let pnt2 = pnts[i + 1]
  51. pList.push(pnt1)
  52. for (let t = 0; t <= FITTING_COUNT; t++) {
  53. let pnt = PlotUtil.getCubicValue(
  54. t / FITTING_COUNT,
  55. pnt1,
  56. normals[i * 2],
  57. normals[i * 2 + 1],
  58. pnt2
  59. )
  60. pList.push(pnt)
  61. }
  62. pList.push(pnt2)
  63. }
  64. return new Cesium.PolygonHierarchy(
  65. Transform.transformWGS84ArrayToCartesianArray(Parse.parsePositions(pList))
  66. )
  67. }
  68. }
  69. export default GatheringPlaceGraphics