FacetSequenceTreeBuilder.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import LineString from '../../geom/LineString'
  2. import FacetSequence from './FacetSequence'
  3. import STRtree from '../../index/strtree/STRtree'
  4. import Point from '../../geom/Point'
  5. import GeometryComponentFilter from '../../geom/GeometryComponentFilter'
  6. import ArrayList from '../../../../../java/util/ArrayList'
  7. export default class FacetSequenceTreeBuilder {
  8. static addFacetSequences(geom, pts, sections) {
  9. let i = 0
  10. const size = pts.size()
  11. while (i <= size - 1) {
  12. let end = i + FacetSequenceTreeBuilder.FACET_SEQUENCE_SIZE + 1
  13. if (end >= size - 1) end = size
  14. const sect = new FacetSequence(geom, pts, i, end)
  15. sections.add(sect)
  16. i = i + FacetSequenceTreeBuilder.FACET_SEQUENCE_SIZE
  17. }
  18. }
  19. static computeFacetSequences(g) {
  20. const sections = new ArrayList()
  21. g.apply(new (class {
  22. get interfaces_() {
  23. return [GeometryComponentFilter]
  24. }
  25. filter(geom) {
  26. let seq = null
  27. if (geom instanceof LineString) {
  28. seq = geom.getCoordinateSequence()
  29. FacetSequenceTreeBuilder.addFacetSequences(geom, seq, sections)
  30. } else if (geom instanceof Point) {
  31. seq = geom.getCoordinateSequence()
  32. FacetSequenceTreeBuilder.addFacetSequences(geom, seq, sections)
  33. }
  34. }
  35. })())
  36. return sections
  37. }
  38. static build(g) {
  39. const tree = new STRtree(FacetSequenceTreeBuilder.STR_TREE_NODE_CAPACITY)
  40. const sections = FacetSequenceTreeBuilder.computeFacetSequences(g)
  41. for (let i = sections.iterator(); i.hasNext(); ) {
  42. const section = i.next()
  43. tree.insert(section.getEnvelope(), section)
  44. }
  45. tree.build()
  46. return tree
  47. }
  48. }
  49. FacetSequenceTreeBuilder.FACET_SEQUENCE_SIZE = 6
  50. FacetSequenceTreeBuilder.STR_TREE_NODE_CAPACITY = 4