| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import SegmentNodeList from './SegmentNodeList'
- import WKTWriter from '../io/WKTWriter'
- import CoordinateArraySequence from '../geom/impl/CoordinateArraySequence'
- import Coordinate from '../geom/Coordinate'
- import Octant from './Octant'
- import ArrayList from '../../../../java/util/ArrayList'
- import NodableSegmentString from './NodableSegmentString'
- export default class NodedSegmentString {
- constructor() {
- NodedSegmentString.constructor_.apply(this, arguments)
- }
- static constructor_() {
- this._nodeList = new SegmentNodeList(this)
- this._pts = null
- this._data = null
- const pts = arguments[0], data = arguments[1]
- this._pts = pts
- this._data = data
- }
- static getNodedSubstrings() {
- if (arguments.length === 1) {
- const segStrings = arguments[0]
- const resultEdgelist = new ArrayList()
- NodedSegmentString.getNodedSubstrings(segStrings, resultEdgelist)
- return resultEdgelist
- } else if (arguments.length === 2) {
- const segStrings = arguments[0], resultEdgelist = arguments[1]
- for (let i = segStrings.iterator(); i.hasNext(); ) {
- const ss = i.next()
- ss.getNodeList().addSplitEdges(resultEdgelist)
- }
- }
- }
- getCoordinates() {
- return this._pts
- }
- size() {
- return this._pts.length
- }
- getCoordinate(i) {
- return this._pts[i]
- }
- isClosed() {
- return this._pts[0].equals(this._pts[this._pts.length - 1])
- }
- getSegmentOctant(index) {
- if (index === this._pts.length - 1) return -1
- return this.safeOctant(this.getCoordinate(index), this.getCoordinate(index + 1))
- }
- setData(data) {
- this._data = data
- }
- safeOctant(p0, p1) {
- if (p0.equals2D(p1)) return 0
- return Octant.octant(p0, p1)
- }
- getData() {
- return this._data
- }
- addIntersection() {
- if (arguments.length === 2) {
- const intPt = arguments[0], segmentIndex = arguments[1]
- this.addIntersectionNode(intPt, segmentIndex)
- } else if (arguments.length === 4) {
- const li = arguments[0], segmentIndex = arguments[1], geomIndex = arguments[2], intIndex = arguments[3]
- const intPt = new Coordinate(li.getIntersection(intIndex))
- this.addIntersection(intPt, segmentIndex)
- }
- }
- toString() {
- return WKTWriter.toLineString(new CoordinateArraySequence(this._pts))
- }
- getNodeList() {
- return this._nodeList
- }
- addIntersectionNode(intPt, segmentIndex) {
- let normalizedSegmentIndex = segmentIndex
- const nextSegIndex = normalizedSegmentIndex + 1
- if (nextSegIndex < this._pts.length) {
- const nextPt = this._pts[nextSegIndex]
- if (intPt.equals2D(nextPt))
- normalizedSegmentIndex = nextSegIndex
-
- }
- const ei = this._nodeList.add(intPt, normalizedSegmentIndex)
- return ei
- }
- addIntersections(li, segmentIndex, geomIndex) {
- for (let i = 0; i < li.getIntersectionNum(); i++)
- this.addIntersection(li, segmentIndex, geomIndex, i)
-
- }
- get interfaces_() {
- return [NodableSegmentString]
- }
- }
|