RelateNodeGraph.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import Location from '../../geom/Location'
  2. import EdgeEndBuilder from './EdgeEndBuilder'
  3. import NodeMap from '../../geomgraph/NodeMap'
  4. import RelateNodeFactory from './RelateNodeFactory'
  5. export default class RelateNodeGraph {
  6. constructor() {
  7. RelateNodeGraph.constructor_.apply(this, arguments)
  8. }
  9. static constructor_() {
  10. this._nodes = new NodeMap(new RelateNodeFactory())
  11. }
  12. insertEdgeEnds(ee) {
  13. for (let i = ee.iterator(); i.hasNext(); ) {
  14. const e = i.next()
  15. this._nodes.add(e)
  16. }
  17. }
  18. getNodeIterator() {
  19. return this._nodes.iterator()
  20. }
  21. copyNodesAndLabels(geomGraph, argIndex) {
  22. for (let nodeIt = geomGraph.getNodeIterator(); nodeIt.hasNext(); ) {
  23. const graphNode = nodeIt.next()
  24. const newNode = this._nodes.addNode(graphNode.getCoordinate())
  25. newNode.setLabel(argIndex, graphNode.getLabel().getLocation(argIndex))
  26. }
  27. }
  28. build(geomGraph) {
  29. this.computeIntersectionNodes(geomGraph, 0)
  30. this.copyNodesAndLabels(geomGraph, 0)
  31. const eeBuilder = new EdgeEndBuilder()
  32. const eeList = eeBuilder.computeEdgeEnds(geomGraph.getEdgeIterator())
  33. this.insertEdgeEnds(eeList)
  34. }
  35. computeIntersectionNodes(geomGraph, argIndex) {
  36. for (let edgeIt = geomGraph.getEdgeIterator(); edgeIt.hasNext(); ) {
  37. const e = edgeIt.next()
  38. const eLoc = e.getLabel().getLocation(argIndex)
  39. for (let eiIt = e.getEdgeIntersectionList().iterator(); eiIt.hasNext(); ) {
  40. const ei = eiIt.next()
  41. const n = this._nodes.addNode(ei.coord)
  42. if (eLoc === Location.BOUNDARY) n.setLabelBoundary(argIndex); else
  43. if (n.getLabel().isNull(argIndex)) n.setLabel(argIndex, Location.INTERIOR)
  44. }
  45. }
  46. }
  47. }