EdgeString.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import CoordinateList from '../../geom/CoordinateList'
  2. import CoordinateArrays from '../../geom/CoordinateArrays'
  3. import ArrayList from '../../../../../java/util/ArrayList'
  4. export default class EdgeString {
  5. constructor() {
  6. EdgeString.constructor_.apply(this, arguments)
  7. }
  8. static constructor_() {
  9. this._factory = null
  10. this._directedEdges = new ArrayList()
  11. this._coordinates = null
  12. const factory = arguments[0]
  13. this._factory = factory
  14. }
  15. getCoordinates() {
  16. if (this._coordinates === null) {
  17. let forwardDirectedEdges = 0
  18. let reverseDirectedEdges = 0
  19. const coordinateList = new CoordinateList()
  20. for (let i = this._directedEdges.iterator(); i.hasNext(); ) {
  21. const directedEdge = i.next()
  22. if (directedEdge.getEdgeDirection())
  23. forwardDirectedEdges++
  24. else
  25. reverseDirectedEdges++
  26. coordinateList.add(directedEdge.getEdge().getLine().getCoordinates(), false, directedEdge.getEdgeDirection())
  27. }
  28. this._coordinates = coordinateList.toCoordinateArray()
  29. if (reverseDirectedEdges > forwardDirectedEdges)
  30. CoordinateArrays.reverse(this._coordinates)
  31. }
  32. return this._coordinates
  33. }
  34. toLineString() {
  35. return this._factory.createLineString(this.getCoordinates())
  36. }
  37. add(directedEdge) {
  38. this._directedEdges.add(directedEdge)
  39. }
  40. }