LinearComponentExtracter.js 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import LineString from '../LineString'
  2. import Geometry from '../Geometry'
  3. import hasInterface from '../../../../../hasInterface'
  4. import Collection from '../../../../../java/util/Collection'
  5. import LinearRing from '../LinearRing'
  6. import GeometryComponentFilter from '../GeometryComponentFilter'
  7. import ArrayList from '../../../../../java/util/ArrayList'
  8. export default class LinearComponentExtracter {
  9. constructor() {
  10. LinearComponentExtracter.constructor_.apply(this, arguments)
  11. }
  12. static constructor_() {
  13. this._lines = null
  14. this._isForcedToLineString = false
  15. if (arguments.length === 1) {
  16. const lines = arguments[0]
  17. this._lines = lines
  18. } else if (arguments.length === 2) {
  19. const lines = arguments[0], isForcedToLineString = arguments[1]
  20. this._lines = lines
  21. this._isForcedToLineString = isForcedToLineString
  22. }
  23. }
  24. static getGeometry() {
  25. if (arguments.length === 1) {
  26. const geom = arguments[0]
  27. return geom.getFactory().buildGeometry(LinearComponentExtracter.getLines(geom))
  28. } else if (arguments.length === 2) {
  29. const geom = arguments[0], forceToLineString = arguments[1]
  30. return geom.getFactory().buildGeometry(LinearComponentExtracter.getLines(geom, forceToLineString))
  31. }
  32. }
  33. static getLines() {
  34. if (arguments.length === 1) {
  35. const geom = arguments[0]
  36. return LinearComponentExtracter.getLines(geom, false)
  37. } else if (arguments.length === 2) {
  38. if (hasInterface(arguments[0], Collection) && hasInterface(arguments[1], Collection)) {
  39. const geoms = arguments[0], lines = arguments[1]
  40. for (let i = geoms.iterator(); i.hasNext(); ) {
  41. const g = i.next()
  42. LinearComponentExtracter.getLines(g, lines)
  43. }
  44. return lines
  45. } else if (arguments[0] instanceof Geometry && typeof arguments[1] === 'boolean') {
  46. const geom = arguments[0], forceToLineString = arguments[1]
  47. const lines = new ArrayList()
  48. geom.apply(new LinearComponentExtracter(lines, forceToLineString))
  49. return lines
  50. } else if (arguments[0] instanceof Geometry && hasInterface(arguments[1], Collection)) {
  51. const geom = arguments[0], lines = arguments[1]
  52. if (geom instanceof LineString)
  53. lines.add(geom)
  54. else
  55. geom.apply(new LinearComponentExtracter(lines))
  56. return lines
  57. }
  58. } else if (arguments.length === 3) {
  59. if (typeof arguments[2] === 'boolean' && (hasInterface(arguments[0], Collection) && hasInterface(arguments[1], Collection))) {
  60. const geoms = arguments[0], lines = arguments[1], forceToLineString = arguments[2]
  61. for (let i = geoms.iterator(); i.hasNext(); ) {
  62. const g = i.next()
  63. LinearComponentExtracter.getLines(g, lines, forceToLineString)
  64. }
  65. return lines
  66. } else if (typeof arguments[2] === 'boolean' && (arguments[0] instanceof Geometry && hasInterface(arguments[1], Collection))) {
  67. const geom = arguments[0], lines = arguments[1], forceToLineString = arguments[2]
  68. geom.apply(new LinearComponentExtracter(lines, forceToLineString))
  69. return lines
  70. }
  71. }
  72. }
  73. filter(geom) {
  74. if (this._isForcedToLineString && geom instanceof LinearRing) {
  75. const line = geom.getFactory().createLineString(geom.getCoordinateSequence())
  76. this._lines.add(line)
  77. return null
  78. }
  79. if (geom instanceof LineString) this._lines.add(geom)
  80. }
  81. setForceToLineString(isForcedToLineString) {
  82. this._isForcedToLineString = isForcedToLineString
  83. }
  84. get interfaces_() {
  85. return [GeometryComponentFilter]
  86. }
  87. }