LineMergeGraph.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334
  1. import LineMergeDirectedEdge from './LineMergeDirectedEdge'
  2. import Node from '../../planargraph/Node'
  3. import CoordinateArrays from '../../geom/CoordinateArrays'
  4. import LineMergeEdge from './LineMergeEdge'
  5. import PlanarGraph from '../../planargraph/PlanarGraph'
  6. export default class LineMergeGraph extends PlanarGraph {
  7. constructor() {
  8. super()
  9. }
  10. addEdge(lineString) {
  11. if (lineString.isEmpty())
  12. return null
  13. const coordinates = CoordinateArrays.removeRepeatedPoints(lineString.getCoordinates())
  14. if (coordinates.length <= 1) return null
  15. const startCoordinate = coordinates[0]
  16. const endCoordinate = coordinates[coordinates.length - 1]
  17. const startNode = this.getNode(startCoordinate)
  18. const endNode = this.getNode(endCoordinate)
  19. const directedEdge0 = new LineMergeDirectedEdge(startNode, endNode, coordinates[1], true)
  20. const directedEdge1 = new LineMergeDirectedEdge(endNode, startNode, coordinates[coordinates.length - 2], false)
  21. const edge = new LineMergeEdge(lineString)
  22. edge.setDirectedEdges(directedEdge0, directedEdge1)
  23. this.add(edge)
  24. }
  25. getNode(coordinate) {
  26. let node = this.findNode(coordinate)
  27. if (node === null) {
  28. node = new Node(coordinate)
  29. this.add(node)
  30. }
  31. return node
  32. }
  33. }