GeometryCombiner.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import ArrayList from '../../../../../java/util/ArrayList'
  2. export default class GeometryCombiner {
  3. constructor() {
  4. GeometryCombiner.constructor_.apply(this, arguments)
  5. }
  6. static constructor_() {
  7. this._geomFactory = null
  8. this._skipEmpty = false
  9. this._inputGeoms = null
  10. const geoms = arguments[0]
  11. this._geomFactory = GeometryCombiner.extractFactory(geoms)
  12. this._inputGeoms = geoms
  13. }
  14. static combine() {
  15. if (arguments.length === 1) {
  16. const geoms = arguments[0]
  17. const combiner = new GeometryCombiner(geoms)
  18. return combiner.combine()
  19. } else if (arguments.length === 2) {
  20. const g0 = arguments[0], g1 = arguments[1]
  21. const combiner = new GeometryCombiner(GeometryCombiner.createList(g0, g1))
  22. return combiner.combine()
  23. } else if (arguments.length === 3) {
  24. const g0 = arguments[0], g1 = arguments[1], g2 = arguments[2]
  25. const combiner = new GeometryCombiner(GeometryCombiner.createList(g0, g1, g2))
  26. return combiner.combine()
  27. }
  28. }
  29. static extractFactory(geoms) {
  30. if (geoms.isEmpty()) return null
  31. return geoms.iterator().next().getFactory()
  32. }
  33. static createList() {
  34. if (arguments.length === 2) {
  35. const obj0 = arguments[0], obj1 = arguments[1]
  36. const list = new ArrayList()
  37. list.add(obj0)
  38. list.add(obj1)
  39. return list
  40. } else if (arguments.length === 3) {
  41. const obj0 = arguments[0], obj1 = arguments[1], obj2 = arguments[2]
  42. const list = new ArrayList()
  43. list.add(obj0)
  44. list.add(obj1)
  45. list.add(obj2)
  46. return list
  47. }
  48. }
  49. extractElements(geom, elems) {
  50. if (geom === null) return null
  51. for (let i = 0; i < geom.getNumGeometries(); i++) {
  52. const elemGeom = geom.getGeometryN(i)
  53. if (this._skipEmpty && elemGeom.isEmpty()) continue
  54. elems.add(elemGeom)
  55. }
  56. }
  57. combine() {
  58. const elems = new ArrayList()
  59. for (let i = this._inputGeoms.iterator(); i.hasNext(); ) {
  60. const g = i.next()
  61. this.extractElements(g, elems)
  62. }
  63. if (elems.size() === 0) {
  64. if (this._geomFactory !== null)
  65. return this._geomFactory.createGeometryCollection()
  66. return null
  67. }
  68. return this._geomFactory.buildGeometry(elems)
  69. }
  70. }