SegmentStringDissolver.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import hasInterface from '../../../../hasInterface'
  2. import Collection from '../../../../java/util/Collection'
  3. import OrientedCoordinateArray from './OrientedCoordinateArray'
  4. import SegmentString from './SegmentString'
  5. import CoordinateArrays from '../geom/CoordinateArrays'
  6. import TreeMap from '../../../../java/util/TreeMap'
  7. export default class SegmentStringDissolver {
  8. constructor() {
  9. SegmentStringDissolver.constructor_.apply(this, arguments)
  10. }
  11. static constructor_() {
  12. this._merger = null
  13. this._ocaMap = new TreeMap()
  14. if (arguments.length === 0) {
  15. SegmentStringDissolver.constructor_.call(this, null)
  16. } else if (arguments.length === 1) {
  17. const merger = arguments[0]
  18. this._merger = merger
  19. }
  20. }
  21. findMatching(oca, segString) {
  22. const matchSS = this._ocaMap.get(oca)
  23. return matchSS
  24. }
  25. getDissolved() {
  26. return this._ocaMap.values()
  27. }
  28. dissolve() {
  29. if (hasInterface(arguments[0], Collection)) {
  30. const segStrings = arguments[0]
  31. for (let i = segStrings.iterator(); i.hasNext(); )
  32. this.dissolve(i.next())
  33. } else if (hasInterface(arguments[0], SegmentString)) {
  34. const segString = arguments[0]
  35. const oca = new OrientedCoordinateArray(segString.getCoordinates())
  36. const existing = this.findMatching(oca, segString)
  37. if (existing === null) {
  38. this.add(oca, segString)
  39. } else
  40. if (this._merger !== null) {
  41. const isSameOrientation = CoordinateArrays.equals(existing.getCoordinates(), segString.getCoordinates())
  42. this._merger.merge(existing, segString, isSameOrientation)
  43. }
  44. }
  45. }
  46. add(oca, segString) {
  47. this._ocaMap.put(oca, segString)
  48. }
  49. }
  50. function SegmentStringMerger() {}
  51. SegmentStringDissolver.SegmentStringMerger = SegmentStringMerger