{"version":3,"sources":["../src/Array.js","../src/Number.js","../src/Math.js","../src/org/locationtech/jts/util/NumberUtil.js","../src/java/lang/IllegalArgumentException.js","../src/java/lang/Long.js","../src/java/lang/Double.js","../src/java/lang/Comparable.js","../src/java/lang/Cloneable.js","../src/java/util/Comparator.js","../src/java/io/Serializable.js","../src/java/lang/RuntimeException.js","../src/org/locationtech/jts/util/AssertionFailedException.js","../src/org/locationtech/jts/util/Assert.js","../src/org/locationtech/jts/geom/Coordinate.js","../src/hasInterface.js","../src/java/util/Iterator.js","../src/java/util/Collection.js","../src/java/util/IndexOutOfBoundsException.js","../src/java/util/List.js","../src/java/util/NoSuchElementException.js","../src/java/util/OperationNotSupported.js","../src/java/util/ArrayList.js","../src/org/locationtech/jts/geom/CoordinateList.js","../src/org/locationtech/jts/geom/Envelope.js","../src/java/lang/Exception.js","../src/org/locationtech/jts/algorithm/NotRepresentableException.js","../src/java/lang/StringBuffer.js","../src/java/lang/Integer.js","../src/java/lang/Character.js","../src/org/locationtech/jts/math/DD.js","../src/org/locationtech/jts/algorithm/CGAlgorithmsDD.js","../src/org/locationtech/jts/algorithm/Orientation.js","../src/java/lang/System.js","../src/org/locationtech/jts/algorithm/HCoordinate.js","../src/org/locationtech/jts/math/MathUtil.js","../src/org/locationtech/jts/algorithm/Distance.js","../src/org/locationtech/jts/geom/CoordinateSequence.js","../src/org/locationtech/jts/geom/CoordinateSequenceFactory.js","../src/org/locationtech/jts/geom/GeometryComponentFilter.js","../src/org/locationtech/jts/geom/Geometry.js","../src/org/locationtech/jts/geom/CoordinateFilter.js","../src/org/locationtech/jts/algorithm/BoundaryNodeRule.js","../src/org/locationtech/jts/geom/CoordinateArrays.js","../src/java/util/Map.js","../src/java/util/SortedMap.js","../src/java/util/Set.js","../src/java/util/HashSet.js","../src/java/util/TreeMap.js","../src/org/locationtech/jts/geom/Lineal.js","../src/java/util/SortedSet.js","../src/java/util/TreeSet.js","../src/Map.js","../src/java/util/Arrays.js","../src/org/locationtech/jts/geom/Dimension.js","../src/org/locationtech/jts/geom/GeometryFilter.js","../src/org/locationtech/jts/geom/CoordinateSequenceFilter.js","../src/org/locationtech/jts/geom/GeometryCollection.js","../src/org/locationtech/jts/geom/MultiLineString.js","../src/org/locationtech/jts/operation/BoundaryOp.js","../src/org/locationtech/jts/algorithm/Length.js","../src/java/io/PrintStream.js","../src/java/io/StringReader.js","../src/java/io/ByteArrayOutputStream.js","../src/java/io/IOException.js","../src/java/io/LineNumberReader.js","../src/org/locationtech/jts/util/StringUtil.js","../src/java/lang/StringBuilder.js","../src/java/text/DecimalFormat.js","../src/org/locationtech/jts/geom/CoordinateSequences.js","../src/org/locationtech/jts/geom/LineString.js","../src/org/locationtech/jts/geom/Puntal.js","../src/org/locationtech/jts/geom/Point.js","../src/org/locationtech/jts/algorithm/Area.js","../src/org/locationtech/jts/geom/Polygonal.js","../src/org/locationtech/jts/geom/Polygon.js","../src/org/locationtech/jts/geom/MultiPoint.js","../src/org/locationtech/jts/geom/LinearRing.js","../src/org/locationtech/jts/geom/MultiPolygon.js","../src/org/locationtech/jts/geom/util/GeometryEditor.js","../src/org/locationtech/jts/geom/impl/CoordinateArraySequence.js","../src/org/locationtech/jts/geom/impl/CoordinateArraySequenceFactory.js","../src/java/util/HashMap.js","../src/org/locationtech/jts/geom/PrecisionModel.js","../src/org/locationtech/jts/geom/GeometryFactory.js","../src/org/locationtech/jts/io/WKTParser.js","../src/org/locationtech/jts/io/WKTWriter.js","../src/org/locationtech/jts/algorithm/LineIntersector.js","../src/org/locationtech/jts/algorithm/RobustLineIntersector.js","../src/org/locationtech/jts/geom/LineSegment.js","../src/org/locationtech/jts/geom/Location.js","../src/org/locationtech/jts/geom/IntersectionMatrix.js","../src/org/locationtech/jts/algorithm/Angle.js","../src/org/locationtech/jts/geom/Triangle.js","../src/org/locationtech/jts/algorithm/distance/PointPairDistance.js","../src/org/locationtech/jts/algorithm/distance/DistanceToPoint.js","../src/org/locationtech/jts/algorithm/distance/DiscreteHausdorffDistance.js","../src/org/locationtech/jts/index/ItemVisitor.js","../src/org/locationtech/jts/algorithm/locate/PointOnGeometryLocator.js","../src/org/locationtech/jts/index/intervalrtree/IntervalRTreeNode.js","../src/org/locationtech/jts/index/intervalrtree/IntervalRTreeLeafNode.js","../src/java/util/Collections.js","../src/org/locationtech/jts/index/intervalrtree/IntervalRTreeBranchNode.js","../src/org/locationtech/jts/index/intervalrtree/SortedPackedIntervalRTree.js","../src/org/locationtech/jts/geom/util/LinearComponentExtracter.js","../src/org/locationtech/jts/index/ArrayListVisitor.js","../src/org/locationtech/jts/algorithm/RayCrossingCounter.js","../src/org/locationtech/jts/algorithm/locate/IndexedPointInAreaLocator.js","../src/org/locationtech/jts/algorithm/PointLocation.js","../src/org/locationtech/jts/geom/GeometryCollectionIterator.js","../src/org/locationtech/jts/algorithm/locate/SimplePointInAreaLocator.js","../src/org/locationtech/jts/algorithm/match/SimilarityMeasure.js","../src/org/locationtech/jts/algorithm/match/AreaSimilarityMeasure.js","../src/org/locationtech/jts/algorithm/match/HausdorffSimilarityMeasure.js","../src/org/locationtech/jts/algorithm/match/SimilarityMeasureCombiner.js","../src/org/locationtech/jts/algorithm/Centroid.js","../src/java/util/EmptyStackException.js","../src/java/util/Stack.js","../src/org/locationtech/jts/util/UniqueCoordinateArrayFilter.js","../src/org/locationtech/jts/algorithm/ConvexHull.js","../src/org/locationtech/jts/algorithm/InteriorPointArea.js","../src/org/locationtech/jts/algorithm/InteriorPointLine.js","../src/org/locationtech/jts/algorithm/InteriorPointPoint.js","../src/org/locationtech/jts/algorithm/MinimumBoundingCircle.js","../src/org/locationtech/jts/algorithm/MinimumDiameter.js","../src/org/locationtech/jts/geom/util/GeometryTransformer.js","../src/org/locationtech/jts/densify/Densifier.js","../src/org/locationtech/jts/geomgraph/Quadrant.js","../src/org/locationtech/jts/edgegraph/HalfEdge.js","../src/org/locationtech/jts/edgegraph/MarkHalfEdge.js","../src/org/locationtech/jts/edgegraph/EdgeGraph.js","../src/org/locationtech/jts/dissolve/DissolveHalfEdge.js","../src/org/locationtech/jts/dissolve/DissolveEdgeGraph.js","../src/org/locationtech/jts/dissolve/LineDissolver.js","../src/org/locationtech/jts/algorithm/PointLocator.js","../src/org/locationtech/jts/geomgraph/Position.js","../src/org/locationtech/jts/geomgraph/index/MonotoneChain.js","../src/org/locationtech/jts/geomgraph/index/SweepLineEvent.js","../src/org/locationtech/jts/geomgraph/index/EdgeSetIntersector.js","../src/org/locationtech/jts/geomgraph/index/SegmentIntersector.js","../src/org/locationtech/jts/geomgraph/index/SimpleMCSweepLineIntersector.js","../src/org/locationtech/jts/geomgraph/TopologyLocation.js","../src/org/locationtech/jts/geomgraph/Label.js","../src/org/locationtech/jts/geomgraph/EdgeIntersection.js","../src/org/locationtech/jts/geomgraph/EdgeIntersectionList.js","../src/org/locationtech/jts/geomgraph/index/MonotoneChainIndexer.js","../src/org/locationtech/jts/geomgraph/index/MonotoneChainEdge.js","../src/org/locationtech/jts/geomgraph/Depth.js","../src/org/locationtech/jts/geomgraph/GraphComponent.js","../src/org/locationtech/jts/geomgraph/Edge.js","../src/org/locationtech/jts/geomgraph/Node.js","../src/org/locationtech/jts/geomgraph/NodeMap.js","../src/org/locationtech/jts/geomgraph/EdgeEnd.js","../src/org/locationtech/jts/geom/TopologyException.js","../src/org/locationtech/jts/geomgraph/DirectedEdge.js","../src/org/locationtech/jts/geomgraph/NodeFactory.js","../src/org/locationtech/jts/geomgraph/PlanarGraph.js","../src/org/locationtech/jts/geomgraph/GeometryGraph.js","../src/org/locationtech/jts/index/kdtree/KdNodeVisitor.js","../src/org/locationtech/jts/index/kdtree/KdNode.js","../src/org/locationtech/jts/index/kdtree/KdTree.js","../src/org/locationtech/jts/index/quadtree/NodeBase.js","../src/org/locationtech/jts/index/quadtree/DoubleBits.js","../src/org/locationtech/jts/index/quadtree/Key.js","../src/org/locationtech/jts/index/quadtree/Node.js","../src/org/locationtech/jts/index/quadtree/IntervalSize.js","../src/org/locationtech/jts/index/quadtree/Root.js","../src/org/locationtech/jts/index/SpatialIndex.js","../src/org/locationtech/jts/index/quadtree/Quadtree.js","../src/org/locationtech/jts/index/strtree/Boundable.js","../src/org/locationtech/jts/index/strtree/ItemBoundable.js","../src/org/locationtech/jts/util/PriorityQueue.js","../src/org/locationtech/jts/index/strtree/AbstractNode.js","../src/org/locationtech/jts/index/strtree/BoundablePair.js","../src/org/locationtech/jts/index/strtree/AbstractSTRtree.js","../src/org/locationtech/jts/index/strtree/ItemDistance.js","../src/org/locationtech/jts/index/strtree/STRtree.js","../src/org/locationtech/jts/io/GeoJSONParser.js","../src/org/locationtech/jts/io/OL3Parser.js","../src/org/locationtech/jts/io/GeoJSONReader.js","../src/org/locationtech/jts/io/GeoJSONWriter.js","../src/org/locationtech/jts/io/WKTReader.js","../src/org/locationtech/jts/noding/SegmentPointComparator.js","../src/org/locationtech/jts/noding/SegmentNode.js","../src/org/locationtech/jts/noding/SegmentNodeList.js","../src/org/locationtech/jts/noding/Octant.js","../src/org/locationtech/jts/noding/SegmentString.js","../src/org/locationtech/jts/noding/NodableSegmentString.js","../src/org/locationtech/jts/noding/NodedSegmentString.js","../src/org/locationtech/jts/index/chain/MonotoneChainOverlapAction.js","../src/org/locationtech/jts/index/chain/MonotoneChain.js","../src/org/locationtech/jts/index/chain/MonotoneChainBuilder.js","../src/org/locationtech/jts/noding/Noder.js","../src/org/locationtech/jts/noding/SinglePassNoder.js","../src/org/locationtech/jts/noding/MCIndexNoder.js","../src/org/locationtech/jts/noding/ScaledNoder.js","../src/org/locationtech/jts/operation/IsSimpleOp.js","../src/org/locationtech/jts/operation/buffer/BufferParameters.js","../src/org/locationtech/jts/operation/buffer/RightmostEdgeFinder.js","../src/java/util/LinkedList.js","../src/org/locationtech/jts/operation/buffer/BufferSubgraph.js","../src/org/locationtech/jts/geomgraph/EdgeRing.js","../src/org/locationtech/jts/operation/overlay/MinimalEdgeRing.js","../src/org/locationtech/jts/operation/overlay/MaximalEdgeRing.js","../src/org/locationtech/jts/operation/overlay/PolygonBuilder.js","../src/org/locationtech/jts/operation/buffer/BufferInputLineSimplifier.js","../src/org/locationtech/jts/operation/buffer/OffsetSegmentString.js","../src/org/locationtech/jts/operation/buffer/OffsetSegmentGenerator.js","../src/org/locationtech/jts/operation/buffer/OffsetCurveBuilder.js","../src/org/locationtech/jts/operation/buffer/SubgraphDepthLocater.js","../src/org/locationtech/jts/operation/buffer/OffsetCurveSetBuilder.js","../src/org/locationtech/jts/geomgraph/EdgeEndStar.js","../src/org/locationtech/jts/geomgraph/DirectedEdgeStar.js","../src/org/locationtech/jts/operation/overlay/OverlayNodeFactory.js","../src/org/locationtech/jts/noding/OrientedCoordinateArray.js","../src/org/locationtech/jts/geomgraph/EdgeList.js","../src/org/locationtech/jts/noding/SegmentIntersector.js","../src/org/locationtech/jts/noding/IntersectionAdder.js","../src/org/locationtech/jts/operation/buffer/BufferBuilder.js","../src/org/locationtech/jts/noding/NodingValidator.js","../src/org/locationtech/jts/noding/snapround/HotPixel.js","../src/org/locationtech/jts/index/chain/MonotoneChainSelectAction.js","../src/org/locationtech/jts/noding/snapround/MCIndexPointSnapper.js","../src/org/locationtech/jts/noding/InteriorIntersectionFinderAdder.js","../src/org/locationtech/jts/noding/snapround/MCIndexSnapRounder.js","../src/org/locationtech/jts/operation/buffer/BufferOp.js","../src/org/locationtech/jts/geom/util/PolygonExtracter.js","../src/org/locationtech/jts/operation/distance/GeometryLocation.js","../src/org/locationtech/jts/geom/util/PointExtracter.js","../src/org/locationtech/jts/operation/distance/ConnectedElementLocationFilter.js","../src/org/locationtech/jts/operation/distance/DistanceOp.js","../src/org/locationtech/jts/operation/linemerge/EdgeString.js","../src/org/locationtech/jts/planargraph/GraphComponent.js","../src/org/locationtech/jts/planargraph/DirectedEdge.js","../src/org/locationtech/jts/operation/linemerge/LineMergeDirectedEdge.js","../src/org/locationtech/jts/planargraph/Edge.js","../src/org/locationtech/jts/planargraph/DirectedEdgeStar.js","../src/org/locationtech/jts/planargraph/Node.js","../src/org/locationtech/jts/operation/linemerge/LineMergeEdge.js","../src/org/locationtech/jts/planargraph/NodeMap.js","../src/org/locationtech/jts/planargraph/PlanarGraph.js","../src/org/locationtech/jts/operation/linemerge/LineMergeGraph.js","../src/org/locationtech/jts/operation/linemerge/LineMerger.js","../src/org/locationtech/jts/noding/BasicSegmentString.js","../src/org/locationtech/jts/noding/InteriorIntersectionFinder.js","../src/org/locationtech/jts/noding/FastNodingValidator.js","../src/org/locationtech/jts/geomgraph/EdgeNodingValidator.js","../src/org/locationtech/jts/geom/util/GeometryCollectionMapper.js","../src/org/locationtech/jts/operation/overlay/LineBuilder.js","../src/org/locationtech/jts/operation/overlay/PointBuilder.js","../src/org/locationtech/jts/operation/overlay/snap/LineStringSnapper.js","../src/org/locationtech/jts/operation/overlay/snap/GeometrySnapper.js","../src/org/locationtech/jts/precision/CommonBits.js","../src/org/locationtech/jts/precision/CommonBitsRemover.js","../src/org/locationtech/jts/operation/overlay/snap/SnapOverlayOp.js","../src/org/locationtech/jts/operation/overlay/snap/SnapIfNeededOverlayOp.js","../src/org/locationtech/jts/operation/GeometryGraphOperation.js","../src/org/locationtech/jts/operation/overlay/OverlayOp.js","../src/org/locationtech/jts/operation/polygonize/PolygonizeDirectedEdge.js","../src/org/locationtech/jts/operation/polygonize/PolygonizeEdge.js","../src/org/locationtech/jts/operation/polygonize/EdgeRing.js","../src/org/locationtech/jts/operation/polygonize/PolygonizeGraph.js","../src/org/locationtech/jts/operation/polygonize/Polygonizer.js","../src/org/locationtech/jts/operation/relate/EdgeEndBuilder.js","../src/org/locationtech/jts/operation/relate/EdgeEndBundle.js","../src/org/locationtech/jts/operation/relate/EdgeEndBundleStar.js","../src/org/locationtech/jts/operation/relate/RelateNode.js","../src/org/locationtech/jts/operation/relate/RelateNodeFactory.js","../src/org/locationtech/jts/operation/relate/RelateComputer.js","../src/org/locationtech/jts/operation/predicate/RectangleContains.js","../src/org/locationtech/jts/algorithm/RectangleLineIntersector.js","../src/org/locationtech/jts/geom/util/ShortCircuitedGeometryVisitor.js","../src/org/locationtech/jts/operation/predicate/RectangleIntersects.js","../src/org/locationtech/jts/operation/relate/RelateOp.js","../src/org/locationtech/jts/geom/util/GeometryCombiner.js","../src/org/locationtech/jts/operation/union/PointGeometryUnion.js","../src/org/locationtech/jts/geom/util/GeometryExtracter.js","../src/org/locationtech/jts/operation/union/CascadedPolygonUnion.js","../src/org/locationtech/jts/operation/union/UnaryUnionOp.js","../src/org/locationtech/jts/operation/valid/ConnectedInteriorTester.js","../src/org/locationtech/jts/operation/relate/RelateNodeGraph.js","../src/org/locationtech/jts/operation/valid/ConsistentAreaTester.js","../src/org/locationtech/jts/operation/valid/IndexedNestedRingTester.js","../src/org/locationtech/jts/operation/valid/TopologyValidationError.js","../src/org/locationtech/jts/operation/valid/IsValidOp.js","../src/org/locationtech/jts/precision/PrecisionReducerCoordinateOperation.js","../src/org/locationtech/jts/precision/GeometryPrecisionReducer.js","../src/org/locationtech/jts/simplify/DouglasPeuckerLineSimplifier.js","../src/org/locationtech/jts/simplify/DouglasPeuckerSimplifier.js","../src/org/locationtech/jts/simplify/TaggedLineSegment.js","../src/org/locationtech/jts/simplify/TaggedLineString.js","../src/org/locationtech/jts/simplify/LineSegmentIndex.js","../src/org/locationtech/jts/simplify/TaggedLineStringSimplifier.js","../src/org/locationtech/jts/simplify/TaggedLinesSimplifier.js","../src/org/locationtech/jts/simplify/TopologyPreservingSimplifier.js","../src/org/locationtech/jts/triangulate/SplitSegment.js","../src/org/locationtech/jts/triangulate/ConstraintSplitPointFinder.js","../src/org/locationtech/jts/triangulate/NonEncroachingSplitPointFinder.js","../src/org/locationtech/jts/triangulate/quadedge/TrianglePredicate.js","../src/org/locationtech/jts/triangulate/quadedge/Vertex.js","../src/org/locationtech/jts/triangulate/ConstraintVertex.js","../src/org/locationtech/jts/triangulate/quadedge/QuadEdge.js","../src/org/locationtech/jts/triangulate/IncrementalDelaunayTriangulator.js","../src/org/locationtech/jts/triangulate/quadedge/QuadEdgeLocator.js","../src/org/locationtech/jts/triangulate/quadedge/LastFoundQuadEdgeLocator.js","../src/org/locationtech/jts/triangulate/quadedge/LocateFailureException.js","../src/org/locationtech/jts/triangulate/quadedge/TriangleVisitor.js","../src/org/locationtech/jts/triangulate/quadedge/QuadEdgeSubdivision.js","../src/org/locationtech/jts/triangulate/Segment.js","../src/org/locationtech/jts/triangulate/ConformingDelaunayTriangulator.js","../src/org/locationtech/jts/triangulate/DelaunayTriangulationBuilder.js","../src/org/locationtech/jts/triangulate/ConformingDelaunayTriangulationBuilder.js","../src/org/locationtech/jts/triangulate/VoronoiDiagramBuilder.js","../src/org/locationtech/jts/linearref/LinearLocation.js","../src/org/locationtech/jts/linearref/LinearIterator.js","../src/org/locationtech/jts/linearref/LocationIndexOfPoint.js","../src/org/locationtech/jts/linearref/LocationIndexOfLine.js","../src/org/locationtech/jts/linearref/LinearGeometryBuilder.js","../src/org/locationtech/jts/linearref/ExtractLineByLocation.js","../src/org/locationtech/jts/linearref/LocationIndexedLine.js","../src/org/locationtech/jts/linearref/LengthIndexOfPoint.js","../src/org/locationtech/jts/linearref/LengthLocationMap.js","../src/org/locationtech/jts/linearref/LengthIndexedLine.js","../src/org/locationtech/jts/operation/union/UnionOp.js","../src/org/locationtech/jts/monkey.js","../src/jsts.js"],"names":["Array","prototype","Object","defineProperty","configurable","value","this","TypeError","arrayLike","length","Math","max","min","relativeStart","arguments","parseInt","Number","relativeEnd","undefined","writable","isFinite","isInteger","val","floor","parseFloat","isNaN","trunc","x","ceil","log2","log","LOG2E","NumberUtil","constructor","constructor_","apply","[object Object]","x1","x2","tolerance","abs","getClass","interfaces_","IllegalArgumentException","message","Long","high","low","Double","pow","MAX_REL_BITS_INTEGER","f64buf","i32buf","Comparable","Clonable","Comparator","Serializable","RuntimeException","name","stack","Error","call","toBinaryString","i","result","mask","n","isInfinite","MAX_VALUE","Float64Array","Int32Array","buffer","doubleToLongBits","longBitsToDouble","bits","y","f","skip","sign","exp","NEGATIVE_INFINITY","Infinity","fract","BIAS","NaN","create","AssertionFailedException","super","Assert","shouldNeverReachHere","assertion","isTrue","expectedValue","actualValue","equals","Coordinate","setOrdinate","ordinateIndex","X","Y","Z","z","equals2D","other","c","equalsWithTolerance","getOrdinate","equals3D","equalInZ","compareTo","o","clone","e","CloneNotSupportedException","copy","toString","distance3D","dx","dy","dz","sqrt","distance","hashCode","setCoordinate","Cloneable","DimensionalComparator","a","b","compare","o1","o2","c1","c2","compX","compY","_dimensionsToTest","hasInterface","indexOf","Iterator","Collection","IndexOutOfBoundsException","List","NoSuchElementException","OperationNotSupported","ArrayList","array_","addAll","dimensionsToTest","NULL_ORDINATE","serialVersionUID","hasNext","next","remove","add","isEmpty","iterator","size","toArray","IndexOutOfBoundsException$1","get","set","ensureCapacity","push","splice","clear","index","element","oldElement","Iterator_","array","len","found","removeAll","arrayList","arrayList_","position_","CoordinateList","getCoordinate","coll","allowRepeated","isChanged","toCoordinateArray","coordArrayType","coord","obj","start","end","inc","closeRing","fill","Envelope","p1","p2","q","q1","q2","minq","maxq","minp","maxp","getArea","getWidth","getHeight","otherEnvelope","isNull","_maxx","getMaxX","_maxy","getMaxY","_minx","getMinX","_miny","getMinY","intersection","env","intersects","intMinX","intMinY","intMaxX","intMaxY","covers","p","expandToInclude","minExtent","w","h","translate","transX","transY","init","setToNull","maxExtent","expandBy","deltaX","deltaY","contains","centre","y1","y2","Exception","NotRepresentableException","StringBuffer","str","Integer","Character","append","setCharAt","substr","intValue","isWhitespace","toUpperCase","DD","valueOf","selfMultiply","parse","strlen","charAt","isNegative","signCh","numDigits","numBeforeDec","ch","isDigit","d","TEN","selfAdd","expStr","substring","ex","NumberFormatException","val2","numDecPlaces","scale","divide","multiply","negate","dd","xAbs","xLog10","xMag","buf","le","_hi","_lo","extractSignificantDigits","insertDecimalPoint","magnitude","mag","gt","lt","ONE","decimalPointPos","MAX_PRINT_DIGITS","digit","rebiasBy10","digitChar","subtract","continueExtractingDigits","remMag","sqr","doubleValue","isZero","selfSubtract","getSpecialNumberString","selfDivide","yhi","ylo","tc","ty","C","U","hc","hy","u","SPLIT","dump","createNaN","ge","r","s","reciprocal","fhi","flo","rint","setValue","ax","axdd","d2","H","S","T","t","zhi","zlo","tx","hx","selfSqr","toStandardNotation","toSciNotation","specialStr","sigDigits","num","stringOfChar","numZeroes","SCI_NOT_ZERO","digits","SCI_NOT_EXPONENT_CHAR","IllegalStateException","trailingDigits","digitsWithDecimal","isPositive","hi","lo","signum","PI","TWO_PI","PI_2","E","EPS","CGAlgorithmsDD","orientationIndexFilter","dx1","dy1","dx2","dy2","denom1","denom2","denom","numx1","numx2","fracP","numy1","numy2","fracQ","pa","pb","pc","detsum","detleft","detright","det","errbound","DP_SAFE_EPSILON","Orientation","orientationIndex","ring","nPts","hiPt","hiIndex","iPrev","iNext","prev","disc","System","CLOCKWISE","RIGHT","COUNTERCLOCKWISE","LEFT","COLLINEAR","STRAIGHT","arraycopy","src","srcPos","dest","destPos","getProperty","line.separator","HCoordinate","px","py","pw","qx","qy","qw","xInt","yInt","getY","getX","_x","_y","_w","MathUtil","ln","LOG_10","v1","v2","v3","v4","Distance","A","B","D","pointToSegment","noIntersection","r_num","len2","line","minDistance","dist","CoordinateSequence","getCoordinateCopy","getDimension","expandEnvelope","M","CoordinateSequenceFactory","GeometryComponentFilter","filter","geom","Geometry","isGeometryCollection","getTypeCode","TYPECODE_GEOMETRYCOLLECTION","getFactory","_factory","getGeometryN","isRectangle","g","equalsTopo","equalsExact","geometryChanged","geometryChangedFilter","geometryChangedAction","_envelope","equalsNorm","norm","getLength","getNumGeometries","compareToSameClass","comp","getUserData","_userData","getSRID","_SRID","getEnvelope","toGeometry","getEnvelopeInternal","checkNotGeometryCollection","equal","normalize","getPrecisionModel","computeEnvelopeInternal","setSRID","SRID","setUserData","userData","j","aElement","bElement","comparison","isGeometryCollectionOrDerived","TYPECODE_MULTIPOINT","TYPECODE_MULTILINESTRING","TYPECODE_MULTIPOLYGON","geometries","factory","TYPECODE_POINT","TYPECODE_LINESTRING","TYPECODE_LINEARRING","TYPECODE_POLYGON","TYPENAME_POINT","TYPENAME_MULTIPOINT","TYPENAME_LINESTRING","TYPENAME_LINEARRING","TYPENAME_MULTILINESTRING","TYPENAME_POLYGON","TYPENAME_MULTIPOLYGON","TYPENAME_GEOMETRYCOLLECTION","CoordinateFilter","BoundaryNodeRule","isInBoundary","boundaryCount","Mod2BoundaryNodeRule","EndPointBoundaryNodeRule","MultiValentEndPointBoundaryNodeRule","MonoValentEndPointBoundaryNodeRule","MOD2_BOUNDARY_RULE","ENDPOINT_BOUNDARY_RULE","MULTIVALENT_ENDPOINT_BOUNDARY_RULE","MONOVALENT_ENDPOINT_BOUNDARY_RULE","OGC_SFS_BOUNDARY_RULE","CoordinateArrays","pts","testPts","testPt","coordinates","firstCoordinate","newCoordinates","coord1","coord2","coordinateComparator","coordList","hasRepeatedPoints","last","mid","tmp","nonNull","newCoord","srcStart","destStart","pts1","pts2","coordinate","minCoord","clamp","npts","extractPts","iPts","ForwardComparator","BidirectionalComparator","forwardComp","isEqualReversed","OLDcompare","dir1","increasingDirection","dir2","i1","i2","comparePt","Map","SortedMap","Set","HashSet","put","values","entrySet","javascript","util","hashSet","hashSet_","BLACK","colorOf","color","parentOf","parent","setColor","leftOf","left","rightOf","right","TreeMap","root_","size_","key","cmp","getValue","getKey","oldValue","fixAfterInsertion","rotateLeft","rotateRight","getFirstEntry","successor","l","containsKey","Lineal","SortedSet","TreeSet","treeSet","treeSet_","Arrays","sort","comparator","slice","concat","asList","Dimension","dimensionValue","FALSE","SYM_FALSE","TRUE","SYM_TRUE","DONTCARE","SYM_DONTCARE","P","SYM_P","L","SYM_L","SYM_A","dimensionSymbol","GeometryFilter","CoordinateSequenceFilter","seq","isDone","isGeometryChanged","GeometryCollection","envelope","_geometries","getCoordinates","getNumPoints","k","childCoordinates","area","isEquivalentClass","otherCollection","getBoundaryDimension","dimension","sum","numPoints","reverse","revGeoms","createGeometryCollection","theseElements","otherElements","gc","n1","n2","thisGeom","otherGeom","holeComp","getBoundary","getGeometryType","hasNullElements","MultiLineString","isClosed","nLines","revLines","createMultiLineString","BoundaryOp","lineStrings","bnRule","boundaryMultiLineString","mLine","_geom","getEmptyMultiPoint","bdyPts","computeBoundaryCoordinates","_geomFact","createPoint","createMultiPointFromCoords","LineString","boundaryLineString","_bnRule","getStartPoint","createMultiPoint","getEndPoint","_endpointMap","addEndpoint","getCoordinateN","it","entry","valence","count","pt","counter","Counter","Length","x0","y0","PrintStream","StringReader","ByteArrayOutputStream","IOException","LineNumberReader","StringUtil","String","os","ps","printStackTrace","depth","stackTrace","lineNumberReader","getStackTrace","readLine","NEWLINE","separator","separatorlen","tokenList","tmpString","pos","token","res","SIMPLE_ORDINATE_FORMAT","format","chars","StringBuilder","CoordinateSequences","minDim","dim","cs1","cs2","cs1Size","fact","newseq","swap","copyCoord","cs","builder","createClosedRing","_points","isRing","isSimple","otherLineString","getPointN","ofLine","createLineString","getCoordinateSequence","points","getCoordinateSequenceFactory","isCoordinate","Puntal","Point","_coordinates","point","Area","ofRingSigned","p0","Polygonal","Polygon","_shell","shellCoordinates","_holes","ofRing","getNumInteriorRing","prevX","prevY","otherPolygon","thisShell","otherPolygonShell","clockwise","uniqueCoordinates","minCoordinate","scroll","isCCW","poly","convexHull","getExteriorRing","otherShell","shellComp","nHole1","nHole2","thisHole","getInteriorRingN","otherHole","rings","createLinearRing","shellCopy","holeCopies","shell","holes","hasNonEmptyElements","MultiPoint","isValid","LinearRing","validateConstruction","MINIMUM_VALID_SIZE","GeometryFactory","MultiPolygon","createMultiPolygon","allRings","allRingsArray","polygons","GeometryEditor","setCopyUserData","isUserDataCopied","_isUserDataCopied","edit","geometry","operation","editInternal","editGeometryCollection","editPolygon","getName","collection","collectionForType","polygon","newPolygon","createPolygon","hole","GeometryEditorOperation","NoOpGeometryOperation","CoordinateOperation","CoordinateSequenceOperation","CoordinateArraySequence","_dimension","cloneCoordinates","strBuilder","coordSeq","CoordinateArraySequenceFactory","instanceObject","readResolve","instance","MapPolyfill","proto","objectOnly","_keys","_values","_itp","forEach","sharedSize","createCollection","delete","has","list","keys","sharedIterator","entries","callback","context","done","itp","array2","v","MapImpl","HashMap","map_","MapInterface","PrecisionModel","pm1","pm2","otherPrecisionModel","_modelType","_scale","getMaximumSignificantDigits","otherSigDigits","getScale","isFloating","FLOATING","FLOATING_SINGLE","getType","description","FIXED","makePrecise","round","maxSigDigits","setScale","Type","nameToTypeMap","_name","modelType","pm","maximumPreciseValue","multiPolygons","multiPolygonArray","geometryArray","multiLineStrings","multiLineStringArray","lineStringArray","multiPoints","multiPointArray","linearRings","linearRingArray","pointArray","polygonArray","exemplar","buildGeometry","geomList","geomClass","isHeterogeneous","hasGeometryCollection","partClass","toGeometryArray","geom0","toPolygonArray","toLineStringArray","toPointArray","_coordinateSequenceFactory","createGeometry","_precisionModel","ptSeq","coordinateSequenceFactory","precisionModel","getDefaultCoordinateSequenceFactory","regExes","typeStr","emptyTypeStr","spaces","parenComma","doubleParenComma","trimParens","WKTParser","geometryFactory","read","wkt","type","replace","matches","exec","search","toLowerCase","write","extractGeometry","extract","wktType","multipoint","join","linestring","linearring","multilinestring","multipolygon","geometrycollection","coords","trim","split","components","lines","wktArray","WKTWriter","parser","LineIntersector","pdx","pdy","getIndexAlongSegment","segmentIndex","intIndex","computeIntLineIndex","_intLineIndex","getTopologySummary","catBuilder","isEndPoint","_isProper","isCollinear","computeIntersection","p3","p4","_inputLines","_result","computeIntersect","getIntersectionNum","map","getEdgeDistance","isProper","hasIntersection","setPrecisionModel","isInteriorIntersection","inputLineIndex","_intPt","getIntersection","NO_INTERSECTION","computeEdgeDistance","COLLINEAR_INTERSECTION","toLineString","getEndpoint","ptIndex","isIntersection","getIntersectionAlongSegment","_pa","_pb","DONT_INTERSECT","DO_INTERSECT","POINT_INTERSECTION","RobustLineIntersector","nearestPt","minDist","isInSegmentEnvelopes","intPt","env0","env1","normalizeToMinimum","n3","n4","normPt","smallestInAbsValue","safeHCoordinateIntersection","nearestEndpoint","intersectionWithNormalization","x3","x4","xabs","checkDD","intPtDD","isIn","out","println","normalizeToEnvCentre","computeCollinearIntersection","p1q1p2","p1q2p2","q1p1q2","q1p2q2","n00","n01","n10","n11","minX0","minY0","maxX0","maxY0","minX1","minY1","maxX1","maxY1","intMidX","intMidY","Pq1","Pq2","Qp1","Qp2","LineSegment","minX","seg","orient0","orient1","geomFactory","isVertical","li","project","projectionFactor","pf0","pf1","newp0","newp1","angle","atan2","distancePerpendicular","pointToLinePerpendicular","minY","midPoint","closestPoints","closestPt","close00","closestPoint","close01","close10","close11","factor","maxX","comp0","temp","lineIntersection","maxY","pointAlongOffset","segmentLengthFraction","offsetDistance","segx","segy","ux","uy","setCoordinates","ls","segmentFraction","inputPt","segFrac","isHorizontal","segmentToSegment","pointAlong","bits0","java","lang","hash0","bits1","Location","locationValue","EXTERIOR","BOUNDARY","INTERIOR","NONE","IntersectionMatrix","actualDimensionValue","requiredDimensionSymbol","actualDimensionSymbols","requiredDimensionSymbols","isIntersects","isDisjoint","isCovers","_matrix","isCoveredBy","dimensionSymbols","row","col","toDimensionValue","column","isContains","setAtLeast","minimumDimensionSymbols","minimumDimensionValue","setAtLeastIfValid","isWithin","isTouches","dimensionOfGeometryA","dimensionOfGeometryB","isOverlaps","isEquals","ai","bi","toDimensionSymbol","setAll","transpose","im","isCrosses","elements","Angle","radians","PI_TIMES_2","dx0","dy0","anglePrev","angleNext","tip1","tail","tip2","a1","a2","diff","ang1","ang2","delAngle","angleDegrees","crossproduct","sin","angDel","PI_OVER_2","PI_OVER_4","Triangle","m00","m01","m10","m11","v0","lenAB","lenBC","lenCA","maxLen","isAcute","cx","cy","ay","bx","by","numx","numy","l1","l2","len0","frac","uz","vx","vy","vz","crossx","crossy","crossz","absSq","len1","circum","inCentreX","inCentreY","signedArea","interpolateZ","longestSideLength","circumcentre","area3D","centroid","inCentre","PointPairDistance","_pt","setMinimum","ptDist","_isNull","initialize","_distance","getDistance","setMaximum","DistanceToPoint","tempSegment","computeDistance","segment","DiscreteHausdorffDistance","g0","g1","densifyFrac","setDensifyFraction","_ptDist","_densifyFrac","compute","computeOrientedDistance","_g0","_g1","discreteGeom","distFilter","MaxPointDistanceFilter","getMaxPointDistance","fracFilter","MaxDensifiedByFractionDistanceFilter","orientedDistance","_minPtDist","_maxPtDist","_euclideanDist","delx","_numSubSegs","dely","fraction","ItemVisitor","visitItem","item","PointOnGeometryLocator","locate","IntervalRTreeNode","getMin","_min","queryMin","queryMax","_max","getMax","NodeComparator","mid1","mid2","POSITIVE_INFINITY","IntervalRTreeLeafNode","query","visitor","_item","Collections","reverseOrder","alen","singletonList","IntervalRTreeBranchNode","buildExtent","_node1","_node2","SortedPackedIntervalRTree","buildTree","_leaves","buildLevel","insert","_root","buildRoot","printNode","node","_level","LinearComponentExtracter","getLines","forceToLineString","geoms","_isForcedToLineString","_lines","setForceToLineString","isForcedToLineString","ArrayListVisitor","_items","getItems","RayCrossingCounter","countSegment","isOnSegment","getLocation","_p","_isPointOnSegment","minx","maxx","orient","_crossingCount","isPointInPolygon","IndexedPointInAreaLocator","rcc","SegmentVisitor","_index","_counter","IntervalIndexedGeometry","addLine","PointLocation","lineIntersector","locatePointInRing","locateInRing","GeometryCollectionIterator","_atStart","isAtomic","_parent","_subcollectionIterator","UnsupportedOperationException","SimplePointInAreaLocator","shellLoc","holeLoc","locatePointInPolygon","geomi","g2","loc","locateInGeometry","SimilarityMeasure","measure","AreaSimilarityMeasure","union","HausdorffSimilarityMeasure","width","hgt","DENSIFY_FRACTION","diagonalSize","SimilarityMeasureCombiner","measure1","measure2","Centroid","getCentroid","setAreaBasePoint","basePt","_areaBasePt","addPoint","_ptCount","_ptCentSum","addLineSegments","lineLen","segmentLen","midx","_lineCentSum","midy","_totalLength","addHole","isPositiveArea","addTriangle","cent","_areasum2","_cg3","addShell","centroid3","_triangleCent3","area2","EmptyStackException","Stack","pop","peek","empty","UniqueCoordinateArrayFilter","ConvexHull","preSort","RadialComparator","computeOctRing","inputPts","octPts","computeOctPts","lineOrPolygon","cleanRing","_geomFactory","linearRing","original","cleanedRing","previousDistinctCoordinate","currentCoordinate","nextCoordinate","isBetween","cleanedRingCoordinates","c3","reduce","polyPts","reducedSet","isInRing","reducedPts","padArray3","getConvexHull","_inputPts","sortedPts","cHS","grahamScan","cH","pad","dxp","dyp","dxq","dyq","op","oq","polarCompare","_origin","origin","extractCoordinates","filterCoordinates","InteriorPointArea","avg","addPolygon","bisector","horizontalBisector","intersections","widestIntersection","widestGeometry","_interiorPoint","_maxWidth","getInteriorPoint","bisectY","SafeBisectorFinder","getBisectorY","updateInterval","_centreY","_loY","_hiY","process","_poly","InteriorPointLine","addEndpoints","addInterior","_centroid","_minDistance","InteriorPointPoint","MinimumBoundingCircle","minSin","minAngPt","Q","minAng","ang","angleBetween","getRadius","_radius","getDiameter","_extremalPts","_input","_centre","getExtremalPoints","computeCirclePoints","hullPts","copyDeep","lowestPoint","pointWitMinAngleWithX","R","pointWithMinAngleWithSegment","isObtuse","computeCentre","getFarthestPoints","getCircle","centrePoint","getCentre","MinimumDiameter","getMinimumRectangle","getWidthCoordinate","computeMinimumDiameter","_minWidthPt","getSupportingSegment","_inputGeom","_minBaseSeg","computeWidthConvex","convexGeom","_convexHullPts","_minWidth","computeConvexRingMinDiameter","currMaxIndex","findMaxPerpDistance","_isConvex","startIndex","maxPerpDistance","nextPerpDistance","maxIndex","nextIndex","_minPtIndex","minPara","maxPara","minPerp","maxPerp","paraC","computeC","perpC","maxPerpLine","computeSegmentForLine","minPerpLine","maxParaLine","minParaLine","inputGeom","isConvex","GeometryTransformer","transformPoint","transformCoordinates","transformPolygon","isAllValidLinearRings","transformLinearRing","createCoordinateSequence","getInputGeometry","transformMultiLineString","transGeomList","transformGeom","transformLineString","transformMultiPoint","transformMultiPolygon","transformGeometryCollection","transform","_pruneEmptyGeometry","_preserveGeometryCollectionType","seqSize","_preserveType","_preserveCollections","Densifier","distanceTolerance","precModel","densifiedSegCount","densifiedSegLen","segFract","densifier","setDistanceTolerance","getResultGeometry","DensifyTransformer","_distanceTolerance","roughGeom","createValidArea","newPts","densifyPoints","roughAreaGeom","Quadrant","quad","NE","NW","quad1","quad2","halfPlane","SE","SW","HalfEdge","e0","e1","_sym","_next","find","oNext","_orig","insertAfter","ecmp","ePrev","orig","save","setNext","sym","degree","compareAngularDirection","quadrant","quadrant2","prevNode","setSym","MarkHalfEdge","isMarked","setMark","mark","_isMarked","EdgeGraph","eAdj","_vertexMap","eAdjDest","createEdge","addEdge","isValidEdge","eSame","getVertexEdges","findEdge","DissolveHalfEdge","setStart","_isStart","isStart","DissolveEdgeGraph","LineDissolver","getResult","updateRingStartEdge","_ringStartEdge","computeResult","eNode","stackEdges","buildLines","buildRing","eStartRing","eNext","buildLine","eStart","markBoth","_nodeEdgeStack","_graph","component","lineString","doneStart","PointLocator","locateInPolygonRing","updateLocationInfo","_isIn","_numBoundaries","computeLocation","locateOnPoint","locateOnLineString","locateInPolygon","ml","mpoly","isOnLine","_boundaryRule","boundaryRule","Position","position","ON","MonotoneChain","computeIntersections","mc","si","mce","computeIntersectsForChain","chainIndex","SweepLineEvent","isDelete","_eventType","DELETE","setDeleteEventIndex","deleteEventIndex","_deleteEventIndex","getObject","_obj","pe","_xValue","getInsertEvent","_insertEvent","isInsert","INSERT","isSameLabel","ev","_label","getDeleteEventIndex","insertEvent","label","EdgeSetIntersector","SegmentIntersector","isTrivialIntersection","segIndex0","segIndex1","_li","isAdjacentSegments","maxSegIndex","getProperIntersectionPoint","_properIntersectionPoint","setIsDoneIfProperInt","isDoneWhenProperInt","_isDoneWhenProperInt","hasProperInteriorIntersection","_hasProperInterior","isBoundaryPointInternal","bdyNodes","hasProperIntersection","_hasProper","_hasIntersection","_isDone","isBoundaryPoint","setBoundaryNodes","bdyNodes0","bdyNodes1","_bdyNodes","addIntersections","numTests","p00","p01","p10","p11","_recordIsolated","setIsolated","_numIntersections","_includeProper","_isSelfIntersection","includeProper","recordIsolated","SimpleMCSweepLineIntersector","prepareEvents","events","nOverlaps","processOverlaps","edges0","edges1","addEdges","edges","edge","edgeSet","getMonotoneChainEdge","getStartIndexes","ev0","mc0","ev1","mc1","TopologyLocation","setAllLocations","locValue","location","setAllLocationsIfNull","isLine","merge","gl","newLoc","getLocations","flip","toLocationSymbol","setLocations","on","posIndex","isArea","isAnyNull","setLocation","locIndex","isEqualOnSide","allPositionsEqual","Label","lineLabel","getGeometryCount","elt","geomIndex","lbl","side","toLine","onLoc","leftLoc","rightLoc","EdgeIntersection","getSegmentIndex","print","maxSegmentIndex","EdgeIntersectionList","_nodeMap","addSplitEdges","edgeList","eiPrev","ei","newEdge","createSplitEdge","ei0","ei1","lastSegStartPt","useIntPt1","ipt","Edge","eiNew","MonotoneChainIndexer","getChainStartIndices","startIndexList","findChainEnd","toIntArray","chainQuad","MonotoneChainEdge","chainIndex0","chainIndex1","start0","end0","start1","end1","overlaps","mid0","computeIntersects","mcb","Depth","NULL_VALUE","getDepth","_depth","setDepth","depthValue","minDepth","newValue","getDelta","depthAtLocation","GraphComponent","setVisited","isVisited","_isVisited","setInResult","isInResult","_isInResult","isCovered","_isCovered","isCoveredSet","_isCoveredSet","setLabel","getLabel","setCovered","updateIM","computeIM","getCollapsedEdge","toLineLabel","isIsolated","_isIsolated","setName","isEqualForward","isEqualReverse","iRev","_depthDelta","isCollapsed","getMaximumSegmentIndex","getDepthDelta","printReverse","_mce","_env","addIntersection","normalizedSegmentIndex","nextSegIndex","nextPt","eiList","isPointwiseEqual","setDepthDelta","depthDelta","getEdgeIntersectionList","Node","isIncidentEdgeInResult","getEdges","getEdge","_coord","computeMergedLocation","label2","eltIndex","nLoc","argIndex","onLocation","_edges","mergeLabel","setNode","setLabelBoundary","NodeMap","nodeMap","addNode","nodeFact","createNode","getBoundaryNodes","EdgeEnd","compareDirection","_dx","_dy","_quadrant","_p0","_p1","getDy","_node","className","lastDotPos","lastIndexOf","getDirectedCoordinate","getDx","_edge","getQuadrant","getNode","computeLabel","boundaryNodeRule","TopologyException","msg","msgWithCoord","DirectedEdge","currLocation","nextLocation","getNextMin","_nextMin","computeDirectedLabel","_isForward","getNext","depthVal","isInteriorAreaEdge","setNextMin","nextMin","setMinEdgeRing","minEdgeRing","_minEdgeRing","isLineEdge","isExteriorIfArea0","isExteriorIfArea1","setEdgeRing","edgeRing","_edgeRing","getMinEdgeRing","getSym","isForward","printEdge","de","setVisitedEdge","setEdgeDepths","directionFactor","oppositePos","opposite","oppositeDepth","getEdgeRing","NodeFactory","PlanarGraph","nodes","nodeit","linkResultDirectedEdges","printEdges","_nodes","getNodeIterator","debugPrintln","isBoundaryNode","linkAllDirectedEdges","matchInSameDirection","ep0","ep1","getEdgeEnds","_edgeEndList","debugPrint","getEdgeIterator","findEdgeInSameDirection","eCoord","insertEdge","findEdgeEnd","ee","edgesToAdd","de1","de2","getNodes","GeometryGraph","insertBoundaryPoint","determineBoundary","_boundaryNodeRule","computeSelfNodes","computeRingSelfNodes","isDoneIfProperInt","esi","createEdgeSetIntersector","isRings","_parentGeom","computeAllSegments","addSelfIntersectionNodes","_argIndex","computeSplitEdges","edgelist","computeEdgeIntersections","getGeometry","getBoundaryNodeRule","hasTooFewPoints","_hasTooFewPoints","insertPoint","addPolygonRing","addLineString","removeRepeatedPoints","_invalidPoint","_lineEdgeMap","getInvalidPoint","getBoundaryPoints","_boundaryNodes","addSelfIntersectionNode","_useBoundaryDeterminationRule","lr","cwLeft","cwRight","eLoc","eiIt","addCollection","_areaPtLocator","_ptLocator","parentGeom","KdNodeVisitor","visit","KdNode","isRepeated","_count","getRight","_right","setLeft","_left","getData","_data","getCount","getLeft","increment","setRight","data","KdTree","kdnodes","toCoordinates","includeRepeated","_tolerance","matchNode","findBestMatchNode","insertExact","queryEnv","queryNode","currentNode","odd","discriminant","searchRight","BestMatchVisitor","queryEnvelope","leafNode","isOddLevel","isLessThan","_numberOfNodes","update","_matchNode","_matchDist","NodeBase","centrex","centrey","subnodeIndex","hasChildren","_subnode","isPrunable","hasItems","addAllItems","resultItems","getNodeCount","subSize","addAllItemsFromOverlapping","searchEnv","isSearchMatch","visitItems","itemEnv","maxSubDepth","sqd","DoubleBits","exponent","NumW","Qty","Sign","Expo","Mant","Bin","ExW","32","64","CVTFWD","powerOf2","Key","dMax","getLevel","computeKey","computeQuadLevel","level","quadSize","getPoint","addEnv","expandEnv","largerNode","insertNode","getSubnodeIndex","_centrex","_centrey","getSubnode","createSubnode","miny","maxy","sqEnv","childNode","IntervalSize","scaledInterval","MIN_BINARY_EXPONENT","Root","createExpanded","insertContained","tree","isZeroX","isZeroWidth","isZeroY","SpatialIndex","Quadtree","collectStats","insertEnv","ensureExtent","_minExtent","queryAll","foundItems","posEnv","delX","delY","Boundable","getBounds","ItemBoundable","getItem","_bounds","bounds","PriorityQueue","poll","minItem","_size","reorder","child","AbstractNode","_childBoundables","getChildBoundables","addChildBoundable","childBoundable","computeBounds","BoundablePair","expandToQueue","priQ","isComp1","isComposite","_boundable1","isComp2","_boundable2","expand","isLeaves","nd","bndComposite","bndOther","bp","_itemDistance","getBoundable","boundable1","boundable2","itemDistance","AbstractSTRtree","queryInternal","searchBounds","childBoundables","getIntersectsOp","getNodeCapacity","_nodeCapacity","lastNode","build","removeItem","childToRemove","itemsTree","valuesTree","valuesTreeForNode","valuesTreeForChild","_built","_itemBoundables","boundablesAtLevel","boundables","top","boundable","createHigherLevels","getRoot","childToPrune","boundablesOfALevel","parentBoundables","createParentBoundables","maxChildDepth","childDepth","newLevel","sortedChildBoundables","getComparator","IntersectsOp","DEFAULT_NODE_CAPACITY","nodeCapacity","ItemDistance","item1","item2","STRtree","kNearestNeighbors","items","createParentBoundablesFromVerticalSlices","verticalSlices","createParentBoundablesFromVerticalSlice","STRtreeNode","intersectsOp","sliceCount","sliceCapacity","slices","boundablesAddedToSlice","yComparator","minLeafCount","xComparator","nearestNeighbour","itemDist","initBndPair","distanceLowerBound","minPair","currentDistance","bndPair","bnd","maxDistance","compareDoubles","centreX","centreY","aBounds","bBounds","geometryTypes","GeoJSONParser","json","JSON","Feature","feature","bbox","FeatureCollection","featureCollection","features","sub","geoJson","shellGeoJson","holeGeoJson","p2c","olReference","ol","inject","convertFromPoint","convertFromLineString","convertFromLinearRing","convertFromPolygon","convertFromMultiPoint","convertFromMultiLineString","convertFromMultiPolygon","convertFromCollection","getLinearRings","multiPoint","getPoints","multiLineString","getLineStrings","multiPolygon","getPolygons","getGeometries","convertToPoint","convertToLineString","convertToLinearRing","convertToPolygon","convertToMultiPoint","convertToMultiLineString","convertToMultiPolygon","convertToCollection","geometryCollection","SegmentPointComparator","octant","xSign","relativeSign","ySign","compareValue","compareSign0","compareSign1","SegmentNode","_segmentOctant","_isInterior","isInterior","_segString","segString","segmentOctant","SegmentNodeList","getSplitCoordinates","addEdgeCoordinates","addCollapsedNodes","collapsedVertexIndexes","findCollapsesFromInsertedNodes","findCollapsesFromExistingVertices","vertexIndex","findCollapseIndex","collapsedVertexIndex","numVerticesBetween","NodedSegmentString","getSegmentOctant","checkSplitEdgesCorrectness","splitEdges","edgePts","pt0","splitnPts","ptn","Octant","adx","ady","SegmentString","setData","NodableSegmentString","segStrings","resultEdgelist","getNodedSubstrings","getNodeList","_pts","safeOctant","addIntersectionNode","_nodeList","MonotoneChainOverlapAction","overlap","mc2","start2","getLineSegment","_overlapSeg1","_overlapSeg2","computeSelect","mcs","select","_end","_start","computeOverlaps","mco","setId","id","_id","getEndIndex","getStartIndex","getContext","_context","getId","MonotoneChainBuilder","safeStart","getChains","mcList","Noder","computeNodes","SinglePassNoder","setSegmentIntersector","segInt","_segInt","MCIndexNoder","getMonotoneChains","_monoChains","_nodedSegStrings","getIndex","segStr","_idCounter","inputSegStrings","intersectChains","overlapAction","SegmentOverlapAction","queryChain","testChain","_nOverlaps","ss1","ss2","_si","processIntersections","ScaledNoder","rescale","ss","_scaleFactor","_offsetX","_offsetY","nodedSegmentStrings","roundPts","isIntegerPrecision","splitSS","_noder","_isScaled","intSegStrings","noder","scaleFactor","IsSimpleOp","isSimpleMultiPoint","mp","_nonSimpleLocation","isSimplePolygonal","isSimpleLinearGeometry","hasClosedEndpointIntersection","graph","endPoints","eiInfo","getNonSimpleLocation","hasNonEndpointIntersection","_isClosedEndpointsInInterior","EndpointInfo","computeSimple","isSimpleGeometryCollection","BufferParameters","quadSegs","alpha","cos","getEndCapStyle","_endCapStyle","isSingleSided","_isSingleSided","setQuadrantSegments","_quadrantSegments","_joinStyle","JOIN_BEVEL","JOIN_MITRE","_mitreLimit","JOIN_ROUND","DEFAULT_QUADRANT_SEGMENTS","getJoinStyle","setJoinStyle","joinStyle","setSimplifyFactor","simplifyFactor","_simplifyFactor","getSimplifyFactor","getQuadrantSegments","setEndCapStyle","endCapStyle","getMitreLimit","setMitreLimit","mitreLimit","setSingleSided","CAP_ROUND","DEFAULT_MITRE_LIMIT","DEFAULT_SIMPLIFY_FACTOR","quadrantSegments","CAP_FLAT","CAP_SQUARE","RightmostEdgeFinder","_minCoord","getRightmostSide","getRightmostSideOfSegment","checkForRightmostCoordinate","findRightmostEdgeAtVertex","_minDe","_minIndex","pPrev","pNext","orientation","usePrev","_orientedDe","findRightmostEdgeAtNode","star","getRightmostEdge","dirEdgeList","LinkedList","addLast","removeFirst","shift","BufferSubgraph","clearVisitedEdges","_dirEdgeList","getRightmostCoordinate","_rightMostCoord","computeNodeDepth","startEdge","computeDepths","copySymDepths","computeDepth","outsideDepth","_finder","addReachable","findResultEdges","nodesVisited","nodeQueue","startNode","adjNode","edgeEnv","nodeStack","symNode","getDirectedEdges","EdgeRing","computeRing","_ring","_geometryFactory","_isHole","computePoints","_startDe","isFirstEdge","addPoints","getLinearRing","computeMaxNodeDegree","_maxNodeDegree","getOutgoingDegree","isHole","containsPoint","isShell","getMaxNodeDegree","getShell","deLabel","setShell","toPolygon","holeLR","MinimalEdgeRing","er","MaximalEdgeRing","buildMinimalRings","minEdgeRings","minEr","linkDirectedEdgesForMinimalEdgeRings","linkMinimalDirectedEdges","PolygonBuilder","sortShellsAndHoles","edgeRings","shellList","freeHoleList","computePolygons","resultPolyList","placeFreeHoles","findEdgeRingContaining","buildMinimalEdgeRings","maxEdgeRings","findShell","placePolygonHoles","_shellList","buildMaximalEdgeRings","dirEdges","testEr","testRing","testEnv","minShell","minEnv","tryShell","tryRing","tryEnv","isContained","shellCount","BufferInputLineSimplifier","inputLine","distanceTol","simplify","isDeletable","i0","_inputLine","isConcave","isShallow","isShallowSampled","deleteShallowConcavities","midIndex","findNextNonDeletedIndex","lastIndex","isMiddleVertexDeleted","_distanceTol","_isDeleted","isShallowConcavity","_angleOrientation","NUM_PTS_TO_CHECK","collapseLine","INIT","KEEP","OffsetSegmentString","_ptList","COORDINATE_ARRAY_TYPE","addPt","bufPt","isRedundant","addPts","lastPt","_minimimVertexDistance","startPt","setMinimumVertexDistance","minimimVertexDistance","OffsetSegmentGenerator","addNextSegment","addStartPoint","_s0","_s1","_s2","_seg0","computeOffsetSegment","_side","_offset0","_seg1","_offset1","outsideTurn","addCollinear","addOutsideTurn","addInsideTurn","addLineEndCap","offsetL","offsetR","_bufParams","_segList","addDirectedFillet","squareCapSideOffset","squareCapLOffset","squareCapROffset","addMitreJoin","offset0","offset1","isMitreWithinLimit","addLimitedMitreJoin","OFFSET_SEGMENT_SEPARATION_FACTOR","addBevelJoin","addCornerFillet","createSquare","addSegments","addFirstSegment","direction","radius","startAngle","endAngle","addLastSegment","initSideSegments","s1","s2","ang0","angDiffHalf","angleBetweenOriented","midAng","mitreMidAng","mitreDist","bevelHalfLen","bevelMidX","bevelMidY","bevelMidPt","mitreMidLine","bevelEndLeft","bevelEndRight","totalAngle","nSegs","_filletAngleQuantum","currAngleInc","currAngle","offset","sideSign","_hasNarrowConcaveAngle","INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR","_closingSegLengthFactor","createCircle","_maxCurveSegmentError","CURVE_VERTEX_SNAP_DISTANCE_FACTOR","hasNarrowConcaveAngle","bufParams","MAX_CLOSING_SEG_LEN_FACTOR","OffsetCurveBuilder","getOffsetCurve","isRightSide","posDistance","segGen","getSegGen","computePointCurve","computeOffsetCurve","curvePts","computeSingleSidedBufferCurve","distTol","simplifyTolerance","simp2","simp1","computeRingBufferCurve","simp","computeLineBufferCurve","getLineCurve","getBufferParameters","bufDistance","getRingCurve","copyCoordinates","SubgraphDepthLocater","findStabbedSegments","stabbingRayLeftPt","stabbedSegments","_subgraphs","bsg","dirEdge","_seg","ds","DepthSegment","_leftDepth","_upwardSeg","orientIndex","compareX","seg0","seg1","compare0","subgraphs","OffsetCurveSetBuilder","curve","_curveBuilder","addCurve","offsetSide","shellCoord","isErodedCompletely","holeCoord","isTriangleErodedCompletely","triangleCoord","bufferDistance","tri","_curveList","getCurves","cwLeftLoc","cwRightLoc","ringCoord","envMinDimension","curveBuilder","EdgeEndStar","getNextCW","_edgeList","iNextCW","propagateSideLabels","startLoc","currLoc","isAreaLabelsConsistent","geomGraph","computeEdgeEndLabels","checkAreaLabelsConsistent","lastEdgeIndex","findIndex","eSearch","_edgeMap","_ptInAreaLocation","computeLabelling","hasDimensionalCollapseEdge","getDegree","insertEdgeEnd","DirectedEdgeStar","getResultAreaEdges","firstOut","incoming","state","_SCANNING_FOR_INCOMING","_resultAreaEdgeList","nextOut","nextIn","_LINKING_TO_OUTGOING","de0","deLast","quad0","isNorthern","updateLabelling","nodeLabel","prevOut","firstIn","edgeIndex","startDepth","targetLastDepth","nextDepth","endIndex","currDepth","nextDe","mergeSymLabels","findCoveredLineEdges","eLabel","OverlayNodeFactory","OrientedCoordinateArray","orientation1","orientation2","limit1","limit2","compPt","done1","done2","oca","compareOriented","_orientation","EdgeList","edgeColl","findEdgeIndex","findEqualEdge","_ocaMap","IntersectionAdder","getLineIntersector","numIntersections","numInteriorIntersections","_hasInterior","numProperIntersections","hasInteriorIntersection","BufferBuilder","lLoc","rLoc","setWorkingPrecisionModel","_workingPrecisionModel","insertUniqueEdge","existingEdge","existingLabel","labelToMerge","mergeDelta","newDelta","buildSubgraphs","subgraphList","polyBuilder","processedGraphs","subgraph","createSubgraphs","createEmptyResultGeometry","getNoder","_workingNoder","bufferSegStrList","computeNodedEdges","oldLabel","setNoder","NodingValidator","checkEndPtVertexIntersections","_segStrings","checkInteriorIntersections","ss0","pts0","checkValid","checkCollapses","checkCollapse","HotPixel","intersectsScaled","segMinx","segMaxx","segMiny","segMaxy","isOutsidePixelEnv","intersectsToleranceSquare","initCorners","_corner","copyScaled","_p0Scaled","_p1Scaled","_originalPt","pScaled","getSafeEnvelope","_safeEnv","safeTolerance","SAFE_ENV_EXPANSION_FACTOR","intersectsPixelClosure","intersectsLeft","intersectsBottom","addSnappedNode","segIndex","_ptScaled","MonotoneChainSelectAction","selectedSegment","MCIndexPointSnapper","snap","hotPixel","parentEdge","hotPixelVertexIndex","pixelEnv","hotPixelSnapAction","HotPixelSnapAction","isNodeAdded","_isNodeAdded","_parentEdge","_hotPixelVertexIndex","_hotPixel","InteriorIntersectionFinderAdder","_interiorIntersections","getInteriorIntersections","MCIndexSnapRounder","checkCorrectness","inputSegmentStrings","resultSegStrings","nv","snapRound","findInteriorIntersections","computeIntersectionSnaps","computeVertexSnaps","intFinderAdder","edge0","_pointSnapper","snapPts","snapPt","_pm","BufferOp","bufOp","params","maxPrecisionDigits","bufEnvMax","minUnitLog10","bufferFixedPrecision","fixedPM","bufBuilder","_resultGeometry","_argGeom","bufferReducedPrecision","precDigits","MAX_PRECISION_DIGITS","_saveException","precisionDigits","sizeBasedScaleFactor","precisionScaleFactor","computeGeometry","bufferOriginalPrecision","argPM","CAP_BUTT","PolygonExtracter","_comps","comps","GeometryLocation","isInsideArea","_segIndex","INSIDE_AREA","getGeometryComponent","_component","PointExtracter","ConnectedElementLocationFilter","locations","_locations","DistanceOp","nearestPoints","computeContainmentDistance","locPtPoly","_terminateDistance","polyGeomIndex","polyGeom","locationsIndex","polys","insideLocs","_minDistanceLocation","locs","ptLoc","computeMinDistanceLinesPoints","locGeom","computeMinDistance","computeFacetDistance","lines0","lines1","computeMinDistanceLines","updateMinDistance","computeMinDistancePoints","nearestLocations","coord0","segClosestPoint","line0","line1","points0","points1","pt1","terminateDistance","EdgeString","forwardDirectedEdges","reverseDirectedEdges","coordinateList","_directedEdges","directedEdge","getEdgeDirection","getLine","visitedState","visited","marked","setMarked","setContext","isRemoved","_from","_angle","getDirectionPt","getAngle","getFromNode","setEdge","getToNode","_to","_edgeDirection","from","to","directionPt","edgeDirection","LineMergeDirectedEdge","getOutEdges","_dirEdge","setDirectedEdges","addOutEdge","getDirEdge","fromNode","getOppositeNode","getNextEdge","_outEdges","sortEdges","_sorted","getNextCWEdge","modi","node0","node1","commonEdges","toEdges","retainAll","_deStar","deStar","LineMergeEdge","_line","findNodesOfDegree","nodesFound","nodeIterator","dirEdgeIterator","_dirEdges","edgeIterator","findNode","LineMergeGraph","startCoordinate","endCoordinate","endNode","directedEdge0","directedEdge1","LineMerger","buildEdgeStringsForUnprocessedNodes","buildEdgeStringsStartingAt","buildEdgeStringsForNonDegree2Nodes","buildEdgeStringsForObviousStartNodes","getMergedLineStrings","_mergedLineStrings","_edgeStrings","buildEdgeStringStartingWith","buildEdgeStringsForIsolatedLoops","edgeString","current","BasicSegmentString","InteriorIntersectionFinder","finder","setFindAllIntersections","setKeepIntersections","getInteriorIntersection","_interiorIntersection","setCheckEndSegmentsOnly","isCheckEndSegmentsOnly","_isCheckEndSegmentsOnly","getIntersectionSegments","_intSegments","_intersectionCount","getIntersections","_intersections","findAllIntersections","_findAllIntersections","keepIntersections","_keepIntersections","isEndSegment","FastNodingValidator","execute","_isValid","getErrorMessage","intSegs","EdgeNodingValidator","_nv","toSegmentStrings","GeometryCollectionMapper","mapped","_mapOp","mapOp","LineBuilder","collectLines","opCode","_op","getGraph","collectLineEdge","_lineEdgesList","collectBoundaryTouchEdge","labelIsolatedLine","targetIndex","getArgGeometry","_resultLineList","OverlayOp","isResultOfOp","isCoveredByA","labelIsolatedLines","edgesList","INTERSECTION","ptLocator","PointBuilder","filterCoveredNodeToPoint","isCoveredByLA","_resultPointList","extractNonCoveredResultNodes","LineStringSnapper","snapVertices","srcCoords","_isClosed","srcPt","snapVert","findSnapForVertex","_snapTolerance","snapTo","_srcPts","snapSegments","distinctPtCount","findSegmentIndexToSnap","snapIndex","_allowSnappingToSourceVertices","setAllowSnappingToSourceVertices","allowSnappingToSourceVertices","srcLine","snapTolerance","srcPts","GeometrySnapper","snapGeom","snapper0","snapper1","computeSizeBasedSnapTolerance","fixedSnapTol","computeOverlaySnapTolerance","SNAP_PRECISION_FACTOR","cleanResult","snapToSelf","extractTargetCoordinates","SnapTransformer","_srcGeom","snappedGeom","computeSnapTolerance","ringPts","computeMinimumSegmentLength","ptSet","minSegLen","segLen","srcGeom","snapLine","snapper","_isSelfSnap","_snapPts","isSelfSnap","CommonBits","_isFirst","_commonMantissaBitsCount","_commonBits","_commonSignExp","getCommon","numBits","signExpBits","numCommonMostSigMantissaBits","zeroLowerBits","padStr","bitStr","nBits","prop","num1","num2","getBit","CommonBitsRemover","addCommonBits","trans","Translater","_commonCoord","removeCommonBits","invCoord","getCommonCoordinate","_ccFilter","CommonCoordinateFilter","_commonBitsX","_commonBitsY","xp","yp","SnapOverlayOp","overlayOp","UNION","SYMDIFFERENCE","DIFFERENCE","selfSnap","_cbr","remGeom","prepareResult","prepGeom","SnapIfNeededOverlayOp","isSuccess","savedException","GeometryGraphOperation","_arg","setComputationPrecision","_resultPrecisionModel","geom1","createEmptyResult","MapOp","dim0","dim1","resultDimension","overlayOpCode","geomFact","loc0","loc1","cancelDuplicateResultEdges","_resultPolyList","resultPointList","resultLineList","opcode","replaceCollapsedEdges","newEdges","updateNodeLabelling","computeOverlay","_resultGeom","insertUniqueEdges","copyPoints","baseSplitEdges","computeLabelsFromDepths","labelIncompleteNodes","findResultAreaEdges","lineBuilder","pointBuilder","labelIncompleteNode","graphNode","ni","PolygonizeDirectedEdge","setRing","getRing","PolygonizeEdge","startDE","minShellEnv","tryShellRing","tryShellEnv","ptNotInList","isIncluded","_isIncluded","_ringPts","_deList","isIncludedSet","_isIncludedSet","isOuterHole","hasShell","getPolygon","isProcessed","_isProcessed","holeER","setIncluded","getOuterHole","adjRing","computeHole","isOuterShell","getLineString","updateIncluded","adjShell","setProcessed","EnvelopeComparator","obj0","obj1","r1","_lowestEdge","PolygonizeGraph","edgeRingStarts","currLabel","findDirEdgesInRing","prevDE","outDE","firstOutDE","prevInDE","inDE","intNodes","findEdgeRing","computeDepthParity","computeNextCWEdges","iNode","linePts","endPt","nStart","nEnd","deleteCutEdges","findLabeledEdgeRings","cutLines","getEdgeRings","maximalRings","convertMaximalToMinimalEdgeRings","edgeRingList","ringEdges","findIntersectionNodes","computeNextCCWEdges","deleteDangles","nodesToRemove","dangleLines","deleteAllEdges","toNode","getDegreeNonDeleted","Polygonizer","outerHoleER","includeAll","polyList","holeList","assignHoleToShell","findOuterShells","isMoreToScan","polygonize","_extractOnlyPolygonal","_polyList","getInvalidRingLines","_invalidRingLines","findValidRings","validEdgeRingList","invalidRingList","_dangles","_cutEdges","_isCheckingRingsValid","findShellsAndHoles","assignHolesToShells","_holeList","findDisjointShells","extractPolygons","getDangles","getCutEdges","_lineStringAdder","setCheckRingsValid","isCheckingRingsValid","LineStringAdder","extractOnlyPolygonal","EdgeEndBuilder","createEdgeEndForNext","eiCurr","eiNext","createEdgeEndForPrev","computeEdgeEnds","EdgeEndBundle","_edgeEnds","computeLabelOn","foundInterior","computeLabelSide","computeLabelSides","EdgeEndBundleStar","eb","RelateNode","updateIMFromEdges","RelateNodeFactory","RelateComputer","insertEdgeEnds","computeProperIntersectionIM","intersector","dimA","dimB","hasProper","hasProperInterior","labelIsolatedEdges","thisIndex","labelIsolatedEdge","_isolatedEdges","target","computeDisjointIM","computeIntersectionNodes","copyNodesAndLabels","labelIsolatedNodes","eeBuilder","ee0","ee1","labelNodeEdges","labelIntersectionNodes","labelIsolatedNode","ga","gb","_im","arg","RectangleContains","rectangle","isContainedInBoundary","isPointContainedInBoundary","isLineStringContainedInBoundary","isLineSegmentContainedInBoundary","_rectEnv","RectangleLineIntersector","segEnv","isSegUpwards","_diagDown0","_diagDown1","_diagUp0","_diagUp1","rectEnv","ShortCircuitedGeometryVisitor","applyTo","RectangleIntersects","EnvelopeIntersectsVisitor","ecpVisitor","GeometryContainsPointVisitor","_rectangle","riVisitor","RectangleIntersectsSegmentVisitor","_intersects","elementEnv","_containsPoint","rectPt","_rectSeq","containsPointInPolygon","checkIntersectionWithLineStrings","testLine","checkIntersectionWithSegments","seq1","_rectIntersector","RelateOp","getIntersectionMatrix","_relate","GeometryCombiner","combine","createList","obj2","extractElements","elems","elemGeom","_skipEmpty","_inputGeoms","extractFactory","PointGeometryUnion","pointGeom","locater","exteriorCoords","_pointGeom","_otherGeom","ptComp","GeometryExtracter","geometryType","Class","clz","toGeometryType","_geometryType","isOfType","CascadedPolygonUnion","reduceToGeometries","geomTree","unionTree","extractByEnvelope","disjointGeoms","intersectingGeoms","elem","unionOptimized","g0Env","g1Env","unionActual","commonEnv","unionUsingEnvelopeIntersection","_inputPolys","STRTREE_NODE_CAPACITY","itemTree","binaryUnion","unionSafe","repeatedUnion","restrictToPolygons","common","disjointPolys","g0Int","g1Int","bufferUnion","UnaryUnionOp","unionNoOpt","unionWithNull","_polygons","unionPoints","ptGeom","unionLines","lineGeom","unionPolygons","unionLA","ConnectedInteriorTester","visitInteriorRing","findDifferentPoint","intDe","visitLinkedDirectedEdges","visitShellInteriors","_disconnectedRingcoord","setInteriorEdgesInResult","startDe","buildEdgeRings","hasUnvisitedShellEdge","isInteriorsConnected","_geomGraph","RelateNodeGraph","nodeIt","eeList","edgeIt","ConsistentAreaTester","isNodeEdgeAreaLabelsConsistent","_nodeGraph","hasDuplicateRings","eeb","isNodeConsistentArea","IndexedNestedRingTester","buildIndex","_rings","getNestedPoint","_nestedPt","isNonNested","innerRing","innerRingPts","results","searchRing","searchRingPts","innerRingPt","IsValidOp","findPtNotNode","_totalEnv","TopologyValidationError","getErrorType","_errorType","getMessage","errMsg","locStr","errorType","ERROR","REPEATED_POINT","HOLE_OUTSIDE_SHELL","NESTED_HOLES","DISCONNECTED_INTERIOR","SELF_INTERSECTION","RING_SELF_INTERSECTION","NESTED_SHELLS","DUPLICATE_RINGS","TOO_FEW_POINTS","INVALID_COORDINATE","RING_NOT_CLOSED","testCoords","checkInvalidCoordinates","_validErr","checkHolesNotNested","nestedTester","innerHole","checkConsistentArea","cat","_parentGeometry","checkShellInsideHole","shellPts","holePts","shellPt","holePt","checkNoSelfIntersectingRings","checkNoSelfIntersectingRing","checkConnectedInteriors","cit","nodeSet","isFirst","checkHolesInShell","pir","checkTooFewPoints","getValidationError","checkClosedRing","checkClosedRings","_isSelfTouchingRingFormingHoleValid","checkShellsNotNested","setSelfTouchingRingFormingHoleValid","checkShellNotNested","polyShell","badNestedPt","parentGeometry","PrecisionReducerCoordinateOperation","reducedCoords","_targetPM","noRepeatedCoords","minLength","collapsedCoords","_removeCollapsed","targetPM","removeCollapsed","GeometryPrecisionReducer","reducer","setPointwise","fixPolygonalTopology","geomToBuffer","_changePrecisionModel","changePM","bufGeom","bufferOp","finalGeom","reducePointwise","geomEdit","newFactory","createFactory","finalRemoveCollapsed","newPM","createEditor","setRemoveCollapsedComponents","inputFactory","setChangePrecisionModel","changePrecisionModel","reducePW","_isPointwise","isPointwise","DouglasPeuckerLineSimplifier","simplifySection","_usePt","DouglasPeuckerSimplifier","tss","setEnsureValid","isEnsureValidTopology","_isEnsureValidTopology","DPTransformer","rawGeom","rawAreaGeom","removeDegenerateRings","simpResult","TaggedLineSegment","getParent","TaggedLineString","segs","addToResult","_resultSegs","asLineString","_parentLine","getResultSize","resultSegsSize","getSegment","_segs","getParentCoordinates","getMinimumSize","_minimumSize","asLinearRing","getSegments","getResultCoordinates","parentLine","minimumSize","LineSegmentIndex","querySeg","LineSegmentVisitor","_querySeg","TaggedLineStringSimplifier","sectionIndex","flatten","_linePts","newSeg","_outputIndex","hasBadIntersection","candidateSeg","hasBadOutputIntersection","hasBadInputIntersection","isValidToSimplify","furthestPtIndex","findFurthestPoint","maxDist","midPt","_inputIndex","isInLineSection","inputIndex","outputIndex","TaggedLinesSimplifier","taggedLines","tlss","TopologyPreservingSimplifier","_linestringMap","LineStringMapBuilderFilter","_lineSimplifier","LineStringTransformer","taggedLine","linestringMap","minSize","tps","SplitSegment","splitAt","minFrac","_minimumLen","_segLen","_splitPt","pointAlongReverse","getConstrainedLength","setMinimumLength","minLen","getSplitPoint","ConstraintSplitPointFinder","findSplitPoint","encroachPt","NonEncroachingSplitPointFinder","lineSeg","midPtLen","splitSeg","projPt","projectedSplitPoint","maxSplitLen","TrianglePredicate","bdx","bdy","cdx","cdy","abdet","bcdet","cadet","alift","blift","clift","nonRobustInCircle","isInCircleNonRobust","isInCircleDD","isInCircleDDSlow","isInCircleCC","circumCentre","toPoint","aTerm","triAreaDDFast","bTerm","cTerm","pTerm","cc","ccRadius","triAreaDDSlow","triArea","isInCircleNormalized","t1","t2","Vertex","ptLen","circleCenter","cab","cbc","hcc","nre","err","dot","magn","getZ","isInCircle","isInCircleRobust","interpolateZValue","xm","ym","zm","crossProduct","setZ","_z","times","cross","classify","sa","BEHIND","BEYOND","ORIGIN","DESTINATION","BETWEEN","circumRadiusRatio","edgeLength","el","ConstraintVertex","getConstraint","_constraint","setOnConstraint","isOnConstraint","_isOnConstraint","setConstraint","constraint","QuadEdge","q0","q3","_rot","base","setOrig","setDest","oPrev","lNext","rot","beta","t3","t4","makeEdge","equalsNonOriented","qe","equalsOriented","toLineSegment","_vertex","dNext","lPrev","rPrev","invRot","rNext","isLive","getPrimary","dPrev","IncrementalDelaunayTriangulator","insertSite","_subdiv","isVertexOfEdge","isOnEdge","connect","insertSites","vertices","_isUsingTolerance","subdiv","getTolerance","QuadEdgeLocator","LastFoundQuadEdgeLocator","_lastEdge","locateFromEdge","LocateFailureException","msgWithSpatial","TriangleVisitor","triEdges","QuadEdgeSubdivision","startQE","triEdge","getTriangleVertices","includeFrame","TriangleVertexListVisitor","visitTriangles","isFrameVertex","_frameVertex","_quadEdges","getVoronoiCellPolygon","cellPts","cellPoly","setLocator","locator","_locator","initSubdiv","ea","ec","isFrameBorderEdge","leftTri","getTriangleEdges","rightTri","vLeftTriOther","vRightTriOther","triVisitor","_visitedKey","edgeStack","_startingEdge","visitedEdges","fetchTriangleToVisit","isFrameEdge","_edgeCoincidenceTolerance","_frameEnv","createFrame","getTriangleCoordinates","TriangleCoordinatesVisitor","getTriangles","getVertices","vd","curr","edgeCount","isFrame","_triEdges","quadEdges","getPrimaryEdges","getVertexUniqueEdges","visitedVertices","qd","TriangleEdgesListVisitor","priQE","eSym","eRot","eRotSym","iter","maxIter","getVoronoiCellPolygons","TriangleCircumcentreVisitor","cells","getVoronoiDiagram","vorCells","triPtsList","tris","triPt","locEdge","ccVertex","_triList","checkTriangleSize","_coordList","_triCoords","EDGE_COINCIDENCE_TOL_FACTOR","Segment","_ls","getEndZ","getStartZ","getStart","getEnd","getEndY","getStartX","getStartY","getEndX","z1","z2","ConformingDelaunayTriangulator","getInitialVertices","_initialVertices","getKDT","_kdt","enforceConstraints","addConstraintVertices","splits","enforceGabriel","_segments","MAX_SPLIT_ITER","getVertexFactory","_vertexFactory","getPointArray","_segVertices","setConstraints","segments","segVertices","computeConvexHull","hull","_convexHull","findNonGabrielPoint","segRadius","closestNonGabriel","testRadius","getConstraintSegments","setSplitPointFinder","splitFinder","_splitFinder","segsToInsert","newSegments","segsToRemove","splitVertex","createVertex","getSubdivision","computeBoundingBox","vertexEnv","computeVertexEnvelope","allPointsEnv","delta","_computeAreaEnv","setVertexFactory","vertexFactory","formInitialDelaunay","_incDel","kdnode","snappedV","initialVertices","DelaunayTriangulationBuilder","unique","coordsCopy","verts","siteEnv","_siteCoords","toVertices","setTolerance","setSites","extractUniqueCoordinates","ConformingDelaunayTriangulationBuilder","constraintSegs","createConstraintSegments","createSiteVertices","_constraintVertexMap","_constraintLines","createVertices","sites","cdt","constraintLines","VoronoiDiagramBuilder","clipEnv","clipPoly","clipped","_diagramEnv","_clipEnv","getDiagram","clipGeometryCollection","setClipEnvelope","LinearLocation","linear","setToEnd","componentIndex0","segmentIndex0","segmentFraction0","componentIndex1","segmentIndex1","segmentFraction1","_segmentIndex","getComponentIndex","_componentIndex","isEndpoint","linearGeom","nseg","_segmentFraction","lineComp","toLowest","pointAlongSegmentByFraction","getSegmentFraction","lastLine","isOnSameSegment","snapToVertex","getSegmentLength","lenToStart","lenToEnd","compareLocationValues","isVertex","componentIndex","doNormalize","LinearIterator","_currentLine","getVertexIndex","_vertexIndex","getSegmentEnd","loadCurrentLine","_numLines","_linearGeom","getSegmentStart","isEndOfLine","segmentEndVertexIndex","LocationIndexOfPoint","minIndex","indexOfAfter","indexOfFromStart","minComponentIndex","minSegmentIndex","segDistance","candidateComponentIndex","candidateSegmentIndex","endLoc","getEndLocation","closestAfter","LocationIndexOfLine","subLine","indicesOf","locPt","subLineLoc","LinearGeometryBuilder","endLine","getLastCoordinate","_lastPt","_ignoreInvalidLines","rawPts","_fixInvalidLines","validCoordinateSequence","setFixInvalidLines","fixInvalidLines","allowRepeatedPoints","setIgnoreInvalidLines","ignoreInvalidLines","ExtractLineByLocation","computeLinear","computeLine","startSegmentIndex","lastSegmentIndex","newCoordinateArray","LocationIndexedLine","clampIndex","checkGeometryType","extractPoint","indexLow","isValidIndex","extractLine","LengthIndexOfPoint","ptMeasure","segmentStartMeasure","segMeasureToPt","segmentNearestMeasure","projFactor","LengthLocationMap","resolveLower","totalLength","resolveHigher","compIndex","forwardLength","getLocationForward","LengthIndexedLine","positiveIndex","locationOf","locLow","startIndex2","endIndex2","resolveStartLower","UnionOp","relate","coveredBy","touches","within","disjoint","crosses","args","intersectionPattern","centPt","createPointFromInternalCoord","interiorPt","symDifference","toText","difference","isWithinDistance"],"mappings":"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","file":"dist/jsts.min.js.map","sourcesContent":["/* Polyfill service v3.13.0\n * For detailed credits and licence information see http://github.com/financial-times/polyfill-service\n *\n * - Array.prototype.fill, License: CC0 */\n\nif (!('fill' in Array.prototype)) {\n Object.defineProperty(Array.prototype, 'fill', {\n configurable: true,\n value: function fill(value) {\n if (this === undefined || this === null) {\n throw new TypeError(this + ' is not an object');\n }\n\n var arrayLike = Object(this);\n\n var length = Math.max(Math.min(arrayLike.length, 9007199254740991), 0) || 0;\n\n var relativeStart = 1 in arguments ? parseInt(Number(arguments[1]), 10) || 0 : 0;\n\n relativeStart = relativeStart < 0 ? Math.max(length + relativeStart, 0) : Math.min(relativeStart, length);\n\n var relativeEnd = 2 in arguments && arguments[2] !== undefined ? parseInt(Number(arguments[2]), 10) || 0 : length;\n\n relativeEnd = relativeEnd < 0 ? Math.max(length + arguments[2], 0) : Math.min(relativeEnd, length);\n\n while (relativeStart < relativeEnd) {\n arrayLike[relativeStart] = value;\n\n ++relativeStart;\n }\n\n return arrayLike;\n },\n writable: true\n });\n}\n","Number.isFinite = Number.isFinite || function (value) {\n return typeof value === 'number' && isFinite(value)\n}\n\nNumber.isInteger = Number.isInteger || function (val) {\n return typeof val === 'number' &&\n isFinite(val) &&\n Math.floor(val) === val\n}\n\nNumber.parseFloat = Number.parseFloat || parseFloat\n\nNumber.isNaN = Number.isNaN || function (value) {\n return value !== value // eslint-disable-line\n}\n","Math.trunc = Math.trunc || function(x) {\n return x < 0 ? Math.ceil(x) : Math.floor(x)\n}\n\nMath.log2 = Math.log2 || function(x) {\n return Math.log(x) * Math.LOG2E\n}\n","export default class NumberUtil {\n\tconstructor() {\n\t\tNumberUtil.constructor_.apply(this, arguments);\n\t}\n\tstatic equalsWithTolerance(x1, x2, tolerance) {\n\t\treturn Math.abs(x1 - x2) <= tolerance;\n\t}\n\tgetClass() {\n\t\treturn NumberUtil;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nNumberUtil.constructor_ = function () {};\n","export default function IllegalArgumentException (message) {\n this.message = message\n}\n","export default function Long(high, low) {\n this.low = low | 0\n this.high = high | 0\n}\n\nLong.toBinaryString = function (i) {\n var result = ''\n for (var mask = 0x80000000; mask > 0; mask >>>= 1)\n result += (i.high & mask) === mask ? '1' : '0'\n for (var mask = 0x80000000; mask > 0; mask >>>= 1)\n result += (i.low & mask) === mask ? '1' : '0'\n return result\n}","import Long from './Long';\n\nexport default function Double () {}\n\nDouble.isNaN = n => Number.isNaN(n)\nDouble.isInfinite = n => !Number.isFinite(n)\nDouble.MAX_VALUE = Number.MAX_VALUE\n\nif (typeof Float64Array == 'function' &&\n\t typeof Int32Array == 'function') {\n\t// Simple and fast conversion between double and long bits\n\t// using TypedArrays and ArrayViewBuffers.\n\t(function() {\n\t\tvar EXP_BIT_MASK = 0x7ff00000;\n\t\tvar SIGNIF_BIT_MASK = 0xFFFFF;\n\t\tvar f64buf = new Float64Array(1);\n\t\tvar i32buf = new Int32Array(f64buf.buffer);\n\t\tDouble.doubleToLongBits = function (value) {\n\t\t\tf64buf[0] = value;\n\t\t\tvar low = i32buf[0] | 0;\n\t\t\tvar high = i32buf[1] | 0;\n\t\t\t// Check for NaN based on values of bit fields, maximum\n\t\t\t// exponent and nonzero significand.\n\t\t\tif (((high & EXP_BIT_MASK) === EXP_BIT_MASK) &&\n\t\t\t\t((high & SIGNIF_BIT_MASK) !== 0) &&\n\t\t\t\t(low !== 0)) {\n\t\t\t\tlow = 0 | 0;\n\t\t\t\thigh = 0x7ff80000 | 0;\n\t\t\t}\n\t\t\treturn new Long(high, low);\n\t\t};\n\t\tDouble.longBitsToDouble = function (bits) {\n\t\t\ti32buf[0] = bits.low;\n\t\t\ti32buf[1] = bits.high;\n\t\t\treturn f64buf[0];\n\t\t};\n\t})();\n} else {\n\t// More complex and slower fallback implementation using \n\t// math and the divide-by-two and multiply-by-two algorithms.\n\t(function() {\n\t\tvar BIAS = 1023;\n\t\tvar log2 = Math.log2;\n\t\tvar floor = Math.floor;\n\t\tvar pow = Math.pow;\n\t\tvar MAX_REL_BITS_INTEGER = (function () {\n\t\t\tfor (var i = 53; i > 0; i--) {\n\t\t\t\tvar bits = pow(2, i) - 1;\n\t\t\t\tif (floor(log2(bits)) + 1 === i) {\n\t\t\t\t\treturn bits;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn 0;\n\t\t})();\n\t\tDouble.doubleToLongBits = function (value) {\n\t\t\tvar x, y, f, bits, skip;\n\t\t\tvar sign, exp, high, low;\n\t\n\t\t\t// Get the sign bit and absolute value.\n\t\t\tif (value < 0 || 1 / value === Number.NEGATIVE_INFINITY) {\n\t\t\t\tsign = (1 << 31);\n\t\t\t\tvalue = (-value);\n\t\t\t} else {\n\t\t\t\tsign = 0;\n\t\t\t}\n\t\n\t\t\t// Handle some special values.\n\t\t\tif (value === 0) {\n\t\t\t\t// Handle zeros (+/-0).\n\t\t\t\tlow = 0 | 0;\n\t\t\t\thigh = sign; // exponent: 00..00, significand: 00..00\n\t\t\t\treturn new Long(high, low);\n\t\t\t}\n\t\n\t\t\tif (value === Infinity) {\n\t\t\t\t// Handle infinity (only positive values for value possible).\n\t\t\t\tlow = 0 | 0;\n\t\t\t\thigh = sign | 0x7ff00000; // exponent: 11..11, significand: 00..00\n\t\t\t\treturn new Long(high, low);\n\t\t\t}\n\t\n\t\t\tif (value !== value) {\n\t\t\t\t// Handle NaNs (boiled down to only one distinct NaN).\n\t\t\t\tlow = 0 | 0;\n\t\t\t\thigh = 0x7ff80000; // exponent: 11..11, significand: 10..00\n\t\t\t\treturn new Long(high, low);\n\t\t\t}\n\t\n\t\t\t// Preinitialize variables, that are not neccessarily set by\n\t\t\t// the algorithm.\n\t\t\tbits = 0;\n\t\t\tlow = 0 | 0;\n\t\n\t\t\t// Get the (always positive) integer part of value.\n\t\t\tx = floor(value);\n\t\n\t\t\t// Process the integer part if it's greater than 1. Zero requires\n\t\t\t// no bits at all, 1 represents the implicit (hidden) leading bit,\n\t\t\t// which must not be written as well.\n\t\t\tif (x > 1) {\n\t\t\t\t// If we can reliably determine the number of bits required for\n\t\t\t\t// the integer part,\n\t\t\t\tif (x <= MAX_REL_BITS_INTEGER) {\n\t\t\t\t\t// get the number of bits required to represent it minus 1\n\t\t\t\t\tbits = floor(log2(x)) /* + 1 - 1*/ ;\n\t\t\t\t\t// and simply copy/shift the integer bits into low and high.\n\t\t\t\t\t// That's much faster than the divide-by-two algorithm (saves\n\t\t\t\t\t// up to ~60%).\n\t\t\t\t\t// We always need to mask out the most significant bit, which\n\t\t\t\t\t// is the implicit (aka hidden) bit.\n\t\t\t\t\tif (bits <= 20) {\n\t\t\t\t\t\t// The simple case in which the integer fits into the\n\t\t\t\t\t\t// lower 20 bits of the high word is worth to be handled\n\t\t\t\t\t\t// separately (saves ~25%).\n\t\t\t\t\t\tlow = 0 | 0;\n\t\t\t\t\t\thigh = (x << (20 - bits)) & 0xfffff;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Here, the integer part is split into low and high.\n\t\t\t\t\t\t// Since its value may require more than 32 bits, we\n\t\t\t\t\t\t// cannot use bitwise operators (which implicitly cast\n\t\t\t\t\t\t// to Int32), but use arithmetic operators % and / to\n\t\t\t\t\t\t// get low and high parts. The uppper 20 bits go to high,\n\t\t\t\t\t\t// the remaining bits (in f) to low.\n\t\t\t\t\t\tf = bits - 20;\n\t\t\t\t\t\t// Like (1 << f) but safe with even more than 32 bits.\n\t\t\t\t\t\ty = pow(2, f);\n\t\t\t\t\t\tlow = (x % y) << (32 - f);\n\t\t\t\t\t\thigh = (x / y) & 0xfffff;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// For greater values, we must use the much slower divide-by-two\n\t\t\t\t\t// algorithm. Bits are generated from right to left, that is from\n\t\t\t\t\t// least to most significant bit. For each bit, we left-shift both\n\t\t\t\t\t// low and high by one and carry bit #0 from high to #31 in low.\n\t\t\t\t\t// The next bit is then copied into bit #19 in high, the leftmost\n\t\t\t\t\t// bit of the double's significand.\n\t\n\t\t\t\t\t// Preserve x for later user, so work with f.\n\t\t\t\t\tf = x;\n\t\t\t\t\tlow = 0 | 0;\n\t\t\t\t\twhile (true) {\n\t\t\t\t\t\ty = f / 2;\n\t\t\t\t\t\tf = floor(y);\n\t\t\t\t\t\tif (f === 0) {\n\t\t\t\t\t\t\t// We just found the most signigicant (1-)bit, which\n\t\t\t\t\t\t\t// is the implicit bit and so, not stored in the double\n\t\t\t\t\t\t\t// value. So, it's time to leave the loop.\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Count this bit, shift low and carry bit #0 from high.\n\t\t\t\t\t\tbits++;\n\t\t\t\t\t\tlow >>>= 1;\n\t\t\t\t\t\tlow |= (high & 0x1) << 31;\n\t\t\t\t\t\t// Shift high.\n\t\t\t\t\t\thigh >>>= 1;\n\t\t\t\t\t\tif (y !== f) {\n\t\t\t\t\t\t\t// Copy the new bit into bit #19 in high (only required if 1).\n\t\t\t\t\t\t\thigh |= 0x80000;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Bias the exponent.\n\t\t\texp = bits + BIAS;\n\t\n\t\t\t// If the integer part is zero, we've not yet seen the implicit\n\t\t\t// leading bit. Variable skip is later used while processing the \n\t\t\t// fractional part (if any).\n\t\t\tskip = (x === 0);\n\t\n\t\t\t// Get fraction only into x.\n\t\t\tx = value - x;\n\t\n\t\t\t// If some significand bits are still left to be filled and\n\t\t\t// the fractional part is not zero, convert the fraction using\n\t\t\t// the multiply-by-2 algorithm.\n\t\t\tif (bits < 52 && x !== 0) {\n\t\n\t\t\t\t// Initialize 'buffer' f, into which newly created bits get\n\t\t\t\t// shifted from right to left.\n\t\t\t\tf = 0;\n\t\n\t\t\t\twhile (true) {\n\t\t\t\t\ty = x * 2;\n\t\t\t\t\tif (y >= 1) {\n\t\t\t\t\t\t// This is a new 1-bit. Add and count this bit, if not\n\t\t\t\t\t\t// prohibited by skip.\n\t\t\t\t\t\tx = y - 1;\n\t\t\t\t\t\tif (!skip) {\n\t\t\t\t\t\t\tf <<= 1;\n\t\t\t\t\t\t\tf |= 1;\n\t\t\t\t\t\t\tbits++;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Otherwise, decrement the exponent and unset\n\t\t\t\t\t\t\t// skip, so that all following bits get written.\n\t\t\t\t\t\t\texp--;\n\t\t\t\t\t\t\tskip = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// This is a new 0-bit. Add and count this bit, if not\n\t\t\t\t\t\t// prohibited by skip.\n\t\t\t\t\t\tx = y;\n\t\t\t\t\t\tif (!skip) {\n\t\t\t\t\t\t\tf <<= 1;\n\t\t\t\t\t\t\tbits++;\n\t\t\t\t\t\t} else if (--exp === 0) {\n\t\t\t\t\t\t\t// Otherwise we've just decremented the exponent. If the\n\t\t\t\t\t\t\t// biased exponent is zero now (-1023), we process a\n\t\t\t\t\t\t\t// subnormal number, which has no impled leading 1-bit.\n\t\t\t\t\t\t\t// So, count this 0-bit and unset skip to write out\n\t\t\t\t\t\t\t// all the following bits.\n\t\t\t\t\t\t\tbits++;\n\t\t\t\t\t\t\tskip = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (bits === 20) {\n\t\t\t\t\t\t// When 20 bits have been created in total, we're done with\n\t\t\t\t\t\t// the high word. Copy the bits from 'buffer' f into high\n\t\t\t\t\t\t// and reset 'buffer' f. Following bits will end up in the\n\t\t\t\t\t\t// low word.\n\t\t\t\t\t\thigh |= f;\n\t\t\t\t\t\tf = 0;\n\t\t\t\t\t} else if (bits === 52) {\n\t\t\t\t\t\t// When 52 bits have been created in total, we're done with\n\t\t\t\t\t\t// low word as well. Copy the bits from 'buffer' f into low\n\t\t\t\t\t\t// and exit the loop.\n\t\t\t\t\t\tlow |= f;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (y === 1) {\n\t\t\t\t\t\t// When y is exactly 1, there is no remainder and the process\n\t\t\t\t\t\t// is complete (the number is finite). Copy the bits from\n\t\t\t\t\t\t// 'buffer' f into either low or high and exit the loop.\n\t\t\t\t\t\tif (bits < 20) {\n\t\t\t\t\t\t\thigh |= (f << (20 - bits));\n\t\t\t\t\t\t} else if (bits < 52) {\n\t\t\t\t\t\t\tlow |= (f << (52 - bits));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\t// Copy/shift the exponent and sign bits into the high word.\n\t\t\thigh |= (exp << 20);\n\t\t\thigh |= sign;\n\t\n\t\t\treturn new Long(high, low);\n\t\t};\n\t\tDouble.longBitsToDouble = function (bits) {\n\t\t\tvar x, sign, exp, fract;\n\t\t\tvar high = bits.high;\n\t\t\tvar low = bits.low;\n\t\n\t\t\t// Extract the sign.\n\t\t\tsign = (high & (1 << 31)) ? -1 : 1;\n\t\n\t\t\t// Extract the unbiased exponent.\n\t\t\texp = ((high & 0x7ff00000) >> 20) - BIAS;\n\t\n\t\t\t// Calculate the fraction from left to right. Start\n\t\t\t// off with the 20 lower bits from the high word.\n\t\t\tfract = 0;\n\t\t\tx = (1 << 19);\n\t\t\tfor (var i = 1; i <= 20; i++) {\n\t\t\t\tif (high & x) {\n\t\t\t\t\tfract += pow(2, -i);\n\t\t\t\t}\n\t\t\t\tx >>>= 1;\n\t\t\t}\n\t\t\t// Continue with all 32 bits from the low word.\n\t\t\tx = (1 << 31);\n\t\t\tfor (var i = 21; i <= 52; i++) {\n\t\t\t\tif (low & x) {\n\t\t\t\t\tfract += pow(2, -i);\n\t\t\t\t}\n\t\t\t\tx >>>= 1;\n\t\t\t}\n\t\n\t\t\t// Handle special values.\n\t\t\t// Check for zero and subnormal values.\n\t\t\tif (exp === -BIAS) {\n\t\t\t\tif (fract === 0) {\n\t\t\t\t\t// +/-1.0 * 0.0 => +/-0.0\n\t\t\t\t\treturn sign * 0;\n\t\t\t\t}\n\t\t\t\texp = -1022;\n\t\t\t}\n\t\t\t// Check for +/-Infinity or NaN.\n\t\t\telse if (exp === BIAS + 1) {\n\t\t\t\tif (fract === 0) {\n\t\t\t\t\t// +/-1.0 / 0.0 => +/-Infinity\n\t\t\t\t\treturn sign / 0;\n\t\t\t\t}\n\t\t\t\treturn NaN;\n\t\t\t}\n\t\t\t// Nothing special? Seems to be a normal number.\n\t\t\telse {\n\t\t\t\t// Add the implicit leading bit (1*2^0).\n\t\t\t\tfract += 1;\n\t\t\t}\n\t\n\t\t\treturn sign * fract * pow(2, exp);\n\t\t};\n\t})();\n}","export default function Comparable () {}\n","export default function Clonable () {}\n","export default function Comparator () {}\n","export default function Serializable () {}\n","export default function RuntimeException (message) {\n this.name = 'RuntimeException'\n this.message = message\n this.stack = (new Error()).stack\n Error.call(this, message)\n}\n\nRuntimeException.prototype = Object.create(Error.prototype)\nRuntimeException.prototype.constructor = Error\n","import RuntimeException from '../../../../java/lang/RuntimeException';\nexport default class AssertionFailedException extends RuntimeException {\n\tconstructor() {\n\t\tsuper();\n\t\tAssertionFailedException.constructor_.apply(this, arguments);\n\t}\n\tgetClass() {\n\t\treturn AssertionFailedException;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nAssertionFailedException.constructor_ = function () {\n\tif (arguments.length === 0) {\n\t\tRuntimeException.constructor_.call(this);\n\t} else if (arguments.length === 1) {\n\t\tlet message = arguments[0];\n\t\tRuntimeException.constructor_.call(this, message);\n\t}\n};\n","import AssertionFailedException from './AssertionFailedException';\nexport default class Assert {\n\tconstructor() {\n\t\tAssert.constructor_.apply(this, arguments);\n\t}\n\tstatic shouldNeverReachHere() {\n\t\tif (arguments.length === 0) {\n\t\t\tAssert.shouldNeverReachHere(null);\n\t\t} else if (arguments.length === 1) {\n\t\t\tlet message = arguments[0];\n\t\t\tthrow new AssertionFailedException(\"Should never reach here\" + (message !== null ? \": \" + message : \"\"));\n\t\t}\n\t}\n\tstatic isTrue() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet assertion = arguments[0];\n\t\t\tAssert.isTrue(assertion, null);\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet assertion = arguments[0], message = arguments[1];\n\t\t\tif (!assertion) {\n\t\t\t\tif (message === null) {\n\t\t\t\t\tthrow new AssertionFailedException();\n\t\t\t\t} else {\n\t\t\t\t\tthrow new AssertionFailedException(message);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tstatic equals() {\n\t\tif (arguments.length === 2) {\n\t\t\tlet expectedValue = arguments[0], actualValue = arguments[1];\n\t\t\tAssert.equals(expectedValue, actualValue, null);\n\t\t} else if (arguments.length === 3) {\n\t\t\tlet expectedValue = arguments[0], actualValue = arguments[1], message = arguments[2];\n\t\t\tif (!actualValue.equals(expectedValue)) {\n\t\t\t\tthrow new AssertionFailedException(\"Expected \" + expectedValue + \" but encountered \" + actualValue + (message !== null ? \": \" + message : \"\"));\n\t\t\t}\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn Assert;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nAssert.constructor_ = function () {};\n","import NumberUtil from '../util/NumberUtil';\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException';\nimport Double from '../../../../java/lang/Double';\nimport Comparable from '../../../../java/lang/Comparable';\nimport Cloneable from '../../../../java/lang/Cloneable';\nimport Comparator from '../../../../java/util/Comparator';\nimport Serializable from '../../../../java/io/Serializable';\nimport Assert from '../util/Assert';\nexport default class Coordinate {\n\tconstructor() {\n\t\tCoordinate.constructor_.apply(this, arguments);\n\t}\n\tstatic hashCode() {\n\t\tif (arguments.length === 1 && typeof arguments[0] === \"number\") {\n\t\t\tlet x = arguments[0];\n\t\t\tvar f = Double.doubleToLongBits(x);\n\t\t\treturn Math.trunc(f ^ f >>> 32);\n\t\t}\n\t}\n\tsetOrdinate(ordinateIndex, value) {\n\t\tswitch (ordinateIndex) {\n\t\t\tcase Coordinate.X:\n\t\t\t\tthis.x = value;\n\t\t\t\tbreak;\n\t\t\tcase Coordinate.Y:\n\t\t\t\tthis.y = value;\n\t\t\t\tbreak;\n\t\t\tcase Coordinate.Z:\n\t\t\t\tthis.z = value;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new IllegalArgumentException(\"Invalid ordinate index: \" + ordinateIndex);\n\t\t}\n\t}\n\tequals2D() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet other = arguments[0];\n\t\t\tif (this.x !== other.x) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (this.y !== other.y) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet c = arguments[0], tolerance = arguments[1];\n\t\t\tif (!NumberUtil.equalsWithTolerance(this.x, c.x, tolerance)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (!NumberUtil.equalsWithTolerance(this.y, c.y, tolerance)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\tgetOrdinate(ordinateIndex) {\n\t\tswitch (ordinateIndex) {\n\t\t\tcase Coordinate.X:\n\t\t\t\treturn this.x;\n\t\t\tcase Coordinate.Y:\n\t\t\t\treturn this.y;\n\t\t\tcase Coordinate.Z:\n\t\t\t\treturn this.z;\n\t\t}\n\t\tthrow new IllegalArgumentException(\"Invalid ordinate index: \" + ordinateIndex);\n\t}\n\tequals3D(other) {\n\t\treturn this.x === other.x && this.y === other.y && (this.z === other.z || Double.isNaN(this.z) && Double.isNaN(other.z));\n\t}\n\tequals(other) {\n\t\tif (!(other instanceof Coordinate)) {\n\t\t\treturn false;\n\t\t}\n\t\treturn this.equals2D(other);\n\t}\n\tequalInZ(c, tolerance) {\n\t\treturn NumberUtil.equalsWithTolerance(this.z, c.z, tolerance);\n\t}\n\tcompareTo(o) {\n\t\tvar other = o;\n\t\tif (this.x < other.x) return -1;\n\t\tif (this.x > other.x) return 1;\n\t\tif (this.y < other.y) return -1;\n\t\tif (this.y > other.y) return 1;\n\t\treturn 0;\n\t}\n\tclone() {\n\t\ttry {\n\t\t\tvar coord = null;\n\t\t\treturn coord;\n\t\t} catch (e) {\n\t\t\tif (e instanceof CloneNotSupportedException) {\n\t\t\t\tAssert.shouldNeverReachHere(\"this shouldn't happen because this class is Cloneable\");\n\t\t\t\treturn null;\n\t\t\t} else throw e;\n\t\t} finally {}\n\t}\n\tcopy() {\n\t\treturn new Coordinate(this);\n\t}\n\ttoString() {\n\t\treturn \"(\" + this.x + \", \" + this.y + \", \" + this.z + \")\";\n\t}\n\tdistance3D(c) {\n\t\tvar dx = this.x - c.x;\n\t\tvar dy = this.y - c.y;\n\t\tvar dz = this.z - c.z;\n\t\treturn Math.sqrt(dx * dx + dy * dy + dz * dz);\n\t}\n\tdistance(c) {\n\t\tvar dx = this.x - c.x;\n\t\tvar dy = this.y - c.y;\n\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t}\n\thashCode() {\n\t\tvar result = 17;\n\t\tresult = 37 * result + Coordinate.hashCode(this.x);\n\t\tresult = 37 * result + Coordinate.hashCode(this.y);\n\t\treturn result;\n\t}\n\tsetCoordinate(other) {\n\t\tthis.x = other.x;\n\t\tthis.y = other.y;\n\t\tthis.z = other.z;\n\t}\n\tgetClass() {\n\t\treturn Coordinate;\n\t}\n\tget interfaces_() {\n\t\treturn [Comparable, Cloneable, Serializable];\n\t}\n}\nclass DimensionalComparator {\n\tconstructor() {\n\t\tDimensionalComparator.constructor_.apply(this, arguments);\n\t}\n\tstatic compare(a, b) {\n\t\tif (a < b) return -1;\n\t\tif (a > b) return 1;\n\t\tif (Double.isNaN(a)) {\n\t\t\tif (Double.isNaN(b)) return 0;\n\t\t\treturn -1;\n\t\t}\n\t\tif (Double.isNaN(b)) return 1;\n\t\treturn 0;\n\t}\n\tcompare(o1, o2) {\n\t\tvar c1 = o1;\n\t\tvar c2 = o2;\n\t\tvar compX = DimensionalComparator.compare(c1.x, c2.x);\n\t\tif (compX !== 0) return compX;\n\t\tvar compY = DimensionalComparator.compare(c1.y, c2.y);\n\t\tif (compY !== 0) return compY;\n\t\tif (this._dimensionsToTest <= 2) return 0;\n\t\tvar compZ = DimensionalComparator.compare(c1.z, c2.z);\n\t\treturn compZ;\n\t}\n\tgetClass() {\n\t\treturn DimensionalComparator;\n\t}\n\tget interfaces_() {\n\t\treturn [Comparator];\n\t}\n}\nDimensionalComparator.constructor_ = function () {\n\tthis._dimensionsToTest = 2;\n\tif (arguments.length === 0) {\n\t\tDimensionalComparator.constructor_.call(this, 2);\n\t} else if (arguments.length === 1) {\n\t\tlet dimensionsToTest = arguments[0];\n\t\tif (dimensionsToTest !== 2 && dimensionsToTest !== 3) throw new IllegalArgumentException(\"only 2 or 3 dimensions may be specified\");\n\t\tthis._dimensionsToTest = dimensionsToTest;\n\t}\n};\nCoordinate.DimensionalComparator = DimensionalComparator;\nCoordinate.constructor_ = function () {\n\tthis.x = null;\n\tthis.y = null;\n\tthis.z = null;\n\tif (arguments.length === 0) {\n\t\tCoordinate.constructor_.call(this, 0.0, 0.0);\n\t} else if (arguments.length === 1) {\n\t\tlet c = arguments[0];\n\t\tCoordinate.constructor_.call(this, c.x, c.y, c.z);\n\t} else if (arguments.length === 2) {\n\t\tlet x = arguments[0], y = arguments[1];\n\t\tCoordinate.constructor_.call(this, x, y, Coordinate.NULL_ORDINATE);\n\t} else if (arguments.length === 3) {\n\t\tlet x = arguments[0], y = arguments[1], z = arguments[2];\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t}\n};\nCoordinate.serialVersionUID = 6683108902428366910;\nCoordinate.NULL_ORDINATE = Double.NaN;\nCoordinate.X = 0;\nCoordinate.Y = 1;\nCoordinate.Z = 2;\n","export default function (o, i) {\n return o.interfaces_ && o.interfaces_.indexOf(i) > -1\n}\n","/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/Iterator.html\n * @constructor\n * @private\n */\nexport default function Iterator() {};\n\n/**\n * Returns true if the iteration has more elements.\n * @return {boolean}\n */\nIterator.prototype.hasNext = function() {};\n\n/**\n * Returns the next element in the iteration.\n * @return {Object}\n */\nIterator.prototype.next = function() {};\n\n/**\n * Removes from the underlying collection the last element returned by the\n * iterator (optional operation).\n */\nIterator.prototype.remove = function() {};\n","import Iterator from './Iterator'\n\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/Collection.html\n *\n * @constructor\n * @private\n */\nexport default function Collection() {};\n\n/**\n * Ensures that this collection contains the specified element (optional\n * operation).\n * @param {Object} e\n * @return {boolean}\n */\nCollection.prototype.add = function() {};\n\n\n/**\n * Appends all of the elements in the specified collection to the end of this\n * list, in the order that they are returned by the specified collection's\n * iterator (optional operation).\n * @param {javascript.util.Collection} c\n * @return {boolean}\n */\nCollection.prototype.addAll = function() {};\n\n\n/**\n * Returns true if this collection contains no elements.\n * @return {boolean}\n */\nCollection.prototype.isEmpty = function() {};\n\n\n/**\n * Returns an iterator over the elements in this collection.\n * @return {javascript.util.Iterator}\n */\nCollection.prototype.iterator = function() {};\n\n\n/**\n * Returns an iterator over the elements in this collection.\n * @return {number}\n */\nCollection.prototype.size = function() {};\n\n\n/**\n * Returns an array containing all of the elements in this collection.\n * @return {Array}\n */\nCollection.prototype.toArray = function() {};\n\n\n/**\n * Removes a single instance of the specified element from this collection if it\n * is present. (optional)\n * @param {Object} e\n * @return {boolean}\n */\nCollection.prototype.remove = function() {};\n","/**\n * @param {string=} message Optional message\n * @extends {Error}\n * @constructor\n * @private\n */\nexport default function IndexOutOfBoundsException(message) {\n this.message = message || '';\n};\nIndexOutOfBoundsException.prototype = new Error();\n\n/**\n * @type {string}\n */\nIndexOutOfBoundsException.prototype.name = 'IndexOutOfBoundsException';\n","import Collection from './Collection'\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/List.html\n *\n * @extends {javascript.util.Collection}\n * @constructor\n * @private\n */\nexport default function List() { };\nList.prototype = Object.create(Collection.prototype);\nList.prototype.constructor = List\n\n/**\n * Returns the element at the specified position in this list.\n * @param {number} index\n * @return {Object}\n */\nList.prototype.get = function() { };\n\n\n/**\n * Replaces the element at the specified position in this list with the\n * specified element (optional operation).\n * @param {number} index\n * @param {Object} e\n * @return {Object}\n */\nList.prototype.set = function() { };\n\n\n/**\n * Returns true if this collection contains no elements.\n * @return {boolean}\n */\nList.prototype.isEmpty = function() { };\n","/**\n * @param {string=} message Optional message\n * @extends {Error}\n * @constructor\n * @private\n */\nexport default function NoSuchElementException(message) {\n this.message = message || '';\n};\nNoSuchElementException.prototype = new Error();\n\n\n/**\n * @type {string}\n */\nNoSuchElementException.prototype.name = 'NoSuchElementException';\n","/**\n * @param {string=} message Optional message\n * @extends {Error}\n * @constructor\n * @private\n */\nexport default function OperationNotSupported(message) {\n this.message = message || '';\n};\nOperationNotSupported.prototype = new Error();\n\n\n/**\n * @type {string}\n */\nOperationNotSupported.prototype.name = 'OperationNotSupported';\n","import Collection from './Collection'\nimport IndexOutOfBoundsException from './IndexOutOfBoundsException'\nimport Iterator from './Iterator'\nimport List from './List'\nimport NoSuchElementException from './NoSuchElementException'\nimport OperationNotSupported from './OperationNotSupported'\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/ArrayList.html\n *\n * @extends List\n * @private\n */\nexport default function ArrayList () {\n /**\n * @type {Array}\n * @private\n */\n this.array_ = [];\n\n if (arguments[0] instanceof Collection) {\n this.addAll(arguments[0]);\n }\n};\nArrayList.prototype = Object.create(List.prototype)\nArrayList.prototype.constructor = ArrayList;\n\nArrayList.prototype.ensureCapacity = function () {}\nArrayList.prototype.interfaces_ = [List, Collection]\n\n/**\n * @override\n */\nArrayList.prototype.add = function(e) {\n if (arguments.length === 1) {\n this.array_.push(e)\n } else {\n this.array_.splice(arguments[0], 0, arguments[1])\n }\n return true\n};\n\nArrayList.prototype.clear = function() {\n this.array_ = []\n}\n\n/**\n * @override\n */\nArrayList.prototype.addAll = function(c) {\n for (var i = c.iterator(); i.hasNext();) {\n this.add(i.next());\n }\n return true;\n};\n\n\n/**\n * @override\n */\nArrayList.prototype.set = function(index, element) {\n var oldElement = this.array_[index];\n this.array_[index] = element;\n return oldElement;\n};\n\n\n/**\n * @override\n */\nArrayList.prototype.iterator = function() {\n return new Iterator_(this);\n};\n\n\n/**\n * @override\n */\nArrayList.prototype.get = function(index) {\n if (index < 0 || index >= this.size()) {\n throw new IndexOutOfBoundsException();\n }\n\n return this.array_[index];\n};\n\n\n/**\n * @override\n */\nArrayList.prototype.isEmpty = function() {\n return this.array_.length === 0;\n};\n\n\n/**\n * @override\n */\nArrayList.prototype.size = function() {\n return this.array_.length;\n};\n\n\n/**\n * @override\n */\nArrayList.prototype.toArray = function() {\n var array = [];\n\n for (var i = 0, len = this.array_.length; i < len; i++) {\n array.push(this.array_[i]);\n }\n\n return array;\n};\n\n\n/**\n * @override\n */\nArrayList.prototype.remove = function(o) {\n var found = false;\n\n for (var i = 0, len = this.array_.length; i < len; i++) {\n if (this.array_[i] === o) {\n this.array_.splice(i, 1);\n found = true;\n break;\n }\n }\n\n return found;\n};\n\n\nArrayList.prototype.removeAll = function(c) {\n for (var i = c.iterator(); i.hasNext();) {\n this.remove(i.next());\n }\n return true;\n};\n\n\n\n/**\n * @extends {Iterator}\n * @param {ArrayList} arrayList\n * @constructor\n * @private\n */\nvar Iterator_ = function(arrayList) {\n /**\n * @type {ArrayList}\n * @private\n */\n this.arrayList_ = arrayList;\n /**\n * @type {number}\n * @private\n */\n this.position_ = 0;\n};\n\n\n/**\n * @override\n */\nIterator_.prototype.next = function() {\n if (this.position_ === this.arrayList_.size()) {\n throw new NoSuchElementException();\n }\n return this.arrayList_.get(this.position_++);\n};\n\n\n/**\n * @override\n */\nIterator_.prototype.hasNext = function() {\n if (this.position_ < this.arrayList_.size()) {\n return true;\n } else {\n return false;\n }\n};\n\n/**\n * TODO: should be in ListIterator\n * @override\n */\nIterator_.prototype.set = function(element) {\n return this.arrayList_.set(this.position_ - 1, element);\n};\n\n\n/**\n * @override\n */\nIterator_.prototype.remove = function() {\n this.arrayList_.remove(this.arrayList_.get(this.position_));\n};\n","import hasInterface from '../../../../hasInterface';\nimport Collection from '../../../../java/util/Collection';\nimport Coordinate from './Coordinate';\nimport ArrayList from '../../../../java/util/ArrayList';\nexport default class CoordinateList extends ArrayList {\n\tconstructor() {\n\t\tsuper();\n\t\tCoordinateList.constructor_.apply(this, arguments);\n\t}\n\tgetCoordinate(i) {\n\t\treturn this.get(i);\n\t}\n\taddAll() {\n\t\tif (arguments.length === 2 && (typeof arguments[1] === \"boolean\" && hasInterface(arguments[0], Collection))) {\n\t\t\tlet coll = arguments[0], allowRepeated = arguments[1];\n\t\t\tvar isChanged = false;\n\t\t\tfor (var i = coll.iterator(); i.hasNext(); ) {\n\t\t\t\tthis.add(i.next(), allowRepeated);\n\t\t\t\tisChanged = true;\n\t\t\t}\n\t\t\treturn isChanged;\n\t\t} else return super.addAll.apply(this, arguments);\n\t}\n\tclone() {\n\t\tvar clone = super.clone.call(this);\n\t\tfor (var i = 0; i < this.size(); i++) {\n\t\t\tclone.add(i, this.get(i).clone());\n\t\t}\n\t\treturn clone;\n\t}\n\ttoCoordinateArray() {\n\t\treturn this.toArray(CoordinateList.coordArrayType);\n\t}\n\tadd() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet coord = arguments[0];\n\t\t\tsuper.add.call(this, coord);\n\t\t} else if (arguments.length === 2) {\n\t\t\tif (arguments[0] instanceof Array && typeof arguments[1] === \"boolean\") {\n\t\t\t\tlet coord = arguments[0], allowRepeated = arguments[1];\n\t\t\t\tthis.add(coord, allowRepeated, true);\n\t\t\t\treturn true;\n\t\t\t} else if (arguments[0] instanceof Coordinate && typeof arguments[1] === \"boolean\") {\n\t\t\t\tlet coord = arguments[0], allowRepeated = arguments[1];\n\t\t\t\tif (!allowRepeated) {\n\t\t\t\t\tif (this.size() >= 1) {\n\t\t\t\t\t\tvar last = this.get(this.size() - 1);\n\t\t\t\t\t\tif (last.equals2D(coord)) return null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsuper.add.call(this, coord);\n\t\t\t} else if (arguments[0] instanceof Object && typeof arguments[1] === \"boolean\") {\n\t\t\t\tlet obj = arguments[0], allowRepeated = arguments[1];\n\t\t\t\tthis.add(obj, allowRepeated);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else if (arguments.length === 3) {\n\t\t\tif (typeof arguments[2] === \"boolean\" && (arguments[0] instanceof Array && typeof arguments[1] === \"boolean\")) {\n\t\t\t\tlet coord = arguments[0], allowRepeated = arguments[1], direction = arguments[2];\n\t\t\t\tif (direction) {\n\t\t\t\t\tfor (var i = 0; i < coord.length; i++) {\n\t\t\t\t\t\tthis.add(coord[i], allowRepeated);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (var i = coord.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tthis.add(coord[i], allowRepeated);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t} else if (typeof arguments[2] === \"boolean\" && (Number.isInteger(arguments[0]) && arguments[1] instanceof Coordinate)) {\n\t\t\t\tlet i = arguments[0], coord = arguments[1], allowRepeated = arguments[2];\n\t\t\t\tif (!allowRepeated) {\n\t\t\t\t\tvar size = this.size();\n\t\t\t\t\tif (size > 0) {\n\t\t\t\t\t\tif (i > 0) {\n\t\t\t\t\t\t\tvar prev = this.get(i - 1);\n\t\t\t\t\t\t\tif (prev.equals2D(coord)) return null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (i < size) {\n\t\t\t\t\t\t\tvar next = this.get(i);\n\t\t\t\t\t\t\tif (next.equals2D(coord)) return null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tsuper.add.call(this, i, coord);\n\t\t\t}\n\t\t} else if (arguments.length === 4) {\n\t\t\tlet coord = arguments[0], allowRepeated = arguments[1], start = arguments[2], end = arguments[3];\n\t\t\tvar inc = 1;\n\t\t\tif (start > end) inc = -1;\n\t\t\tfor (var i = start; i !== end; i += inc) {\n\t\t\t\tthis.add(coord[i], allowRepeated);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\tcloseRing() {\n\t\tif (this.size() > 0) this.add(new Coordinate(this.get(0)), false);\n\t}\n\tgetClass() {\n\t\treturn CoordinateList;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nCoordinateList.constructor_ = function () {\n\tif (arguments.length === 0) {} else if (arguments.length === 1) {\n\t\tlet coord = arguments[0];\n\t\tthis.ensureCapacity(coord.length);\n\t\tthis.add(coord, true);\n\t} else if (arguments.length === 2) {\n\t\tlet coord = arguments[0], allowRepeated = arguments[1];\n\t\tthis.ensureCapacity(coord.length);\n\t\tthis.add(coord, allowRepeated);\n\t}\n};\nCoordinateList.coordArrayType = new Array(0).fill(null);\n","import Coordinate from './Coordinate';\nimport Comparable from '../../../../java/lang/Comparable';\nimport Serializable from '../../../../java/io/Serializable';\nexport default class Envelope {\n\tconstructor() {\n\t\tEnvelope.constructor_.apply(this, arguments);\n\t}\n\tstatic intersects() {\n\t\tif (arguments.length === 3) {\n\t\t\tlet p1 = arguments[0], p2 = arguments[1], q = arguments[2];\n\t\t\tif (q.x >= (p1.x < p2.x ? p1.x : p2.x) && q.x <= (p1.x > p2.x ? p1.x : p2.x) && (q.y >= (p1.y < p2.y ? p1.y : p2.y) && q.y <= (p1.y > p2.y ? p1.y : p2.y))) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t} else if (arguments.length === 4) {\n\t\t\tlet p1 = arguments[0], p2 = arguments[1], q1 = arguments[2], q2 = arguments[3];\n\t\t\tvar minq = Math.min(q1.x, q2.x);\n\t\t\tvar maxq = Math.max(q1.x, q2.x);\n\t\t\tvar minp = Math.min(p1.x, p2.x);\n\t\t\tvar maxp = Math.max(p1.x, p2.x);\n\t\t\tif (minp > maxq) return false;\n\t\t\tif (maxp < minq) return false;\n\t\t\tminq = Math.min(q1.y, q2.y);\n\t\t\tmaxq = Math.max(q1.y, q2.y);\n\t\t\tminp = Math.min(p1.y, p2.y);\n\t\t\tmaxp = Math.max(p1.y, p2.y);\n\t\t\tif (minp > maxq) return false;\n\t\t\tif (maxp < minq) return false;\n\t\t\treturn true;\n\t\t}\n\t}\n\tgetArea() {\n\t\treturn this.getWidth() * this.getHeight();\n\t}\n\tequals(other) {\n\t\tif (!(other instanceof Envelope)) {\n\t\t\treturn false;\n\t\t}\n\t\tvar otherEnvelope = other;\n\t\tif (this.isNull()) {\n\t\t\treturn otherEnvelope.isNull();\n\t\t}\n\t\treturn this._maxx === otherEnvelope.getMaxX() && this._maxy === otherEnvelope.getMaxY() && this._minx === otherEnvelope.getMinX() && this._miny === otherEnvelope.getMinY();\n\t}\n\tintersection(env) {\n\t\tif (this.isNull() || env.isNull() || !this.intersects(env)) return new Envelope();\n\t\tvar intMinX = this._minx > env._minx ? this._minx : env._minx;\n\t\tvar intMinY = this._miny > env._miny ? this._miny : env._miny;\n\t\tvar intMaxX = this._maxx < env._maxx ? this._maxx : env._maxx;\n\t\tvar intMaxY = this._maxy < env._maxy ? this._maxy : env._maxy;\n\t\treturn new Envelope(intMinX, intMaxX, intMinY, intMaxY);\n\t}\n\tisNull() {\n\t\treturn this._maxx < this._minx;\n\t}\n\tgetMaxX() {\n\t\treturn this._maxx;\n\t}\n\tcovers() {\n\t\tif (arguments.length === 1) {\n\t\t\tif (arguments[0] instanceof Coordinate) {\n\t\t\t\tlet p = arguments[0];\n\t\t\t\treturn this.covers(p.x, p.y);\n\t\t\t} else if (arguments[0] instanceof Envelope) {\n\t\t\t\tlet other = arguments[0];\n\t\t\t\tif (this.isNull() || other.isNull()) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn other.getMinX() >= this._minx && other.getMaxX() <= this._maxx && other.getMinY() >= this._miny && other.getMaxY() <= this._maxy;\n\t\t\t}\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet x = arguments[0], y = arguments[1];\n\t\t\tif (this.isNull()) return false;\n\t\t\treturn x >= this._minx && x <= this._maxx && y >= this._miny && y <= this._maxy;\n\t\t}\n\t}\n\tintersects() {\n\t\tif (arguments.length === 1) {\n\t\t\tif (arguments[0] instanceof Envelope) {\n\t\t\t\tlet other = arguments[0];\n\t\t\t\tif (this.isNull() || other.isNull()) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn !(other._minx > this._maxx || other._maxx < this._minx || other._miny > this._maxy || other._maxy < this._miny);\n\t\t\t} else if (arguments[0] instanceof Coordinate) {\n\t\t\t\tlet p = arguments[0];\n\t\t\t\treturn this.intersects(p.x, p.y);\n\t\t\t}\n\t\t} else if (arguments.length === 2) {\n\t\t\tif (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {\n\t\t\t\tlet a = arguments[0], b = arguments[1];\n\t\t\t\tif (this.isNull()) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tvar envminx = a.x < b.x ? a.x : b.x;\n\t\t\t\tif (envminx > this._maxx) return false;\n\t\t\t\tvar envmaxx = a.x > b.x ? a.x : b.x;\n\t\t\t\tif (envmaxx < this._minx) return false;\n\t\t\t\tvar envminy = a.y < b.y ? a.y : b.y;\n\t\t\t\tif (envminy > this._maxy) return false;\n\t\t\t\tvar envmaxy = a.y > b.y ? a.y : b.y;\n\t\t\t\tif (envmaxy < this._miny) return false;\n\t\t\t\treturn true;\n\t\t\t} else if (typeof arguments[0] === \"number\" && typeof arguments[1] === \"number\") {\n\t\t\t\tlet x = arguments[0], y = arguments[1];\n\t\t\t\tif (this.isNull()) return false;\n\t\t\t\treturn !(x > this._maxx || x < this._minx || y > this._maxy || y < this._miny);\n\t\t\t}\n\t\t}\n\t}\n\tgetMinY() {\n\t\treturn this._miny;\n\t}\n\tgetMinX() {\n\t\treturn this._minx;\n\t}\n\texpandToInclude() {\n\t\tif (arguments.length === 1) {\n\t\t\tif (arguments[0] instanceof Coordinate) {\n\t\t\t\tlet p = arguments[0];\n\t\t\t\tthis.expandToInclude(p.x, p.y);\n\t\t\t} else if (arguments[0] instanceof Envelope) {\n\t\t\t\tlet other = arguments[0];\n\t\t\t\tif (other.isNull()) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif (this.isNull()) {\n\t\t\t\t\tthis._minx = other.getMinX();\n\t\t\t\t\tthis._maxx = other.getMaxX();\n\t\t\t\t\tthis._miny = other.getMinY();\n\t\t\t\t\tthis._maxy = other.getMaxY();\n\t\t\t\t} else {\n\t\t\t\t\tif (other._minx < this._minx) {\n\t\t\t\t\t\tthis._minx = other._minx;\n\t\t\t\t\t}\n\t\t\t\t\tif (other._maxx > this._maxx) {\n\t\t\t\t\t\tthis._maxx = other._maxx;\n\t\t\t\t\t}\n\t\t\t\t\tif (other._miny < this._miny) {\n\t\t\t\t\t\tthis._miny = other._miny;\n\t\t\t\t\t}\n\t\t\t\t\tif (other._maxy > this._maxy) {\n\t\t\t\t\t\tthis._maxy = other._maxy;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet x = arguments[0], y = arguments[1];\n\t\t\tif (this.isNull()) {\n\t\t\t\tthis._minx = x;\n\t\t\t\tthis._maxx = x;\n\t\t\t\tthis._miny = y;\n\t\t\t\tthis._maxy = y;\n\t\t\t} else {\n\t\t\t\tif (x < this._minx) {\n\t\t\t\t\tthis._minx = x;\n\t\t\t\t}\n\t\t\t\tif (x > this._maxx) {\n\t\t\t\t\tthis._maxx = x;\n\t\t\t\t}\n\t\t\t\tif (y < this._miny) {\n\t\t\t\t\tthis._miny = y;\n\t\t\t\t}\n\t\t\t\tif (y > this._maxy) {\n\t\t\t\t\tthis._maxy = y;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tminExtent() {\n\t\tif (this.isNull()) return 0.0;\n\t\tvar w = this.getWidth();\n\t\tvar h = this.getHeight();\n\t\tif (w < h) return w;\n\t\treturn h;\n\t}\n\tgetWidth() {\n\t\tif (this.isNull()) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn this._maxx - this._minx;\n\t}\n\tcompareTo(o) {\n\t\tvar env = o;\n\t\tif (this.isNull()) {\n\t\t\tif (env.isNull()) return 0;\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif (env.isNull()) return 1;\n\t\t}\n\t\tif (this._minx < env._minx) return -1;\n\t\tif (this._minx > env._minx) return 1;\n\t\tif (this._miny < env._miny) return -1;\n\t\tif (this._miny > env._miny) return 1;\n\t\tif (this._maxx < env._maxx) return -1;\n\t\tif (this._maxx > env._maxx) return 1;\n\t\tif (this._maxy < env._maxy) return -1;\n\t\tif (this._maxy > env._maxy) return 1;\n\t\treturn 0;\n\t}\n\ttranslate(transX, transY) {\n\t\tif (this.isNull()) {\n\t\t\treturn null;\n\t\t}\n\t\tthis.init(this.getMinX() + transX, this.getMaxX() + transX, this.getMinY() + transY, this.getMaxY() + transY);\n\t}\n\ttoString() {\n\t\treturn \"Env[\" + this._minx + \" : \" + this._maxx + \", \" + this._miny + \" : \" + this._maxy + \"]\";\n\t}\n\tsetToNull() {\n\t\tthis._minx = 0;\n\t\tthis._maxx = -1;\n\t\tthis._miny = 0;\n\t\tthis._maxy = -1;\n\t}\n\tgetHeight() {\n\t\tif (this.isNull()) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn this._maxy - this._miny;\n\t}\n\tmaxExtent() {\n\t\tif (this.isNull()) return 0.0;\n\t\tvar w = this.getWidth();\n\t\tvar h = this.getHeight();\n\t\tif (w > h) return w;\n\t\treturn h;\n\t}\n\texpandBy() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet distance = arguments[0];\n\t\t\tthis.expandBy(distance, distance);\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet deltaX = arguments[0], deltaY = arguments[1];\n\t\t\tif (this.isNull()) return null;\n\t\t\tthis._minx -= deltaX;\n\t\t\tthis._maxx += deltaX;\n\t\t\tthis._miny -= deltaY;\n\t\t\tthis._maxy += deltaY;\n\t\t\tif (this._minx > this._maxx || this._miny > this._maxy) this.setToNull();\n\t\t}\n\t}\n\tcontains() {\n\t\tif (arguments.length === 1) {\n\t\t\tif (arguments[0] instanceof Envelope) {\n\t\t\t\tlet other = arguments[0];\n\t\t\t\treturn this.covers(other);\n\t\t\t} else if (arguments[0] instanceof Coordinate) {\n\t\t\t\tlet p = arguments[0];\n\t\t\t\treturn this.covers(p);\n\t\t\t}\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet x = arguments[0], y = arguments[1];\n\t\t\treturn this.covers(x, y);\n\t\t}\n\t}\n\tcentre() {\n\t\tif (this.isNull()) return null;\n\t\treturn new Coordinate((this.getMinX() + this.getMaxX()) / 2.0, (this.getMinY() + this.getMaxY()) / 2.0);\n\t}\n\tinit() {\n\t\tif (arguments.length === 0) {\n\t\t\tthis.setToNull();\n\t\t} else if (arguments.length === 1) {\n\t\t\tif (arguments[0] instanceof Coordinate) {\n\t\t\t\tlet p = arguments[0];\n\t\t\t\tthis.init(p.x, p.x, p.y, p.y);\n\t\t\t} else if (arguments[0] instanceof Envelope) {\n\t\t\t\tlet env = arguments[0];\n\t\t\t\tthis._minx = env._minx;\n\t\t\t\tthis._maxx = env._maxx;\n\t\t\t\tthis._miny = env._miny;\n\t\t\t\tthis._maxy = env._maxy;\n\t\t\t}\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet p1 = arguments[0], p2 = arguments[1];\n\t\t\tthis.init(p1.x, p2.x, p1.y, p2.y);\n\t\t} else if (arguments.length === 4) {\n\t\t\tlet x1 = arguments[0], x2 = arguments[1], y1 = arguments[2], y2 = arguments[3];\n\t\t\tif (x1 < x2) {\n\t\t\t\tthis._minx = x1;\n\t\t\t\tthis._maxx = x2;\n\t\t\t} else {\n\t\t\t\tthis._minx = x2;\n\t\t\t\tthis._maxx = x1;\n\t\t\t}\n\t\t\tif (y1 < y2) {\n\t\t\t\tthis._miny = y1;\n\t\t\t\tthis._maxy = y2;\n\t\t\t} else {\n\t\t\t\tthis._miny = y2;\n\t\t\t\tthis._maxy = y1;\n\t\t\t}\n\t\t}\n\t}\n\tgetMaxY() {\n\t\treturn this._maxy;\n\t}\n\tdistance(env) {\n\t\tif (this.intersects(env)) return 0;\n\t\tvar dx = 0.0;\n\t\tif (this._maxx < env._minx) dx = env._minx - this._maxx; else if (this._minx > env._maxx) dx = this._minx - env._maxx;\n\t\tvar dy = 0.0;\n\t\tif (this._maxy < env._miny) dy = env._miny - this._maxy; else if (this._miny > env._maxy) dy = this._miny - env._maxy;\n\t\tif (dx === 0.0) return dy;\n\t\tif (dy === 0.0) return dx;\n\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t}\n\thashCode() {\n\t\tvar result = 17;\n\t\tresult = 37 * result + Coordinate.hashCode(this._minx);\n\t\tresult = 37 * result + Coordinate.hashCode(this._maxx);\n\t\tresult = 37 * result + Coordinate.hashCode(this._miny);\n\t\tresult = 37 * result + Coordinate.hashCode(this._maxy);\n\t\treturn result;\n\t}\n\tgetClass() {\n\t\treturn Envelope;\n\t}\n\tget interfaces_() {\n\t\treturn [Comparable, Serializable];\n\t}\n}\nEnvelope.constructor_ = function () {\n\tthis._minx = null;\n\tthis._maxx = null;\n\tthis._miny = null;\n\tthis._maxy = null;\n\tif (arguments.length === 0) {\n\t\tthis.init();\n\t} else if (arguments.length === 1) {\n\t\tif (arguments[0] instanceof Coordinate) {\n\t\t\tlet p = arguments[0];\n\t\t\tthis.init(p.x, p.x, p.y, p.y);\n\t\t} else if (arguments[0] instanceof Envelope) {\n\t\t\tlet env = arguments[0];\n\t\t\tthis.init(env);\n\t\t}\n\t} else if (arguments.length === 2) {\n\t\tlet p1 = arguments[0], p2 = arguments[1];\n\t\tthis.init(p1.x, p2.x, p1.y, p2.y);\n\t} else if (arguments.length === 4) {\n\t\tlet x1 = arguments[0], x2 = arguments[1], y1 = arguments[2], y2 = arguments[3];\n\t\tthis.init(x1, x2, y1, y2);\n\t}\n};\nEnvelope.serialVersionUID = 5873921885273102420;\n","export default function Exception () {}\n","import Exception from '../../../../java/lang/Exception';\nexport default class NotRepresentableException extends Exception {\n\tconstructor() {\n\t\tsuper();\n\t\tNotRepresentableException.constructor_.apply(this, arguments);\n\t}\n\tgetClass() {\n\t\treturn NotRepresentableException;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nNotRepresentableException.constructor_ = function () {\n\tException.constructor_.call(this, \"Projective point not representable on the Cartesian plane.\");\n};\n","export default function StringBuffer (str) {\n this.str = str\n}\n\nStringBuffer.prototype.append = function (e) {\n this.str += e\n}\n\nStringBuffer.prototype.setCharAt = function (i, c) {\n this.str = this.str.substr(0, i) + c + this.str.substr(i + 1)\n}\n\nStringBuffer.prototype.toString = function (e) {\n return this.str\n}\n","export default function Integer (value) {\n this.value = value\n}\n\nInteger.prototype.intValue = function () {\n return this.value\n}\nInteger.prototype.compareTo = function (o) {\n if (this.value < o) return -1\n if (this.value > o) return 1\n return 0\n}\n\nInteger.isNaN = n => Number.isNaN(n)\n","export default function Character () {}\nCharacter.isWhitespace = c => ((c <= 32 && c >= 0) || c == 127)\nCharacter.toUpperCase = c => c.toUpperCase()\n","import StringBuffer from '../../../../java/lang/StringBuffer';\nimport Double from '../../../../java/lang/Double';\nimport Integer from '../../../../java/lang/Integer';\nimport Character from '../../../../java/lang/Character';\nimport Comparable from '../../../../java/lang/Comparable';\nimport Cloneable from '../../../../java/lang/Cloneable';\nimport Serializable from '../../../../java/io/Serializable';\nexport default class DD {\n\tconstructor() {\n\t\tDD.constructor_.apply(this, arguments);\n\t}\n\tstatic sqr(x) {\n\t\treturn DD.valueOf(x).selfMultiply(x);\n\t}\n\tstatic valueOf() {\n\t\tif (typeof arguments[0] === \"string\") {\n\t\t\tlet str = arguments[0];\n\t\t\treturn DD.parse(str);\n\t\t} else if (typeof arguments[0] === \"number\") {\n\t\t\tlet x = arguments[0];\n\t\t\treturn new DD(x);\n\t\t}\n\t}\n\tstatic sqrt(x) {\n\t\treturn DD.valueOf(x).sqrt();\n\t}\n\tstatic parse(str) {\n\t\tvar i = 0;\n\t\tvar strlen = str.length;\n\t\twhile (Character.isWhitespace(str.charAt(i))) i++;\n\t\tvar isNegative = false;\n\t\tif (i < strlen) {\n\t\t\tvar signCh = str.charAt(i);\n\t\t\tif (signCh === '-' || signCh === '+') {\n\t\t\t\ti++;\n\t\t\t\tif (signCh === '-') isNegative = true;\n\t\t\t}\n\t\t}\n\t\tvar val = new DD();\n\t\tvar numDigits = 0;\n\t\tvar numBeforeDec = 0;\n\t\tvar exp = 0;\n\t\twhile (true) {\n\t\t\tif (i >= strlen) break;\n\t\t\tvar ch = str.charAt(i);\n\t\t\ti++;\n\t\t\tif (Character.isDigit(ch)) {\n\t\t\t\tvar d = ch - '0';\n\t\t\t\tval.selfMultiply(DD.TEN);\n\t\t\t\tval.selfAdd(d);\n\t\t\t\tnumDigits++;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch === '.') {\n\t\t\t\tnumBeforeDec = numDigits;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (ch === 'e' || ch === 'E') {\n\t\t\t\tvar expStr = str.substring(i);\n\t\t\t\ttry {\n\t\t\t\t\texp = Integer.parseInt(expStr);\n\t\t\t\t} catch (ex) {\n\t\t\t\t\tif (ex instanceof NumberFormatException) {\n\t\t\t\t\t\tthrow new NumberFormatException(\"Invalid exponent \" + expStr + \" in string \" + str);\n\t\t\t\t\t} else throw ex;\n\t\t\t\t} finally {}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthrow new NumberFormatException(\"Unexpected character '\" + ch + \"' at position \" + i + \" in string \" + str);\n\t\t}\n\t\tvar val2 = val;\n\t\tvar numDecPlaces = numDigits - numBeforeDec - exp;\n\t\tif (numDecPlaces === 0) {\n\t\t\tval2 = val;\n\t\t} else if (numDecPlaces > 0) {\n\t\t\tvar scale = DD.TEN.pow(numDecPlaces);\n\t\t\tval2 = val.divide(scale);\n\t\t} else if (numDecPlaces < 0) {\n\t\t\tvar scale = DD.TEN.pow(-numDecPlaces);\n\t\t\tval2 = val.multiply(scale);\n\t\t}\n\t\tif (isNegative) {\n\t\t\treturn val2.negate();\n\t\t}\n\t\treturn val2;\n\t}\n\tstatic createNaN() {\n\t\treturn new DD(Double.NaN, Double.NaN);\n\t}\n\tstatic copy(dd) {\n\t\treturn new DD(dd);\n\t}\n\tstatic magnitude(x) {\n\t\tvar xAbs = Math.abs(x);\n\t\tvar xLog10 = Math.log(xAbs) / Math.log(10);\n\t\tvar xMag = Math.trunc(Math.floor(xLog10));\n\t\tvar xApprox = Math.pow(10, xMag);\n\t\tif (xApprox * 10 <= xAbs) xMag += 1;\n\t\treturn xMag;\n\t}\n\tstatic stringOfChar(ch, len) {\n\t\tvar buf = new StringBuffer();\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tbuf.append(ch);\n\t\t}\n\t\treturn buf.toString();\n\t}\n\tle(y) {\n\t\treturn this._hi < y._hi || this._hi === y._hi && this._lo <= y._lo;\n\t}\n\textractSignificantDigits(insertDecimalPoint, magnitude) {\n\t\tvar y = this.abs();\n\t\tvar mag = DD.magnitude(y._hi);\n\t\tvar scale = DD.TEN.pow(mag);\n\t\ty = y.divide(scale);\n\t\tif (y.gt(DD.TEN)) {\n\t\t\ty = y.divide(DD.TEN);\n\t\t\tmag += 1;\n\t\t} else if (y.lt(DD.ONE)) {\n\t\t\ty = y.multiply(DD.TEN);\n\t\t\tmag -= 1;\n\t\t}\n\t\tvar decimalPointPos = mag + 1;\n\t\tvar buf = new StringBuffer();\n\t\tvar numDigits = DD.MAX_PRINT_DIGITS - 1;\n\t\tfor (var i = 0; i <= numDigits; i++) {\n\t\t\tif (insertDecimalPoint && i === decimalPointPos) {\n\t\t\t\tbuf.append('.');\n\t\t\t}\n\t\t\tvar digit = Math.trunc(y._hi);\n\t\t\tif (digit < 0 || digit > 9) {}\n\t\t\tif (digit < 0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tvar rebiasBy10 = false;\n\t\t\tvar digitChar = 0;\n\t\t\tif (digit > 9) {\n\t\t\t\trebiasBy10 = true;\n\t\t\t\tdigitChar = '9';\n\t\t\t} else {\n\t\t\t\tdigitChar = '0' + digit;\n\t\t\t}\n\t\t\tbuf.append(digitChar);\n\t\t\ty = y.subtract(DD.valueOf(digit)).multiply(DD.TEN);\n\t\t\tif (rebiasBy10) y.selfAdd(DD.TEN);\n\t\t\tvar continueExtractingDigits = true;\n\t\t\tvar remMag = DD.magnitude(y._hi);\n\t\t\tif (remMag < 0 && Math.abs(remMag) >= numDigits - i) continueExtractingDigits = false;\n\t\t\tif (!continueExtractingDigits) break;\n\t\t}\n\t\tmagnitude[0] = mag;\n\t\treturn buf.toString();\n\t}\n\tsqr() {\n\t\treturn this.multiply(this);\n\t}\n\tdoubleValue() {\n\t\treturn this._hi + this._lo;\n\t}\n\tsubtract() {\n\t\tif (arguments[0] instanceof DD) {\n\t\t\tlet y = arguments[0];\n\t\t\treturn this.add(y.negate());\n\t\t} else if (typeof arguments[0] === \"number\") {\n\t\t\tlet y = arguments[0];\n\t\t\treturn this.add(-y);\n\t\t}\n\t}\n\tequals() {\n\t\tif (arguments.length === 1 && arguments[0] instanceof DD) {\n\t\t\tlet y = arguments[0];\n\t\t\treturn this._hi === y._hi && this._lo === y._lo;\n\t\t}\n\t}\n\tisZero() {\n\t\treturn this._hi === 0.0 && this._lo === 0.0;\n\t}\n\tselfSubtract() {\n\t\tif (arguments[0] instanceof DD) {\n\t\t\tlet y = arguments[0];\n\t\t\tif (this.isNaN()) return this;\n\t\t\treturn this.selfAdd(-y._hi, -y._lo);\n\t\t} else if (typeof arguments[0] === \"number\") {\n\t\t\tlet y = arguments[0];\n\t\t\tif (this.isNaN()) return this;\n\t\t\treturn this.selfAdd(-y, 0.0);\n\t\t}\n\t}\n\tgetSpecialNumberString() {\n\t\tif (this.isZero()) return \"0.0\";\n\t\tif (this.isNaN()) return \"NaN \";\n\t\treturn null;\n\t}\n\tmin(x) {\n\t\tif (this.le(x)) {\n\t\t\treturn this;\n\t\t} else {\n\t\t\treturn x;\n\t\t}\n\t}\n\tselfDivide() {\n\t\tif (arguments.length === 1) {\n\t\t\tif (arguments[0] instanceof DD) {\n\t\t\t\tlet y = arguments[0];\n\t\t\t\treturn this.selfDivide(y._hi, y._lo);\n\t\t\t} else if (typeof arguments[0] === \"number\") {\n\t\t\t\tlet y = arguments[0];\n\t\t\t\treturn this.selfDivide(y, 0.0);\n\t\t\t}\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet yhi = arguments[0], ylo = arguments[1];\n\t\t\tvar hc = null, tc = null, hy = null, ty = null, C = null, c = null, U = null, u = null;\n\t\t\tC = this._hi / yhi;\n\t\t\tc = DD.SPLIT * C;\n\t\t\thc = c - C;\n\t\t\tu = DD.SPLIT * yhi;\n\t\t\thc = c - hc;\n\t\t\ttc = C - hc;\n\t\t\thy = u - yhi;\n\t\t\tU = C * yhi;\n\t\t\thy = u - hy;\n\t\t\tty = yhi - hy;\n\t\t\tu = hc * hy - U + hc * ty + tc * hy + tc * ty;\n\t\t\tc = (this._hi - U - u + this._lo - C * ylo) / yhi;\n\t\t\tu = C + c;\n\t\t\tthis._hi = u;\n\t\t\tthis._lo = C - u + c;\n\t\t\treturn this;\n\t\t}\n\t}\n\tdump() {\n\t\treturn \"DD<\" + this._hi + \", \" + this._lo + \">\";\n\t}\n\tdivide() {\n\t\tif (arguments[0] instanceof DD) {\n\t\t\tlet y = arguments[0];\n\t\t\tvar hc = null, tc = null, hy = null, ty = null, C = null, c = null, U = null, u = null;\n\t\t\tC = this._hi / y._hi;\n\t\t\tc = DD.SPLIT * C;\n\t\t\thc = c - C;\n\t\t\tu = DD.SPLIT * y._hi;\n\t\t\thc = c - hc;\n\t\t\ttc = C - hc;\n\t\t\thy = u - y._hi;\n\t\t\tU = C * y._hi;\n\t\t\thy = u - hy;\n\t\t\tty = y._hi - hy;\n\t\t\tu = hc * hy - U + hc * ty + tc * hy + tc * ty;\n\t\t\tc = (this._hi - U - u + this._lo - C * y._lo) / y._hi;\n\t\t\tu = C + c;\n\t\t\tvar zhi = u;\n\t\t\tvar zlo = C - u + c;\n\t\t\treturn new DD(zhi, zlo);\n\t\t} else if (typeof arguments[0] === \"number\") {\n\t\t\tlet y = arguments[0];\n\t\t\tif (Double.isNaN(y)) return DD.createNaN();\n\t\t\treturn DD.copy(this).selfDivide(y, 0.0);\n\t\t}\n\t}\n\tge(y) {\n\t\treturn this._hi > y._hi || this._hi === y._hi && this._lo >= y._lo;\n\t}\n\tpow(exp) {\n\t\tif (exp === 0.0) return DD.valueOf(1.0);\n\t\tvar r = new DD(this);\n\t\tvar s = DD.valueOf(1.0);\n\t\tvar n = Math.abs(exp);\n\t\tif (n > 1) {\n\t\t\twhile (n > 0) {\n\t\t\t\tif (n % 2 === 1) {\n\t\t\t\t\ts.selfMultiply(r);\n\t\t\t\t}\n\t\t\t\tn /= 2;\n\t\t\t\tif (n > 0) r = r.sqr();\n\t\t\t}\n\t\t} else {\n\t\t\ts = r;\n\t\t}\n\t\tif (exp < 0) return s.reciprocal();\n\t\treturn s;\n\t}\n\tceil() {\n\t\tif (this.isNaN()) return DD.NaN;\n\t\tvar fhi = Math.ceil(this._hi);\n\t\tvar flo = 0.0;\n\t\tif (fhi === this._hi) {\n\t\t\tflo = Math.ceil(this._lo);\n\t\t}\n\t\treturn new DD(fhi, flo);\n\t}\n\tcompareTo(o) {\n\t\tvar other = o;\n\t\tif (this._hi < other._hi) return -1;\n\t\tif (this._hi > other._hi) return 1;\n\t\tif (this._lo < other._lo) return -1;\n\t\tif (this._lo > other._lo) return 1;\n\t\treturn 0;\n\t}\n\trint() {\n\t\tif (this.isNaN()) return this;\n\t\tvar plus5 = this.add(0.5);\n\t\treturn plus5.floor();\n\t}\n\tsetValue() {\n\t\tif (arguments[0] instanceof DD) {\n\t\t\tlet value = arguments[0];\n\t\t\tthis.init(value);\n\t\t\treturn this;\n\t\t} else if (typeof arguments[0] === \"number\") {\n\t\t\tlet value = arguments[0];\n\t\t\tthis.init(value);\n\t\t\treturn this;\n\t\t}\n\t}\n\tmax(x) {\n\t\tif (this.ge(x)) {\n\t\t\treturn this;\n\t\t} else {\n\t\t\treturn x;\n\t\t}\n\t}\n\tsqrt() {\n\t\tif (this.isZero()) return DD.valueOf(0.0);\n\t\tif (this.isNegative()) {\n\t\t\treturn DD.NaN;\n\t\t}\n\t\tvar x = 1.0 / Math.sqrt(this._hi);\n\t\tvar ax = this._hi * x;\n\t\tvar axdd = DD.valueOf(ax);\n\t\tvar diffSq = this.subtract(axdd.sqr());\n\t\tvar d2 = diffSq._hi * (x * 0.5);\n\t\treturn axdd.add(d2);\n\t}\n\tselfAdd() {\n\t\tif (arguments.length === 1) {\n\t\t\tif (arguments[0] instanceof DD) {\n\t\t\t\tlet y = arguments[0];\n\t\t\t\treturn this.selfAdd(y._hi, y._lo);\n\t\t\t} else if (typeof arguments[0] === \"number\") {\n\t\t\t\tlet y = arguments[0];\n\t\t\t\tvar H = null, h = null, S = null, s = null, e = null, f = null;\n\t\t\t\tS = this._hi + y;\n\t\t\t\te = S - this._hi;\n\t\t\t\ts = S - e;\n\t\t\t\ts = y - e + (this._hi - s);\n\t\t\t\tf = s + this._lo;\n\t\t\t\tH = S + f;\n\t\t\t\th = f + (S - H);\n\t\t\t\tthis._hi = H + h;\n\t\t\t\tthis._lo = h + (H - this._hi);\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet yhi = arguments[0], ylo = arguments[1];\n\t\t\tvar H = null, h = null, T = null, t = null, S = null, s = null, e = null, f = null;\n\t\t\tS = this._hi + yhi;\n\t\t\tT = this._lo + ylo;\n\t\t\te = S - this._hi;\n\t\t\tf = T - this._lo;\n\t\t\ts = S - e;\n\t\t\tt = T - f;\n\t\t\ts = yhi - e + (this._hi - s);\n\t\t\tt = ylo - f + (this._lo - t);\n\t\t\te = s + T;\n\t\t\tH = S + e;\n\t\t\th = e + (S - H);\n\t\t\te = t + h;\n\t\t\tvar zhi = H + e;\n\t\t\tvar zlo = e + (H - zhi);\n\t\t\tthis._hi = zhi;\n\t\t\tthis._lo = zlo;\n\t\t\treturn this;\n\t\t}\n\t}\n\tselfMultiply() {\n\t\tif (arguments.length === 1) {\n\t\t\tif (arguments[0] instanceof DD) {\n\t\t\t\tlet y = arguments[0];\n\t\t\t\treturn this.selfMultiply(y._hi, y._lo);\n\t\t\t} else if (typeof arguments[0] === \"number\") {\n\t\t\t\tlet y = arguments[0];\n\t\t\t\treturn this.selfMultiply(y, 0.0);\n\t\t\t}\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet yhi = arguments[0], ylo = arguments[1];\n\t\t\tvar hx = null, tx = null, hy = null, ty = null, C = null, c = null;\n\t\t\tC = DD.SPLIT * this._hi;\n\t\t\thx = C - this._hi;\n\t\t\tc = DD.SPLIT * yhi;\n\t\t\thx = C - hx;\n\t\t\ttx = this._hi - hx;\n\t\t\thy = c - yhi;\n\t\t\tC = this._hi * yhi;\n\t\t\thy = c - hy;\n\t\t\tty = yhi - hy;\n\t\t\tc = hx * hy - C + hx * ty + tx * hy + tx * ty + (this._hi * ylo + this._lo * yhi);\n\t\t\tvar zhi = C + c;\n\t\t\thx = C - zhi;\n\t\t\tvar zlo = c + hx;\n\t\t\tthis._hi = zhi;\n\t\t\tthis._lo = zlo;\n\t\t\treturn this;\n\t\t}\n\t}\n\tselfSqr() {\n\t\treturn this.selfMultiply(this);\n\t}\n\tfloor() {\n\t\tif (this.isNaN()) return DD.NaN;\n\t\tvar fhi = Math.floor(this._hi);\n\t\tvar flo = 0.0;\n\t\tif (fhi === this._hi) {\n\t\t\tflo = Math.floor(this._lo);\n\t\t}\n\t\treturn new DD(fhi, flo);\n\t}\n\tnegate() {\n\t\tif (this.isNaN()) return this;\n\t\treturn new DD(-this._hi, -this._lo);\n\t}\n\tclone() {\n\t\ttry {\n\t\t\treturn null;\n\t\t} catch (ex) {\n\t\t\tif (ex instanceof CloneNotSupportedException) {\n\t\t\t\treturn null;\n\t\t\t} else throw ex;\n\t\t} finally {}\n\t}\n\tmultiply() {\n\t\tif (arguments[0] instanceof DD) {\n\t\t\tlet y = arguments[0];\n\t\t\tif (y.isNaN()) return DD.createNaN();\n\t\t\treturn DD.copy(this).selfMultiply(y);\n\t\t} else if (typeof arguments[0] === \"number\") {\n\t\t\tlet y = arguments[0];\n\t\t\tif (Double.isNaN(y)) return DD.createNaN();\n\t\t\treturn DD.copy(this).selfMultiply(y, 0.0);\n\t\t}\n\t}\n\tisNaN() {\n\t\treturn Double.isNaN(this._hi);\n\t}\n\tintValue() {\n\t\treturn Math.trunc(this._hi);\n\t}\n\ttoString() {\n\t\tvar mag = DD.magnitude(this._hi);\n\t\tif (mag >= -3 && mag <= 20) return this.toStandardNotation();\n\t\treturn this.toSciNotation();\n\t}\n\ttoStandardNotation() {\n\t\tvar specialStr = this.getSpecialNumberString();\n\t\tif (specialStr !== null) return specialStr;\n\t\tvar magnitude = new Array(1).fill(null);\n\t\tvar sigDigits = this.extractSignificantDigits(true, magnitude);\n\t\tvar decimalPointPos = magnitude[0] + 1;\n\t\tvar num = sigDigits;\n\t\tif (sigDigits.charAt(0) === '.') {\n\t\t\tnum = \"0\" + sigDigits;\n\t\t} else if (decimalPointPos < 0) {\n\t\t\tnum = \"0.\" + DD.stringOfChar('0', -decimalPointPos) + sigDigits;\n\t\t} else if (sigDigits.indexOf('.') === -1) {\n\t\t\tvar numZeroes = decimalPointPos - sigDigits.length;\n\t\t\tvar zeroes = DD.stringOfChar('0', numZeroes);\n\t\t\tnum = sigDigits + zeroes + \".0\";\n\t\t}\n\t\tif (this.isNegative()) return \"-\" + num;\n\t\treturn num;\n\t}\n\treciprocal() {\n\t\tvar hc = null, tc = null, hy = null, ty = null, C = null, c = null, U = null, u = null;\n\t\tC = 1.0 / this._hi;\n\t\tc = DD.SPLIT * C;\n\t\thc = c - C;\n\t\tu = DD.SPLIT * this._hi;\n\t\thc = c - hc;\n\t\ttc = C - hc;\n\t\thy = u - this._hi;\n\t\tU = C * this._hi;\n\t\thy = u - hy;\n\t\tty = this._hi - hy;\n\t\tu = hc * hy - U + hc * ty + tc * hy + tc * ty;\n\t\tc = (1.0 - U - u - C * this._lo) / this._hi;\n\t\tvar zhi = C + c;\n\t\tvar zlo = C - zhi + c;\n\t\treturn new DD(zhi, zlo);\n\t}\n\ttoSciNotation() {\n\t\tif (this.isZero()) return DD.SCI_NOT_ZERO;\n\t\tvar specialStr = this.getSpecialNumberString();\n\t\tif (specialStr !== null) return specialStr;\n\t\tvar magnitude = new Array(1).fill(null);\n\t\tvar digits = this.extractSignificantDigits(false, magnitude);\n\t\tvar expStr = DD.SCI_NOT_EXPONENT_CHAR + magnitude[0];\n\t\tif (digits.charAt(0) === '0') {\n\t\t\tthrow new IllegalStateException(\"Found leading zero: \" + digits);\n\t\t}\n\t\tvar trailingDigits = \"\";\n\t\tif (digits.length > 1) trailingDigits = digits.substring(1);\n\t\tvar digitsWithDecimal = digits.charAt(0) + \".\" + trailingDigits;\n\t\tif (this.isNegative()) return \"-\" + digitsWithDecimal + expStr;\n\t\treturn digitsWithDecimal + expStr;\n\t}\n\tabs() {\n\t\tif (this.isNaN()) return DD.NaN;\n\t\tif (this.isNegative()) return this.negate();\n\t\treturn new DD(this);\n\t}\n\tisPositive() {\n\t\treturn this._hi > 0.0 || this._hi === 0.0 && this._lo > 0.0;\n\t}\n\tlt(y) {\n\t\treturn this._hi < y._hi || this._hi === y._hi && this._lo < y._lo;\n\t}\n\tadd() {\n\t\tif (arguments[0] instanceof DD) {\n\t\t\tlet y = arguments[0];\n\t\t\treturn DD.copy(this).selfAdd(y);\n\t\t} else if (typeof arguments[0] === \"number\") {\n\t\t\tlet y = arguments[0];\n\t\t\treturn DD.copy(this).selfAdd(y);\n\t\t}\n\t}\n\tinit() {\n\t\tif (arguments.length === 1) {\n\t\t\tif (typeof arguments[0] === \"number\") {\n\t\t\t\tlet x = arguments[0];\n\t\t\t\tthis._hi = x;\n\t\t\t\tthis._lo = 0.0;\n\t\t\t} else if (arguments[0] instanceof DD) {\n\t\t\t\tlet dd = arguments[0];\n\t\t\t\tthis._hi = dd._hi;\n\t\t\t\tthis._lo = dd._lo;\n\t\t\t}\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet hi = arguments[0], lo = arguments[1];\n\t\t\tthis._hi = hi;\n\t\t\tthis._lo = lo;\n\t\t}\n\t}\n\tgt(y) {\n\t\treturn this._hi > y._hi || this._hi === y._hi && this._lo > y._lo;\n\t}\n\tisNegative() {\n\t\treturn this._hi < 0.0 || this._hi === 0.0 && this._lo < 0.0;\n\t}\n\ttrunc() {\n\t\tif (this.isNaN()) return DD.NaN;\n\t\tif (this.isPositive()) return this.floor(); else return this.ceil();\n\t}\n\tsignum() {\n\t\tif (this._hi > 0) return 1;\n\t\tif (this._hi < 0) return -1;\n\t\tif (this._lo > 0) return 1;\n\t\tif (this._lo < 0) return -1;\n\t\treturn 0;\n\t}\n\tgetClass() {\n\t\treturn DD;\n\t}\n\tget interfaces_() {\n\t\treturn [Serializable, Comparable, Cloneable];\n\t}\n}\nDD.constructor_ = function () {\n\tthis._hi = 0.0;\n\tthis._lo = 0.0;\n\tif (arguments.length === 0) {\n\t\tthis.init(0.0);\n\t} else if (arguments.length === 1) {\n\t\tif (typeof arguments[0] === \"number\") {\n\t\t\tlet x = arguments[0];\n\t\t\tthis.init(x);\n\t\t} else if (arguments[0] instanceof DD) {\n\t\t\tlet dd = arguments[0];\n\t\t\tthis.init(dd);\n\t\t} else if (typeof arguments[0] === \"string\") {\n\t\t\tlet str = arguments[0];\n\t\t\tDD.constructor_.call(this, DD.parse(str));\n\t\t}\n\t} else if (arguments.length === 2) {\n\t\tlet hi = arguments[0], lo = arguments[1];\n\t\tthis.init(hi, lo);\n\t}\n};\nDD.PI = new DD(3.141592653589793116e+00, 1.224646799147353207e-16);\nDD.TWO_PI = new DD(6.283185307179586232e+00, 2.449293598294706414e-16);\nDD.PI_2 = new DD(1.570796326794896558e+00, 6.123233995736766036e-17);\nDD.E = new DD(2.718281828459045091e+00, 1.445646891729250158e-16);\nDD.NaN = new DD(Double.NaN, Double.NaN);\nDD.EPS = 1.23259516440783e-32;\nDD.SPLIT = 134217729.0;\nDD.MAX_PRINT_DIGITS = 32;\nDD.TEN = DD.valueOf(10.0);\nDD.ONE = DD.valueOf(1.0);\nDD.SCI_NOT_EXPONENT_CHAR = \"E\";\nDD.SCI_NOT_ZERO = \"0.0E0\";\n","import Coordinate from '../geom/Coordinate';\nimport DD from '../math/DD';\nexport default class CGAlgorithmsDD {\n\tconstructor() {\n\t\tCGAlgorithmsDD.constructor_.apply(this, arguments);\n\t}\n\tstatic orientationIndex(p1, p2, q) {\n\t\tvar index = CGAlgorithmsDD.orientationIndexFilter(p1, p2, q);\n\t\tif (index <= 1) return index;\n\t\tvar dx1 = DD.valueOf(p2.x).selfAdd(-p1.x);\n\t\tvar dy1 = DD.valueOf(p2.y).selfAdd(-p1.y);\n\t\tvar dx2 = DD.valueOf(q.x).selfAdd(-p2.x);\n\t\tvar dy2 = DD.valueOf(q.y).selfAdd(-p2.y);\n\t\treturn dx1.selfMultiply(dy2).selfSubtract(dy1.selfMultiply(dx2)).signum();\n\t}\n\tstatic signOfDet2x2() {\n\t\tif (arguments[0] instanceof DD) {\n\t\t\tlet x1 = arguments[0], y1 = arguments[1], x2 = arguments[2], y2 = arguments[3];\n\t\t\tvar det = x1.multiply(y2).selfSubtract(y1.multiply(x2));\n\t\t\treturn det.signum();\n\t\t} else if (typeof arguments[0] === \"number\") {\n\t\t\tlet dx1 = arguments[0], dy1 = arguments[1], dx2 = arguments[2], dy2 = arguments[3];\n\t\t\tvar x1 = DD.valueOf(dx1);\n\t\t\tvar y1 = DD.valueOf(dy1);\n\t\t\tvar x2 = DD.valueOf(dx2);\n\t\t\tvar y2 = DD.valueOf(dy2);\n\t\t\tvar det = x1.multiply(y2).selfSubtract(y1.multiply(x2));\n\t\t\treturn det.signum();\n\t\t}\n\t}\n\tstatic intersection(p1, p2, q1, q2) {\n\t\tvar denom1 = DD.valueOf(q2.y).selfSubtract(q1.y).selfMultiply(DD.valueOf(p2.x).selfSubtract(p1.x));\n\t\tvar denom2 = DD.valueOf(q2.x).selfSubtract(q1.x).selfMultiply(DD.valueOf(p2.y).selfSubtract(p1.y));\n\t\tvar denom = denom1.subtract(denom2);\n\t\tvar numx1 = DD.valueOf(q2.x).selfSubtract(q1.x).selfMultiply(DD.valueOf(p1.y).selfSubtract(q1.y));\n\t\tvar numx2 = DD.valueOf(q2.y).selfSubtract(q1.y).selfMultiply(DD.valueOf(p1.x).selfSubtract(q1.x));\n\t\tvar numx = numx1.subtract(numx2);\n\t\tvar fracP = numx.selfDivide(denom).doubleValue();\n\t\tvar x = DD.valueOf(p1.x).selfAdd(DD.valueOf(p2.x).selfSubtract(p1.x).selfMultiply(fracP)).doubleValue();\n\t\tvar numy1 = DD.valueOf(p2.x).selfSubtract(p1.x).selfMultiply(DD.valueOf(p1.y).selfSubtract(q1.y));\n\t\tvar numy2 = DD.valueOf(p2.y).selfSubtract(p1.y).selfMultiply(DD.valueOf(p1.x).selfSubtract(q1.x));\n\t\tvar numy = numy1.subtract(numy2);\n\t\tvar fracQ = numy.selfDivide(denom).doubleValue();\n\t\tvar y = DD.valueOf(q1.y).selfAdd(DD.valueOf(q2.y).selfSubtract(q1.y).selfMultiply(fracQ)).doubleValue();\n\t\treturn new Coordinate(x, y);\n\t}\n\tstatic orientationIndexFilter(pa, pb, pc) {\n\t\tvar detsum = null;\n\t\tvar detleft = (pa.x - pc.x) * (pb.y - pc.y);\n\t\tvar detright = (pa.y - pc.y) * (pb.x - pc.x);\n\t\tvar det = detleft - detright;\n\t\tif (detleft > 0.0) {\n\t\t\tif (detright <= 0.0) {\n\t\t\t\treturn CGAlgorithmsDD.signum(det);\n\t\t\t} else {\n\t\t\t\tdetsum = detleft + detright;\n\t\t\t}\n\t\t} else if (detleft < 0.0) {\n\t\t\tif (detright >= 0.0) {\n\t\t\t\treturn CGAlgorithmsDD.signum(det);\n\t\t\t} else {\n\t\t\t\tdetsum = -detleft - detright;\n\t\t\t}\n\t\t} else {\n\t\t\treturn CGAlgorithmsDD.signum(det);\n\t\t}\n\t\tvar errbound = CGAlgorithmsDD.DP_SAFE_EPSILON * detsum;\n\t\tif (det >= errbound || -det >= errbound) {\n\t\t\treturn CGAlgorithmsDD.signum(det);\n\t\t}\n\t\treturn 2;\n\t}\n\tstatic signum(x) {\n\t\tif (x > 0) return 1;\n\t\tif (x < 0) return -1;\n\t\treturn 0;\n\t}\n\tgetClass() {\n\t\treturn CGAlgorithmsDD;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nCGAlgorithmsDD.constructor_ = function () {};\nCGAlgorithmsDD.DP_SAFE_EPSILON = 1e-15;\n","import IllegalArgumentException from '../../../../java/lang/IllegalArgumentException';\nimport CGAlgorithmsDD from './CGAlgorithmsDD';\nexport default class Orientation {\n\tconstructor() {\n\t\tOrientation.constructor_.apply(this, arguments);\n\t}\n\tstatic index(p1, p2, q) {\n\t\treturn CGAlgorithmsDD.orientationIndex(p1, p2, q);\n\t}\n\tstatic isCCW(ring) {\n\t\tvar nPts = ring.length - 1;\n\t\tif (nPts < 3) throw new IllegalArgumentException(\"Ring has fewer than 4 points, so orientation cannot be determined\");\n\t\tvar hiPt = ring[0];\n\t\tvar hiIndex = 0;\n\t\tfor (var i = 1; i <= nPts; i++) {\n\t\t\tvar p = ring[i];\n\t\t\tif (p.y > hiPt.y) {\n\t\t\t\thiPt = p;\n\t\t\t\thiIndex = i;\n\t\t\t}\n\t\t}\n\t\tvar iPrev = hiIndex;\n\t\tdo {\n\t\t\tiPrev = iPrev - 1;\n\t\t\tif (iPrev < 0) iPrev = nPts;\n\t\t} while (ring[iPrev].equals2D(hiPt) && iPrev !== hiIndex);\n\t\tvar iNext = hiIndex;\n\t\tdo {\n\t\t\tiNext = (iNext + 1) % nPts;\n\t\t} while (ring[iNext].equals2D(hiPt) && iNext !== hiIndex);\n\t\tvar prev = ring[iPrev];\n\t\tvar next = ring[iNext];\n\t\tif (prev.equals2D(hiPt) || next.equals2D(hiPt) || prev.equals2D(next)) return false;\n\t\tvar disc = Orientation.index(prev, hiPt, next);\n\t\tvar isCCW = null;\n\t\tif (disc === 0) {\n\t\t\tisCCW = prev.x > next.x;\n\t\t} else {\n\t\t\tisCCW = disc > 0;\n\t\t}\n\t\treturn isCCW;\n\t}\n\tgetClass() {\n\t\treturn Orientation;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nOrientation.constructor_ = function () {};\nOrientation.CLOCKWISE = -1;\nOrientation.RIGHT = Orientation.CLOCKWISE;\nOrientation.COUNTERCLOCKWISE = 1;\nOrientation.LEFT = Orientation.COUNTERCLOCKWISE;\nOrientation.COLLINEAR = 0;\nOrientation.STRAIGHT = Orientation.COLLINEAR;\n","export default function System () { }\n\nSystem.arraycopy = (src, srcPos, dest, destPos, len) => {\n let c = 0\n for (let i = srcPos; i < srcPos + len; i++) {\n dest[destPos + c] = src[i]\n c++\n }\n}\n\nSystem.getProperty = (name) => {\n return {\n 'line.separator': '\\n'\n }[name]\n}\n","import NotRepresentableException from './NotRepresentableException';\nimport Coordinate from '../geom/Coordinate';\nimport Double from '../../../../java/lang/Double';\nexport default class HCoordinate {\n\tconstructor() {\n\t\tHCoordinate.constructor_.apply(this, arguments);\n\t}\n\tstatic intersection(p1, p2, q1, q2) {\n\t\tvar px = p1.y - p2.y;\n\t\tvar py = p2.x - p1.x;\n\t\tvar pw = p1.x * p2.y - p2.x * p1.y;\n\t\tvar qx = q1.y - q2.y;\n\t\tvar qy = q2.x - q1.x;\n\t\tvar qw = q1.x * q2.y - q2.x * q1.y;\n\t\tvar x = py * qw - qy * pw;\n\t\tvar y = qx * pw - px * qw;\n\t\tvar w = px * qy - qx * py;\n\t\tvar xInt = x / w;\n\t\tvar yInt = y / w;\n\t\tif (Double.isNaN(xInt) || (Double.isInfinite(xInt) || Double.isNaN(yInt)) || Double.isInfinite(yInt)) {\n\t\t\tthrow new NotRepresentableException();\n\t\t}\n\t\treturn new Coordinate(xInt, yInt);\n\t}\n\tgetY() {\n\t\tvar a = this.y / this.w;\n\t\tif (Double.isNaN(a) || Double.isInfinite(a)) {\n\t\t\tthrow new NotRepresentableException();\n\t\t}\n\t\treturn a;\n\t}\n\tgetX() {\n\t\tvar a = this.x / this.w;\n\t\tif (Double.isNaN(a) || Double.isInfinite(a)) {\n\t\t\tthrow new NotRepresentableException();\n\t\t}\n\t\treturn a;\n\t}\n\tgetCoordinate() {\n\t\tvar p = new Coordinate();\n\t\tp.x = this.getX();\n\t\tp.y = this.getY();\n\t\treturn p;\n\t}\n\tgetClass() {\n\t\treturn HCoordinate;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nHCoordinate.constructor_ = function () {\n\tthis.x = null;\n\tthis.y = null;\n\tthis.w = null;\n\tif (arguments.length === 0) {\n\t\tthis.x = 0.0;\n\t\tthis.y = 0.0;\n\t\tthis.w = 1.0;\n\t} else if (arguments.length === 1) {\n\t\tlet p = arguments[0];\n\t\tthis.x = p.x;\n\t\tthis.y = p.y;\n\t\tthis.w = 1.0;\n\t} else if (arguments.length === 2) {\n\t\tif (typeof arguments[0] === \"number\" && typeof arguments[1] === \"number\") {\n\t\t\tlet _x = arguments[0], _y = arguments[1];\n\t\t\tthis.x = _x;\n\t\t\tthis.y = _y;\n\t\t\tthis.w = 1.0;\n\t\t} else if (arguments[0] instanceof HCoordinate && arguments[1] instanceof HCoordinate) {\n\t\t\tlet p1 = arguments[0], p2 = arguments[1];\n\t\t\tthis.x = p1.y * p2.w - p2.y * p1.w;\n\t\t\tthis.y = p2.x * p1.w - p1.x * p2.w;\n\t\t\tthis.w = p1.x * p2.y - p2.x * p1.y;\n\t\t} else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {\n\t\t\tlet p1 = arguments[0], p2 = arguments[1];\n\t\t\tthis.x = p1.y - p2.y;\n\t\t\tthis.y = p2.x - p1.x;\n\t\t\tthis.w = p1.x * p2.y - p2.x * p1.y;\n\t\t}\n\t} else if (arguments.length === 3) {\n\t\tlet _x = arguments[0], _y = arguments[1], _w = arguments[2];\n\t\tthis.x = _x;\n\t\tthis.y = _y;\n\t\tthis.w = _w;\n\t} else if (arguments.length === 4) {\n\t\tlet p1 = arguments[0], p2 = arguments[1], q1 = arguments[2], q2 = arguments[3];\n\t\tvar px = p1.y - p2.y;\n\t\tvar py = p2.x - p1.x;\n\t\tvar pw = p1.x * p2.y - p2.x * p1.y;\n\t\tvar qx = q1.y - q2.y;\n\t\tvar qy = q2.x - q1.x;\n\t\tvar qw = q1.x * q2.y - q2.x * q1.y;\n\t\tthis.x = py * qw - qy * pw;\n\t\tthis.y = qx * pw - px * qw;\n\t\tthis.w = px * qy - qx * py;\n\t}\n};\n","import Double from '../../../../java/lang/Double';\nexport default class MathUtil {\n\tconstructor() {\n\t\tMathUtil.constructor_.apply(this, arguments);\n\t}\n\tstatic log10(x) {\n\t\tvar ln = Math.log(x);\n\t\tif (Double.isInfinite(ln)) return ln;\n\t\tif (Double.isNaN(ln)) return ln;\n\t\treturn ln / MathUtil.LOG_10;\n\t}\n\tstatic min(v1, v2, v3, v4) {\n\t\tvar min = v1;\n\t\tif (v2 < min) min = v2;\n\t\tif (v3 < min) min = v3;\n\t\tif (v4 < min) min = v4;\n\t\treturn min;\n\t}\n\tstatic clamp() {\n\t\tif (typeof arguments[2] === \"number\" && (typeof arguments[0] === \"number\" && typeof arguments[1] === \"number\")) {\n\t\t\tlet x = arguments[0], min = arguments[1], max = arguments[2];\n\t\t\tif (x < min) return min;\n\t\t\tif (x > max) return max;\n\t\t\treturn x;\n\t\t} else if (Number.isInteger(arguments[2]) && (Number.isInteger(arguments[0]) && Number.isInteger(arguments[1]))) {\n\t\t\tlet x = arguments[0], min = arguments[1], max = arguments[2];\n\t\t\tif (x < min) return min;\n\t\t\tif (x > max) return max;\n\t\t\treturn x;\n\t\t}\n\t}\n\tstatic wrap(index, max) {\n\t\tif (index < 0) {\n\t\t\treturn max - -index % max;\n\t\t}\n\t\treturn index % max;\n\t}\n\tstatic max() {\n\t\tif (arguments.length === 3) {\n\t\t\tlet v1 = arguments[0], v2 = arguments[1], v3 = arguments[2];\n\t\t\tvar max = v1;\n\t\t\tif (v2 > max) max = v2;\n\t\t\tif (v3 > max) max = v3;\n\t\t\treturn max;\n\t\t} else if (arguments.length === 4) {\n\t\t\tlet v1 = arguments[0], v2 = arguments[1], v3 = arguments[2], v4 = arguments[3];\n\t\t\tvar max = v1;\n\t\t\tif (v2 > max) max = v2;\n\t\t\tif (v3 > max) max = v3;\n\t\t\tif (v4 > max) max = v4;\n\t\t\treturn max;\n\t\t}\n\t}\n\tstatic average(x1, x2) {\n\t\treturn (x1 + x2) / 2.0;\n\t}\n\tgetClass() {\n\t\treturn MathUtil;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nMathUtil.constructor_ = function () {};\nMathUtil.LOG_10 = Math.log(10);\n","import IllegalArgumentException from '../../../../java/lang/IllegalArgumentException';\nimport MathUtil from '../math/MathUtil';\nimport Envelope from '../geom/Envelope';\nexport default class Distance {\n\tconstructor() {\n\t\tDistance.constructor_.apply(this, arguments);\n\t}\n\tstatic segmentToSegment(A, B, C, D) {\n\t\tif (A.equals(B)) return Distance.pointToSegment(A, C, D);\n\t\tif (C.equals(D)) return Distance.pointToSegment(D, A, B);\n\t\tvar noIntersection = false;\n\t\tif (!Envelope.intersects(A, B, C, D)) {\n\t\t\tnoIntersection = true;\n\t\t} else {\n\t\t\tvar denom = (B.x - A.x) * (D.y - C.y) - (B.y - A.y) * (D.x - C.x);\n\t\t\tif (denom === 0) {\n\t\t\t\tnoIntersection = true;\n\t\t\t} else {\n\t\t\t\tvar r_num = (A.y - C.y) * (D.x - C.x) - (A.x - C.x) * (D.y - C.y);\n\t\t\t\tvar s_num = (A.y - C.y) * (B.x - A.x) - (A.x - C.x) * (B.y - A.y);\n\t\t\t\tvar s = s_num / denom;\n\t\t\t\tvar r = r_num / denom;\n\t\t\t\tif (r < 0 || r > 1 || s < 0 || s > 1) {\n\t\t\t\t\tnoIntersection = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (noIntersection) {\n\t\t\treturn MathUtil.min(Distance.pointToSegment(A, C, D), Distance.pointToSegment(B, C, D), Distance.pointToSegment(C, A, B), Distance.pointToSegment(D, A, B));\n\t\t}\n\t\treturn 0.0;\n\t}\n\tstatic pointToSegment(p, A, B) {\n\t\tif (A.x === B.x && A.y === B.y) return p.distance(A);\n\t\tvar len2 = (B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y);\n\t\tvar r = ((p.x - A.x) * (B.x - A.x) + (p.y - A.y) * (B.y - A.y)) / len2;\n\t\tif (r <= 0.0) return p.distance(A);\n\t\tif (r >= 1.0) return p.distance(B);\n\t\tvar s = ((A.y - p.y) * (B.x - A.x) - (A.x - p.x) * (B.y - A.y)) / len2;\n\t\treturn Math.abs(s) * Math.sqrt(len2);\n\t}\n\tstatic pointToLinePerpendicular(p, A, B) {\n\t\tvar len2 = (B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y);\n\t\tvar s = ((A.y - p.y) * (B.x - A.x) - (A.x - p.x) * (B.y - A.y)) / len2;\n\t\treturn Math.abs(s) * Math.sqrt(len2);\n\t}\n\tstatic pointToSegmentString(p, line) {\n\t\tif (line.length === 0) throw new IllegalArgumentException(\"Line array must contain at least one vertex\");\n\t\tvar minDistance = p.distance(line[0]);\n\t\tfor (var i = 0; i < line.length - 1; i++) {\n\t\t\tvar dist = Distance.pointToSegment(p, line[i], line[i + 1]);\n\t\t\tif (dist < minDistance) {\n\t\t\t\tminDistance = dist;\n\t\t\t}\n\t\t}\n\t\treturn minDistance;\n\t}\n\tgetClass() {\n\t\treturn Distance;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nDistance.constructor_ = function () {};\n","import Cloneable from '../../../../java/lang/Cloneable';\nexport default class CoordinateSequence {\n\tconstructor() {\n\t\tCoordinateSequence.constructor_.apply(this, arguments);\n\t}\n\tsetOrdinate(index, ordinateIndex, value) {}\n\tsize() {}\n\tgetOrdinate(index, ordinateIndex) {}\n\tgetCoordinate() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet i = arguments[0];\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet index = arguments[0], coord = arguments[1];\n\t\t}\n\t}\n\tgetCoordinateCopy(i) {}\n\tgetDimension() {}\n\tgetX(index) {}\n\texpandEnvelope(env) {}\n\tcopy() {}\n\tgetY(index) {}\n\ttoCoordinateArray() {}\n\tgetClass() {\n\t\treturn CoordinateSequence;\n\t}\n\tget interfaces_() {\n\t\treturn [Cloneable];\n\t}\n}\nCoordinateSequence.constructor_ = function () {};\nCoordinateSequence.X = 0;\nCoordinateSequence.Y = 1;\nCoordinateSequence.Z = 2;\nCoordinateSequence.M = 3;\n","import hasInterface from '../../../../hasInterface';\nimport CoordinateSequence from './CoordinateSequence';\nexport default class CoordinateSequenceFactory {\n\tconstructor() {\n\t\tCoordinateSequenceFactory.constructor_.apply(this, arguments);\n\t}\n\tcreate() {\n\t\tif (arguments.length === 1) {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\tlet coordinates = arguments[0];\n\t\t\t} else if (hasInterface(arguments[0], CoordinateSequence)) {\n\t\t\t\tlet coordSeq = arguments[0];\n\t\t\t}\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet size = arguments[0], dimension = arguments[1];\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn CoordinateSequenceFactory;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nCoordinateSequenceFactory.constructor_ = function () {};\n","export default class GeometryComponentFilter {\n\tconstructor() {\n\t\tGeometryComponentFilter.constructor_.apply(this, arguments);\n\t}\n\tfilter(geom) {}\n\tgetClass() {\n\t\treturn GeometryComponentFilter;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nGeometryComponentFilter.constructor_ = function () {};\n","import IllegalArgumentException from '../../../../java/lang/IllegalArgumentException';\nimport GeometryComponentFilter from './GeometryComponentFilter';\nimport Comparable from '../../../../java/lang/Comparable';\nimport Cloneable from '../../../../java/lang/Cloneable';\nimport Serializable from '../../../../java/io/Serializable';\nimport Envelope from './Envelope';\nexport default class Geometry {\n\tconstructor() {\n\t\tGeometry.constructor_.apply(this, arguments);\n\t}\n\tisGeometryCollection() {\n\t\treturn this.getTypeCode() === Geometry.TYPECODE_GEOMETRYCOLLECTION;\n\t}\n\tgetFactory() {\n\t\treturn this._factory;\n\t}\n\tgetGeometryN(n) {\n\t\treturn this;\n\t}\n\tgetArea() {\n\t\treturn 0.0;\n\t}\n\tisRectangle() {\n\t\treturn false;\n\t}\n\tequals() {\n\t\tif (arguments[0] instanceof Geometry) {\n\t\t\tlet g = arguments[0];\n\t\t\tif (g === null) return false;\n\t\t\treturn this.equalsTopo(g);\n\t\t} else if (arguments[0] instanceof Object) {\n\t\t\tlet o = arguments[0];\n\t\t\tif (!(o instanceof Geometry)) return false;\n\t\t\tvar g = o;\n\t\t\treturn this.equalsExact(g);\n\t\t}\n\t}\n\tequalsExact(other) {\n\t\treturn this === other || this.equalsExact(other, 0);\n\t}\n\tgeometryChanged() {\n\t\tthis.apply(Geometry.geometryChangedFilter);\n\t}\n\tgeometryChangedAction() {\n\t\tthis._envelope = null;\n\t}\n\tequalsNorm(g) {\n\t\tif (g === null) return false;\n\t\treturn this.norm().equalsExact(g.norm());\n\t}\n\tgetLength() {\n\t\treturn 0.0;\n\t}\n\tgetNumGeometries() {\n\t\treturn 1;\n\t}\n\tcompareTo() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet o = arguments[0];\n\t\t\tvar other = o;\n\t\t\tif (this.getTypeCode() !== other.getTypeCode()) {\n\t\t\t\treturn this.getTypeCode() - other.getTypeCode();\n\t\t\t}\n\t\t\tif (this.isEmpty() && other.isEmpty()) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tif (this.isEmpty()) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif (other.isEmpty()) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn this.compareToSameClass(o);\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet o = arguments[0], comp = arguments[1];\n\t\t\tvar other = o;\n\t\t\tif (this.getTypeCode() !== other.getTypeCode()) {\n\t\t\t\treturn this.getTypeCode() - other.getTypeCode();\n\t\t\t}\n\t\t\tif (this.isEmpty() && other.isEmpty()) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tif (this.isEmpty()) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif (other.isEmpty()) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\treturn this.compareToSameClass(o, comp);\n\t\t}\n\t}\n\tgetUserData() {\n\t\treturn this._userData;\n\t}\n\tgetSRID() {\n\t\treturn this._SRID;\n\t}\n\tgetEnvelope() {\n\t\treturn this.getFactory().toGeometry(this.getEnvelopeInternal());\n\t}\n\tcheckNotGeometryCollection(g) {\n\t\tif (g.getTypeCode() === Geometry.TYPECODE_GEOMETRYCOLLECTION) {\n\t\t\tthrow new IllegalArgumentException(\"This method does not support GeometryCollection arguments\");\n\t\t}\n\t}\n\tequal(a, b, tolerance) {\n\t\tif (tolerance === 0) {\n\t\t\treturn a.equals(b);\n\t\t}\n\t\treturn a.distance(b) <= tolerance;\n\t}\n\tnorm() {\n\t\tvar copy = this.copy();\n\t\tcopy.normalize();\n\t\treturn copy;\n\t}\n\tgetPrecisionModel() {\n\t\treturn this._factory.getPrecisionModel();\n\t}\n\tgetEnvelopeInternal() {\n\t\tif (this._envelope === null) {\n\t\t\tthis._envelope = this.computeEnvelopeInternal();\n\t\t}\n\t\treturn new Envelope(this._envelope);\n\t}\n\tsetSRID(SRID) {\n\t\tthis._SRID = SRID;\n\t}\n\tsetUserData(userData) {\n\t\tthis._userData = userData;\n\t}\n\tcompare(a, b) {\n\t\tvar i = a.iterator();\n\t\tvar j = b.iterator();\n\t\twhile (i.hasNext() && j.hasNext()) {\n\t\t\tvar aElement = i.next();\n\t\t\tvar bElement = j.next();\n\t\t\tvar comparison = aElement.compareTo(bElement);\n\t\t\tif (comparison !== 0) {\n\t\t\t\treturn comparison;\n\t\t\t}\n\t\t}\n\t\tif (i.hasNext()) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (j.hasNext()) {\n\t\t\treturn -1;\n\t\t}\n\t\treturn 0;\n\t}\n\thashCode() {\n\t\treturn this.getEnvelopeInternal().hashCode();\n\t}\n\tisGeometryCollectionOrDerived() {\n\t\tif (this.getTypeCode() === Geometry.TYPECODE_GEOMETRYCOLLECTION || this.getTypeCode() === Geometry.TYPECODE_MULTIPOINT || this.getTypeCode() === Geometry.TYPECODE_MULTILINESTRING || this.getTypeCode() === Geometry.TYPECODE_MULTIPOLYGON) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tget interfaces_() {\n\t\treturn [Cloneable, Comparable, Serializable];\n\t}\n\tgetClass() {\n\t\treturn Geometry;\n\t}\n\tstatic hasNonEmptyElements(geometries) {\n\t\tfor (var i = 0; i < geometries.length; i++) {\n\t\t\tif (!geometries[i].isEmpty()) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\tstatic hasNullElements(array) {\n\t\tfor (var i = 0; i < array.length; i++) {\n\t\t\tif (array[i] === null) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n};\nGeometry.constructor_ = function (factory) {\n\tif (!factory)\n\t\treturn;\n\tthis._envelope = null;\n\tthis._userData = null;\n\tthis._factory = factory;\n\tthis._SRID = factory.getSRID();\n};\nGeometry.serialVersionUID = 8763622679187376702;\nGeometry.TYPECODE_POINT = 0;\nGeometry.TYPECODE_MULTIPOINT = 1;\nGeometry.TYPECODE_LINESTRING = 2;\nGeometry.TYPECODE_LINEARRING = 3;\nGeometry.TYPECODE_MULTILINESTRING = 4;\nGeometry.TYPECODE_POLYGON = 5;\nGeometry.TYPECODE_MULTIPOLYGON = 6;\nGeometry.TYPECODE_GEOMETRYCOLLECTION = 7;\nGeometry.TYPENAME_POINT = \"Point\";\nGeometry.TYPENAME_MULTIPOINT = \"MultiPoint\";\nGeometry.TYPENAME_LINESTRING = \"LineString\";\nGeometry.TYPENAME_LINEARRING = \"LinearRing\";\nGeometry.TYPENAME_MULTILINESTRING = \"MultiLineString\";\nGeometry.TYPENAME_POLYGON = \"Polygon\";\nGeometry.TYPENAME_MULTIPOLYGON = \"MultiPolygon\";\nGeometry.TYPENAME_GEOMETRYCOLLECTION = \"GeometryCollection\";\nGeometry.geometryChangedFilter = {\n\tget interfaces_() {\n\t\treturn [GeometryComponentFilter];\n\t},\n\tfilter(geom) {\n\t\tgeom.geometryChangedAction();\n\t}\n};\n","export default class CoordinateFilter {\n\tconstructor() {\n\t\tCoordinateFilter.constructor_.apply(this, arguments);\n\t}\n\tfilter(coord) {}\n\tgetClass() {\n\t\treturn CoordinateFilter;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nCoordinateFilter.constructor_ = function () {};\n","export default class BoundaryNodeRule {\n\tconstructor() {\n\t\tBoundaryNodeRule.constructor_.apply(this, arguments);\n\t}\n\tisInBoundary(boundaryCount) {}\n\tgetClass() {\n\t\treturn BoundaryNodeRule;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nclass Mod2BoundaryNodeRule {\n\tconstructor() {\n\t\tMod2BoundaryNodeRule.constructor_.apply(this, arguments);\n\t}\n\tisInBoundary(boundaryCount) {\n\t\treturn boundaryCount % 2 === 1;\n\t}\n\tgetClass() {\n\t\treturn Mod2BoundaryNodeRule;\n\t}\n\tget interfaces_() {\n\t\treturn [BoundaryNodeRule];\n\t}\n}\nMod2BoundaryNodeRule.constructor_ = function () {};\nclass EndPointBoundaryNodeRule {\n\tconstructor() {\n\t\tEndPointBoundaryNodeRule.constructor_.apply(this, arguments);\n\t}\n\tisInBoundary(boundaryCount) {\n\t\treturn boundaryCount > 0;\n\t}\n\tgetClass() {\n\t\treturn EndPointBoundaryNodeRule;\n\t}\n\tget interfaces_() {\n\t\treturn [BoundaryNodeRule];\n\t}\n}\nEndPointBoundaryNodeRule.constructor_ = function () {};\nclass MultiValentEndPointBoundaryNodeRule {\n\tconstructor() {\n\t\tMultiValentEndPointBoundaryNodeRule.constructor_.apply(this, arguments);\n\t}\n\tisInBoundary(boundaryCount) {\n\t\treturn boundaryCount > 1;\n\t}\n\tgetClass() {\n\t\treturn MultiValentEndPointBoundaryNodeRule;\n\t}\n\tget interfaces_() {\n\t\treturn [BoundaryNodeRule];\n\t}\n}\nMultiValentEndPointBoundaryNodeRule.constructor_ = function () {};\nclass MonoValentEndPointBoundaryNodeRule {\n\tconstructor() {\n\t\tMonoValentEndPointBoundaryNodeRule.constructor_.apply(this, arguments);\n\t}\n\tisInBoundary(boundaryCount) {\n\t\treturn boundaryCount === 1;\n\t}\n\tgetClass() {\n\t\treturn MonoValentEndPointBoundaryNodeRule;\n\t}\n\tget interfaces_() {\n\t\treturn [BoundaryNodeRule];\n\t}\n}\nMonoValentEndPointBoundaryNodeRule.constructor_ = function () {};\nBoundaryNodeRule.Mod2BoundaryNodeRule = Mod2BoundaryNodeRule;\nBoundaryNodeRule.EndPointBoundaryNodeRule = EndPointBoundaryNodeRule;\nBoundaryNodeRule.MultiValentEndPointBoundaryNodeRule = MultiValentEndPointBoundaryNodeRule;\nBoundaryNodeRule.MonoValentEndPointBoundaryNodeRule = MonoValentEndPointBoundaryNodeRule;\nBoundaryNodeRule.constructor_ = function () {};\nBoundaryNodeRule.MOD2_BOUNDARY_RULE = new Mod2BoundaryNodeRule();\nBoundaryNodeRule.ENDPOINT_BOUNDARY_RULE = new EndPointBoundaryNodeRule();\nBoundaryNodeRule.MULTIVALENT_ENDPOINT_BOUNDARY_RULE = new MultiValentEndPointBoundaryNodeRule();\nBoundaryNodeRule.MONOVALENT_ENDPOINT_BOUNDARY_RULE = new MonoValentEndPointBoundaryNodeRule();\nBoundaryNodeRule.OGC_SFS_BOUNDARY_RULE = BoundaryNodeRule.MOD2_BOUNDARY_RULE;\n","import CoordinateList from './CoordinateList';\nimport Coordinate from './Coordinate';\nimport MathUtil from '../math/MathUtil';\nimport System from '../../../../java/lang/System';\nimport Comparator from '../../../../java/util/Comparator';\nimport Envelope from './Envelope';\nexport default class CoordinateArrays {\n\tconstructor() {\n\t\tCoordinateArrays.constructor_.apply(this, arguments);\n\t}\n\tstatic isRing(pts) {\n\t\tif (pts.length < 4) return false;\n\t\tif (!pts[0].equals2D(pts[pts.length - 1])) return false;\n\t\treturn true;\n\t}\n\tstatic ptNotInList(testPts, pts) {\n\t\tfor (var i = 0; i < testPts.length; i++) {\n\t\t\tvar testPt = testPts[i];\n\t\t\tif (CoordinateArrays.indexOf(testPt, pts) < 0) return testPt;\n\t\t}\n\t\treturn null;\n\t}\n\tstatic scroll(coordinates, firstCoordinate) {\n\t\tvar i = CoordinateArrays.indexOf(firstCoordinate, coordinates);\n\t\tif (i < 0) return null;\n\t\tvar newCoordinates = new Array(coordinates.length).fill(null);\n\t\tSystem.arraycopy(coordinates, i, newCoordinates, 0, coordinates.length - i);\n\t\tSystem.arraycopy(coordinates, 0, newCoordinates, coordinates.length - i, i);\n\t\tSystem.arraycopy(newCoordinates, 0, coordinates, 0, coordinates.length);\n\t}\n\tstatic equals() {\n\t\tif (arguments.length === 2) {\n\t\t\tlet coord1 = arguments[0], coord2 = arguments[1];\n\t\t\tif (coord1 === coord2) return true;\n\t\t\tif (coord1 === null || coord2 === null) return false;\n\t\t\tif (coord1.length !== coord2.length) return false;\n\t\t\tfor (var i = 0; i < coord1.length; i++) {\n\t\t\t\tif (!coord1[i].equals(coord2[i])) return false;\n\t\t\t}\n\t\t\treturn true;\n\t\t} else if (arguments.length === 3) {\n\t\t\tlet coord1 = arguments[0], coord2 = arguments[1], coordinateComparator = arguments[2];\n\t\t\tif (coord1 === coord2) return true;\n\t\t\tif (coord1 === null || coord2 === null) return false;\n\t\t\tif (coord1.length !== coord2.length) return false;\n\t\t\tfor (var i = 0; i < coord1.length; i++) {\n\t\t\t\tif (coordinateComparator.compare(coord1[i], coord2[i]) !== 0) return false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\tstatic intersection(coordinates, env) {\n\t\tvar coordList = new CoordinateList();\n\t\tfor (var i = 0; i < coordinates.length; i++) {\n\t\t\tif (env.intersects(coordinates[i])) coordList.add(coordinates[i], true);\n\t\t}\n\t\treturn coordList.toCoordinateArray();\n\t}\n\tstatic hasRepeatedPoints(coord) {\n\t\tfor (var i = 1; i < coord.length; i++) {\n\t\t\tif (coord[i - 1].equals(coord[i])) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\tstatic removeRepeatedPoints(coord) {\n\t\tif (!CoordinateArrays.hasRepeatedPoints(coord)) return coord;\n\t\tvar coordList = new CoordinateList(coord, false);\n\t\treturn coordList.toCoordinateArray();\n\t}\n\tstatic reverse(coord) {\n\t\tvar last = coord.length - 1;\n\t\tvar mid = Math.trunc(last / 2);\n\t\tfor (var i = 0; i <= mid; i++) {\n\t\t\tvar tmp = coord[i];\n\t\t\tcoord[i] = coord[last - i];\n\t\t\tcoord[last - i] = tmp;\n\t\t}\n\t}\n\tstatic removeNull(coord) {\n\t\tvar nonNull = 0;\n\t\tfor (var i = 0; i < coord.length; i++) {\n\t\t\tif (coord[i] !== null) nonNull++;\n\t\t}\n\t\tvar newCoord = new Array(nonNull).fill(null);\n\t\tif (nonNull === 0) return newCoord;\n\t\tvar j = 0;\n\t\tfor (var i = 0; i < coord.length; i++) {\n\t\t\tif (coord[i] !== null) newCoord[j++] = coord[i];\n\t\t}\n\t\treturn newCoord;\n\t}\n\tstatic copyDeep() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet coordinates = arguments[0];\n\t\t\tvar copy = new Array(coordinates.length).fill(null);\n\t\t\tfor (var i = 0; i < coordinates.length; i++) {\n\t\t\t\tcopy[i] = new Coordinate(coordinates[i]);\n\t\t\t}\n\t\t\treturn copy;\n\t\t} else if (arguments.length === 5) {\n\t\t\tlet src = arguments[0], srcStart = arguments[1], dest = arguments[2], destStart = arguments[3], length = arguments[4];\n\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\tdest[destStart + i] = new Coordinate(src[srcStart + i]);\n\t\t\t}\n\t\t}\n\t}\n\tstatic isEqualReversed(pts1, pts2) {\n\t\tfor (var i = 0; i < pts1.length; i++) {\n\t\t\tvar p1 = pts1[i];\n\t\t\tvar p2 = pts2[pts1.length - i - 1];\n\t\t\tif (p1.compareTo(p2) !== 0) return false;\n\t\t}\n\t\treturn true;\n\t}\n\tstatic envelope(coordinates) {\n\t\tvar env = new Envelope();\n\t\tfor (var i = 0; i < coordinates.length; i++) {\n\t\t\tenv.expandToInclude(coordinates[i]);\n\t\t}\n\t\treturn env;\n\t}\n\tstatic toCoordinateArray(coordList) {\n\t\treturn coordList.toArray(CoordinateArrays.coordArrayType);\n\t}\n\tstatic atLeastNCoordinatesOrNothing(n, c) {\n\t\treturn c.length >= n ? c : [];\n\t}\n\tstatic indexOf(coordinate, coordinates) {\n\t\tfor (var i = 0; i < coordinates.length; i++) {\n\t\t\tif (coordinate.equals(coordinates[i])) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\tstatic increasingDirection(pts) {\n\t\tfor (var i = 0; i < Math.trunc(pts.length / 2); i++) {\n\t\t\tvar j = pts.length - 1 - i;\n\t\t\tvar comp = pts[i].compareTo(pts[j]);\n\t\t\tif (comp !== 0) return comp;\n\t\t}\n\t\treturn 1;\n\t}\n\tstatic compare(pts1, pts2) {\n\t\tvar i = 0;\n\t\twhile (i < pts1.length && i < pts2.length) {\n\t\t\tvar compare = pts1[i].compareTo(pts2[i]);\n\t\t\tif (compare !== 0) return compare;\n\t\t\ti++;\n\t\t}\n\t\tif (i < pts2.length) return -1;\n\t\tif (i < pts1.length) return 1;\n\t\treturn 0;\n\t}\n\tstatic minCoordinate(coordinates) {\n\t\tvar minCoord = null;\n\t\tfor (var i = 0; i < coordinates.length; i++) {\n\t\t\tif (minCoord === null || minCoord.compareTo(coordinates[i]) > 0) {\n\t\t\t\tminCoord = coordinates[i];\n\t\t\t}\n\t\t}\n\t\treturn minCoord;\n\t}\n\tstatic extract(pts, start, end) {\n\t\tstart = MathUtil.clamp(start, 0, pts.length);\n\t\tend = MathUtil.clamp(end, -1, pts.length);\n\t\tvar npts = end - start + 1;\n\t\tif (end < 0) npts = 0;\n\t\tif (start >= pts.length) npts = 0;\n\t\tif (end < start) npts = 0;\n\t\tvar extractPts = new Array(npts).fill(null);\n\t\tif (npts === 0) return extractPts;\n\t\tvar iPts = 0;\n\t\tfor (var i = start; i <= end; i++) {\n\t\t\textractPts[iPts++] = pts[i];\n\t\t}\n\t\treturn extractPts;\n\t}\n\tgetClass() {\n\t\treturn CoordinateArrays;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nclass ForwardComparator {\n\tconstructor() {\n\t\tForwardComparator.constructor_.apply(this, arguments);\n\t}\n\tcompare(o1, o2) {\n\t\tvar pts1 = o1;\n\t\tvar pts2 = o2;\n\t\treturn CoordinateArrays.compare(pts1, pts2);\n\t}\n\tgetClass() {\n\t\treturn ForwardComparator;\n\t}\n\tget interfaces_() {\n\t\treturn [Comparator];\n\t}\n}\nForwardComparator.constructor_ = function () {};\nclass BidirectionalComparator {\n\tconstructor() {\n\t\tBidirectionalComparator.constructor_.apply(this, arguments);\n\t}\n\tcompare(o1, o2) {\n\t\tvar pts1 = o1;\n\t\tvar pts2 = o2;\n\t\tif (pts1.length < pts2.length) return -1;\n\t\tif (pts1.length > pts2.length) return 1;\n\t\tif (pts1.length === 0) return 0;\n\t\tvar forwardComp = CoordinateArrays.compare(pts1, pts2);\n\t\tvar isEqualRev = CoordinateArrays.isEqualReversed(pts1, pts2);\n\t\tif (isEqualRev) return 0;\n\t\treturn forwardComp;\n\t}\n\tOLDcompare(o1, o2) {\n\t\tvar pts1 = o1;\n\t\tvar pts2 = o2;\n\t\tif (pts1.length < pts2.length) return -1;\n\t\tif (pts1.length > pts2.length) return 1;\n\t\tif (pts1.length === 0) return 0;\n\t\tvar dir1 = CoordinateArrays.increasingDirection(pts1);\n\t\tvar dir2 = CoordinateArrays.increasingDirection(pts2);\n\t\tvar i1 = dir1 > 0 ? 0 : pts1.length - 1;\n\t\tvar i2 = dir2 > 0 ? 0 : pts1.length - 1;\n\t\tfor (var i = 0; i < pts1.length; i++) {\n\t\t\tvar comparePt = pts1[i1].compareTo(pts2[i2]);\n\t\t\tif (comparePt !== 0) return comparePt;\n\t\t\ti1 += dir1;\n\t\t\ti2 += dir2;\n\t\t}\n\t\treturn 0;\n\t}\n\tgetClass() {\n\t\treturn BidirectionalComparator;\n\t}\n\tget interfaces_() {\n\t\treturn [Comparator];\n\t}\n}\nBidirectionalComparator.constructor_ = function () {};\nCoordinateArrays.ForwardComparator = ForwardComparator;\nCoordinateArrays.BidirectionalComparator = BidirectionalComparator;\nCoordinateArrays.constructor_ = function () {};\nCoordinateArrays.coordArrayType = new Array(0).fill(null);\n","/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/Map.html\n *\n * @constructor\n * @private\n */\nexport default function Map() {};\n\n\n/**\n * Returns the value to which the specified key is mapped, or null if this map\n * contains no mapping for the key.\n * @param {Object} key\n * @return {Object}\n */\nMap.prototype.get = function() {};\n\n\n/**\n * Associates the specified value with the specified key in this map (optional\n * operation).\n * @param {Object} key\n * @param {Object} value\n * @return {Object}\n */\nMap.prototype.put = function() {};\n\n\n/**\n * Returns the number of key-value mappings in this map.\n * @return {number}\n */\nMap.prototype.size = function() {};\n\n\n/**\n * Returns a Collection view of the values contained in this map.\n * @return {javascript.util.Collection}\n */\nMap.prototype.values = function() {};\n\n/**\n * Returns a {@link Set} view of the mappings contained in this map.\n * The set is backed by the map, so changes to the map are\n * reflected in the set, and vice-versa. If the map is modified\n * while an iteration over the set is in progress (except through\n * the iterator's own remove operation, or through the\n * setValue operation on a map entry returned by the\n * iterator) the results of the iteration are undefined. The set\n * supports element removal, which removes the corresponding\n * mapping from the map, via the Iterator.remove,\n * Set.remove, removeAll, retainAll and\n * clear operations. It does not support the\n * add or addAll operations.\n *\n * @return {Set} a set view of the mappings contained in this map\n */\nMap.prototype.entrySet = function() {};\n","import Map from './Map'\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/SortedMap.html\n *\n * @extends {Map}\n * @constructor\n * @private\n */\nexport default function SortedMap() {};\nSortedMap.prototype = new Map();\n","import Collection from './Collection'\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/Set.html\n *\n * @extends {Collection}\n * @constructor\n * @private\n */\nexport default function Set() {};\nSet.prototype = new Collection();\n\n\n/**\n * Returns true if this set contains the specified element. More formally,\n * returns true if and only if this set contains an element e such that (o==null ?\n * e==null : o.equals(e)).\n * @param {Object} e\n * @return {boolean}\n */\nSet.prototype.contains = function() {};\n","import Collection from './Collection'\nimport Iterator from './Iterator'\nimport NoSuchElementException from './NoSuchElementException'\nimport OperationNotSupported from './OperationNotSupported'\nimport Set from './Set'\n\n/**\n * @see http://docs.oracle.com/javase/6/docs/api/java/util/HashSet.html\n *\n * @extends {javascript.util.Set}\n * @constructor\n * @private\n */\nexport default function HashSet() {\n /**\n * @type {Array}\n * @private\n */\n this.array_ = [];\n\n if (arguments[0] instanceof Collection) {\n this.addAll(arguments[0]);\n }\n};\nHashSet.prototype = new Set();\n\n\n/**\n * @override\n */\nHashSet.prototype.contains = function(o) {\n for (var i = 0, len = this.array_.length; i < len; i++) {\n var e = this.array_[i];\n if (e === o) {\n return true;\n }\n }\n return false;\n};\n\n\n/**\n * @override\n */\nHashSet.prototype.add = function(o) {\n if (this.contains(o)) {\n return false;\n }\n\n this.array_.push(o);\n\n return true;\n};\n\n\n/**\n * @override\n */\nHashSet.prototype.addAll = function(c) {\n for (var i = c.iterator(); i.hasNext();) {\n this.add(i.next());\n }\n return true;\n};\n\n\n/**\n * @override\n */\nHashSet.prototype.remove = function(o) {\n throw new javascript.util.OperationNotSupported();\n};\n\n\n/**\n * @override\n */\nHashSet.prototype.size = function() {\n return this.array_.length;\n};\n\n\n/**\n * @override\n */\nHashSet.prototype.isEmpty = function() {\n return this.array_.length === 0;\n};\n\n\n/**\n * @override\n */\nHashSet.prototype.toArray = function() {\n var array = [];\n\n for (var i = 0, len = this.array_.length; i < len; i++) {\n array.push(this.array_[i]);\n }\n\n return array;\n};\n\n\n/**\n * @override\n */\nHashSet.prototype.iterator = function() {\n return new Iterator_(this);\n};\n\n\n\n/**\n * @extends {Iterator}\n * @param {HashSet} hashSet\n * @constructor\n * @private\n */\nvar Iterator_ = function(hashSet) {\n /**\n * @type {HashSet}\n * @private\n */\n this.hashSet_ = hashSet;\n /**\n * @type {number}\n * @private\n */\n this.position_ = 0;\n};\n\n\n/**\n * @override\n */\nIterator_.prototype.next = function() {\n if (this.position_ === this.hashSet_.size()) {\n throw new NoSuchElementException();\n }\n return this.hashSet_.array_[this.position_++];\n};\n\n\n/**\n * @override\n */\nIterator_.prototype.hasNext = function() {\n if (this.position_ < this.hashSet_.size()) {\n return true;\n } else {\n return false;\n }\n};\n\n\n/**\n * @override\n */\nIterator_.prototype.remove = function() {\n throw new OperationNotSupported();\n};\n","import ArrayList from './ArrayList'\nimport SortedMap from './SortedMap'\nimport HashSet from './HashSet'\n\nconst BLACK = 0\nconst RED = 1\nfunction colorOf (p) { return (p == null ? BLACK : p.color) }\nfunction parentOf (p) { return (p == null ? null : p.parent) }\nfunction setColor (p, c) { if (p !== null) p.color = c }\nfunction leftOf (p) { return (p == null ? null : p.left) }\nfunction rightOf (p) { return (p == null ? null : p.right) }\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/TreeMap.html\n *\n * @extends {SortedMap}\n * @constructor\n * @private\n */\nexport default function TreeMap() {\n /**\n * @type {Object}\n * @private\n */\n this.root_ = null;\n /**\n * @type {number}\n * @private\n */\n this.size_ = 0;\n};\nTreeMap.prototype = new SortedMap();\n\n\n/**\n * @override\n */\nTreeMap.prototype.get = function(key) {\n var p = this.root_;\n while (p !== null) {\n var cmp = key['compareTo'](p.key);\n if (cmp < 0) {\n p = p.left;\n } else if (cmp > 0) {\n p = p.right;\n } else {\n return p.value;\n }\n }\n return null;\n};\n\n\n/**\n * @override\n */\nTreeMap.prototype.put = function(key, value) {\n if (this.root_ === null) {\n this.root_ = {\n key: key,\n value: value,\n left: null,\n right: null,\n parent: null,\n color: BLACK,\n getValue() { return this.value },\n getKey() { return this.key }\n };\n this.size_ = 1;\n return null;\n }\n var t = this.root_, parent, cmp;\n do {\n parent = t;\n cmp = key['compareTo'](t.key);\n if (cmp < 0) {\n t = t.left;\n } else if (cmp > 0) {\n t = t.right;\n } else {\n var oldValue = t.value;\n t.value = value;\n return oldValue;\n }\n } while (t !== null);\n var e = {\n key: key,\n left: null,\n right: null,\n value: value,\n parent: parent,\n color: BLACK,\n getValue() { return this.value },\n getKey() { return this.key }\n };\n if (cmp < 0) {\n parent.left = e;\n } else {\n parent.right = e;\n }\n this.fixAfterInsertion(e);\n this.size_++;\n return null;\n};\n\n\n/**\n * @param {Object} x\n */\nTreeMap.prototype.fixAfterInsertion = function(x) {\n x.color = RED;\n while (x != null && x != this.root_ && x.parent.color == RED) {\n if (parentOf(x) == leftOf(parentOf(parentOf(x)))) {\n var y = rightOf(parentOf(parentOf(x)));\n if (colorOf(y) == RED) {\n setColor(parentOf(x), BLACK);\n setColor(y, BLACK);\n setColor(parentOf(parentOf(x)), RED);\n x = parentOf(parentOf(x));\n } else {\n if (x == rightOf(parentOf(x))) {\n x = parentOf(x);\n this.rotateLeft(x);\n }\n setColor(parentOf(x), BLACK);\n setColor(parentOf(parentOf(x)), RED);\n this.rotateRight(parentOf(parentOf(x)));\n }\n } else {\n var y = leftOf(parentOf(parentOf(x)));\n if (colorOf(y) == RED) {\n setColor(parentOf(x), BLACK);\n setColor(y, BLACK);\n setColor(parentOf(parentOf(x)), RED);\n x = parentOf(parentOf(x));\n } else {\n if (x == leftOf(parentOf(x))) {\n x = parentOf(x);\n this.rotateRight(x);\n }\n setColor(parentOf(x), BLACK);\n setColor(parentOf(parentOf(x)), RED);\n this.rotateLeft(parentOf(parentOf(x)));\n }\n }\n }\n this.root_.color = BLACK;\n};\n\n\n/**\n * @override\n */\nTreeMap.prototype.values = function() {\n var arrayList = new ArrayList();\n var p = this.getFirstEntry();\n if (p !== null) {\n arrayList.add(p.value);\n while ((p = TreeMap.successor(p)) !== null) {\n arrayList.add(p.value);\n }\n }\n return arrayList;\n};\n\n\n/**\n * @override\n */\nTreeMap.prototype.entrySet = function() {\n var hashSet = new HashSet();\n var p = this.getFirstEntry();\n if (p !== null) {\n hashSet.add(p);\n while ((p = TreeMap.successor(p)) !== null) {\n hashSet.add(p);\n }\n }\n return hashSet;\n};\n\n\n/**\n * @param {Object} p\n */\nTreeMap.prototype.rotateLeft = function(p) {\n if (p != null) {\n var r = p.right;\n p.right = r.left;\n if (r.left != null)\n r.left.parent = p;\n r.parent = p.parent;\n if (p.parent == null)\n this.root_ = r;\n else if (p.parent.left == p)\n p.parent.left = r;\n else\n p.parent.right = r;\n r.left = p;\n p.parent = r;\n }\n};\n\n\n/**\n * @param {Object} p\n */\nTreeMap.prototype.rotateRight = function(p) {\n if (p != null) {\n var l = p.left;\n p.left = l.right;\n if (l.right != null) l.right.parent = p;\n l.parent = p.parent;\n if (p.parent == null)\n this.root_ = l;\n else if (p.parent.right == p)\n p.parent.right = l;\n else p.parent.left = l;\n l.right = p;\n p.parent = l;\n }\n};\n\n\n/**\n * @return {Object}\n */\nTreeMap.prototype.getFirstEntry = function() {\n var p = this.root_;\n if (p != null) {\n while (p.left != null) {\n p = p.left;\n }\n }\n return p;\n};\n\n\n/**\n * @param {Object} t\n * @return {Object}\n * @private\n */\nTreeMap.successor = function(t) {\n if (t === null)\n return null;\n else if (t.right !== null) {\n var p = t.right;\n while (p.left !== null) {\n p = p.left;\n }\n return p;\n } else {\n var p = t.parent;\n var ch = t;\n while (p !== null && ch === p.right) {\n ch = p;\n p = p.parent;\n }\n return p;\n }\n};\n\n\n/**\n * @override\n */\nTreeMap.prototype.size = function() {\n return this.size_;\n};\n\n\nTreeMap.prototype.containsKey = function(key) {\n var p = this.root_;\n while (p !== null) {\n var cmp = key['compareTo'](p.key);\n if (cmp < 0) {\n p = p.left;\n } else if (cmp > 0) {\n p = p.right;\n } else {\n return true;\n }\n }\n return false;\n};\n","export default class Lineal {\n\tconstructor() {\n\t\tLineal.constructor_.apply(this, arguments);\n\t}\n\tgetClass() {\n\t\treturn Lineal;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nLineal.constructor_ = function () {};\n","import Set from './Set'\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/SortedSet.html\n *\n * @extends {Set}\n * @constructor\n * @private\n */\nexport default function SortedSet() {};\nSortedSet.prototype = new Set();\n","import Collection from './Collection'\nimport Iterator from './Iterator'\nimport NoSuchElementException from './NoSuchElementException'\nimport OperationNotSupported from './OperationNotSupported'\nimport SortedSet from './SortedSet'\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/TreeSet.html\n *\n * @extends {SortedSet}\n * @constructor\n * @private\n */\nexport default function TreeSet() {\n /**\n * @type {Array}\n * @private\n */\n this.array_ = [];\n\n if (arguments[0] instanceof Collection) {\n this.addAll(arguments[0]);\n }\n};\nTreeSet.prototype = new SortedSet();\n\n\n/**\n * @override\n */\nTreeSet.prototype.contains = function(o) {\n for (var i = 0, len = this.array_.length; i < len; i++) {\n var e = this.array_[i];\n if (e['compareTo'](o) === 0) {\n return true;\n }\n }\n return false;\n};\n\n\n/**\n * @override\n */\nTreeSet.prototype.add = function(o) {\n if (this.contains(o)) {\n return false;\n }\n\n for (var i = 0, len = this.array_.length; i < len; i++) {\n var e = this.array_[i];\n if (e['compareTo'](o) === 1) {\n this.array_.splice(i, 0, o);\n return true;\n }\n }\n\n this.array_.push(o);\n\n return true;\n};\n\n\n/**\n * @override\n */\nTreeSet.prototype.addAll = function(c) {\n for (var i = c.iterator(); i.hasNext();) {\n this.add(i.next());\n }\n return true;\n};\n\n\n/**\n * @override\n */\nTreeSet.prototype.remove = function(e) {\n throw new OperationNotSupported();\n};\n\n\n/**\n * @override\n */\nTreeSet.prototype.size = function() {\n return this.array_.length;\n};\n\n\n/**\n * @override\n */\nTreeSet.prototype.isEmpty = function() {\n return this.array_.length === 0;\n};\n\n\n/**\n * @override\n */\nTreeSet.prototype.toArray = function() {\n var array = [];\n\n for (var i = 0, len = this.array_.length; i < len; i++) {\n array.push(this.array_[i]);\n }\n\n return array;\n};\n\n\n/**\n * @override\n */\nTreeSet.prototype.iterator = function() {\n return new Iterator_(this);\n};\n\n\n\n/**\n * @extends {javascript.util.Iterator}\n * @param {javascript.util.TreeSet} treeSet\n * @constructor\n * @private\n */\nvar Iterator_ = function(treeSet) {\n /**\n * @type {javascript.util.TreeSet}\n * @private\n */\n this.treeSet_ = treeSet;\n /**\n * @type {number}\n * @private\n */\n this.position_ = 0;\n};\n\n\n/**\n * @override\n */\nIterator_.prototype.next = function() {\n if (this.position_ === this.treeSet_.size()) {\n throw new NoSuchElementException();\n }\n return this.treeSet_.array_[this.position_++];\n};\n\n\n/**\n * @override\n */\nIterator_.prototype.hasNext = function() {\n if (this.position_ < this.treeSet_.size()) {\n return true;\n } else {\n return false;\n }\n};\n\n\n/**\n * @override\n */\nIterator_.prototype.remove = function() {\n throw new OperationNotSupported();\n};\n","// shared pointer\nvar i\n// shortcuts\nvar defineProperty = Object.defineProperty\nfunction is (a, b) { return (a === b) || (a !== a && b !== b) } // eslint-disable-line\n\nexport default createCollection({\n // WeakMap#delete(key:void*):boolean\n 'delete': sharedDelete,\n // :was Map#get(key:void*[, d3fault:void*]):void*\n // Map#has(key:void*):boolean\n has: mapHas,\n // Map#get(key:void*):boolean\n get: sharedGet,\n // Map#set(key:void*, value:void*):void\n set: sharedSet,\n // Map#keys(void):Iterator\n keys: sharedKeys,\n // Map#values(void):Iterator\n values: sharedValues,\n // Map#entries(void):Iterator\n entries: mapEntries,\n // Map#forEach(callback:Function, context:void*):void ==> callback.call(context, key, value, mapObject) === not in specs`\n forEach: sharedForEach,\n // Map#clear():\n clear: sharedClear\n})\n\nfunction createCollection (proto, objectOnly) {\n function Collection (a) {\n if (!this || this.constructor !== Collection) return new Collection(a)\n this._keys = []\n this._values = []\n this._itp = [] // iteration pointers\n this.objectOnly = objectOnly\n\n // parse initial iterable argument passed\n if (a) init.call(this, a)\n }\n\n // define size for non object-only collections\n if (!objectOnly) {\n defineProperty(proto, 'size', {\n get: sharedSize\n })\n }\n\n // set prototype\n proto.constructor = Collection\n Collection.prototype = proto\n\n return Collection\n}\n\nfunction init (a) {\n // init Set argument, like `[1,2,3,{}]`\n if (this.add) a.forEach(this.add, this)\n // init Map argument like `[[1,2], [{}, 4]]`\n else a.forEach(function (a) { this.set(a[0], a[1]) }, this)\n}\n\nfunction sharedDelete (key) {\n if (this.has(key)) {\n this._keys.splice(i, 1)\n this._values.splice(i, 1)\n // update iteration pointers\n this._itp.forEach(function (p) { if (i < p[0]) p[0]-- })\n }\n // Aurora here does it while Canary doesn't\n return i > -1\n}\n\nfunction sharedGet (key) {\n return this.has(key) ? this._values[i] : undefined\n}\n\nfunction has (list, key) {\n if (this.objectOnly && key !== Object(key)) throw new TypeError('Invalid value used as weak collection key')\n // NaN or 0 passed\n if (key !== key || key === 0) for (i = list.length; i-- && !is(list[i], key);) {} // eslint-disable-line\n else i = list.indexOf(key)\n return i > -1\n}\n\nfunction mapHas (value) {\n return has.call(this, this._keys, value)\n}\n\nfunction sharedSet (key, value) {\n this.has(key) ? this._values[i] = value : this._values[this._keys.push(key) - 1] = value\n return this\n}\n\nfunction sharedClear () {\n (this._keys || 0).length =\n this._values.length = 0\n}\n\nfunction sharedKeys () {\n return sharedIterator(this._itp, this._keys)\n}\n\nfunction sharedValues () {\n return sharedIterator(this._itp, this._values)\n}\n\nfunction mapEntries () {\n return sharedIterator(this._itp, this._keys, this._values)\n}\n\nfunction sharedIterator (itp, array, array2) {\n var p = [0]\n var done = false\n itp.push(p)\n return {\n next: function () {\n var v\n var k = p[0]\n if (!done && k < array.length) {\n v = array2 ? [array[k], array2[k]] : array[k]\n p[0]++\n } else {\n done = true\n itp.splice(itp.indexOf(p), 1)\n }\n return { done: done, value: v }\n }\n }\n}\n\nfunction sharedSize () {\n return this._values.length\n}\n\nfunction sharedForEach (callback, context) {\n var it = this.entries()\n for (;;) {\n var r = it.next()\n if (r.done) break\n callback.call(context, r.value[1], r.value[0], this)\n }\n}\n","import ArrayList from './ArrayList'\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/Arrays.html\n *\n * @constructor\n * @private\n */\nexport default function Arrays() {};\n\n/**\n */\nArrays.sort = function() {\n var a = arguments[0], i, t, comparator, compare;\n if (arguments.length === 1) {\n compare = function(a, b) {\n return a.compareTo(b);\n }\n a.sort(compare);\n return;\n } else if (arguments.length === 2) {\n comparator = arguments[1];\n compare = function(a, b) {\n return comparator['compare'](a, b);\n };\n a.sort(compare);\n } else if (arguments.length === 3) {\n t = a.slice(arguments[1], arguments[2]);\n t.sort();\n var r = a.slice(0, arguments[1]).concat(t, a.slice(arguments[2], a.length));\n a.splice(0, a.length);\n for (i = 0; i < r.length; i++) {\n a.push(r[i]);\n }\n return;\n } else if (arguments.length === 4) {\n t = a.slice(arguments[1], arguments[2]);\n comparator = arguments[3];\n compare = function(a, b) {\n return comparator['compare'](a, b);\n };\n t.sort(compare);\n r = a.slice(0, arguments[1]).concat(t, a.slice(arguments[2], a.length));\n a.splice(0, a.length);\n for (i = 0; i < r.length; i++) {\n a.push(r[i]);\n }\n return;\n }\n};\n\n\n/**\n * @param {Array} array\n * @return {ArrayList}\n */\nArrays.asList = function(array) {\n var arrayList = new ArrayList();\n for (var i = 0, len = array.length; i < len; i++) {\n arrayList.add(array[i]);\n }\n return arrayList;\n};\n","import IllegalArgumentException from '../../../../java/lang/IllegalArgumentException';\nimport Character from '../../../../java/lang/Character';\nexport default class Dimension {\n\tconstructor() {\n\t\tDimension.constructor_.apply(this, arguments);\n\t}\n\tstatic toDimensionSymbol(dimensionValue) {\n\t\tswitch (dimensionValue) {\n\t\t\tcase Dimension.FALSE:\n\t\t\t\treturn Dimension.SYM_FALSE;\n\t\t\tcase Dimension.TRUE:\n\t\t\t\treturn Dimension.SYM_TRUE;\n\t\t\tcase Dimension.DONTCARE:\n\t\t\t\treturn Dimension.SYM_DONTCARE;\n\t\t\tcase Dimension.P:\n\t\t\t\treturn Dimension.SYM_P;\n\t\t\tcase Dimension.L:\n\t\t\t\treturn Dimension.SYM_L;\n\t\t\tcase Dimension.A:\n\t\t\t\treturn Dimension.SYM_A;\n\t\t}\n\t\tthrow new IllegalArgumentException(\"Unknown dimension value: \" + dimensionValue);\n\t}\n\tstatic toDimensionValue(dimensionSymbol) {\n\t\tswitch (Character.toUpperCase(dimensionSymbol)) {\n\t\t\tcase Dimension.SYM_FALSE:\n\t\t\t\treturn Dimension.FALSE;\n\t\t\tcase Dimension.SYM_TRUE:\n\t\t\t\treturn Dimension.TRUE;\n\t\t\tcase Dimension.SYM_DONTCARE:\n\t\t\t\treturn Dimension.DONTCARE;\n\t\t\tcase Dimension.SYM_P:\n\t\t\t\treturn Dimension.P;\n\t\t\tcase Dimension.SYM_L:\n\t\t\t\treturn Dimension.L;\n\t\t\tcase Dimension.SYM_A:\n\t\t\t\treturn Dimension.A;\n\t\t}\n\t\tthrow new IllegalArgumentException(\"Unknown dimension symbol: \" + dimensionSymbol);\n\t}\n\tgetClass() {\n\t\treturn Dimension;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nDimension.constructor_ = function () {};\nDimension.P = 0;\nDimension.L = 1;\nDimension.A = 2;\nDimension.FALSE = -1;\nDimension.TRUE = -2;\nDimension.DONTCARE = -3;\nDimension.SYM_FALSE = 'F';\nDimension.SYM_TRUE = 'T';\nDimension.SYM_DONTCARE = '*';\nDimension.SYM_P = '0';\nDimension.SYM_L = '1';\nDimension.SYM_A = '2';\n","export default class GeometryFilter {\n\tconstructor() {\n\t\tGeometryFilter.constructor_.apply(this, arguments);\n\t}\n\tfilter(geom) {}\n\tgetClass() {\n\t\treturn GeometryFilter;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nGeometryFilter.constructor_ = function () {};\n","export default class CoordinateSequenceFilter {\n\tconstructor() {\n\t\tCoordinateSequenceFilter.constructor_.apply(this, arguments);\n\t}\n\tfilter(seq, i) {}\n\tisDone() {}\n\tisGeometryChanged() {}\n\tgetClass() {\n\t\treturn CoordinateSequenceFilter;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nCoordinateSequenceFilter.constructor_ = function () {};\n","import TreeSet from '../../../../java/util/TreeSet';\nimport Geometry from './Geometry';\nimport Arrays from '../../../../java/util/Arrays';\nimport CoordinateFilter from './CoordinateFilter';\nimport hasInterface from '../../../../hasInterface';\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException';\nimport GeometryComponentFilter from './GeometryComponentFilter';\nimport Dimension from './Dimension';\nimport GeometryFilter from './GeometryFilter';\nimport CoordinateSequenceFilter from './CoordinateSequenceFilter';\nimport Envelope from './Envelope';\nimport Assert from '../util/Assert';\nexport default class GeometryCollection extends Geometry {\n\tconstructor() {\n\t\tsuper();\n\t\tGeometryCollection.constructor_.apply(this, arguments);\n\t}\n\tcomputeEnvelopeInternal() {\n\t\tvar envelope = new Envelope();\n\t\tfor (var i = 0; i < this._geometries.length; i++) {\n\t\t\tenvelope.expandToInclude(this._geometries[i].getEnvelopeInternal());\n\t\t}\n\t\treturn envelope;\n\t}\n\tgetGeometryN(n) {\n\t\treturn this._geometries[n];\n\t}\n\tgetCoordinates() {\n\t\tvar coordinates = new Array(this.getNumPoints()).fill(null);\n\t\tvar k = -1;\n\t\tfor (var i = 0; i < this._geometries.length; i++) {\n\t\t\tvar childCoordinates = this._geometries[i].getCoordinates();\n\t\t\tfor (var j = 0; j < childCoordinates.length; j++) {\n\t\t\t\tk++;\n\t\t\t\tcoordinates[k] = childCoordinates[j];\n\t\t\t}\n\t\t}\n\t\treturn coordinates;\n\t}\n\tgetArea() {\n\t\tvar area = 0.0;\n\t\tfor (var i = 0; i < this._geometries.length; i++) {\n\t\t\tarea += this._geometries[i].getArea();\n\t\t}\n\t\treturn area;\n\t}\n\tequalsExact() {\n\t\tif (arguments.length === 2 && (typeof arguments[1] === \"number\" && arguments[0] instanceof Geometry)) {\n\t\t\tlet other = arguments[0], tolerance = arguments[1];\n\t\t\tif (!this.isEquivalentClass(other)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar otherCollection = other;\n\t\t\tif (this._geometries.length !== otherCollection._geometries.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (var i = 0; i < this._geometries.length; i++) {\n\t\t\t\tif (!this._geometries[i].equalsExact(otherCollection._geometries[i], tolerance)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} else return super.equalsExact.apply(this, arguments);\n\t}\n\tnormalize() {\n\t\tfor (var i = 0; i < this._geometries.length; i++) {\n\t\t\tthis._geometries[i].normalize();\n\t\t}\n\t\tArrays.sort(this._geometries);\n\t}\n\tgetCoordinate() {\n\t\tif (this.isEmpty()) return null;\n\t\treturn this._geometries[0].getCoordinate();\n\t}\n\tgetBoundaryDimension() {\n\t\tvar dimension = Dimension.FALSE;\n\t\tfor (var i = 0; i < this._geometries.length; i++) {\n\t\t\tdimension = Math.max(dimension, this._geometries[i].getBoundaryDimension());\n\t\t}\n\t\treturn dimension;\n\t}\n\tgetTypeCode() {\n\t\treturn Geometry.TYPECODE_GEOMETRYCOLLECTION;\n\t}\n\tgetDimension() {\n\t\tvar dimension = Dimension.FALSE;\n\t\tfor (var i = 0; i < this._geometries.length; i++) {\n\t\t\tdimension = Math.max(dimension, this._geometries[i].getDimension());\n\t\t}\n\t\treturn dimension;\n\t}\n\tgetLength() {\n\t\tvar sum = 0.0;\n\t\tfor (var i = 0; i < this._geometries.length; i++) {\n\t\t\tsum += this._geometries[i].getLength();\n\t\t}\n\t\treturn sum;\n\t}\n\tgetNumPoints() {\n\t\tvar numPoints = 0;\n\t\tfor (var i = 0; i < this._geometries.length; i++) {\n\t\t\tnumPoints += this._geometries[i].getNumPoints();\n\t\t}\n\t\treturn numPoints;\n\t}\n\tgetNumGeometries() {\n\t\treturn this._geometries.length;\n\t}\n\treverse() {\n\t\tvar n = this._geometries.length;\n\t\tvar revGeoms = new Array(n).fill(null);\n\t\tfor (var i = 0; i < this._geometries.length; i++) {\n\t\t\trevGeoms[i] = this._geometries[i].reverse();\n\t\t}\n\t\treturn this.getFactory().createGeometryCollection(revGeoms);\n\t}\n\tcompareToSameClass() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet o = arguments[0];\n\t\t\tvar theseElements = new TreeSet(Arrays.asList(this._geometries));\n\t\t\tvar otherElements = new TreeSet(Arrays.asList(o._geometries));\n\t\t\treturn this.compare(theseElements, otherElements);\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet o = arguments[0], comp = arguments[1];\n\t\t\tvar gc = o;\n\t\t\tvar n1 = this.getNumGeometries();\n\t\t\tvar n2 = gc.getNumGeometries();\n\t\t\tvar i = 0;\n\t\t\twhile (i < n1 && i < n2) {\n\t\t\t\tvar thisGeom = this.getGeometryN(i);\n\t\t\t\tvar otherGeom = gc.getGeometryN(i);\n\t\t\t\tvar holeComp = thisGeom.compareToSameClass(otherGeom, comp);\n\t\t\t\tif (holeComp !== 0) return holeComp;\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif (i < n1) return 1;\n\t\t\tif (i < n2) return -1;\n\t\t\treturn 0;\n\t\t}\n\t}\n\tapply() {\n\t\tif (hasInterface(arguments[0], CoordinateFilter)) {\n\t\t\tlet filter = arguments[0];\n\t\t\tfor (var i = 0; i < this._geometries.length; i++) {\n\t\t\t\tthis._geometries[i].apply(filter);\n\t\t\t}\n\t\t} else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {\n\t\t\tlet filter = arguments[0];\n\t\t\tif (this._geometries.length === 0) return null;\n\t\t\tfor (var i = 0; i < this._geometries.length; i++) {\n\t\t\t\tthis._geometries[i].apply(filter);\n\t\t\t\tif (filter.isDone()) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (filter.isGeometryChanged()) this.geometryChanged();\n\t\t} else if (hasInterface(arguments[0], GeometryFilter)) {\n\t\t\tlet filter = arguments[0];\n\t\t\tfilter.filter(this);\n\t\t\tfor (var i = 0; i < this._geometries.length; i++) {\n\t\t\t\tthis._geometries[i].apply(filter);\n\t\t\t}\n\t\t} else if (hasInterface(arguments[0], GeometryComponentFilter)) {\n\t\t\tlet filter = arguments[0];\n\t\t\tfilter.filter(this);\n\t\t\tfor (var i = 0; i < this._geometries.length; i++) {\n\t\t\t\tthis._geometries[i].apply(filter);\n\t\t\t}\n\t\t}\n\t}\n\tgetBoundary() {\n\t\tthis.checkNotGeometryCollection(this);\n\t\tAssert.shouldNeverReachHere();\n\t\treturn null;\n\t}\n\tgetGeometryType() {\n\t\treturn Geometry.TYPENAME_GEOMETRYCOLLECTION;\n\t}\n\tcopy() {\n\t\tvar geometries = new Array(this._geometries.length).fill(null);\n\t\tfor (var i = 0; i < geometries.length; i++) {\n\t\t\tgeometries[i] = this._geometries[i].copy();\n\t\t}\n\t\treturn new GeometryCollection(geometries, this._factory);\n\t}\n\tisEmpty() {\n\t\tfor (var i = 0; i < this._geometries.length; i++) {\n\t\t\tif (!this._geometries[i].isEmpty()) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\tgetClass() {\n\t\treturn GeometryCollection;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nGeometryCollection.constructor_ = function () {\n\tthis._geometries = null;\n\tif (arguments.length === 0) {} else if (arguments.length === 2) {\n\t\tlet geometries = arguments[0], factory = arguments[1];\n\t\tGeometry.constructor_.call(this, factory);\n\t\tif (geometries === null) {\n\t\t\tgeometries = [];\n\t\t}\n\t\tif (Geometry.hasNullElements(geometries)) {\n\t\t\tthrow new IllegalArgumentException(\"geometries must not contain null elements\");\n\t\t}\n\t\tthis._geometries = geometries;\n\t}\n};\nGeometryCollection.serialVersionUID = -5694727726395021467;\n","import Geometry from './Geometry';\nimport BoundaryOp from '../operation/BoundaryOp';\nimport Lineal from './Lineal';\nimport GeometryCollection from './GeometryCollection';\nimport Dimension from './Dimension';\nexport default class MultiLineString extends GeometryCollection {\n\tconstructor() {\n\t\tsuper();\n\t\tMultiLineString.constructor_.apply(this, arguments);\n\t}\n\tequalsExact() {\n\t\tif (arguments.length === 2 && (typeof arguments[1] === \"number\" && arguments[0] instanceof Geometry)) {\n\t\t\tlet other = arguments[0], tolerance = arguments[1];\n\t\t\tif (!this.isEquivalentClass(other)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn super.equalsExact.call(this, other, tolerance);\n\t\t} else return super.equalsExact.apply(this, arguments);\n\t}\n\tgetBoundaryDimension() {\n\t\tif (this.isClosed()) {\n\t\t\treturn Dimension.FALSE;\n\t\t}\n\t\treturn 0;\n\t}\n\tisClosed() {\n\t\tif (this.isEmpty()) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (var i = 0; i < this._geometries.length; i++) {\n\t\t\tif (!this._geometries[i].isClosed()) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\tgetTypeCode() {\n\t\treturn Geometry.TYPECODE_MULTILINESTRING;\n\t}\n\tgetDimension() {\n\t\treturn 1;\n\t}\n\treverse() {\n\t\tvar nLines = this._geometries.length;\n\t\tvar revLines = new Array(nLines).fill(null);\n\t\tfor (var i = 0; i < this._geometries.length; i++) {\n\t\t\trevLines[nLines - 1 - i] = this._geometries[i].reverse();\n\t\t}\n\t\treturn this.getFactory().createMultiLineString(revLines);\n\t}\n\tgetBoundary() {\n\t\treturn new BoundaryOp(this).getBoundary();\n\t}\n\tgetGeometryType() {\n\t\treturn Geometry.TYPENAME_MULTILINESTRING;\n\t}\n\tcopy() {\n\t\tvar lineStrings = new Array(this._geometries.length).fill(null);\n\t\tfor (var i = 0; i < lineStrings.length; i++) {\n\t\t\tlineStrings[i] = this._geometries[i].copy();\n\t\t}\n\t\treturn new MultiLineString(lineStrings, this._factory);\n\t}\n\tgetClass() {\n\t\treturn MultiLineString;\n\t}\n\tget interfaces_() {\n\t\treturn [Lineal];\n\t}\n}\nMultiLineString.constructor_ = function () {\n\tlet lineStrings = arguments[0], factory = arguments[1];\n\tGeometryCollection.constructor_.call(this, lineStrings, factory);\n};\nMultiLineString.serialVersionUID = 8166665132445433741;\n","import LineString from '../geom/LineString';\nimport BoundaryNodeRule from '../algorithm/BoundaryNodeRule';\nimport CoordinateArrays from '../geom/CoordinateArrays';\nimport ArrayList from '../../../../java/util/ArrayList';\nimport TreeMap from '../../../../java/util/TreeMap';\nimport MultiLineString from '../geom/MultiLineString';\nexport default class BoundaryOp {\n\tconstructor() {\n\t\tBoundaryOp.constructor_.apply(this, arguments);\n\t}\n\tstatic getBoundary() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet g = arguments[0];\n\t\t\tvar bop = new BoundaryOp(g);\n\t\t\treturn bop.getBoundary();\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet g = arguments[0], bnRule = arguments[1];\n\t\t\tvar bop = new BoundaryOp(g, bnRule);\n\t\t\treturn bop.getBoundary();\n\t\t}\n\t}\n\tboundaryMultiLineString(mLine) {\n\t\tif (this._geom.isEmpty()) {\n\t\t\treturn this.getEmptyMultiPoint();\n\t\t}\n\t\tvar bdyPts = this.computeBoundaryCoordinates(mLine);\n\t\tif (bdyPts.length === 1) {\n\t\t\treturn this._geomFact.createPoint(bdyPts[0]);\n\t\t}\n\t\treturn this._geomFact.createMultiPointFromCoords(bdyPts);\n\t}\n\tgetBoundary() {\n\t\tif (this._geom instanceof LineString) return this.boundaryLineString(this._geom);\n\t\tif (this._geom instanceof MultiLineString) return this.boundaryMultiLineString(this._geom);\n\t\treturn this._geom.getBoundary();\n\t}\n\tboundaryLineString(line) {\n\t\tif (this._geom.isEmpty()) {\n\t\t\treturn this.getEmptyMultiPoint();\n\t\t}\n\t\tif (line.isClosed()) {\n\t\t\tvar closedEndpointOnBoundary = this._bnRule.isInBoundary(2);\n\t\t\tif (closedEndpointOnBoundary) {\n\t\t\t\treturn line.getStartPoint();\n\t\t\t} else {\n\t\t\t\treturn this._geomFact.createMultiPoint();\n\t\t\t}\n\t\t}\n\t\treturn this._geomFact.createMultiPoint([line.getStartPoint(), line.getEndPoint()]);\n\t}\n\tgetEmptyMultiPoint() {\n\t\treturn this._geomFact.createMultiPoint();\n\t}\n\tcomputeBoundaryCoordinates(mLine) {\n\t\tvar bdyPts = new ArrayList();\n\t\tthis._endpointMap = new TreeMap();\n\t\tfor (var i = 0; i < mLine.getNumGeometries(); i++) {\n\t\t\tvar line = mLine.getGeometryN(i);\n\t\t\tif (line.getNumPoints() === 0) continue;\n\t\t\tthis.addEndpoint(line.getCoordinateN(0));\n\t\t\tthis.addEndpoint(line.getCoordinateN(line.getNumPoints() - 1));\n\t\t}\n\t\tfor (var it = this._endpointMap.entrySet().iterator(); it.hasNext(); ) {\n\t\t\tvar entry = it.next();\n\t\t\tvar counter = entry.getValue();\n\t\t\tvar valence = counter.count;\n\t\t\tif (this._bnRule.isInBoundary(valence)) {\n\t\t\t\tbdyPts.add(entry.getKey());\n\t\t\t}\n\t\t}\n\t\treturn CoordinateArrays.toCoordinateArray(bdyPts);\n\t}\n\taddEndpoint(pt) {\n\t\tvar counter = this._endpointMap.get(pt);\n\t\tif (counter === null) {\n\t\t\tcounter = new Counter();\n\t\t\tthis._endpointMap.put(pt, counter);\n\t\t}\n\t\tcounter.count++;\n\t}\n\tgetClass() {\n\t\treturn BoundaryOp;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nBoundaryOp.constructor_ = function () {\n\tthis._geom = null;\n\tthis._geomFact = null;\n\tthis._bnRule = null;\n\tthis._endpointMap = null;\n\tif (arguments.length === 1) {\n\t\tlet geom = arguments[0];\n\t\tBoundaryOp.constructor_.call(this, geom, BoundaryNodeRule.MOD2_BOUNDARY_RULE);\n\t} else if (arguments.length === 2) {\n\t\tlet geom = arguments[0], bnRule = arguments[1];\n\t\tthis._geom = geom;\n\t\tthis._geomFact = geom.getFactory();\n\t\tthis._bnRule = bnRule;\n\t}\n};\nclass Counter {\n\tconstructor() {\n\t\tCounter.constructor_.apply(this, arguments);\n\t}\n\tgetClass() {\n\t\treturn Counter;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nCounter.constructor_ = function () {\n\tthis.count = null;\n};\n","import Coordinate from '../geom/Coordinate';\nexport default class Length {\n\tconstructor() {\n\t\tLength.constructor_.apply(this, arguments);\n\t}\n\tstatic ofLine(pts) {\n\t\tvar n = pts.size();\n\t\tif (n <= 1) return 0.0;\n\t\tvar len = 0.0;\n\t\tvar p = new Coordinate();\n\t\tpts.getCoordinate(0, p);\n\t\tvar x0 = p.x;\n\t\tvar y0 = p.y;\n\t\tfor (var i = 1; i < n; i++) {\n\t\t\tpts.getCoordinate(i, p);\n\t\t\tvar x1 = p.x;\n\t\t\tvar y1 = p.y;\n\t\t\tvar dx = x1 - x0;\n\t\t\tvar dy = y1 - y0;\n\t\t\tlen += Math.sqrt(dx * dx + dy * dy);\n\t\t\tx0 = x1;\n\t\t\ty0 = y1;\n\t\t}\n\t\treturn len;\n\t}\n\tgetClass() {\n\t\treturn Length;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nLength.constructor_ = function () {};\n","export default function PrintStream () {}\n","export default function StringReader () {}\n","export default function ByteArrayOutputStream () {}\n","export default function IOException () {}\n","export default function LineNumberReader () {}\n","import PrintStream from '../../../../java/io/PrintStream';\nimport StringReader from '../../../../java/io/StringReader';\nimport DecimalFormat from '../../../../java/text/DecimalFormat';\nimport System from '../../../../java/lang/System';\nimport ArrayList from '../../../../java/util/ArrayList';\nimport ByteArrayOutputStream from '../../../../java/io/ByteArrayOutputStream';\nimport Assert from './Assert';\nimport IOException from '../../../../java/io/IOException';\nimport LineNumberReader from '../../../../java/io/LineNumberReader';\nexport default class StringUtil {\n\tconstructor() {\n\t\tStringUtil.constructor_.apply(this, arguments);\n\t}\n\tstatic chars(c, n) {\n\t\tvar ch = new Array(n).fill(null);\n\t\tfor (var i = 0; i < n; i++) {\n\t\t\tch[i] = c;\n\t\t}\n\t\treturn new String(ch);\n\t}\n\tstatic getStackTrace() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet t = arguments[0];\n\t\t\tvar os = new ByteArrayOutputStream();\n\t\t\tvar ps = new PrintStream(os);\n\t\t\tt.printStackTrace(ps);\n\t\t\treturn os.toString();\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet t = arguments[0], depth = arguments[1];\n\t\t\tvar stackTrace = \"\";\n\t\t\tvar stringReader = new StringReader(StringUtil.getStackTrace(t));\n\t\t\tvar lineNumberReader = new LineNumberReader(stringReader);\n\t\t\tfor (var i = 0; i < depth; i++) {\n\t\t\t\ttry {\n\t\t\t\t\tstackTrace += lineNumberReader.readLine() + StringUtil.NEWLINE;\n\t\t\t\t} catch (e) {\n\t\t\t\t\tif (e instanceof IOException) {\n\t\t\t\t\t\tAssert.shouldNeverReachHere();\n\t\t\t\t\t} else throw e;\n\t\t\t\t} finally {}\n\t\t\t}\n\t\t\treturn stackTrace;\n\t\t}\n\t}\n\tstatic split(s, separator) {\n\t\tvar separatorlen = separator.length;\n\t\tvar tokenList = new ArrayList();\n\t\tvar tmpString = \"\" + s;\n\t\tvar pos = tmpString.indexOf(separator);\n\t\twhile (pos >= 0) {\n\t\t\tvar token = tmpString.substring(0, pos);\n\t\t\ttokenList.add(token);\n\t\t\ttmpString = tmpString.substring(pos + separatorlen);\n\t\t\tpos = tmpString.indexOf(separator);\n\t\t}\n\t\tif (tmpString.length > 0) tokenList.add(tmpString);\n\t\tvar res = new Array(tokenList.size()).fill(null);\n\t\tfor (var i = 0; i < res.length; i++) {\n\t\t\tres[i] = tokenList.get(i);\n\t\t}\n\t\treturn res;\n\t}\n\tstatic toString() {\n\t\tif (arguments.length === 1 && typeof arguments[0] === \"number\") {\n\t\t\tlet d = arguments[0];\n\t\t\treturn StringUtil.SIMPLE_ORDINATE_FORMAT.format(d);\n\t\t}\n\t}\n\tstatic spaces(n) {\n\t\treturn StringUtil.chars(' ', n);\n\t}\n\tgetClass() {\n\t\treturn StringUtil;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nStringUtil.constructor_ = function () {};\nStringUtil.NEWLINE = System.getProperty(\"line.separator\");\nStringUtil.SIMPLE_ORDINATE_FORMAT = new DecimalFormat(\"0.#\");\n","export default function StringBuilder (str) {\n this.str = str\n }\n \n StringBuilder.prototype.append = function (e) {\n this.str += e\n }\n \n StringBuilder.prototype.setCharAt = function (i, c) {\n this.str = this.str.substr(0, i) + c + this.str.substr(i + 1)\n }\n \n StringBuilder.prototype.toString = function (e) {\n return this.str\n }\n ","export default function DecimalFormat () {}\n","import hasInterface from '../../../../hasInterface';\nimport StringUtil from '../util/StringUtil';\nimport Double from '../../../../java/lang/Double';\nimport CoordinateSequence from './CoordinateSequence';\nimport StringBuilder from '../../../../java/lang/StringBuilder';\nexport default class CoordinateSequences {\n\tconstructor() {\n\t\tCoordinateSequences.constructor_.apply(this, arguments);\n\t}\n\tstatic copyCoord(src, srcPos, dest, destPos) {\n\t\tvar minDim = Math.min(src.getDimension(), dest.getDimension());\n\t\tfor (var dim = 0; dim < minDim; dim++) {\n\t\t\tdest.setOrdinate(destPos, dim, src.getOrdinate(srcPos, dim));\n\t\t}\n\t}\n\tstatic isRing(seq) {\n\t\tvar n = seq.size();\n\t\tif (n === 0) return true;\n\t\tif (n <= 3) return false;\n\t\treturn seq.getOrdinate(0, CoordinateSequence.X) === seq.getOrdinate(n - 1, CoordinateSequence.X) && seq.getOrdinate(0, CoordinateSequence.Y) === seq.getOrdinate(n - 1, CoordinateSequence.Y);\n\t}\n\tstatic isEqual(cs1, cs2) {\n\t\tvar cs1Size = cs1.size();\n\t\tvar cs2Size = cs2.size();\n\t\tif (cs1Size !== cs2Size) return false;\n\t\tvar dim = Math.min(cs1.getDimension(), cs2.getDimension());\n\t\tfor (var i = 0; i < cs1Size; i++) {\n\t\t\tfor (var d = 0; d < dim; d++) {\n\t\t\t\tvar v1 = cs1.getOrdinate(i, d);\n\t\t\t\tvar v2 = cs2.getOrdinate(i, d);\n\t\t\t\tif (cs1.getOrdinate(i, d) === cs2.getOrdinate(i, d)) continue;\n\t\t\t\tif (Double.isNaN(v1) && Double.isNaN(v2)) continue;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\tstatic extend(fact, seq, size) {\n\t\tvar newseq = fact.create(size, seq.getDimension());\n\t\tvar n = seq.size();\n\t\tCoordinateSequences.copy(seq, 0, newseq, 0, n);\n\t\tif (n > 0) {\n\t\t\tfor (var i = n; i < size; i++) CoordinateSequences.copy(seq, n - 1, newseq, i, 1);\n\t\t}\n\t\treturn newseq;\n\t}\n\tstatic reverse(seq) {\n\t\tvar last = seq.size() - 1;\n\t\tvar mid = Math.trunc(last / 2);\n\t\tfor (var i = 0; i <= mid; i++) {\n\t\t\tCoordinateSequences.swap(seq, i, last - i);\n\t\t}\n\t}\n\tstatic swap(seq, i, j) {\n\t\tif (i === j) return null;\n\t\tfor (var dim = 0; dim < seq.getDimension(); dim++) {\n\t\t\tvar tmp = seq.getOrdinate(i, dim);\n\t\t\tseq.setOrdinate(i, dim, seq.getOrdinate(j, dim));\n\t\t\tseq.setOrdinate(j, dim, tmp);\n\t\t}\n\t}\n\tstatic copy(src, srcPos, dest, destPos, length) {\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tCoordinateSequences.copyCoord(src, srcPos + i, dest, destPos + i);\n\t\t}\n\t}\n\tstatic toString() {\n\t\tif (arguments.length === 1 && hasInterface(arguments[0], CoordinateSequence)) {\n\t\t\tlet cs = arguments[0];\n\t\t\tvar size = cs.size();\n\t\t\tif (size === 0) return \"()\";\n\t\t\tvar dim = cs.getDimension();\n\t\t\tvar builder = new StringBuilder();\n\t\t\tbuilder.append('(');\n\t\t\tfor (var i = 0; i < size; i++) {\n\t\t\t\tif (i > 0) builder.append(\" \");\n\t\t\t\tfor (var d = 0; d < dim; d++) {\n\t\t\t\t\tif (d > 0) builder.append(\",\");\n\t\t\t\t\tbuilder.append(StringUtil.toString(cs.getOrdinate(i, d)));\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuilder.append(')');\n\t\t\treturn builder.toString();\n\t\t}\n\t}\n\tstatic ensureValidRing(fact, seq) {\n\t\tvar n = seq.size();\n\t\tif (n === 0) return seq;\n\t\tif (n <= 3) return CoordinateSequences.createClosedRing(fact, seq, 4);\n\t\tvar isClosed = seq.getOrdinate(0, CoordinateSequence.X) === seq.getOrdinate(n - 1, CoordinateSequence.X) && seq.getOrdinate(0, CoordinateSequence.Y) === seq.getOrdinate(n - 1, CoordinateSequence.Y);\n\t\tif (isClosed) return seq;\n\t\treturn CoordinateSequences.createClosedRing(fact, seq, n + 1);\n\t}\n\tstatic createClosedRing(fact, seq, size) {\n\t\tvar newseq = fact.create(size, seq.getDimension());\n\t\tvar n = seq.size();\n\t\tCoordinateSequences.copy(seq, 0, newseq, 0, n);\n\t\tfor (var i = n; i < size; i++) CoordinateSequences.copy(seq, 0, newseq, i, 1);\n\t\treturn newseq;\n\t}\n\tgetClass() {\n\t\treturn CoordinateSequences;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nCoordinateSequences.constructor_ = function () {};\n","import Geometry from './Geometry';\nimport CoordinateFilter from './CoordinateFilter';\nimport hasInterface from '../../../../hasInterface';\nimport BoundaryOp from '../operation/BoundaryOp';\nimport Length from '../algorithm/Length';\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException';\nimport Lineal from './Lineal';\nimport CoordinateSequences from './CoordinateSequences';\nimport GeometryComponentFilter from './GeometryComponentFilter';\nimport Dimension from './Dimension';\nimport GeometryFilter from './GeometryFilter';\nimport CoordinateSequenceFilter from './CoordinateSequenceFilter';\nimport Envelope from './Envelope';\nexport default class LineString extends Geometry {\n\tconstructor() {\n\t\tsuper();\n\t\tLineString.constructor_.apply(this, arguments);\n\t}\n\tcomputeEnvelopeInternal() {\n\t\tif (this.isEmpty()) {\n\t\t\treturn new Envelope();\n\t\t}\n\t\treturn this._points.expandEnvelope(new Envelope());\n\t}\n\tisRing() {\n\t\treturn this.isClosed() && this.isSimple();\n\t}\n\tgetCoordinates() {\n\t\treturn this._points.toCoordinateArray();\n\t}\n\tequalsExact() {\n\t\tif (arguments.length === 2 && (typeof arguments[1] === \"number\" && arguments[0] instanceof Geometry)) {\n\t\t\tlet other = arguments[0], tolerance = arguments[1];\n\t\t\tif (!this.isEquivalentClass(other)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar otherLineString = other;\n\t\t\tif (this._points.size() !== otherLineString._points.size()) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (var i = 0; i < this._points.size(); i++) {\n\t\t\t\tif (!this.equal(this._points.getCoordinate(i), otherLineString._points.getCoordinate(i), tolerance)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} else return super.equalsExact.apply(this, arguments);\n\t}\n\tnormalize() {\n\t\tfor (var i = 0; i < Math.trunc(this._points.size() / 2); i++) {\n\t\t\tvar j = this._points.size() - 1 - i;\n\t\t\tif (!this._points.getCoordinate(i).equals(this._points.getCoordinate(j))) {\n\t\t\t\tif (this._points.getCoordinate(i).compareTo(this._points.getCoordinate(j)) > 0) {\n\t\t\t\t\tvar copy = this._points.copy();\n\t\t\t\t\tCoordinateSequences.reverse(copy);\n\t\t\t\t\tthis._points = copy;\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t}\n\tgetCoordinate() {\n\t\tif (this.isEmpty()) return null;\n\t\treturn this._points.getCoordinate(0);\n\t}\n\tgetBoundaryDimension() {\n\t\tif (this.isClosed()) {\n\t\t\treturn Dimension.FALSE;\n\t\t}\n\t\treturn 0;\n\t}\n\tisClosed() {\n\t\tif (this.isEmpty()) {\n\t\t\treturn false;\n\t\t}\n\t\treturn this.getCoordinateN(0).equals2D(this.getCoordinateN(this.getNumPoints() - 1));\n\t}\n\tgetEndPoint() {\n\t\tif (this.isEmpty()) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.getPointN(this.getNumPoints() - 1);\n\t}\n\tgetTypeCode() {\n\t\treturn Geometry.TYPECODE_LINESTRING;\n\t}\n\tgetDimension() {\n\t\treturn 1;\n\t}\n\tgetLength() {\n\t\treturn Length.ofLine(this._points);\n\t}\n\tgetNumPoints() {\n\t\treturn this._points.size();\n\t}\n\treverse() {\n\t\tvar seq = this._points.copy();\n\t\tCoordinateSequences.reverse(seq);\n\t\tvar revLine = this.getFactory().createLineString(seq);\n\t\treturn revLine;\n\t}\n\tcompareToSameClass() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet o = arguments[0];\n\t\t\tvar line = o;\n\t\t\tvar i = 0;\n\t\t\tvar j = 0;\n\t\t\twhile (i < this._points.size() && j < line._points.size()) {\n\t\t\t\tvar comparison = this._points.getCoordinate(i).compareTo(line._points.getCoordinate(j));\n\t\t\t\tif (comparison !== 0) {\n\t\t\t\t\treturn comparison;\n\t\t\t\t}\n\t\t\t\ti++;\n\t\t\t\tj++;\n\t\t\t}\n\t\t\tif (i < this._points.size()) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tif (j < line._points.size()) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\treturn 0;\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet o = arguments[0], comp = arguments[1];\n\t\t\tvar line = o;\n\t\t\treturn comp.compare(this._points, line._points);\n\t\t}\n\t}\n\tapply() {\n\t\tif (hasInterface(arguments[0], CoordinateFilter)) {\n\t\t\tlet filter = arguments[0];\n\t\t\tfor (var i = 0; i < this._points.size(); i++) {\n\t\t\t\tfilter.filter(this._points.getCoordinate(i));\n\t\t\t}\n\t\t} else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {\n\t\t\tlet filter = arguments[0];\n\t\t\tif (this._points.size() === 0) return null;\n\t\t\tfor (var i = 0; i < this._points.size(); i++) {\n\t\t\t\tfilter.filter(this._points, i);\n\t\t\t\tif (filter.isDone()) break;\n\t\t\t}\n\t\t\tif (filter.isGeometryChanged()) this.geometryChanged();\n\t\t} else if (hasInterface(arguments[0], GeometryFilter)) {\n\t\t\tlet filter = arguments[0];\n\t\t\tfilter.filter(this);\n\t\t} else if (hasInterface(arguments[0], GeometryComponentFilter)) {\n\t\t\tlet filter = arguments[0];\n\t\t\tfilter.filter(this);\n\t\t}\n\t}\n\tgetBoundary() {\n\t\treturn new BoundaryOp(this).getBoundary();\n\t}\n\tisEquivalentClass(other) {\n\t\treturn other instanceof LineString;\n\t}\n\tgetCoordinateN(n) {\n\t\treturn this._points.getCoordinate(n);\n\t}\n\tgetGeometryType() {\n\t\treturn Geometry.TYPENAME_LINESTRING;\n\t}\n\tcopy() {\n\t\treturn new LineString(this._points.copy(), this._factory);\n\t}\n\tgetCoordinateSequence() {\n\t\treturn this._points;\n\t}\n\tisEmpty() {\n\t\treturn this._points.size() === 0;\n\t}\n\tinit(points) {\n\t\tif (points === null) {\n\t\t\tpoints = this.getFactory().getCoordinateSequenceFactory().create([]);\n\t\t}\n\t\tif (points.size() === 1) {\n\t\t\tthrow new IllegalArgumentException(\"Invalid number of points in LineString (found \" + points.size() + \" - must be 0 or >= 2)\");\n\t\t}\n\t\tthis._points = points;\n\t}\n\tisCoordinate(pt) {\n\t\tfor (var i = 0; i < this._points.size(); i++) {\n\t\t\tif (this._points.getCoordinate(i).equals(pt)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\tgetStartPoint() {\n\t\tif (this.isEmpty()) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.getPointN(0);\n\t}\n\tgetPointN(n) {\n\t\treturn this.getFactory().createPoint(this._points.getCoordinate(n));\n\t}\n\tgetClass() {\n\t\treturn LineString;\n\t}\n\tget interfaces_() {\n\t\treturn [Lineal];\n\t}\n}\nLineString.constructor_ = function () {\n\tthis._points = null;\n\tif (arguments.length === 0) {} else if (arguments.length === 2) {\n\t\tlet points = arguments[0], factory = arguments[1];\n\t\tGeometry.constructor_.call(this, factory);\n\t\tthis.init(points);\n\t}\n};\nLineString.serialVersionUID = 3110669828065365560;\n","export default class Puntal {\n\tconstructor() {\n\t\tPuntal.constructor_.apply(this, arguments);\n\t}\n\tgetClass() {\n\t\treturn Puntal;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nPuntal.constructor_ = function () {};\n","import Geometry from './Geometry';\nimport CoordinateFilter from './CoordinateFilter';\nimport hasInterface from '../../../../hasInterface';\nimport GeometryComponentFilter from './GeometryComponentFilter';\nimport Dimension from './Dimension';\nimport GeometryFilter from './GeometryFilter';\nimport CoordinateSequenceFilter from './CoordinateSequenceFilter';\nimport Puntal from './Puntal';\nimport Envelope from './Envelope';\nimport Assert from '../util/Assert';\nexport default class Point extends Geometry {\n\tconstructor() {\n\t\tsuper();\n\t\tPoint.constructor_.apply(this, arguments);\n\t}\n\tcomputeEnvelopeInternal() {\n\t\tif (this.isEmpty()) {\n\t\t\treturn new Envelope();\n\t\t}\n\t\tvar env = new Envelope();\n\t\tenv.expandToInclude(this._coordinates.getX(0), this._coordinates.getY(0));\n\t\treturn env;\n\t}\n\tgetCoordinates() {\n\t\treturn this.isEmpty() ? [] : [this.getCoordinate()];\n\t}\n\tequalsExact() {\n\t\tif (arguments.length === 2 && (typeof arguments[1] === \"number\" && arguments[0] instanceof Geometry)) {\n\t\t\tlet other = arguments[0], tolerance = arguments[1];\n\t\t\tif (!this.isEquivalentClass(other)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (this.isEmpty() && other.isEmpty()) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif (this.isEmpty() !== other.isEmpty()) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn this.equal(other.getCoordinate(), this.getCoordinate(), tolerance);\n\t\t} else return super.equalsExact.apply(this, arguments);\n\t}\n\tnormalize() {}\n\tgetCoordinate() {\n\t\treturn this._coordinates.size() !== 0 ? this._coordinates.getCoordinate(0) : null;\n\t}\n\tgetBoundaryDimension() {\n\t\treturn Dimension.FALSE;\n\t}\n\tgetTypeCode() {\n\t\treturn Geometry.TYPECODE_POINT;\n\t}\n\tgetDimension() {\n\t\treturn 0;\n\t}\n\tgetNumPoints() {\n\t\treturn this.isEmpty() ? 0 : 1;\n\t}\n\treverse() {\n\t\treturn this.copy();\n\t}\n\tgetX() {\n\t\tif (this.getCoordinate() === null) {\n\t\t\tthrow new IllegalStateException(\"getX called on empty Point\");\n\t\t}\n\t\treturn this.getCoordinate().x;\n\t}\n\tcompareToSameClass() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet other = arguments[0];\n\t\t\tvar point = other;\n\t\t\treturn this.getCoordinate().compareTo(point.getCoordinate());\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet other = arguments[0], comp = arguments[1];\n\t\t\tvar point = other;\n\t\t\treturn comp.compare(this._coordinates, point._coordinates);\n\t\t}\n\t}\n\tapply() {\n\t\tif (hasInterface(arguments[0], CoordinateFilter)) {\n\t\t\tlet filter = arguments[0];\n\t\t\tif (this.isEmpty()) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tfilter.filter(this.getCoordinate());\n\t\t} else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {\n\t\t\tlet filter = arguments[0];\n\t\t\tif (this.isEmpty()) return null;\n\t\t\tfilter.filter(this._coordinates, 0);\n\t\t\tif (filter.isGeometryChanged()) this.geometryChanged();\n\t\t} else if (hasInterface(arguments[0], GeometryFilter)) {\n\t\t\tlet filter = arguments[0];\n\t\t\tfilter.filter(this);\n\t\t} else if (hasInterface(arguments[0], GeometryComponentFilter)) {\n\t\t\tlet filter = arguments[0];\n\t\t\tfilter.filter(this);\n\t\t}\n\t}\n\tgetBoundary() {\n\t\treturn this.getFactory().createGeometryCollection();\n\t}\n\tgetGeometryType() {\n\t\treturn Geometry.TYPENAME_POINT;\n\t}\n\tcopy() {\n\t\treturn new Point(this._coordinates.copy(), this._factory);\n\t}\n\tgetCoordinateSequence() {\n\t\treturn this._coordinates;\n\t}\n\tgetY() {\n\t\tif (this.getCoordinate() === null) {\n\t\t\tthrow new IllegalStateException(\"getY called on empty Point\");\n\t\t}\n\t\treturn this.getCoordinate().y;\n\t}\n\tisEmpty() {\n\t\treturn this._coordinates.size() === 0;\n\t}\n\tinit(coordinates) {\n\t\tif (coordinates === null) {\n\t\t\tcoordinates = this.getFactory().getCoordinateSequenceFactory().create([]);\n\t\t}\n\t\tAssert.isTrue(coordinates.size() <= 1);\n\t\tthis._coordinates = coordinates;\n\t}\n\tisSimple() {\n\t\treturn true;\n\t}\n\tgetClass() {\n\t\treturn Point;\n\t}\n\tget interfaces_() {\n\t\treturn [Puntal];\n\t}\n}\nPoint.constructor_ = function () {\n\tthis._coordinates = null;\n\tlet coordinates = arguments[0], factory = arguments[1];\n\tGeometry.constructor_.call(this, factory);\n\tthis.init(coordinates);\n};\nPoint.serialVersionUID = 4902022702746614570;\n","import hasInterface from '../../../../hasInterface';\nimport Coordinate from '../geom/Coordinate';\nimport CoordinateSequence from '../geom/CoordinateSequence';\nexport default class Area {\n\tconstructor() {\n\t\tArea.constructor_.apply(this, arguments);\n\t}\n\tstatic ofRing() {\n\t\tif (arguments[0] instanceof Array) {\n\t\t\tlet ring = arguments[0];\n\t\t\treturn Math.abs(Area.ofRingSigned(ring));\n\t\t} else if (hasInterface(arguments[0], CoordinateSequence)) {\n\t\t\tlet ring = arguments[0];\n\t\t\treturn Math.abs(Area.ofRingSigned(ring));\n\t\t}\n\t}\n\tstatic ofRingSigned() {\n\t\tif (arguments[0] instanceof Array) {\n\t\t\tlet ring = arguments[0];\n\t\t\tif (ring.length < 3) return 0.0;\n\t\t\tvar sum = 0.0;\n\t\t\tvar x0 = ring[0].x;\n\t\t\tfor (var i = 1; i < ring.length - 1; i++) {\n\t\t\t\tvar x = ring[i].x - x0;\n\t\t\t\tvar y1 = ring[i + 1].y;\n\t\t\t\tvar y2 = ring[i - 1].y;\n\t\t\t\tsum += x * (y2 - y1);\n\t\t\t}\n\t\t\treturn sum / 2.0;\n\t\t} else if (hasInterface(arguments[0], CoordinateSequence)) {\n\t\t\tlet ring = arguments[0];\n\t\t\tvar n = ring.size();\n\t\t\tif (n < 3) return 0.0;\n\t\t\tvar p0 = new Coordinate();\n\t\t\tvar p1 = new Coordinate();\n\t\t\tvar p2 = new Coordinate();\n\t\t\tring.getCoordinate(0, p1);\n\t\t\tring.getCoordinate(1, p2);\n\t\t\tvar x0 = p1.x;\n\t\t\tp2.x -= x0;\n\t\t\tvar sum = 0.0;\n\t\t\tfor (var i = 1; i < n - 1; i++) {\n\t\t\t\tp0.y = p1.y;\n\t\t\t\tp1.x = p2.x;\n\t\t\t\tp1.y = p2.y;\n\t\t\t\tring.getCoordinate(i + 1, p2);\n\t\t\t\tp2.x -= x0;\n\t\t\t\tsum += p1.x * (p0.y - p2.y);\n\t\t\t}\n\t\t\treturn sum / 2.0;\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn Area;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nArea.constructor_ = function () {};\n","export default class Polygonal {\n\tconstructor() {\n\t\tPolygonal.constructor_.apply(this, arguments);\n\t}\n\tgetClass() {\n\t\treturn Polygonal;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nPolygonal.constructor_ = function () {};\n","import Area from '../algorithm/Area';\nimport Geometry from './Geometry';\nimport Arrays from '../../../../java/util/Arrays';\nimport CoordinateFilter from './CoordinateFilter';\nimport hasInterface from '../../../../hasInterface';\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException';\nimport Orientation from '../algorithm/Orientation';\nimport System from '../../../../java/lang/System';\nimport GeometryComponentFilter from './GeometryComponentFilter';\nimport CoordinateArrays from './CoordinateArrays';\nimport Polygonal from './Polygonal';\nimport GeometryFilter from './GeometryFilter';\nimport CoordinateSequenceFilter from './CoordinateSequenceFilter';\nexport default class Polygon extends Geometry {\n\tconstructor() {\n\t\tsuper();\n\t\tPolygon.constructor_.apply(this, arguments);\n\t}\n\tcomputeEnvelopeInternal() {\n\t\treturn this._shell.getEnvelopeInternal();\n\t}\n\tgetCoordinates() {\n\t\tif (this.isEmpty()) {\n\t\t\treturn [];\n\t\t}\n\t\tvar coordinates = new Array(this.getNumPoints()).fill(null);\n\t\tvar k = -1;\n\t\tvar shellCoordinates = this._shell.getCoordinates();\n\t\tfor (var x = 0; x < shellCoordinates.length; x++) {\n\t\t\tk++;\n\t\t\tcoordinates[k] = shellCoordinates[x];\n\t\t}\n\t\tfor (var i = 0; i < this._holes.length; i++) {\n\t\t\tvar childCoordinates = this._holes[i].getCoordinates();\n\t\t\tfor (var j = 0; j < childCoordinates.length; j++) {\n\t\t\t\tk++;\n\t\t\t\tcoordinates[k] = childCoordinates[j];\n\t\t\t}\n\t\t}\n\t\treturn coordinates;\n\t}\n\tgetArea() {\n\t\tvar area = 0.0;\n\t\tarea += Area.ofRing(this._shell.getCoordinateSequence());\n\t\tfor (var i = 0; i < this._holes.length; i++) {\n\t\t\tarea -= Area.ofRing(this._holes[i].getCoordinateSequence());\n\t\t}\n\t\treturn area;\n\t}\n\tisRectangle() {\n\t\tif (this.getNumInteriorRing() !== 0) return false;\n\t\tif (this._shell === null) return false;\n\t\tif (this._shell.getNumPoints() !== 5) return false;\n\t\tvar seq = this._shell.getCoordinateSequence();\n\t\tvar env = this.getEnvelopeInternal();\n\t\tfor (var i = 0; i < 5; i++) {\n\t\t\tvar x = seq.getX(i);\n\t\t\tif (!(x === env.getMinX() || x === env.getMaxX())) return false;\n\t\t\tvar y = seq.getY(i);\n\t\t\tif (!(y === env.getMinY() || y === env.getMaxY())) return false;\n\t\t}\n\t\tvar prevX = seq.getX(0);\n\t\tvar prevY = seq.getY(0);\n\t\tfor (var i = 1; i <= 4; i++) {\n\t\t\tvar x = seq.getX(i);\n\t\t\tvar y = seq.getY(i);\n\t\t\tvar xChanged = x !== prevX;\n\t\t\tvar yChanged = y !== prevY;\n\t\t\tif (xChanged === yChanged) return false;\n\t\t\tprevX = x;\n\t\t\tprevY = y;\n\t\t}\n\t\treturn true;\n\t}\n\tequalsExact() {\n\t\tif (arguments.length === 2 && (typeof arguments[1] === \"number\" && arguments[0] instanceof Geometry)) {\n\t\t\tlet other = arguments[0], tolerance = arguments[1];\n\t\t\tif (!this.isEquivalentClass(other)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar otherPolygon = other;\n\t\t\tvar thisShell = this._shell;\n\t\t\tvar otherPolygonShell = otherPolygon._shell;\n\t\t\tif (!thisShell.equalsExact(otherPolygonShell, tolerance)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (this._holes.length !== otherPolygon._holes.length) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (var i = 0; i < this._holes.length; i++) {\n\t\t\t\tif (!this._holes[i].equalsExact(otherPolygon._holes[i], tolerance)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} else return super.equalsExact.apply(this, arguments);\n\t}\n\tnormalize() {\n\t\tif (arguments.length === 0) {\n\t\t\tthis.normalize(this._shell, true);\n\t\t\tfor (var i = 0; i < this._holes.length; i++) {\n\t\t\t\tthis.normalize(this._holes[i], false);\n\t\t\t}\n\t\t\tArrays.sort(this._holes);\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet ring = arguments[0], clockwise = arguments[1];\n\t\t\tif (ring.isEmpty()) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tvar uniqueCoordinates = new Array(ring.getCoordinates().length - 1).fill(null);\n\t\t\tSystem.arraycopy(ring.getCoordinates(), 0, uniqueCoordinates, 0, uniqueCoordinates.length);\n\t\t\tvar minCoordinate = CoordinateArrays.minCoordinate(ring.getCoordinates());\n\t\t\tCoordinateArrays.scroll(uniqueCoordinates, minCoordinate);\n\t\t\tSystem.arraycopy(uniqueCoordinates, 0, ring.getCoordinates(), 0, uniqueCoordinates.length);\n\t\t\tring.getCoordinates()[uniqueCoordinates.length] = uniqueCoordinates[0];\n\t\t\tif (Orientation.isCCW(ring.getCoordinates()) === clockwise) {\n\t\t\t\tCoordinateArrays.reverse(ring.getCoordinates());\n\t\t\t}\n\t\t}\n\t}\n\tgetCoordinate() {\n\t\treturn this._shell.getCoordinate();\n\t}\n\tgetNumInteriorRing() {\n\t\treturn this._holes.length;\n\t}\n\tgetBoundaryDimension() {\n\t\treturn 1;\n\t}\n\tgetTypeCode() {\n\t\treturn Geometry.TYPECODE_POLYGON;\n\t}\n\tgetDimension() {\n\t\treturn 2;\n\t}\n\tgetLength() {\n\t\tvar len = 0.0;\n\t\tlen += this._shell.getLength();\n\t\tfor (var i = 0; i < this._holes.length; i++) {\n\t\t\tlen += this._holes[i].getLength();\n\t\t}\n\t\treturn len;\n\t}\n\tgetNumPoints() {\n\t\tvar numPoints = this._shell.getNumPoints();\n\t\tfor (var i = 0; i < this._holes.length; i++) {\n\t\t\tnumPoints += this._holes[i].getNumPoints();\n\t\t}\n\t\treturn numPoints;\n\t}\n\treverse() {\n\t\tvar poly = this.copy();\n\t\tpoly._shell = this._shell.copy().reverse();\n\t\tpoly._holes = new Array(this._holes.length).fill(null);\n\t\tfor (var i = 0; i < this._holes.length; i++) {\n\t\t\tpoly._holes[i] = this._holes[i].copy().reverse();\n\t\t}\n\t\treturn poly;\n\t}\n\tconvexHull() {\n\t\treturn this.getExteriorRing().convexHull();\n\t}\n\tcompareToSameClass() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet o = arguments[0];\n\t\t\tvar thisShell = this._shell;\n\t\t\tvar otherShell = o._shell;\n\t\t\treturn thisShell.compareToSameClass(otherShell);\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet o = arguments[0], comp = arguments[1];\n\t\t\tvar poly = o;\n\t\t\tvar thisShell = this._shell;\n\t\t\tvar otherShell = poly._shell;\n\t\t\tvar shellComp = thisShell.compareToSameClass(otherShell, comp);\n\t\t\tif (shellComp !== 0) return shellComp;\n\t\t\tvar nHole1 = this.getNumInteriorRing();\n\t\t\tvar nHole2 = poly.getNumInteriorRing();\n\t\t\tvar i = 0;\n\t\t\twhile (i < nHole1 && i < nHole2) {\n\t\t\t\tvar thisHole = this.getInteriorRingN(i);\n\t\t\t\tvar otherHole = poly.getInteriorRingN(i);\n\t\t\t\tvar holeComp = thisHole.compareToSameClass(otherHole, comp);\n\t\t\t\tif (holeComp !== 0) return holeComp;\n\t\t\t\ti++;\n\t\t\t}\n\t\t\tif (i < nHole1) return 1;\n\t\t\tif (i < nHole2) return -1;\n\t\t\treturn 0;\n\t\t}\n\t}\n\tapply() {\n\t\tif (hasInterface(arguments[0], CoordinateFilter)) {\n\t\t\tlet filter = arguments[0];\n\t\t\tthis._shell.apply(filter);\n\t\t\tfor (var i = 0; i < this._holes.length; i++) {\n\t\t\t\tthis._holes[i].apply(filter);\n\t\t\t}\n\t\t} else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {\n\t\t\tlet filter = arguments[0];\n\t\t\tthis._shell.apply(filter);\n\t\t\tif (!filter.isDone()) {\n\t\t\t\tfor (var i = 0; i < this._holes.length; i++) {\n\t\t\t\t\tthis._holes[i].apply(filter);\n\t\t\t\t\tif (filter.isDone()) break;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (filter.isGeometryChanged()) this.geometryChanged();\n\t\t} else if (hasInterface(arguments[0], GeometryFilter)) {\n\t\t\tlet filter = arguments[0];\n\t\t\tfilter.filter(this);\n\t\t} else if (hasInterface(arguments[0], GeometryComponentFilter)) {\n\t\t\tlet filter = arguments[0];\n\t\t\tfilter.filter(this);\n\t\t\tthis._shell.apply(filter);\n\t\t\tfor (var i = 0; i < this._holes.length; i++) {\n\t\t\t\tthis._holes[i].apply(filter);\n\t\t\t}\n\t\t}\n\t}\n\tgetBoundary() {\n\t\tif (this.isEmpty()) {\n\t\t\treturn this.getFactory().createMultiLineString();\n\t\t}\n\t\tvar rings = new Array(this._holes.length + 1).fill(null);\n\t\trings[0] = this._shell;\n\t\tfor (var i = 0; i < this._holes.length; i++) {\n\t\t\trings[i + 1] = this._holes[i];\n\t\t}\n\t\tif (rings.length <= 1) return this.getFactory().createLinearRing(rings[0].getCoordinateSequence());\n\t\treturn this.getFactory().createMultiLineString(rings);\n\t}\n\tgetGeometryType() {\n\t\treturn Geometry.TYPENAME_POLYGON;\n\t}\n\tcopy() {\n\t\tvar shellCopy = this._shell.copy();\n\t\tvar holeCopies = new Array(this._holes.length).fill(null);\n\t\tfor (var i = 0; i < this._holes.length; i++) {\n\t\t\tholeCopies[i] = this._holes[i].copy();\n\t\t}\n\t\treturn new Polygon(shellCopy, holeCopies, this._factory);\n\t}\n\tgetExteriorRing() {\n\t\treturn this._shell;\n\t}\n\tisEmpty() {\n\t\treturn this._shell.isEmpty();\n\t}\n\tgetInteriorRingN(n) {\n\t\treturn this._holes[n];\n\t}\n\tgetClass() {\n\t\treturn Polygon;\n\t}\n\tget interfaces_() {\n\t\treturn [Polygonal];\n\t}\n}\nPolygon.constructor_ = function () {\n\tthis._shell = null;\n\tthis._holes = null;\n\tlet shell = arguments[0], holes = arguments[1], factory = arguments[2];\n\tGeometry.constructor_.call(this, factory);\n\tif (shell === null) {\n\t\tshell = this.getFactory().createLinearRing();\n\t}\n\tif (holes === null) {\n\t\tholes = [];\n\t}\n\tif (Geometry.hasNullElements(holes)) {\n\t\tthrow new IllegalArgumentException(\"holes must not contain null elements\");\n\t}\n\tif (shell.isEmpty() && Geometry.hasNonEmptyElements(holes)) {\n\t\tthrow new IllegalArgumentException(\"shell is empty but holes are not\");\n\t}\n\tthis._shell = shell;\n\tthis._holes = holes;\n};\nPolygon.serialVersionUID = -3494792200821764533;\n","import Geometry from './Geometry';\nimport GeometryCollection from './GeometryCollection';\nimport Dimension from './Dimension';\nimport Puntal from './Puntal';\nexport default class MultiPoint extends GeometryCollection {\n\tconstructor() {\n\t\tsuper();\n\t\tMultiPoint.constructor_.apply(this, arguments);\n\t}\n\tisValid() {\n\t\treturn true;\n\t}\n\tequalsExact() {\n\t\tif (arguments.length === 2 && (typeof arguments[1] === \"number\" && arguments[0] instanceof Geometry)) {\n\t\t\tlet other = arguments[0], tolerance = arguments[1];\n\t\t\tif (!this.isEquivalentClass(other)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn super.equalsExact.call(this, other, tolerance);\n\t\t} else return super.equalsExact.apply(this, arguments);\n\t}\n\tgetCoordinate() {\n\t\tif (arguments.length === 1 && Number.isInteger(arguments[0])) {\n\t\t\tlet n = arguments[0];\n\t\t\treturn this._geometries[n].getCoordinate();\n\t\t} else return super.getCoordinate.apply(this, arguments);\n\t}\n\tgetBoundaryDimension() {\n\t\treturn Dimension.FALSE;\n\t}\n\tgetTypeCode() {\n\t\treturn Geometry.TYPECODE_MULTIPOINT;\n\t}\n\tgetDimension() {\n\t\treturn 0;\n\t}\n\tgetBoundary() {\n\t\treturn this.getFactory().createGeometryCollection();\n\t}\n\tgetGeometryType() {\n\t\treturn Geometry.TYPENAME_MULTIPOINT;\n\t}\n\tcopy() {\n\t\tvar points = new Array(this._geometries.length).fill(null);\n\t\tfor (var i = 0; i < points.length; i++) {\n\t\t\tpoints[i] = this._geometries[i].copy();\n\t\t}\n\t\treturn new MultiPoint(points, this._factory);\n\t}\n\tgetClass() {\n\t\treturn MultiPoint;\n\t}\n\tget interfaces_() {\n\t\treturn [Puntal];\n\t}\n}\nMultiPoint.constructor_ = function () {\n\tlet points = arguments[0], factory = arguments[1];\n\tGeometryCollection.constructor_.call(this, points, factory);\n};\nMultiPoint.serialVersionUID = -8048474874175355449;\n","import LineString from './LineString';\nimport Geometry from './Geometry';\nimport hasInterface from '../../../../hasInterface';\nimport GeometryFactory from './GeometryFactory';\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException';\nimport CoordinateSequences from './CoordinateSequences';\nimport CoordinateSequence from './CoordinateSequence';\nimport Dimension from './Dimension';\nexport default class LinearRing extends LineString {\n\tconstructor() {\n\t\tsuper();\n\t\tLinearRing.constructor_.apply(this, arguments);\n\t}\n\tgetBoundaryDimension() {\n\t\treturn Dimension.FALSE;\n\t}\n\tisClosed() {\n\t\tif (this.isEmpty()) {\n\t\t\treturn true;\n\t\t}\n\t\treturn super.isClosed.call(this);\n\t}\n\tgetTypeCode() {\n\t\treturn Geometry.TYPECODE_LINEARRING;\n\t}\n\treverse() {\n\t\tvar seq = this._points.copy();\n\t\tCoordinateSequences.reverse(seq);\n\t\tvar rev = this.getFactory().createLinearRing(seq);\n\t\treturn rev;\n\t}\n\tvalidateConstruction() {\n\t\tif (!this.isEmpty() && !super.isClosed.call(this)) {\n\t\t\tthrow new IllegalArgumentException(\"Points of LinearRing do not form a closed linestring\");\n\t\t}\n\t\tif (this.getCoordinateSequence().size() >= 1 && this.getCoordinateSequence().size() < LinearRing.MINIMUM_VALID_SIZE) {\n\t\t\tthrow new IllegalArgumentException(\"Invalid number of points in LinearRing (found \" + this.getCoordinateSequence().size() + \" - must be 0 or >= 4)\");\n\t\t}\n\t}\n\tgetGeometryType() {\n\t\treturn Geometry.TYPENAME_LINEARRING;\n\t}\n\tcopy() {\n\t\treturn new LinearRing(this._points.copy(), this._factory);\n\t}\n\tgetClass() {\n\t\treturn LinearRing;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nLinearRing.constructor_ = function () {\n\tif (arguments[0] instanceof Array && arguments[1] instanceof GeometryFactory) {\n\t\tlet points = arguments[0], factory = arguments[1];\n\t\tLinearRing.constructor_.call(this, factory.getCoordinateSequenceFactory().create(points), factory);\n\t} else if (hasInterface(arguments[0], CoordinateSequence) && arguments[1] instanceof GeometryFactory) {\n\t\tlet points = arguments[0], factory = arguments[1];\n\t\tLineString.constructor_.call(this, points, factory);\n\t\tthis.validateConstruction();\n\t}\n};\nLinearRing.MINIMUM_VALID_SIZE = 4;\nLinearRing.serialVersionUID = -4261142084085851829;\n","import Geometry from './Geometry';\nimport GeometryCollection from './GeometryCollection';\nimport Polygonal from './Polygonal';\nimport ArrayList from '../../../../java/util/ArrayList';\nexport default class MultiPolygon extends GeometryCollection {\n\tconstructor() {\n\t\tsuper();\n\t\tMultiPolygon.constructor_.apply(this, arguments);\n\t}\n\tequalsExact() {\n\t\tif (arguments.length === 2 && (typeof arguments[1] === \"number\" && arguments[0] instanceof Geometry)) {\n\t\t\tlet other = arguments[0], tolerance = arguments[1];\n\t\t\tif (!this.isEquivalentClass(other)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn super.equalsExact.call(this, other, tolerance);\n\t\t} else return super.equalsExact.apply(this, arguments);\n\t}\n\tgetBoundaryDimension() {\n\t\treturn 1;\n\t}\n\tgetTypeCode() {\n\t\treturn Geometry.TYPECODE_MULTIPOLYGON;\n\t}\n\tgetDimension() {\n\t\treturn 2;\n\t}\n\treverse() {\n\t\tvar n = this._geometries.length;\n\t\tvar revGeoms = new Array(n).fill(null);\n\t\tfor (var i = 0; i < this._geometries.length; i++) {\n\t\t\trevGeoms[i] = this._geometries[i].reverse();\n\t\t}\n\t\treturn this.getFactory().createMultiPolygon(revGeoms);\n\t}\n\tgetBoundary() {\n\t\tif (this.isEmpty()) {\n\t\t\treturn this.getFactory().createMultiLineString();\n\t\t}\n\t\tvar allRings = new ArrayList();\n\t\tfor (var i = 0; i < this._geometries.length; i++) {\n\t\t\tvar polygon = this._geometries[i];\n\t\t\tvar rings = polygon.getBoundary();\n\t\t\tfor (var j = 0; j < rings.getNumGeometries(); j++) {\n\t\t\t\tallRings.add(rings.getGeometryN(j));\n\t\t\t}\n\t\t}\n\t\tvar allRingsArray = new Array(allRings.size()).fill(null);\n\t\treturn this.getFactory().createMultiLineString(allRings.toArray(allRingsArray));\n\t}\n\tgetGeometryType() {\n\t\treturn Geometry.TYPENAME_MULTIPOLYGON;\n\t}\n\tcopy() {\n\t\tvar polygons = new Array(this._geometries.length).fill(null);\n\t\tfor (var i = 0; i < polygons.length; i++) {\n\t\t\tpolygons[i] = this._geometries[i].copy();\n\t\t}\n\t\treturn new MultiPolygon(polygons, this._factory);\n\t}\n\tgetClass() {\n\t\treturn MultiPolygon;\n\t}\n\tget interfaces_() {\n\t\treturn [Polygonal];\n\t}\n}\nMultiPolygon.constructor_ = function () {\n\tlet polygons = arguments[0], factory = arguments[1];\n\tGeometryCollection.constructor_.call(this, polygons, factory);\n};\nMultiPolygon.serialVersionUID = -551033529766975875;\n","import LineString from '../LineString';\nimport Point from '../Point';\nimport Polygon from '../Polygon';\nimport MultiPoint from '../MultiPoint';\nimport LinearRing from '../LinearRing';\nimport MultiPolygon from '../MultiPolygon';\nimport GeometryCollection from '../GeometryCollection';\nimport ArrayList from '../../../../../java/util/ArrayList';\nimport Assert from '../../util/Assert';\nimport MultiLineString from '../MultiLineString';\nexport default class GeometryEditor {\n\tconstructor() {\n\t\tGeometryEditor.constructor_.apply(this, arguments);\n\t}\n\tsetCopyUserData(isUserDataCopied) {\n\t\tthis._isUserDataCopied = isUserDataCopied;\n\t}\n\tedit(geometry, operation) {\n\t\tif (geometry === null) return null;\n\t\tvar result = this.editInternal(geometry, operation);\n\t\tif (this._isUserDataCopied) {\n\t\t\tresult.setUserData(geometry.getUserData());\n\t\t}\n\t\treturn result;\n\t}\n\teditInternal(geometry, operation) {\n\t\tif (this._factory === null) this._factory = geometry.getFactory();\n\t\tif (geometry instanceof GeometryCollection) {\n\t\t\treturn this.editGeometryCollection(geometry, operation);\n\t\t}\n\t\tif (geometry instanceof Polygon) {\n\t\t\treturn this.editPolygon(geometry, operation);\n\t\t}\n\t\tif (geometry instanceof Point) {\n\t\t\treturn operation.edit(geometry, this._factory);\n\t\t}\n\t\tif (geometry instanceof LineString) {\n\t\t\treturn operation.edit(geometry, this._factory);\n\t\t}\n\t\tAssert.shouldNeverReachHere(\"Unsupported Geometry class: \" + geometry.getClass().getName());\n\t\treturn null;\n\t}\n\teditGeometryCollection(collection, operation) {\n\t\tvar collectionForType = operation.edit(collection, this._factory);\n\t\tvar geometries = new ArrayList();\n\t\tfor (var i = 0; i < collectionForType.getNumGeometries(); i++) {\n\t\t\tvar geometry = this.edit(collectionForType.getGeometryN(i), operation);\n\t\t\tif (geometry === null || geometry.isEmpty()) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tgeometries.add(geometry);\n\t\t}\n\t\tif (collectionForType.getClass() === MultiPoint) {\n\t\t\treturn this._factory.createMultiPoint(geometries.toArray([]));\n\t\t}\n\t\tif (collectionForType.getClass() === MultiLineString) {\n\t\t\treturn this._factory.createMultiLineString(geometries.toArray([]));\n\t\t}\n\t\tif (collectionForType.getClass() === MultiPolygon) {\n\t\t\treturn this._factory.createMultiPolygon(geometries.toArray([]));\n\t\t}\n\t\treturn this._factory.createGeometryCollection(geometries.toArray([]));\n\t}\n\teditPolygon(polygon, operation) {\n\t\tvar newPolygon = operation.edit(polygon, this._factory);\n\t\tif (newPolygon === null) newPolygon = this._factory.createPolygon();\n\t\tif (newPolygon.isEmpty()) {\n\t\t\treturn newPolygon;\n\t\t}\n\t\tvar shell = this.edit(newPolygon.getExteriorRing(), operation);\n\t\tif (shell === null || shell.isEmpty()) {\n\t\t\treturn this._factory.createPolygon();\n\t\t}\n\t\tvar holes = new ArrayList();\n\t\tfor (var i = 0; i < newPolygon.getNumInteriorRing(); i++) {\n\t\t\tvar hole = this.edit(newPolygon.getInteriorRingN(i), operation);\n\t\t\tif (hole === null || hole.isEmpty()) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tholes.add(hole);\n\t\t}\n\t\treturn this._factory.createPolygon(shell, holes.toArray([]));\n\t}\n\tgetClass() {\n\t\treturn GeometryEditor;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nfunction GeometryEditorOperation() {}\nGeometryEditor.GeometryEditorOperation = GeometryEditorOperation;\nclass NoOpGeometryOperation {\n\tconstructor() {\n\t\tNoOpGeometryOperation.constructor_.apply(this, arguments);\n\t}\n\tedit(geometry, factory) {\n\t\treturn geometry;\n\t}\n\tgetClass() {\n\t\treturn NoOpGeometryOperation;\n\t}\n\tget interfaces_() {\n\t\treturn [GeometryEditorOperation];\n\t}\n}\nNoOpGeometryOperation.constructor_ = function () {};\nclass CoordinateOperation {\n\tconstructor() {\n\t\tCoordinateOperation.constructor_.apply(this, arguments);\n\t}\n\tedit(geometry, factory) {\n\t\tvar coordinates = this.edit(geometry.getCoordinates(), geometry);\n\t\tif (geometry instanceof LinearRing) {\n\t\t\tif (coordinates === null) return factory.createLinearRing(); else return factory.createLinearRing(coordinates);\n\t\t}\n\t\tif (geometry instanceof LineString) {\n\t\t\tif (coordinates === null) return factory.createLineString(); else return factory.createLineString(coordinates);\n\t\t}\n\t\tif (geometry instanceof Point) {\n\t\t\tif (coordinates === null || coordinates.length === 0) return factory.createPoint(); else return factory.createPoint(coordinates[0]);\n\t\t}\n\t\treturn geometry;\n\t}\n\tgetClass() {\n\t\treturn CoordinateOperation;\n\t}\n\tget interfaces_() {\n\t\treturn [GeometryEditorOperation];\n\t}\n}\nCoordinateOperation.constructor_ = function () {};\nclass CoordinateSequenceOperation {\n\tconstructor() {\n\t\tCoordinateSequenceOperation.constructor_.apply(this, arguments);\n\t}\n\tedit(geometry, factory) {\n\t\tif (geometry instanceof LinearRing) {\n\t\t\treturn factory.createLinearRing(this.edit(geometry.getCoordinateSequence(), geometry));\n\t\t}\n\t\tif (geometry instanceof LineString) {\n\t\t\treturn factory.createLineString(this.edit(geometry.getCoordinateSequence(), geometry));\n\t\t}\n\t\tif (geometry instanceof Point) {\n\t\t\treturn factory.createPoint(this.edit(geometry.getCoordinateSequence(), geometry));\n\t\t}\n\t\treturn geometry;\n\t}\n\tgetClass() {\n\t\treturn CoordinateSequenceOperation;\n\t}\n\tget interfaces_() {\n\t\treturn [GeometryEditorOperation];\n\t}\n}\nCoordinateSequenceOperation.constructor_ = function () {};\nGeometryEditor.NoOpGeometryOperation = NoOpGeometryOperation;\nGeometryEditor.CoordinateOperation = CoordinateOperation;\nGeometryEditor.CoordinateSequenceOperation = CoordinateSequenceOperation;\nGeometryEditor.constructor_ = function () {\n\tthis._factory = null;\n\tthis._isUserDataCopied = false;\n\tif (arguments.length === 0) {} else if (arguments.length === 1) {\n\t\tlet factory = arguments[0];\n\t\tthis._factory = factory;\n\t}\n};\n","import hasInterface from '../../../../../hasInterface';\nimport Coordinate from '../Coordinate';\nimport IllegalArgumentException from '../../../../../java/lang/IllegalArgumentException';\nimport Double from '../../../../../java/lang/Double';\nimport CoordinateSequence from '../CoordinateSequence';\nimport Serializable from '../../../../../java/io/Serializable';\nimport StringBuilder from '../../../../../java/lang/StringBuilder';\nexport default class CoordinateArraySequence {\n\tconstructor() {\n\t\tCoordinateArraySequence.constructor_.apply(this, arguments);\n\t}\n\tsetOrdinate(index, ordinateIndex, value) {\n\t\tswitch (ordinateIndex) {\n\t\t\tcase CoordinateSequence.X:\n\t\t\t\tthis._coordinates[index].x = value;\n\t\t\t\tbreak;\n\t\t\tcase CoordinateSequence.Y:\n\t\t\t\tthis._coordinates[index].y = value;\n\t\t\t\tbreak;\n\t\t\tcase CoordinateSequence.Z:\n\t\t\t\tthis._coordinates[index].z = value;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow new IllegalArgumentException(\"invalid ordinateIndex\");\n\t\t}\n\t}\n\tsize() {\n\t\treturn this._coordinates.length;\n\t}\n\tgetOrdinate(index, ordinateIndex) {\n\t\tswitch (ordinateIndex) {\n\t\t\tcase CoordinateSequence.X:\n\t\t\t\treturn this._coordinates[index].x;\n\t\t\tcase CoordinateSequence.Y:\n\t\t\t\treturn this._coordinates[index].y;\n\t\t\tcase CoordinateSequence.Z:\n\t\t\t\treturn this._coordinates[index].z;\n\t\t}\n\t\treturn Double.NaN;\n\t}\n\tgetCoordinate() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet i = arguments[0];\n\t\t\treturn this._coordinates[i];\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet index = arguments[0], coord = arguments[1];\n\t\t\tcoord.x = this._coordinates[index].x;\n\t\t\tcoord.y = this._coordinates[index].y;\n\t\t\tcoord.z = this._coordinates[index].z;\n\t\t}\n\t}\n\tgetCoordinateCopy(i) {\n\t\treturn new Coordinate(this._coordinates[i]);\n\t}\n\tgetDimension() {\n\t\treturn this._dimension;\n\t}\n\tgetX(index) {\n\t\treturn this._coordinates[index].x;\n\t}\n\texpandEnvelope(env) {\n\t\tfor (var i = 0; i < this._coordinates.length; i++) {\n\t\t\tenv.expandToInclude(this._coordinates[i]);\n\t\t}\n\t\treturn env;\n\t}\n\tcopy() {\n\t\tvar cloneCoordinates = new Array(this.size()).fill(null);\n\t\tfor (var i = 0; i < this._coordinates.length; i++) {\n\t\t\tcloneCoordinates[i] = this._coordinates[i].copy();\n\t\t}\n\t\treturn new CoordinateArraySequence(cloneCoordinates, this._dimension);\n\t}\n\ttoString() {\n\t\tif (this._coordinates.length > 0) {\n\t\t\tvar strBuilder = new StringBuilder(17 * this._coordinates.length);\n\t\t\tstrBuilder.append('(');\n\t\t\tstrBuilder.append(this._coordinates[0]);\n\t\t\tfor (var i = 1; i < this._coordinates.length; i++) {\n\t\t\t\tstrBuilder.append(\", \");\n\t\t\t\tstrBuilder.append(this._coordinates[i]);\n\t\t\t}\n\t\t\tstrBuilder.append(')');\n\t\t\treturn strBuilder.toString();\n\t\t} else {\n\t\t\treturn \"()\";\n\t\t}\n\t}\n\tgetY(index) {\n\t\treturn this._coordinates[index].y;\n\t}\n\ttoCoordinateArray() {\n\t\treturn this._coordinates;\n\t}\n\tgetClass() {\n\t\treturn CoordinateArraySequence;\n\t}\n\tget interfaces_() {\n\t\treturn [CoordinateSequence, Serializable];\n\t}\n}\nCoordinateArraySequence.constructor_ = function () {\n\tthis._dimension = 3;\n\tthis._coordinates = null;\n\tif (arguments.length === 1) {\n\t\tif (arguments[0] instanceof Array) {\n\t\t\tlet coordinates = arguments[0];\n\t\t\tCoordinateArraySequence.constructor_.call(this, coordinates, 3);\n\t\t} else if (Number.isInteger(arguments[0])) {\n\t\t\tlet size = arguments[0];\n\t\t\tthis._coordinates = new Array(size).fill(null);\n\t\t\tfor (var i = 0; i < size; i++) {\n\t\t\t\tthis._coordinates[i] = new Coordinate();\n\t\t\t}\n\t\t} else if (hasInterface(arguments[0], CoordinateSequence)) {\n\t\t\tlet coordSeq = arguments[0];\n\t\t\tif (coordSeq === null) {\n\t\t\t\tthis._coordinates = new Array(0).fill(null);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tthis._dimension = coordSeq.getDimension();\n\t\t\tthis._coordinates = new Array(coordSeq.size()).fill(null);\n\t\t\tfor (var i = 0; i < this._coordinates.length; i++) {\n\t\t\t\tthis._coordinates[i] = coordSeq.getCoordinateCopy(i);\n\t\t\t}\n\t\t}\n\t} else if (arguments.length === 2) {\n\t\tif (arguments[0] instanceof Array && Number.isInteger(arguments[1])) {\n\t\t\tlet coordinates = arguments[0], dimension = arguments[1];\n\t\t\tthis._coordinates = coordinates;\n\t\t\tthis._dimension = dimension;\n\t\t\tif (coordinates === null) this._coordinates = new Array(0).fill(null);\n\t\t} else if (Number.isInteger(arguments[0]) && Number.isInteger(arguments[1])) {\n\t\t\tlet size = arguments[0], dimension = arguments[1];\n\t\t\tthis._coordinates = new Array(size).fill(null);\n\t\t\tthis._dimension = dimension;\n\t\t\tfor (var i = 0; i < size; i++) {\n\t\t\t\tthis._coordinates[i] = new Coordinate();\n\t\t\t}\n\t\t}\n\t}\n};\nCoordinateArraySequence.serialVersionUID = -915438501601840650;\n","import CoordinateSequenceFactory from '../CoordinateSequenceFactory';\nimport hasInterface from '../../../../../hasInterface';\nimport CoordinateArraySequence from './CoordinateArraySequence';\nimport CoordinateSequence from '../CoordinateSequence';\nimport Serializable from '../../../../../java/io/Serializable';\nexport default class CoordinateArraySequenceFactory {\n\tconstructor() {\n\t\tCoordinateArraySequenceFactory.constructor_.apply(this, arguments);\n\t}\n\tstatic instance() {\n\t\treturn CoordinateArraySequenceFactory.instanceObject;\n\t}\n\treadResolve() {\n\t\treturn CoordinateArraySequenceFactory.instance();\n\t}\n\tcreate() {\n\t\tif (arguments.length === 1) {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\tlet coordinates = arguments[0];\n\t\t\t\treturn new CoordinateArraySequence(coordinates);\n\t\t\t} else if (hasInterface(arguments[0], CoordinateSequence)) {\n\t\t\t\tlet coordSeq = arguments[0];\n\t\t\t\treturn new CoordinateArraySequence(coordSeq);\n\t\t\t}\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet size = arguments[0], dimension = arguments[1];\n\t\t\tif (dimension > 3) dimension = 3;\n\t\t\tif (dimension < 2) return new CoordinateArraySequence(size);\n\t\t\treturn new CoordinateArraySequence(size, dimension);\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn CoordinateArraySequenceFactory;\n\t}\n\tget interfaces_() {\n\t\treturn [CoordinateSequenceFactory, Serializable];\n\t}\n}\nCoordinateArraySequenceFactory.constructor_ = function () {};\nCoordinateArraySequenceFactory.serialVersionUID = -4099577099607551657;\nCoordinateArraySequenceFactory.instanceObject = new CoordinateArraySequenceFactory();\n","import ArrayList from './ArrayList'\nimport MapInterface from './Map'\nimport HashSet from './HashSet'\nimport MapPolyfill from '../../Map'\n\nlet MapImpl = typeof Map === 'undefined' || !Map.prototype.values ? MapPolyfill : Map\n\n/**\n * @see http://download.oracle.com/javase/6/docs/api/java/util/HashMap.html\n *\n * @extends {javascript.util.Map}\n * @constructor\n * @private\n */\nexport default function HashMap () {\n /**\n * @type {Object}\n * @private\n */\n this.map_ = new MapImpl()\n}\nHashMap.prototype = new MapInterface()\n\n/**\n * @override\n */\nHashMap.prototype.get = function (key) {\n return this.map_.get(key) || null\n}\n\n/**\n * @override\n */\nHashMap.prototype.put = function (key, value) {\n this.map_.set(key, value)\n return value\n}\n\n/**\n * @override\n */\nHashMap.prototype.values = function () {\n const arrayList = new ArrayList()\n const it = this.map_.values()\n let o = it.next()\n while (!o.done) {\n arrayList.add(o.value)\n o = it.next()\n }\n return arrayList\n}\n\n/**\n * @override\n */\nHashMap.prototype.entrySet = function () {\n const hashSet = new HashSet()\n this.map_.entries().forEach(entry => hashSet.add(entry))\n return hashSet\n}\n\n/**\n * @override\n */\nHashMap.prototype.size = function () {\n return this.map_.size()\n}\n","import HashMap from '../../../../java/util/HashMap';\nimport Coordinate from './Coordinate';\nimport Double from '../../../../java/lang/Double';\nimport Integer from '../../../../java/lang/Integer';\nimport Comparable from '../../../../java/lang/Comparable';\nimport Serializable from '../../../../java/io/Serializable';\nexport default class PrecisionModel {\n\tconstructor() {\n\t\tPrecisionModel.constructor_.apply(this, arguments);\n\t}\n\tstatic mostPrecise(pm1, pm2) {\n\t\tif (pm1.compareTo(pm2) >= 0) return pm1;\n\t\treturn pm2;\n\t}\n\tequals(other) {\n\t\tif (!(other instanceof PrecisionModel)) {\n\t\t\treturn false;\n\t\t}\n\t\tvar otherPrecisionModel = other;\n\t\treturn this._modelType === otherPrecisionModel._modelType && this._scale === otherPrecisionModel._scale;\n\t}\n\tcompareTo(o) {\n\t\tvar other = o;\n\t\tvar sigDigits = this.getMaximumSignificantDigits();\n\t\tvar otherSigDigits = other.getMaximumSignificantDigits();\n\t\treturn new Integer(sigDigits).compareTo(new Integer(otherSigDigits));\n\t}\n\tgetScale() {\n\t\treturn this._scale;\n\t}\n\tisFloating() {\n\t\treturn this._modelType === PrecisionModel.FLOATING || this._modelType === PrecisionModel.FLOATING_SINGLE;\n\t}\n\tgetType() {\n\t\treturn this._modelType;\n\t}\n\ttoString() {\n\t\tvar description = \"UNKNOWN\";\n\t\tif (this._modelType === PrecisionModel.FLOATING) {\n\t\t\tdescription = \"Floating\";\n\t\t} else if (this._modelType === PrecisionModel.FLOATING_SINGLE) {\n\t\t\tdescription = \"Floating-Single\";\n\t\t} else if (this._modelType === PrecisionModel.FIXED) {\n\t\t\tdescription = \"Fixed (Scale=\" + this.getScale() + \")\";\n\t\t}\n\t\treturn description;\n\t}\n\tmakePrecise() {\n\t\tif (typeof arguments[0] === \"number\") {\n\t\t\tlet val = arguments[0];\n\t\t\tif (Double.isNaN(val)) return val;\n\t\t\tif (this._modelType === PrecisionModel.FLOATING_SINGLE) {\n\t\t\t\tvar floatSingleVal = val;\n\t\t\t\treturn floatSingleVal;\n\t\t\t}\n\t\t\tif (this._modelType === PrecisionModel.FIXED) {\n\t\t\t\treturn Math.round(val * this._scale) / this._scale;\n\t\t\t}\n\t\t\treturn val;\n\t\t} else if (arguments[0] instanceof Coordinate) {\n\t\t\tlet coord = arguments[0];\n\t\t\tif (this._modelType === PrecisionModel.FLOATING) return null;\n\t\t\tcoord.x = this.makePrecise(coord.x);\n\t\t\tcoord.y = this.makePrecise(coord.y);\n\t\t}\n\t}\n\tgetMaximumSignificantDigits() {\n\t\tvar maxSigDigits = 16;\n\t\tif (this._modelType === PrecisionModel.FLOATING) {\n\t\t\tmaxSigDigits = 16;\n\t\t} else if (this._modelType === PrecisionModel.FLOATING_SINGLE) {\n\t\t\tmaxSigDigits = 6;\n\t\t} else if (this._modelType === PrecisionModel.FIXED) {\n\t\t\tmaxSigDigits = 1 + Math.trunc(Math.ceil(Math.log(this.getScale()) / Math.log(10)));\n\t\t}\n\t\treturn maxSigDigits;\n\t}\n\tsetScale(scale) {\n\t\tthis._scale = Math.abs(scale);\n\t}\n\tgetClass() {\n\t\treturn PrecisionModel;\n\t}\n\tget interfaces_() {\n\t\treturn [Serializable, Comparable];\n\t}\n}\nclass Type {\n\tconstructor() {\n\t\tType.constructor_.apply(this, arguments);\n\t}\n\treadResolve() {\n\t\treturn Type.nameToTypeMap.get(this._name);\n\t}\n\ttoString() {\n\t\treturn this._name;\n\t}\n\tgetClass() {\n\t\treturn Type;\n\t}\n\tget interfaces_() {\n\t\treturn [Serializable];\n\t}\n}\nType.constructor_ = function () {\n\tthis._name = null;\n\tlet name = arguments[0];\n\tthis._name = name;\n\tType.nameToTypeMap.put(name, this);\n};\nType.serialVersionUID = -5528602631731589822;\nType.nameToTypeMap = new HashMap();\nPrecisionModel.Type = Type;\nPrecisionModel.constructor_ = function () {\n\tthis._modelType = null;\n\tthis._scale = null;\n\tif (arguments.length === 0) {\n\t\tthis._modelType = PrecisionModel.FLOATING;\n\t} else if (arguments.length === 1) {\n\t\tif (arguments[0] instanceof Type) {\n\t\t\tlet modelType = arguments[0];\n\t\t\tthis._modelType = modelType;\n\t\t\tif (modelType === PrecisionModel.FIXED) {\n\t\t\t\tthis.setScale(1.0);\n\t\t\t}\n\t\t} else if (typeof arguments[0] === \"number\") {\n\t\t\tlet scale = arguments[0];\n\t\t\tthis._modelType = PrecisionModel.FIXED;\n\t\t\tthis.setScale(scale);\n\t\t} else if (arguments[0] instanceof PrecisionModel) {\n\t\t\tlet pm = arguments[0];\n\t\t\tthis._modelType = pm._modelType;\n\t\t\tthis._scale = pm._scale;\n\t\t}\n\t}\n};\nPrecisionModel.serialVersionUID = 7777263578777803835;\nPrecisionModel.FIXED = new Type(\"FIXED\");\nPrecisionModel.FLOATING = new Type(\"FLOATING\");\nPrecisionModel.FLOATING_SINGLE = new Type(\"FLOATING SINGLE\");\nPrecisionModel.maximumPreciseValue = 9007199254740992.0;\n","import CoordinateSequenceFactory from './CoordinateSequenceFactory';\nimport LineString from './LineString';\nimport Geometry from './Geometry';\nimport hasInterface from '../../../../hasInterface';\nimport Coordinate from './Coordinate';\nimport Point from './Point';\nimport Polygon from './Polygon';\nimport MultiPoint from './MultiPoint';\nimport GeometryEditor from './util/GeometryEditor';\nimport LinearRing from './LinearRing';\nimport CoordinateArraySequenceFactory from './impl/CoordinateArraySequenceFactory';\nimport MultiPolygon from './MultiPolygon';\nimport CoordinateSequences from './CoordinateSequences';\nimport CoordinateSequence from './CoordinateSequence';\nimport GeometryCollection from './GeometryCollection';\nimport PrecisionModel from './PrecisionModel';\nimport Serializable from '../../../../java/io/Serializable';\nimport Assert from '../util/Assert';\nimport MultiLineString from './MultiLineString';\nexport default class GeometryFactory {\n\tconstructor() {\n\t\tGeometryFactory.constructor_.apply(this, arguments);\n\t}\n\tstatic toMultiPolygonArray(multiPolygons) {\n\t\tvar multiPolygonArray = new Array(multiPolygons.size()).fill(null);\n\t\treturn multiPolygons.toArray(multiPolygonArray);\n\t}\n\tstatic toGeometryArray(geometries) {\n\t\tif (geometries === null) return null;\n\t\tvar geometryArray = new Array(geometries.size()).fill(null);\n\t\treturn geometries.toArray(geometryArray);\n\t}\n\tstatic getDefaultCoordinateSequenceFactory() {\n\t\treturn CoordinateArraySequenceFactory.instance();\n\t}\n\tstatic toMultiLineStringArray(multiLineStrings) {\n\t\tvar multiLineStringArray = new Array(multiLineStrings.size()).fill(null);\n\t\treturn multiLineStrings.toArray(multiLineStringArray);\n\t}\n\tstatic toLineStringArray(lineStrings) {\n\t\tvar lineStringArray = new Array(lineStrings.size()).fill(null);\n\t\treturn lineStrings.toArray(lineStringArray);\n\t}\n\tstatic toMultiPointArray(multiPoints) {\n\t\tvar multiPointArray = new Array(multiPoints.size()).fill(null);\n\t\treturn multiPoints.toArray(multiPointArray);\n\t}\n\tstatic toLinearRingArray(linearRings) {\n\t\tvar linearRingArray = new Array(linearRings.size()).fill(null);\n\t\treturn linearRings.toArray(linearRingArray);\n\t}\n\tstatic toPointArray(points) {\n\t\tvar pointArray = new Array(points.size()).fill(null);\n\t\treturn points.toArray(pointArray);\n\t}\n\tstatic toPolygonArray(polygons) {\n\t\tvar polygonArray = new Array(polygons.size()).fill(null);\n\t\treturn polygons.toArray(polygonArray);\n\t}\n\tstatic createPointFromInternalCoord(coord, exemplar) {\n\t\texemplar.getPrecisionModel().makePrecise(coord);\n\t\treturn exemplar.getFactory().createPoint(coord);\n\t}\n\ttoGeometry(envelope) {\n\t\tif (envelope.isNull()) {\n\t\t\treturn this.createPoint();\n\t\t}\n\t\tif (envelope.getMinX() === envelope.getMaxX() && envelope.getMinY() === envelope.getMaxY()) {\n\t\t\treturn this.createPoint(new Coordinate(envelope.getMinX(), envelope.getMinY()));\n\t\t}\n\t\tif (envelope.getMinX() === envelope.getMaxX() || envelope.getMinY() === envelope.getMaxY()) {\n\t\t\treturn this.createLineString([new Coordinate(envelope.getMinX(), envelope.getMinY()), new Coordinate(envelope.getMaxX(), envelope.getMaxY())]);\n\t\t}\n\t\treturn this.createPolygon(this.createLinearRing([new Coordinate(envelope.getMinX(), envelope.getMinY()), new Coordinate(envelope.getMinX(), envelope.getMaxY()), new Coordinate(envelope.getMaxX(), envelope.getMaxY()), new Coordinate(envelope.getMaxX(), envelope.getMinY()), new Coordinate(envelope.getMinX(), envelope.getMinY())]), null);\n\t}\n\tcreateLineString() {\n\t\tif (arguments.length === 0) {\n\t\t\treturn this.createLineString(this.getCoordinateSequenceFactory().create([]));\n\t\t} else if (arguments.length === 1) {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\tlet coordinates = arguments[0];\n\t\t\t\treturn this.createLineString(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null);\n\t\t\t} else if (hasInterface(arguments[0], CoordinateSequence)) {\n\t\t\t\tlet coordinates = arguments[0];\n\t\t\t\treturn new LineString(coordinates, this);\n\t\t\t}\n\t\t}\n\t}\n\tcreateMultiLineString() {\n\t\tif (arguments.length === 0) {\n\t\t\treturn new MultiLineString(null, this);\n\t\t} else if (arguments.length === 1) {\n\t\t\tlet lineStrings = arguments[0];\n\t\t\treturn new MultiLineString(lineStrings, this);\n\t\t}\n\t}\n\tbuildGeometry(geomList) {\n\t\tvar geomClass = null;\n\t\tvar isHeterogeneous = false;\n\t\tvar hasGeometryCollection = false;\n\t\tfor (var i = geomList.iterator(); i.hasNext(); ) {\n\t\t\tvar geom = i.next();\n\t\t\tvar partClass = geom.getClass();\n\t\t\tif (geomClass === null) {\n\t\t\t\tgeomClass = partClass;\n\t\t\t}\n\t\t\tif (partClass !== geomClass) {\n\t\t\t\tisHeterogeneous = true;\n\t\t\t}\n\t\t\tif (geom instanceof GeometryCollection) hasGeometryCollection = true;\n\t\t}\n\t\tif (geomClass === null) {\n\t\t\treturn this.createGeometryCollection();\n\t\t}\n\t\tif (isHeterogeneous || hasGeometryCollection) {\n\t\t\treturn this.createGeometryCollection(GeometryFactory.toGeometryArray(geomList));\n\t\t}\n\t\tvar geom0 = geomList.iterator().next();\n\t\tvar isCollection = geomList.size() > 1;\n\t\tif (isCollection) {\n\t\t\tif (geom0 instanceof Polygon) {\n\t\t\t\treturn this.createMultiPolygon(GeometryFactory.toPolygonArray(geomList));\n\t\t\t} else if (geom0 instanceof LineString) {\n\t\t\t\treturn this.createMultiLineString(GeometryFactory.toLineStringArray(geomList));\n\t\t\t} else if (geom0 instanceof Point) {\n\t\t\t\treturn this.createMultiPoint(GeometryFactory.toPointArray(geomList));\n\t\t\t}\n\t\t\tAssert.shouldNeverReachHere(\"Unhandled class: \" + geom0.getClass().getName());\n\t\t}\n\t\treturn geom0;\n\t}\n\tcreateMultiPointFromCoords(coordinates) {\n\t\treturn this.createMultiPoint(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null);\n\t}\n\tcreatePoint() {\n\t\tif (arguments.length === 0) {\n\t\t\treturn this.createPoint(this.getCoordinateSequenceFactory().create([]));\n\t\t} else if (arguments.length === 1) {\n\t\t\tif (arguments[0] instanceof Coordinate) {\n\t\t\t\tlet coordinate = arguments[0];\n\t\t\t\treturn this.createPoint(coordinate !== null ? this.getCoordinateSequenceFactory().create([coordinate]) : null);\n\t\t\t} else if (hasInterface(arguments[0], CoordinateSequence)) {\n\t\t\t\tlet coordinates = arguments[0];\n\t\t\t\treturn new Point(coordinates, this);\n\t\t\t}\n\t\t}\n\t}\n\tgetCoordinateSequenceFactory() {\n\t\treturn this._coordinateSequenceFactory;\n\t}\n\tcreatePolygon() {\n\t\tif (arguments.length === 0) {\n\t\t\treturn this.createPolygon(null, null);\n\t\t} else if (arguments.length === 1) {\n\t\t\tif (hasInterface(arguments[0], CoordinateSequence)) {\n\t\t\t\tlet shell = arguments[0];\n\t\t\t\treturn this.createPolygon(this.createLinearRing(shell));\n\t\t\t} else if (arguments[0] instanceof Array) {\n\t\t\t\tlet shell = arguments[0];\n\t\t\t\treturn this.createPolygon(this.createLinearRing(shell));\n\t\t\t} else if (arguments[0] instanceof LinearRing) {\n\t\t\t\tlet shell = arguments[0];\n\t\t\t\treturn this.createPolygon(shell, null);\n\t\t\t}\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet shell = arguments[0], holes = arguments[1];\n\t\t\treturn new Polygon(shell, holes, this);\n\t\t}\n\t}\n\tgetSRID() {\n\t\treturn this._SRID;\n\t}\n\tcreateGeometryCollection() {\n\t\tif (arguments.length === 0) {\n\t\t\treturn new GeometryCollection(null, this);\n\t\t} else if (arguments.length === 1) {\n\t\t\tlet geometries = arguments[0];\n\t\t\treturn new GeometryCollection(geometries, this);\n\t\t}\n\t}\n\tcreateGeometry(g) {\n\t\tvar editor = new GeometryEditor(this);\n\t\treturn editor.edit(g, new (class {\n\t\t\tedit() {\n\t\t\t\tif (arguments.length === 2 && (arguments[1] instanceof Geometry && hasInterface(arguments[0], CoordinateSequence))) {\n\t\t\t\t\tlet coordSeq = arguments[0], geometry = arguments[1];\n\t\t\t\t\treturn this._coordinateSequenceFactory.create(coordSeq);\n\t\t\t\t}\n\t\t\t}\n\t\t})());\n\t}\n\tgetPrecisionModel() {\n\t\treturn this._precisionModel;\n\t}\n\tcreateLinearRing() {\n\t\tif (arguments.length === 0) {\n\t\t\treturn this.createLinearRing(this.getCoordinateSequenceFactory().create([]));\n\t\t} else if (arguments.length === 1) {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\tlet coordinates = arguments[0];\n\t\t\t\treturn this.createLinearRing(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null);\n\t\t\t} else if (hasInterface(arguments[0], CoordinateSequence)) {\n\t\t\t\tlet coordinates = arguments[0];\n\t\t\t\treturn new LinearRing(coordinates, this);\n\t\t\t}\n\t\t}\n\t}\n\tcreateMultiPolygon() {\n\t\tif (arguments.length === 0) {\n\t\t\treturn new MultiPolygon(null, this);\n\t\t} else if (arguments.length === 1) {\n\t\t\tlet polygons = arguments[0];\n\t\t\treturn new MultiPolygon(polygons, this);\n\t\t}\n\t}\n\tcreateMultiPoint() {\n\t\tif (arguments.length === 0) {\n\t\t\treturn new MultiPoint(null, this);\n\t\t} else if (arguments.length === 1) {\n\t\t\tif (arguments[0] instanceof Array) {\n\t\t\t\tlet point = arguments[0];\n\t\t\t\treturn new MultiPoint(point, this);\n\t\t\t} else if (hasInterface(arguments[0], CoordinateSequence)) {\n\t\t\t\tlet coordinates = arguments[0];\n\t\t\t\tif (coordinates === null) {\n\t\t\t\t\treturn this.createMultiPoint(new Array(0).fill(null));\n\t\t\t\t}\n\t\t\t\tvar points = new Array(coordinates.size()).fill(null);\n\t\t\t\tfor (var i = 0; i < coordinates.size(); i++) {\n\t\t\t\t\tvar ptSeq = this.getCoordinateSequenceFactory().create(1, coordinates.getDimension());\n\t\t\t\t\tCoordinateSequences.copy(coordinates, i, ptSeq, 0, 1);\n\t\t\t\t\tpoints[i] = this.createPoint(ptSeq);\n\t\t\t\t}\n\t\t\t\treturn this.createMultiPoint(points);\n\t\t\t}\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn GeometryFactory;\n\t}\n\tget interfaces_() {\n\t\treturn [Serializable];\n\t}\n}\nGeometryFactory.constructor_ = function () {\n\tthis._precisionModel = null;\n\tthis._coordinateSequenceFactory = null;\n\tthis._SRID = null;\n\tif (arguments.length === 0) {\n\t\tGeometryFactory.constructor_.call(this, new PrecisionModel(), 0);\n\t} else if (arguments.length === 1) {\n\t\tif (hasInterface(arguments[0], CoordinateSequenceFactory)) {\n\t\t\tlet coordinateSequenceFactory = arguments[0];\n\t\t\tGeometryFactory.constructor_.call(this, new PrecisionModel(), 0, coordinateSequenceFactory);\n\t\t} else if (arguments[0] instanceof PrecisionModel) {\n\t\t\tlet precisionModel = arguments[0];\n\t\t\tGeometryFactory.constructor_.call(this, precisionModel, 0, GeometryFactory.getDefaultCoordinateSequenceFactory());\n\t\t}\n\t} else if (arguments.length === 2) {\n\t\tlet precisionModel = arguments[0], SRID = arguments[1];\n\t\tGeometryFactory.constructor_.call(this, precisionModel, SRID, GeometryFactory.getDefaultCoordinateSequenceFactory());\n\t} else if (arguments.length === 3) {\n\t\tlet precisionModel = arguments[0], SRID = arguments[1], coordinateSequenceFactory = arguments[2];\n\t\tthis._precisionModel = precisionModel;\n\t\tthis._coordinateSequenceFactory = coordinateSequenceFactory;\n\t\tthis._SRID = SRID;\n\t}\n};\nGeometryFactory.serialVersionUID = -6820524753094095635;\n","import Coordinate from '../geom/Coordinate'\nimport GeometryFactory from '../geom/GeometryFactory'\n\nconst regExes = {\n 'typeStr': /^\\s*(\\w+)\\s*\\(\\s*(.*)\\s*\\)\\s*$/,\n 'emptyTypeStr': /^\\s*(\\w+)\\s*EMPTY\\s*$/,\n 'spaces': /\\s+/,\n 'parenComma': /\\)\\s*,\\s*\\(/,\n 'doubleParenComma': /\\)\\s*\\)\\s*,\\s*\\(\\s*\\(/, // can't use {2} here\n 'trimParens': /^\\s*\\(?(.*?)\\)?\\s*$/\n}\n\n/**\n * Class for reading and writing Well-Known Text.\n *\n * NOTE: Adapted from OpenLayers 2.11 implementation.\n */\n\nexport default class WKTParser {\n /** Create a new parser for WKT\n *\n * @param {GeometryFactory} geometryFactory\n * @return An instance of WKTParser.\n * @private\n */\n constructor(geometryFactory) {\n this.geometryFactory = geometryFactory || new GeometryFactory()\n this.precisionModel = this.geometryFactory.getPrecisionModel()\n }\n\n /**\n * Deserialize a WKT string and return a geometry. Supports WKT for POINT,\n * MULTIPOINT, LINESTRING, LINEARRING, MULTILINESTRING, POLYGON, MULTIPOLYGON,\n * and GEOMETRYCOLLECTION.\n *\n * @param {String} wkt A WKT string.\n * @return {Geometry} A geometry instance.\n * @private\n */\n read (wkt) {\n var geometry, type, str\n wkt = wkt.replace(/[\\n\\r]/g, ' ')\n var matches = regExes.typeStr.exec(wkt)\n if (wkt.search('EMPTY') !== -1) {\n matches = regExes.emptyTypeStr.exec(wkt)\n matches[2] = undefined\n }\n if (matches) {\n type = matches[1].toLowerCase()\n str = matches[2]\n if (parse[type]) {\n geometry = parse[type].call(this, str)\n }\n }\n\n if (geometry === undefined) throw new Error('Could not parse WKT ' + wkt)\n\n return geometry\n }\n\n /**\n * Serialize a geometry into a WKT string.\n *\n * @param {Geometry} geometry A feature or array of features.\n * @return {String} The WKT string representation of the input geometries.\n * @private\n */\n write (geometry) {\n return this.extractGeometry(geometry)\n }\n\n /**\n * Entry point to construct the WKT for a single Geometry object.\n *\n * @param {Geometry} geometry\n * @return {String} A WKT string of representing the geometry.\n * @private\n */\n extractGeometry (geometry) {\n var type = geometry.getGeometryType().toLowerCase()\n if (!extract[type]) {\n return null\n }\n var wktType = type.toUpperCase()\n var data\n if (geometry.isEmpty()) {\n data = wktType + ' EMPTY'\n } else {\n data = wktType + '(' + extract[type].call(this, geometry) + ')'\n }\n return data\n }\n}\n\n/**\n * Object with properties corresponding to the geometry types. Property values\n * are functions that do the actual data extraction.\n * @private\n */\nconst extract = {\n coordinate (coordinate) {\n return coordinate.x + ' ' + coordinate.y\n },\n\n /**\n * Return a space delimited string of point coordinates.\n *\n * @param {Point}\n * point\n * @return {String} A string of coordinates representing the point.\n */\n point (point) {\n return extract.coordinate.call(this, point._coordinates._coordinates[0])\n },\n\n /**\n * Return a comma delimited string of point coordinates from a multipoint.\n *\n * @param {MultiPoint}\n * multipoint\n * @return {String} A string of point coordinate strings representing the\n * multipoint.\n */\n multipoint (multipoint) {\n var array = []\n for (let i = 0, len = multipoint._geometries.length; i < len; ++i) {\n array.push('(' + extract.point.call(this, multipoint._geometries[i]) + ')')\n }\n return array.join(',')\n },\n\n /**\n * Return a comma delimited string of point coordinates from a line.\n *\n * @param {LineString} linestring\n * @return {String} A string of point coordinate strings representing the linestring.\n */\n linestring (linestring) {\n var array = []\n for (let i = 0, len = linestring._points._coordinates.length; i < len; ++i) {\n array.push(extract.coordinate.call(this, linestring._points._coordinates[i]))\n }\n return array.join(',')\n },\n\n linearring (linearring) {\n var array = []\n for (let i = 0, len = linearring._points._coordinates.length; i < len; ++i) {\n array.push(extract.coordinate.call(this, linearring._points._coordinates[i]))\n }\n return array.join(',')\n },\n\n /**\n * Return a comma delimited string of linestring strings from a\n * multilinestring.\n *\n * @param {MultiLineString} multilinestring\n * @return {String} A string of of linestring strings representing the multilinestring.\n */\n multilinestring (multilinestring) {\n var array = []\n for (let i = 0, len = multilinestring._geometries.length; i < len; ++i) {\n array.push('(' +\n extract.linestring.call(this, multilinestring._geometries[i]) +\n ')')\n }\n return array.join(',')\n },\n\n /**\n * Return a comma delimited string of linear ring arrays from a polygon.\n *\n * @param {Polygon} polygon\n * @return {String} An array of linear ring arrays representing the polygon.\n */\n polygon (polygon) {\n var array = []\n array.push('(' + extract.linestring.call(this, polygon._shell) + ')')\n for (let i = 0, len = polygon._holes.length; i < len; ++i) {\n array.push('(' + extract.linestring.call(this, polygon._holes[i]) + ')')\n }\n return array.join(',')\n },\n\n /**\n * Return an array of polygon arrays from a multipolygon.\n *\n * @param {MultiPolygon} multipolygon\n * @return {String} An array of polygon arrays representing the multipolygon.\n */\n multipolygon (multipolygon) {\n var array = []\n for (let i = 0, len = multipolygon._geometries.length; i < len; ++i) {\n array.push('(' + extract.polygon.call(this, multipolygon._geometries[i]) + ')')\n }\n return array.join(',')\n },\n\n /**\n * Return the WKT portion between 'GEOMETRYCOLLECTION(' and ')' for an\n * geometrycollection.\n *\n * @param {GeometryCollection} collection\n * @return {String} internal WKT representation of the collection.\n */\n geometrycollection (collection) {\n var array = []\n for (let i = 0, len = collection._geometries.length; i < len; ++i) {\n array.push(this.extractGeometry(collection._geometries[i]))\n }\n return array.join(',')\n }\n}\n\n/**\n * Object with properties corresponding to the geometry types. Property values\n * are functions that do the actual parsing.\n * @private\n */\nconst parse = {\n \n coord (str) {\n var coords = str.trim().split(regExes.spaces)\n var coord = new Coordinate(Number.parseFloat(coords[0]), Number.parseFloat(coords[1]))\n this.precisionModel.makePrecise(coord)\n return coord\n },\n\n /**\n * Return point geometry given a point WKT fragment.\n *\n * @param {String} str A WKT fragment representing the point.\n * @return {Point} A point geometry.\n * @private\n */\n point (str) {\n if (str === undefined)\n return this.geometryFactory.createPoint()\n return this.geometryFactory.createPoint(parse.coord.call(this, str))\n },\n\n /**\n * Return a multipoint geometry given a multipoint WKT fragment.\n *\n * @param {String} str A WKT fragment representing the multipoint.\n * @return {Point} A multipoint feature.\n * @private\n */\n multipoint (str) {\n if (str === undefined)\n return this.geometryFactory.createMultiPoint()\n var point\n var points = str.trim().split(',')\n var components = []\n for (let i = 0, len = points.length; i < len; ++i) {\n point = points[i].replace(regExes.trimParens, '$1')\n components.push(parse.point.call(this, point))\n }\n return this.geometryFactory.createMultiPoint(components)\n },\n\n /**\n * Return a linestring geometry given a linestring WKT fragment.\n *\n * @param {String} str A WKT fragment representing the linestring.\n * @return {LineString} A linestring geometry.\n * @private\n */\n linestring (str) {\n if (str === undefined) {\n return this.geometryFactory.createLineString()\n }\n\n var points = str.trim().split(',')\n var components = []\n var coords\n for (let i = 0, len = points.length; i < len; ++i) {\n components.push(parse.coord.call(this, points[i]))\n }\n return this.geometryFactory.createLineString(components)\n },\n\n /**\n * Return a linearring geometry given a linearring WKT fragment.\n *\n * @param {String} str A WKT fragment representing the linearring.\n * @return {LinearRing} A linearring geometry.\n * @private\n */\n linearring (str) {\n if (str === undefined) {\n return this.geometryFactory.createLinearRing()\n }\n\n var points = str.trim().split(',')\n var components = []\n var coords\n for (let i = 0, len = points.length; i < len; ++i) {\n components.push(parse.coord.call(this, points[i]))\n }\n return this.geometryFactory.createLinearRing(components)\n },\n\n /**\n * Return a multilinestring geometry given a multilinestring WKT fragment.\n *\n * @param {String} str A WKT fragment representing the multilinestring.\n * @return {MultiLineString} A multilinestring geometry.\n * @private\n */\n multilinestring (str) {\n if (str === undefined) {\n return this.geometryFactory.createMultiLineString()\n }\n\n var line\n var lines = str.trim().split(regExes.parenComma)\n var components = []\n for (let i = 0, len = lines.length; i < len; ++i) {\n line = lines[i].replace(regExes.trimParens, '$1')\n components.push(parse.linestring.call(this, line))\n }\n return this.geometryFactory.createMultiLineString(components)\n },\n\n /**\n * Return a polygon geometry given a polygon WKT fragment.\n *\n * @param {String} str A WKT fragment representing the polygon.\n * @return {Polygon} A polygon geometry.\n * @private\n */\n polygon (str) {\n if (str === undefined) {\n return this.geometryFactory.createPolygon()\n }\n\n var ring, linestring, linearring\n var rings = str.trim().split(regExes.parenComma)\n var shell\n var holes = []\n for (let i = 0, len = rings.length; i < len; ++i) {\n ring = rings[i].replace(regExes.trimParens, '$1')\n linestring = parse.linestring.call(this, ring)\n linearring = this.geometryFactory.createLinearRing(linestring._points)\n if (i === 0) {\n shell = linearring\n } else {\n holes.push(linearring)\n }\n }\n return this.geometryFactory.createPolygon(shell, holes)\n },\n\n /**\n * Return a multipolygon geometry given a multipolygon WKT fragment.\n *\n * @param {String} str A WKT fragment representing the multipolygon.\n * @return {MultiPolygon} A multipolygon geometry.\n * @private\n */\n multipolygon (str) {\n if (str === undefined) {\n return this.geometryFactory.createMultiPolygon()\n }\n\n var polygon\n var polygons = str.trim().split(regExes.doubleParenComma)\n var components = []\n for (let i = 0, len = polygons.length; i < len; ++i) {\n polygon = polygons[i].replace(regExes.trimParens, '$1')\n components.push(parse.polygon.call(this, polygon))\n }\n return this.geometryFactory.createMultiPolygon(components)\n },\n\n /**\n * Return a geometrycollection given a geometrycollection WKT fragment.\n *\n * @param {String} str A WKT fragment representing the geometrycollection.\n * @return {GeometryCollection}\n * @private\n */\n geometrycollection (str) {\n if (str === undefined) {\n return this.geometryFactory.createGeometryCollection()\n }\n\n // separate components of the collection with |\n str = str.replace(/,\\s*([A-Za-z])/g, '|$1')\n var wktArray = str.trim().split('|')\n var components = []\n for (let i = 0, len = wktArray.length; i < len; ++i) {\n components.push(this.read(wktArray[i]))\n }\n return this.geometryFactory.createGeometryCollection(components)\n }\n}\n","/**\n * @module org/locationtech/jts/io/WKTWriter\n */\n\nimport WKTParser from './WKTParser'\n\n/**\n * Writes the Well-Known Text representation of a {@link Geometry}. The\n * Well-Known Text format is defined in the OGC Simple Features\n * Specification for SQL.\n *
\n * The WKTWriter
outputs coordinates rounded to the precision\n * model. Only the maximum number of decimal places necessary to represent the\n * ordinates to the required precision will be output.\n *
\n * The SFS WKT spec does not define a special tag for {@link LinearRing}s.\n * Under the spec, rings are output as \n * LINESTRING
s.\n */\nexport default class WKTWriter {\n /**\n * @param {GeometryFactory} geometryFactory\n */\n constructor(geometryFactory) {\n this.parser = new WKTParser(geometryFactory)\n }\n /**\n * Converts a Geometry
to its Well-known Text representation.\n *\n * @param {Geometry} geometry a Geometry
to process.\n * @return {string} a GeoJSONReader
is parameterized by a GeometryFactory
,\n * to allow it to create Geometry
objects of the appropriate\n * implementation. In particular, the GeometryFactory
determines\n * the PrecisionModel
and SRID
that is used.\n *\n * @param {GeometryFactory} geometryFactory\n */\n constructor(geometryFactory) {\n this.parser = new GeoJSONParser(geometryFactory || new GeometryFactory())\n }\n\n /**\n * Reads a GeoJSON representation of a {@link Geometry}\n *\n * Will also parse GeoJSON Features/FeatureCollections as custom objects.\n *\n * @param {Object|String} geoJson a GeoJSON Object or String.\n * @return {Geometry|Object} a Geometry or Feature/FeatureCollection representation.
\n * @memberof module:org/locationtech/jts/io/GeoJSONReader#\n */\n read (geoJson) {\n var geometry = this.parser.read(geoJson)\n return geometry\n }\n}\n","/**\n * @module org/locationtech/jts/io/GeoJSONWriter\n */\n\nimport GeoJSONParser from './GeoJSONParser'\n\n/**\n * Writes the GeoJSON representation of a {@link Geometry}. The\n * The GeoJSON format is defined here.\n */\nexport default class GeoJSONWriter {\n /**\n * The GeoJSONWriter
outputs coordinates rounded to the precision\n * model. Only the maximum number of decimal places necessary to represent the\n * ordinates to the required precision will be output.\n *\n * @param {GeometryFactory} geometryFactory\n * @constructor\n */\n constructor() {\n this.parser = new GeoJSONParser(this.geometryFactory)\n }\n\n /**\n * Converts a Geometry
to its GeoJSON representation.\n *\n * @param {Geometry}\n * geometry a Geometry
to process.\n * @return {Object} The GeoJSON representation of the Geometry.\n * @memberof module:org/locationtech/jts/io/GeoJSONWriter#\n */\n write (geometry) {\n return this.parser.write(geometry)\n }\n}","/**\n * @module org/locationtech/jts/io/WKTReader\n */\n\nimport GeometryFactory from '../geom/GeometryFactory'\nimport WKTParser from './WKTParser'\n\n/**\n * Converts a geometry in Well-Known Text format to a {@link Geometry}.\n * WKTReader
supports extracting Geometry
objects\n * from either {@link Reader}s or {@link String}s. This allows it to function\n * as a parser to read Geometry
objects from text blocks embedded\n * in other data formats (e.g. XML).\n */\n\nexport default class WKTReader {\n /**\n * A WKTReader
is parameterized by a GeometryFactory
,\n * to allow it to create Geometry
objects of the appropriate\n * implementation. In particular, the GeometryFactory
determines\n * the PrecisionModel
and SRID
that is used.\n * @param {GeometryFactory} geometryFactory\n */\n constructor(geometryFactory) {\n this.parser = new WKTParser(geometryFactory || new GeometryFactory())\n }\n /**\n * Reads a Well-Known Text representation of a {@link Geometry}\n *\n * @param {string}\n * wkt a Geometry
read from\n * string.
\n * @memberof module:org/locationtech/jts/io/WKTReader#\n */\n read (wkt) {\n var geometry = this.parser.read(wkt)\n return geometry\n }\n}","import Assert from '../util/Assert';\nexport default class SegmentPointComparator {\n\tconstructor() {\n\t\tSegmentPointComparator.constructor_.apply(this, arguments);\n\t}\n\tstatic relativeSign(x0, x1) {\n\t\tif (x0 < x1) return -1;\n\t\tif (x0 > x1) return 1;\n\t\treturn 0;\n\t}\n\tstatic compare(octant, p0, p1) {\n\t\tif (p0.equals2D(p1)) return 0;\n\t\tvar xSign = SegmentPointComparator.relativeSign(p0.x, p1.x);\n\t\tvar ySign = SegmentPointComparator.relativeSign(p0.y, p1.y);\n\t\tswitch (octant) {\n\t\t\tcase 0:\n\t\t\t\treturn SegmentPointComparator.compareValue(xSign, ySign);\n\t\t\tcase 1:\n\t\t\t\treturn SegmentPointComparator.compareValue(ySign, xSign);\n\t\t\tcase 2:\n\t\t\t\treturn SegmentPointComparator.compareValue(ySign, -xSign);\n\t\t\tcase 3:\n\t\t\t\treturn SegmentPointComparator.compareValue(-xSign, ySign);\n\t\t\tcase 4:\n\t\t\t\treturn SegmentPointComparator.compareValue(-xSign, -ySign);\n\t\t\tcase 5:\n\t\t\t\treturn SegmentPointComparator.compareValue(-ySign, -xSign);\n\t\t\tcase 6:\n\t\t\t\treturn SegmentPointComparator.compareValue(-ySign, xSign);\n\t\t\tcase 7:\n\t\t\t\treturn SegmentPointComparator.compareValue(xSign, -ySign);\n\t\t}\n\t\tAssert.shouldNeverReachHere(\"invalid octant value\");\n\t\treturn 0;\n\t}\n\tstatic compareValue(compareSign0, compareSign1) {\n\t\tif (compareSign0 < 0) return -1;\n\t\tif (compareSign0 > 0) return 1;\n\t\tif (compareSign1 < 0) return -1;\n\t\tif (compareSign1 > 0) return 1;\n\t\treturn 0;\n\t}\n\tgetClass() {\n\t\treturn SegmentPointComparator;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nSegmentPointComparator.constructor_ = function () {};\n","import Coordinate from '../geom/Coordinate';\nimport SegmentPointComparator from './SegmentPointComparator';\nimport Comparable from '../../../../java/lang/Comparable';\nexport default class SegmentNode {\n\tconstructor() {\n\t\tSegmentNode.constructor_.apply(this, arguments);\n\t}\n\tgetCoordinate() {\n\t\treturn this.coord;\n\t}\n\tprint(out) {\n\t\tout.print(this.coord);\n\t\tout.print(\" seg # = \" + this.segmentIndex);\n\t}\n\tcompareTo(obj) {\n\t\tvar other = obj;\n\t\tif (this.segmentIndex < other.segmentIndex) return -1;\n\t\tif (this.segmentIndex > other.segmentIndex) return 1;\n\t\tif (this.coord.equals2D(other.coord)) return 0;\n\t\treturn SegmentPointComparator.compare(this._segmentOctant, this.coord, other.coord);\n\t}\n\tisEndPoint(maxSegmentIndex) {\n\t\tif (this.segmentIndex === 0 && !this._isInterior) return true;\n\t\tif (this.segmentIndex === maxSegmentIndex) return true;\n\t\treturn false;\n\t}\n\tisInterior() {\n\t\treturn this._isInterior;\n\t}\n\tgetClass() {\n\t\treturn SegmentNode;\n\t}\n\tget interfaces_() {\n\t\treturn [Comparable];\n\t}\n}\nSegmentNode.constructor_ = function () {\n\tthis._segString = null;\n\tthis.coord = null;\n\tthis.segmentIndex = null;\n\tthis._segmentOctant = null;\n\tthis._isInterior = null;\n\tlet segString = arguments[0], coord = arguments[1], segmentIndex = arguments[2], segmentOctant = arguments[3];\n\tthis._segString = segString;\n\tthis.coord = new Coordinate(coord);\n\tthis.segmentIndex = segmentIndex;\n\tthis._segmentOctant = segmentOctant;\n\tthis._isInterior = !coord.equals2D(segString.getCoordinate(segmentIndex));\n};\n","import CoordinateList from '../geom/CoordinateList';\nimport SegmentNode from './SegmentNode';\nimport Iterator from '../../../../java/util/Iterator';\nimport Coordinate from '../geom/Coordinate';\nimport NodedSegmentString from './NodedSegmentString';\nimport Integer from '../../../../java/lang/Integer';\nimport ArrayList from '../../../../java/util/ArrayList';\nimport RuntimeException from '../../../../java/lang/RuntimeException';\nimport Assert from '../util/Assert';\nimport TreeMap from '../../../../java/util/TreeMap';\nexport default class SegmentNodeList {\n\tconstructor() {\n\t\tSegmentNodeList.constructor_.apply(this, arguments);\n\t}\n\tgetSplitCoordinates() {\n\t\tvar coordList = new CoordinateList();\n\t\tthis.addEndpoints();\n\t\tvar it = this.iterator();\n\t\tvar eiPrev = it.next();\n\t\twhile (it.hasNext()) {\n\t\t\tvar ei = it.next();\n\t\t\tthis.addEdgeCoordinates(eiPrev, ei, coordList);\n\t\t\teiPrev = ei;\n\t\t}\n\t\treturn coordList.toCoordinateArray();\n\t}\n\taddCollapsedNodes() {\n\t\tvar collapsedVertexIndexes = new ArrayList();\n\t\tthis.findCollapsesFromInsertedNodes(collapsedVertexIndexes);\n\t\tthis.findCollapsesFromExistingVertices(collapsedVertexIndexes);\n\t\tfor (var it = collapsedVertexIndexes.iterator(); it.hasNext(); ) {\n\t\t\tvar vertexIndex = it.next().intValue();\n\t\t\tthis.add(this._edge.getCoordinate(vertexIndex), vertexIndex);\n\t\t}\n\t}\n\tprint(out) {\n\t\tout.println(\"Intersections:\");\n\t\tfor (var it = this.iterator(); it.hasNext(); ) {\n\t\t\tvar ei = it.next();\n\t\t\tei.print(out);\n\t\t}\n\t}\n\tfindCollapsesFromExistingVertices(collapsedVertexIndexes) {\n\t\tfor (var i = 0; i < this._edge.size() - 2; i++) {\n\t\t\tvar p0 = this._edge.getCoordinate(i);\n\t\t\tvar p1 = this._edge.getCoordinate(i + 1);\n\t\t\tvar p2 = this._edge.getCoordinate(i + 2);\n\t\t\tif (p0.equals2D(p2)) {\n\t\t\t\tcollapsedVertexIndexes.add(new Integer(i + 1));\n\t\t\t}\n\t\t}\n\t}\n\taddEdgeCoordinates(ei0, ei1, coordList) {\n\t\tvar npts = ei1.segmentIndex - ei0.segmentIndex + 2;\n\t\tvar lastSegStartPt = this._edge.getCoordinate(ei1.segmentIndex);\n\t\tvar useIntPt1 = ei1.isInterior() || !ei1.coord.equals2D(lastSegStartPt);\n\t\tif (!useIntPt1) {\n\t\t\tnpts--;\n\t\t}\n\t\tvar ipt = 0;\n\t\tcoordList.add(new Coordinate(ei0.coord), false);\n\t\tfor (var i = ei0.segmentIndex + 1; i <= ei1.segmentIndex; i++) {\n\t\t\tcoordList.add(this._edge.getCoordinate(i));\n\t\t}\n\t\tif (useIntPt1) {\n\t\t\tcoordList.add(new Coordinate(ei1.coord));\n\t\t}\n\t}\n\titerator() {\n\t\treturn this._nodeMap.values().iterator();\n\t}\n\taddSplitEdges(edgeList) {\n\t\tthis.addEndpoints();\n\t\tthis.addCollapsedNodes();\n\t\tvar it = this.iterator();\n\t\tvar eiPrev = it.next();\n\t\twhile (it.hasNext()) {\n\t\t\tvar ei = it.next();\n\t\t\tvar newEdge = this.createSplitEdge(eiPrev, ei);\n\t\t\tedgeList.add(newEdge);\n\t\t\teiPrev = ei;\n\t\t}\n\t}\n\tfindCollapseIndex(ei0, ei1, collapsedVertexIndex) {\n\t\tif (!ei0.coord.equals2D(ei1.coord)) return false;\n\t\tvar numVerticesBetween = ei1.segmentIndex - ei0.segmentIndex;\n\t\tif (!ei1.isInterior()) {\n\t\t\tnumVerticesBetween--;\n\t\t}\n\t\tif (numVerticesBetween === 1) {\n\t\t\tcollapsedVertexIndex[0] = ei0.segmentIndex + 1;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tfindCollapsesFromInsertedNodes(collapsedVertexIndexes) {\n\t\tvar collapsedVertexIndex = new Array(1).fill(null);\n\t\tvar it = this.iterator();\n\t\tvar eiPrev = it.next();\n\t\twhile (it.hasNext()) {\n\t\t\tvar ei = it.next();\n\t\t\tvar isCollapsed = this.findCollapseIndex(eiPrev, ei, collapsedVertexIndex);\n\t\t\tif (isCollapsed) collapsedVertexIndexes.add(new Integer(collapsedVertexIndex[0]));\n\t\t\teiPrev = ei;\n\t\t}\n\t}\n\tgetEdge() {\n\t\treturn this._edge;\n\t}\n\taddEndpoints() {\n\t\tvar maxSegIndex = this._edge.size() - 1;\n\t\tthis.add(this._edge.getCoordinate(0), 0);\n\t\tthis.add(this._edge.getCoordinate(maxSegIndex), maxSegIndex);\n\t}\n\tcreateSplitEdge(ei0, ei1) {\n\t\tvar npts = ei1.segmentIndex - ei0.segmentIndex + 2;\n\t\tvar lastSegStartPt = this._edge.getCoordinate(ei1.segmentIndex);\n\t\tvar useIntPt1 = ei1.isInterior() || !ei1.coord.equals2D(lastSegStartPt);\n\t\tif (!useIntPt1) {\n\t\t\tnpts--;\n\t\t}\n\t\tvar pts = new Array(npts).fill(null);\n\t\tvar ipt = 0;\n\t\tpts[ipt++] = new Coordinate(ei0.coord);\n\t\tfor (var i = ei0.segmentIndex + 1; i <= ei1.segmentIndex; i++) {\n\t\t\tpts[ipt++] = this._edge.getCoordinate(i);\n\t\t}\n\t\tif (useIntPt1) pts[ipt] = new Coordinate(ei1.coord);\n\t\treturn new NodedSegmentString(pts, this._edge.getData());\n\t}\n\tadd(intPt, segmentIndex) {\n\t\tvar eiNew = new SegmentNode(this._edge, intPt, segmentIndex, this._edge.getSegmentOctant(segmentIndex));\n\t\tvar ei = this._nodeMap.get(eiNew);\n\t\tif (ei !== null) {\n\t\t\tAssert.isTrue(ei.coord.equals2D(intPt), \"Found equal nodes with different coordinates\");\n\t\t\treturn ei;\n\t\t}\n\t\tthis._nodeMap.put(eiNew, eiNew);\n\t\treturn eiNew;\n\t}\n\tcheckSplitEdgesCorrectness(splitEdges) {\n\t\tvar edgePts = this._edge.getCoordinates();\n\t\tvar split0 = splitEdges.get(0);\n\t\tvar pt0 = split0.getCoordinate(0);\n\t\tif (!pt0.equals2D(edgePts[0])) throw new RuntimeException(\"bad split edge start point at \" + pt0);\n\t\tvar splitn = splitEdges.get(splitEdges.size() - 1);\n\t\tvar splitnPts = splitn.getCoordinates();\n\t\tvar ptn = splitnPts[splitnPts.length - 1];\n\t\tif (!ptn.equals2D(edgePts[edgePts.length - 1])) throw new RuntimeException(\"bad split edge end point at \" + ptn);\n\t}\n\tgetClass() {\n\t\treturn SegmentNodeList;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nSegmentNodeList.constructor_ = function () {\n\tthis._nodeMap = new TreeMap();\n\tthis._edge = null;\n\tlet edge = arguments[0];\n\tthis._edge = edge;\n};\nclass NodeVertexIterator {\n\tconstructor() {\n\t\tNodeVertexIterator.constructor_.apply(this, arguments);\n\t}\n\tnext() {\n\t\tif (this._currNode === null) {\n\t\t\tthis._currNode = this._nextNode;\n\t\t\tthis._currSegIndex = this._currNode.segmentIndex;\n\t\t\tthis.readNextNode();\n\t\t\treturn this._currNode;\n\t\t}\n\t\tif (this._nextNode === null) return null;\n\t\tif (this._nextNode.segmentIndex === this._currNode.segmentIndex) {\n\t\t\tthis._currNode = this._nextNode;\n\t\t\tthis._currSegIndex = this._currNode.segmentIndex;\n\t\t\tthis.readNextNode();\n\t\t\treturn this._currNode;\n\t\t}\n\t\tif (this._nextNode.segmentIndex > this._currNode.segmentIndex) {}\n\t\treturn null;\n\t}\n\tremove() {\n\t\tthrow new UnsupportedOperationException(this.getClass().getName());\n\t}\n\thasNext() {\n\t\tif (this._nextNode === null) return false;\n\t\treturn true;\n\t}\n\treadNextNode() {\n\t\tif (this._nodeIt.hasNext()) this._nextNode = this._nodeIt.next(); else this._nextNode = null;\n\t}\n\tgetClass() {\n\t\treturn NodeVertexIterator;\n\t}\n\tget interfaces_() {\n\t\treturn [Iterator];\n\t}\n}\nNodeVertexIterator.constructor_ = function () {\n\tthis._nodeList = null;\n\tthis._edge = null;\n\tthis._nodeIt = null;\n\tthis._currNode = null;\n\tthis._nextNode = null;\n\tthis._currSegIndex = 0;\n\tlet nodeList = arguments[0];\n\tthis._nodeList = nodeList;\n\tthis._edge = nodeList.getEdge();\n\tthis._nodeIt = nodeList.iterator();\n\tthis.readNextNode();\n};\n","import Coordinate from '../geom/Coordinate';\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException';\nexport default class Octant {\n\tconstructor() {\n\t\tOctant.constructor_.apply(this, arguments);\n\t}\n\tstatic octant() {\n\t\tif (typeof arguments[0] === \"number\" && typeof arguments[1] === \"number\") {\n\t\t\tlet dx = arguments[0], dy = arguments[1];\n\t\t\tif (dx === 0.0 && dy === 0.0) throw new IllegalArgumentException(\"Cannot compute the octant for point ( \" + dx + \", \" + dy + \" )\");\n\t\t\tvar adx = Math.abs(dx);\n\t\t\tvar ady = Math.abs(dy);\n\t\t\tif (dx >= 0) {\n\t\t\t\tif (dy >= 0) {\n\t\t\t\t\tif (adx >= ady) return 0; else return 1;\n\t\t\t\t} else {\n\t\t\t\t\tif (adx >= ady) return 7; else return 6;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (dy >= 0) {\n\t\t\t\t\tif (adx >= ady) return 3; else return 2;\n\t\t\t\t} else {\n\t\t\t\t\tif (adx >= ady) return 4; else return 5;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {\n\t\t\tlet p0 = arguments[0], p1 = arguments[1];\n\t\t\tvar dx = p1.x - p0.x;\n\t\t\tvar dy = p1.y - p0.y;\n\t\t\tif (dx === 0.0 && dy === 0.0) throw new IllegalArgumentException(\"Cannot compute the octant for two identical points \" + p0);\n\t\t\treturn Octant.octant(dx, dy);\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn Octant;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nOctant.constructor_ = function () {};\n","export default class SegmentString {\n\tconstructor() {\n\t\tSegmentString.constructor_.apply(this, arguments);\n\t}\n\tgetCoordinates() {}\n\tsize() {}\n\tgetCoordinate(i) {}\n\tisClosed() {}\n\tsetData(data) {}\n\tgetData() {}\n\tgetClass() {\n\t\treturn SegmentString;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nSegmentString.constructor_ = function () {};\n","import SegmentString from './SegmentString';\nexport default class NodableSegmentString {\n\tconstructor() {\n\t\tNodableSegmentString.constructor_.apply(this, arguments);\n\t}\n\taddIntersection(intPt, segmentIndex) {}\n\tgetClass() {\n\t\treturn NodableSegmentString;\n\t}\n\tget interfaces_() {\n\t\treturn [SegmentString];\n\t}\n}\nNodableSegmentString.constructor_ = function () {};\n","import SegmentNodeList from './SegmentNodeList';\nimport WKTWriter from '../io/WKTWriter';\nimport CoordinateArraySequence from '../geom/impl/CoordinateArraySequence';\nimport Coordinate from '../geom/Coordinate';\nimport Octant from './Octant';\nimport ArrayList from '../../../../java/util/ArrayList';\nimport NodableSegmentString from './NodableSegmentString';\nexport default class NodedSegmentString {\n\tconstructor() {\n\t\tNodedSegmentString.constructor_.apply(this, arguments);\n\t}\n\tstatic getNodedSubstrings() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet segStrings = arguments[0];\n\t\t\tvar resultEdgelist = new ArrayList();\n\t\t\tNodedSegmentString.getNodedSubstrings(segStrings, resultEdgelist);\n\t\t\treturn resultEdgelist;\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet segStrings = arguments[0], resultEdgelist = arguments[1];\n\t\t\tfor (var i = segStrings.iterator(); i.hasNext(); ) {\n\t\t\t\tvar ss = i.next();\n\t\t\t\tss.getNodeList().addSplitEdges(resultEdgelist);\n\t\t\t}\n\t\t}\n\t}\n\tgetCoordinates() {\n\t\treturn this._pts;\n\t}\n\tsize() {\n\t\treturn this._pts.length;\n\t}\n\tgetCoordinate(i) {\n\t\treturn this._pts[i];\n\t}\n\tisClosed() {\n\t\treturn this._pts[0].equals(this._pts[this._pts.length - 1]);\n\t}\n\tgetSegmentOctant(index) {\n\t\tif (index === this._pts.length - 1) return -1;\n\t\treturn this.safeOctant(this.getCoordinate(index), this.getCoordinate(index + 1));\n\t}\n\tsetData(data) {\n\t\tthis._data = data;\n\t}\n\tsafeOctant(p0, p1) {\n\t\tif (p0.equals2D(p1)) return 0;\n\t\treturn Octant.octant(p0, p1);\n\t}\n\tgetData() {\n\t\treturn this._data;\n\t}\n\taddIntersection() {\n\t\tif (arguments.length === 2) {\n\t\t\tlet intPt = arguments[0], segmentIndex = arguments[1];\n\t\t\tthis.addIntersectionNode(intPt, segmentIndex);\n\t\t} else if (arguments.length === 4) {\n\t\t\tlet li = arguments[0], segmentIndex = arguments[1], geomIndex = arguments[2], intIndex = arguments[3];\n\t\t\tvar intPt = new Coordinate(li.getIntersection(intIndex));\n\t\t\tthis.addIntersection(intPt, segmentIndex);\n\t\t}\n\t}\n\ttoString() {\n\t\treturn WKTWriter.toLineString(new CoordinateArraySequence(this._pts));\n\t}\n\tgetNodeList() {\n\t\treturn this._nodeList;\n\t}\n\taddIntersectionNode(intPt, segmentIndex) {\n\t\tvar normalizedSegmentIndex = segmentIndex;\n\t\tvar nextSegIndex = normalizedSegmentIndex + 1;\n\t\tif (nextSegIndex < this._pts.length) {\n\t\t\tvar nextPt = this._pts[nextSegIndex];\n\t\t\tif (intPt.equals2D(nextPt)) {\n\t\t\t\tnormalizedSegmentIndex = nextSegIndex;\n\t\t\t}\n\t\t}\n\t\tvar ei = this._nodeList.add(intPt, normalizedSegmentIndex);\n\t\treturn ei;\n\t}\n\taddIntersections(li, segmentIndex, geomIndex) {\n\t\tfor (var i = 0; i < li.getIntersectionNum(); i++) {\n\t\t\tthis.addIntersection(li, segmentIndex, geomIndex, i);\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn NodedSegmentString;\n\t}\n\tget interfaces_() {\n\t\treturn [NodableSegmentString];\n\t}\n}\nNodedSegmentString.constructor_ = function () {\n\tthis._nodeList = new SegmentNodeList(this);\n\tthis._pts = null;\n\tthis._data = null;\n\tlet pts = arguments[0], data = arguments[1];\n\tthis._pts = pts;\n\tthis._data = data;\n};\n","import LineSegment from '../../geom/LineSegment';\nexport default class MonotoneChainOverlapAction {\n\tconstructor() {\n\t\tMonotoneChainOverlapAction.constructor_.apply(this, arguments);\n\t}\n\toverlap() {\n\t\tif (arguments.length === 2) {\n\t\t\tlet seg1 = arguments[0], seg2 = arguments[1];\n\t\t} else if (arguments.length === 4) {\n\t\t\tlet mc1 = arguments[0], start1 = arguments[1], mc2 = arguments[2], start2 = arguments[3];\n\t\t\tmc1.getLineSegment(start1, this._overlapSeg1);\n\t\t\tmc2.getLineSegment(start2, this._overlapSeg2);\n\t\t\tthis.overlap(this._overlapSeg1, this._overlapSeg2);\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn MonotoneChainOverlapAction;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nMonotoneChainOverlapAction.constructor_ = function () {\n\tthis._overlapSeg1 = new LineSegment();\n\tthis._overlapSeg2 = new LineSegment();\n};\n","import Envelope from '../../geom/Envelope';\nexport default class MonotoneChain {\n\tconstructor() {\n\t\tMonotoneChain.constructor_.apply(this, arguments);\n\t}\n\tgetLineSegment(index, ls) {\n\t\tls.p0 = this._pts[index];\n\t\tls.p1 = this._pts[index + 1];\n\t}\n\tcomputeSelect(searchEnv, start0, end0, mcs) {\n\t\tvar p0 = this._pts[start0];\n\t\tvar p1 = this._pts[end0];\n\t\tif (end0 - start0 === 1) {\n\t\t\tmcs.select(this, start0);\n\t\t\treturn null;\n\t\t}\n\t\tif (!searchEnv.intersects(p0, p1)) return null;\n\t\tvar mid = Math.trunc((start0 + end0) / 2);\n\t\tif (start0 < mid) {\n\t\t\tthis.computeSelect(searchEnv, start0, mid, mcs);\n\t\t}\n\t\tif (mid < end0) {\n\t\t\tthis.computeSelect(searchEnv, mid, end0, mcs);\n\t\t}\n\t}\n\tgetCoordinates() {\n\t\tvar coord = new Array(this._end - this._start + 1).fill(null);\n\t\tvar index = 0;\n\t\tfor (var i = this._start; i <= this._end; i++) {\n\t\t\tcoord[index++] = this._pts[i];\n\t\t}\n\t\treturn coord;\n\t}\n\tcomputeOverlaps() {\n\t\tif (arguments.length === 2) {\n\t\t\tlet mc = arguments[0], mco = arguments[1];\n\t\t\tthis.computeOverlaps(this._start, this._end, mc, mc._start, mc._end, mco);\n\t\t} else if (arguments.length === 6) {\n\t\t\tlet start0 = arguments[0], end0 = arguments[1], mc = arguments[2], start1 = arguments[3], end1 = arguments[4], mco = arguments[5];\n\t\t\tif (end0 - start0 === 1 && end1 - start1 === 1) {\n\t\t\t\tmco.overlap(this, start0, mc, start1);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (!this.overlaps(start0, end0, mc, start1, end1)) return null;\n\t\t\tvar mid0 = Math.trunc((start0 + end0) / 2);\n\t\t\tvar mid1 = Math.trunc((start1 + end1) / 2);\n\t\t\tif (start0 < mid0) {\n\t\t\t\tif (start1 < mid1) this.computeOverlaps(start0, mid0, mc, start1, mid1, mco);\n\t\t\t\tif (mid1 < end1) this.computeOverlaps(start0, mid0, mc, mid1, end1, mco);\n\t\t\t}\n\t\t\tif (mid0 < end0) {\n\t\t\t\tif (start1 < mid1) this.computeOverlaps(mid0, end0, mc, start1, mid1, mco);\n\t\t\t\tif (mid1 < end1) this.computeOverlaps(mid0, end0, mc, mid1, end1, mco);\n\t\t\t}\n\t\t}\n\t}\n\tsetId(id) {\n\t\tthis._id = id;\n\t}\n\tselect(searchEnv, mcs) {\n\t\tthis.computeSelect(searchEnv, this._start, this._end, mcs);\n\t}\n\tgetEnvelope() {\n\t\tif (this._env === null) {\n\t\t\tvar p0 = this._pts[this._start];\n\t\t\tvar p1 = this._pts[this._end];\n\t\t\tthis._env = new Envelope(p0, p1);\n\t\t}\n\t\treturn this._env;\n\t}\n\toverlaps(start0, end0, mc, start1, end1) {\n\t\treturn Envelope.intersects(this._pts[start0], this._pts[end0], mc._pts[start1], mc._pts[end1]);\n\t}\n\tgetEndIndex() {\n\t\treturn this._end;\n\t}\n\tgetStartIndex() {\n\t\treturn this._start;\n\t}\n\tgetContext() {\n\t\treturn this._context;\n\t}\n\tgetId() {\n\t\treturn this._id;\n\t}\n\tgetClass() {\n\t\treturn MonotoneChain;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nMonotoneChain.constructor_ = function () {\n\tthis._pts = null;\n\tthis._start = null;\n\tthis._end = null;\n\tthis._env = null;\n\tthis._context = null;\n\tthis._id = null;\n\tlet pts = arguments[0], start = arguments[1], end = arguments[2], context = arguments[3];\n\tthis._pts = pts;\n\tthis._start = start;\n\tthis._end = end;\n\tthis._context = context;\n};\n","import MonotoneChain from './MonotoneChain';\nimport Integer from '../../../../../java/lang/Integer';\nimport ArrayList from '../../../../../java/util/ArrayList';\nimport Quadrant from '../../geomgraph/Quadrant';\nexport default class MonotoneChainBuilder {\n\tconstructor() {\n\t\tMonotoneChainBuilder.constructor_.apply(this, arguments);\n\t}\n\tstatic getChainStartIndices(pts) {\n\t\tvar start = 0;\n\t\tvar startIndexList = new ArrayList();\n\t\tstartIndexList.add(new Integer(start));\n\t\tdo {\n\t\t\tvar last = MonotoneChainBuilder.findChainEnd(pts, start);\n\t\t\tstartIndexList.add(new Integer(last));\n\t\t\tstart = last;\n\t\t} while (start < pts.length - 1);\n\t\tvar startIndex = MonotoneChainBuilder.toIntArray(startIndexList);\n\t\treturn startIndex;\n\t}\n\tstatic findChainEnd(pts, start) {\n\t\tvar safeStart = start;\n\t\twhile (safeStart < pts.length - 1 && pts[safeStart].equals2D(pts[safeStart + 1])) {\n\t\t\tsafeStart++;\n\t\t}\n\t\tif (safeStart >= pts.length - 1) {\n\t\t\treturn pts.length - 1;\n\t\t}\n\t\tvar chainQuad = Quadrant.quadrant(pts[safeStart], pts[safeStart + 1]);\n\t\tvar last = start + 1;\n\t\twhile (last < pts.length) {\n\t\t\tif (!pts[last - 1].equals2D(pts[last])) {\n\t\t\t\tvar quad = Quadrant.quadrant(pts[last - 1], pts[last]);\n\t\t\t\tif (quad !== chainQuad) break;\n\t\t\t}\n\t\t\tlast++;\n\t\t}\n\t\treturn last - 1;\n\t}\n\tstatic getChains() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet pts = arguments[0];\n\t\t\treturn MonotoneChainBuilder.getChains(pts, null);\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet pts = arguments[0], context = arguments[1];\n\t\t\tvar mcList = new ArrayList();\n\t\t\tvar startIndex = MonotoneChainBuilder.getChainStartIndices(pts);\n\t\t\tfor (var i = 0; i < startIndex.length - 1; i++) {\n\t\t\t\tvar mc = new MonotoneChain(pts, startIndex[i], startIndex[i + 1], context);\n\t\t\t\tmcList.add(mc);\n\t\t\t}\n\t\t\treturn mcList;\n\t\t}\n\t}\n\tstatic toIntArray(list) {\n\t\tvar array = new Array(list.size()).fill(null);\n\t\tfor (var i = 0; i < array.length; i++) {\n\t\t\tarray[i] = list.get(i).intValue();\n\t\t}\n\t\treturn array;\n\t}\n\tgetClass() {\n\t\treturn MonotoneChainBuilder;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nMonotoneChainBuilder.constructor_ = function () {};\n","export default class Noder {\n\tconstructor() {\n\t\tNoder.constructor_.apply(this, arguments);\n\t}\n\tcomputeNodes(segStrings) {}\n\tgetNodedSubstrings() {}\n\tgetClass() {\n\t\treturn Noder;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nNoder.constructor_ = function () {};\n","import Noder from './Noder';\nexport default class SinglePassNoder {\n\tconstructor() {\n\t\tSinglePassNoder.constructor_.apply(this, arguments);\n\t}\n\tsetSegmentIntersector(segInt) {\n\t\tthis._segInt = segInt;\n\t}\n\tgetClass() {\n\t\treturn SinglePassNoder;\n\t}\n\tget interfaces_() {\n\t\treturn [Noder];\n\t}\n}\nSinglePassNoder.constructor_ = function () {\n\tthis._segInt = null;\n\tif (arguments.length === 0) {} else if (arguments.length === 1) {\n\t\tlet segInt = arguments[0];\n\t\tthis.setSegmentIntersector(segInt);\n\t}\n};\n","import STRtree from '../index/strtree/STRtree';\nimport NodedSegmentString from './NodedSegmentString';\nimport MonotoneChainOverlapAction from '../index/chain/MonotoneChainOverlapAction';\nimport MonotoneChainBuilder from '../index/chain/MonotoneChainBuilder';\nimport ArrayList from '../../../../java/util/ArrayList';\nimport SinglePassNoder from './SinglePassNoder';\nexport default class MCIndexNoder extends SinglePassNoder {\n\tconstructor() {\n\t\tsuper();\n\t\tMCIndexNoder.constructor_.apply(this, arguments);\n\t}\n\tgetMonotoneChains() {\n\t\treturn this._monoChains;\n\t}\n\tgetNodedSubstrings() {\n\t\treturn NodedSegmentString.getNodedSubstrings(this._nodedSegStrings);\n\t}\n\tgetIndex() {\n\t\treturn this._index;\n\t}\n\tadd(segStr) {\n\t\tvar segChains = MonotoneChainBuilder.getChains(segStr.getCoordinates(), segStr);\n\t\tfor (var i = segChains.iterator(); i.hasNext(); ) {\n\t\t\tvar mc = i.next();\n\t\t\tmc.setId(this._idCounter++);\n\t\t\tthis._index.insert(mc.getEnvelope(), mc);\n\t\t\tthis._monoChains.add(mc);\n\t\t}\n\t}\n\tcomputeNodes(inputSegStrings) {\n\t\tthis._nodedSegStrings = inputSegStrings;\n\t\tfor (var i = inputSegStrings.iterator(); i.hasNext(); ) {\n\t\t\tthis.add(i.next());\n\t\t}\n\t\tthis.intersectChains();\n\t}\n\tintersectChains() {\n\t\tvar overlapAction = new SegmentOverlapAction(this._segInt);\n\t\tfor (var i = this._monoChains.iterator(); i.hasNext(); ) {\n\t\t\tvar queryChain = i.next();\n\t\t\tvar overlapChains = this._index.query(queryChain.getEnvelope());\n\t\t\tfor (var j = overlapChains.iterator(); j.hasNext(); ) {\n\t\t\t\tvar testChain = j.next();\n\t\t\t\tif (testChain.getId() > queryChain.getId()) {\n\t\t\t\t\tqueryChain.computeOverlaps(testChain, overlapAction);\n\t\t\t\t\tthis._nOverlaps++;\n\t\t\t\t}\n\t\t\t\tif (this._segInt.isDone()) return null;\n\t\t\t}\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn MCIndexNoder;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nclass SegmentOverlapAction extends MonotoneChainOverlapAction {\n\tconstructor() {\n\t\tsuper();\n\t\tSegmentOverlapAction.constructor_.apply(this, arguments);\n\t}\n\toverlap() {\n\t\tif (arguments.length === 4) {\n\t\t\tlet mc1 = arguments[0], start1 = arguments[1], mc2 = arguments[2], start2 = arguments[3];\n\t\t\tvar ss1 = mc1.getContext();\n\t\t\tvar ss2 = mc2.getContext();\n\t\t\tthis._si.processIntersections(ss1, start1, ss2, start2);\n\t\t} else return super.overlap.apply(this, arguments);\n\t}\n\tgetClass() {\n\t\treturn SegmentOverlapAction;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nSegmentOverlapAction.constructor_ = function () {\n\tthis._si = null;\n\tlet si = arguments[0];\n\tthis._si = si;\n};\nMCIndexNoder.SegmentOverlapAction = SegmentOverlapAction;\nMCIndexNoder.constructor_ = function () {\n\tthis._monoChains = new ArrayList();\n\tthis._index = new STRtree();\n\tthis._idCounter = 0;\n\tthis._nodedSegStrings = null;\n\tthis._nOverlaps = 0;\n\tif (arguments.length === 0) {} else if (arguments.length === 1) {\n\t\tlet si = arguments[0];\n\t\tSinglePassNoder.constructor_.call(this, si);\n\t}\n};\n","import hasInterface from '../../../../hasInterface';\nimport Collection from '../../../../java/util/Collection';\nimport Noder from './Noder';\nimport Coordinate from '../geom/Coordinate';\nimport NodedSegmentString from './NodedSegmentString';\nimport System from '../../../../java/lang/System';\nimport CoordinateArrays from '../geom/CoordinateArrays';\nimport ArrayList from '../../../../java/util/ArrayList';\nexport default class ScaledNoder {\n\tconstructor() {\n\t\tScaledNoder.constructor_.apply(this, arguments);\n\t}\n\trescale() {\n\t\tif (hasInterface(arguments[0], Collection)) {\n\t\t\tlet segStrings = arguments[0];\n\t\t\tfor (var i = segStrings.iterator(); i.hasNext(); ) {\n\t\t\t\tvar ss = i.next();\n\t\t\t\tthis.rescale(ss.getCoordinates());\n\t\t\t}\n\t\t} else if (arguments[0] instanceof Array) {\n\t\t\tlet pts = arguments[0];\n\t\t\tvar p0 = null;\n\t\t\tvar p1 = null;\n\t\t\tif (pts.length === 2) {\n\t\t\t\tp0 = new Coordinate(pts[0]);\n\t\t\t\tp1 = new Coordinate(pts[1]);\n\t\t\t}\n\t\t\tfor (var i = 0; i < pts.length; i++) {\n\t\t\t\tpts[i].x = pts[i].x / this._scaleFactor + this._offsetX;\n\t\t\t\tpts[i].y = pts[i].y / this._scaleFactor + this._offsetY;\n\t\t\t}\n\t\t\tif (pts.length === 2 && pts[0].equals2D(pts[1])) {\n\t\t\t\tSystem.out.println(pts);\n\t\t\t}\n\t\t}\n\t}\n\tscale() {\n\t\tif (hasInterface(arguments[0], Collection)) {\n\t\t\tlet segStrings = arguments[0];\n\t\t\tvar nodedSegmentStrings = new ArrayList(segStrings.size());\n\t\t\tfor (var i = segStrings.iterator(); i.hasNext(); ) {\n\t\t\t\tvar ss = i.next();\n\t\t\t\tnodedSegmentStrings.add(new NodedSegmentString(this.scale(ss.getCoordinates()), ss.getData()));\n\t\t\t}\n\t\t\treturn nodedSegmentStrings;\n\t\t} else if (arguments[0] instanceof Array) {\n\t\t\tlet pts = arguments[0];\n\t\t\tvar roundPts = new Array(pts.length).fill(null);\n\t\t\tfor (var i = 0; i < pts.length; i++) {\n\t\t\t\troundPts[i] = new Coordinate(Math.round((pts[i].x - this._offsetX) * this._scaleFactor), Math.round((pts[i].y - this._offsetY) * this._scaleFactor), pts[i].z);\n\t\t\t}\n\t\t\tvar roundPtsNoDup = CoordinateArrays.removeRepeatedPoints(roundPts);\n\t\t\treturn roundPtsNoDup;\n\t\t}\n\t}\n\tisIntegerPrecision() {\n\t\treturn this._scaleFactor === 1.0;\n\t}\n\tgetNodedSubstrings() {\n\t\tvar splitSS = this._noder.getNodedSubstrings();\n\t\tif (this._isScaled) this.rescale(splitSS);\n\t\treturn splitSS;\n\t}\n\tcomputeNodes(inputSegStrings) {\n\t\tvar intSegStrings = inputSegStrings;\n\t\tif (this._isScaled) intSegStrings = this.scale(inputSegStrings);\n\t\tthis._noder.computeNodes(intSegStrings);\n\t}\n\tgetClass() {\n\t\treturn ScaledNoder;\n\t}\n\tget interfaces_() {\n\t\treturn [Noder];\n\t}\n}\nScaledNoder.constructor_ = function () {\n\tthis._noder = null;\n\tthis._scaleFactor = null;\n\tthis._offsetX = null;\n\tthis._offsetY = null;\n\tthis._isScaled = false;\n\tif (arguments.length === 2) {\n\t\tlet noder = arguments[0], scaleFactor = arguments[1];\n\t\tScaledNoder.constructor_.call(this, noder, scaleFactor, 0, 0);\n\t} else if (arguments.length === 4) {\n\t\tlet noder = arguments[0], scaleFactor = arguments[1], offsetX = arguments[2], offsetY = arguments[3];\n\t\tthis._noder = noder;\n\t\tthis._scaleFactor = scaleFactor;\n\t\tthis._isScaled = !this.isIntegerPrecision();\n\t}\n};\n","import TreeSet from '../../../../java/util/TreeSet';\nimport LineString from '../geom/LineString';\nimport hasInterface from '../../../../hasInterface';\nimport MultiPoint from '../geom/MultiPoint';\nimport GeometryGraph from '../geomgraph/GeometryGraph';\nimport GeometryCollection from '../geom/GeometryCollection';\nimport Polygonal from '../geom/Polygonal';\nimport RobustLineIntersector from '../algorithm/RobustLineIntersector';\nimport LinearComponentExtracter from '../geom/util/LinearComponentExtracter';\nimport TreeMap from '../../../../java/util/TreeMap';\nimport MultiLineString from '../geom/MultiLineString';\nexport default class IsSimpleOp {\n\tconstructor() {\n\t\tIsSimpleOp.constructor_.apply(this, arguments);\n\t}\n\tstatic isSimple() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet geom = arguments[0];\n\t\t\tvar op = new IsSimpleOp(geom);\n\t\t\treturn op.isSimple();\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet geom = arguments[0], boundaryNodeRule = arguments[1];\n\t\t\tvar op = new IsSimpleOp(geom, boundaryNodeRule);\n\t\t\treturn op.isSimple();\n\t\t}\n\t}\n\tisSimpleMultiPoint(mp) {\n\t\tif (mp.isEmpty()) return true;\n\t\tvar points = new TreeSet();\n\t\tfor (var i = 0; i < mp.getNumGeometries(); i++) {\n\t\t\tvar pt = mp.getGeometryN(i);\n\t\t\tvar p = pt.getCoordinate();\n\t\t\tif (points.contains(p)) {\n\t\t\t\tthis._nonSimpleLocation = p;\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tpoints.add(p);\n\t\t}\n\t\treturn true;\n\t}\n\tisSimplePolygonal(geom) {\n\t\tvar rings = LinearComponentExtracter.getLines(geom);\n\t\tfor (var i = rings.iterator(); i.hasNext(); ) {\n\t\t\tvar ring = i.next();\n\t\t\tif (!this.isSimpleLinearGeometry(ring)) return false;\n\t\t}\n\t\treturn true;\n\t}\n\thasClosedEndpointIntersection(graph) {\n\t\tvar endPoints = new TreeMap();\n\t\tfor (var i = graph.getEdgeIterator(); i.hasNext(); ) {\n\t\t\tvar e = i.next();\n\t\t\tvar maxSegmentIndex = e.getMaximumSegmentIndex();\n\t\t\tvar isClosed = e.isClosed();\n\t\t\tvar p0 = e.getCoordinate(0);\n\t\t\tthis.addEndpoint(endPoints, p0, isClosed);\n\t\t\tvar p1 = e.getCoordinate(e.getNumPoints() - 1);\n\t\t\tthis.addEndpoint(endPoints, p1, isClosed);\n\t\t}\n\t\tfor (var i = endPoints.values().iterator(); i.hasNext(); ) {\n\t\t\tvar eiInfo = i.next();\n\t\t\tif (eiInfo.isClosed && eiInfo.degree !== 2) {\n\t\t\t\tthis._nonSimpleLocation = eiInfo.getCoordinate();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\tgetNonSimpleLocation() {\n\t\treturn this._nonSimpleLocation;\n\t}\n\tisSimpleLinearGeometry(geom) {\n\t\tif (geom.isEmpty()) return true;\n\t\tvar graph = new GeometryGraph(0, geom);\n\t\tvar li = new RobustLineIntersector();\n\t\tvar si = graph.computeSelfNodes(li, true);\n\t\tif (!si.hasIntersection()) return true;\n\t\tif (si.hasProperIntersection()) {\n\t\t\tthis._nonSimpleLocation = si.getProperIntersectionPoint();\n\t\t\treturn false;\n\t\t}\n\t\tif (this.hasNonEndpointIntersection(graph)) return false;\n\t\tif (this._isClosedEndpointsInInterior) {\n\t\t\tif (this.hasClosedEndpointIntersection(graph)) return false;\n\t\t}\n\t\treturn true;\n\t}\n\thasNonEndpointIntersection(graph) {\n\t\tfor (var i = graph.getEdgeIterator(); i.hasNext(); ) {\n\t\t\tvar e = i.next();\n\t\t\tvar maxSegmentIndex = e.getMaximumSegmentIndex();\n\t\t\tfor (var eiIt = e.getEdgeIntersectionList().iterator(); eiIt.hasNext(); ) {\n\t\t\t\tvar ei = eiIt.next();\n\t\t\t\tif (!ei.isEndPoint(maxSegmentIndex)) {\n\t\t\t\t\tthis._nonSimpleLocation = ei.getCoordinate();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\taddEndpoint(endPoints, p, isClosed) {\n\t\tvar eiInfo = endPoints.get(p);\n\t\tif (eiInfo === null) {\n\t\t\teiInfo = new EndpointInfo(p);\n\t\t\tendPoints.put(p, eiInfo);\n\t\t}\n\t\teiInfo.addEndpoint(isClosed);\n\t}\n\tcomputeSimple(geom) {\n\t\tthis._nonSimpleLocation = null;\n\t\tif (geom.isEmpty()) return true;\n\t\tif (geom instanceof LineString) return this.isSimpleLinearGeometry(geom);\n\t\tif (geom instanceof MultiLineString) return this.isSimpleLinearGeometry(geom);\n\t\tif (geom instanceof MultiPoint) return this.isSimpleMultiPoint(geom);\n\t\tif (hasInterface(geom, Polygonal)) return this.isSimplePolygonal(geom);\n\t\tif (geom instanceof GeometryCollection) return this.isSimpleGeometryCollection(geom);\n\t\treturn true;\n\t}\n\tisSimple() {\n\t\tthis._nonSimpleLocation = null;\n\t\treturn this.computeSimple(this._inputGeom);\n\t}\n\tisSimpleGeometryCollection(geom) {\n\t\tfor (var i = 0; i < geom.getNumGeometries(); i++) {\n\t\t\tvar comp = geom.getGeometryN(i);\n\t\t\tif (!this.computeSimple(comp)) return false;\n\t\t}\n\t\treturn true;\n\t}\n\tgetClass() {\n\t\treturn IsSimpleOp;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nclass EndpointInfo {\n\tconstructor() {\n\t\tEndpointInfo.constructor_.apply(this, arguments);\n\t}\n\taddEndpoint(isClosed) {\n\t\tthis.degree++;\n\t\tthis.isClosed |= isClosed;\n\t}\n\tgetCoordinate() {\n\t\treturn this.pt;\n\t}\n\tgetClass() {\n\t\treturn EndpointInfo;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nEndpointInfo.constructor_ = function () {\n\tthis.pt = null;\n\tthis.isClosed = null;\n\tthis.degree = null;\n\tlet pt = arguments[0];\n\tthis.pt = pt;\n\tthis.isClosed = false;\n\tthis.degree = 0;\n};\nIsSimpleOp.EndpointInfo = EndpointInfo;\nIsSimpleOp.constructor_ = function () {\n\tthis._inputGeom = null;\n\tthis._isClosedEndpointsInInterior = true;\n\tthis._nonSimpleLocation = null;\n\tif (arguments.length === 1) {\n\t\tlet geom = arguments[0];\n\t\tthis._inputGeom = geom;\n\t} else if (arguments.length === 2) {\n\t\tlet geom = arguments[0], boundaryNodeRule = arguments[1];\n\t\tthis._inputGeom = geom;\n\t\tthis._isClosedEndpointsInInterior = !boundaryNodeRule.isInBoundary(2);\n\t}\n};\n","export default class BufferParameters {\n\tconstructor() {\n\t\tBufferParameters.constructor_.apply(this, arguments);\n\t}\n\tstatic bufferDistanceError(quadSegs) {\n\t\tvar alpha = Math.PI / 2.0 / quadSegs;\n\t\treturn 1 - Math.cos(alpha / 2.0);\n\t}\n\tgetEndCapStyle() {\n\t\treturn this._endCapStyle;\n\t}\n\tisSingleSided() {\n\t\treturn this._isSingleSided;\n\t}\n\tsetQuadrantSegments(quadSegs) {\n\t\tthis._quadrantSegments = quadSegs;\n\t\tif (this._quadrantSegments === 0) this._joinStyle = BufferParameters.JOIN_BEVEL;\n\t\tif (this._quadrantSegments < 0) {\n\t\t\tthis._joinStyle = BufferParameters.JOIN_MITRE;\n\t\t\tthis._mitreLimit = Math.abs(this._quadrantSegments);\n\t\t}\n\t\tif (quadSegs <= 0) {\n\t\t\tthis._quadrantSegments = 1;\n\t\t}\n\t\tif (this._joinStyle !== BufferParameters.JOIN_ROUND) {\n\t\t\tthis._quadrantSegments = BufferParameters.DEFAULT_QUADRANT_SEGMENTS;\n\t\t}\n\t}\n\tgetJoinStyle() {\n\t\treturn this._joinStyle;\n\t}\n\tsetJoinStyle(joinStyle) {\n\t\tthis._joinStyle = joinStyle;\n\t}\n\tsetSimplifyFactor(simplifyFactor) {\n\t\tthis._simplifyFactor = simplifyFactor < 0 ? 0 : simplifyFactor;\n\t}\n\tgetSimplifyFactor() {\n\t\treturn this._simplifyFactor;\n\t}\n\tgetQuadrantSegments() {\n\t\treturn this._quadrantSegments;\n\t}\n\tsetEndCapStyle(endCapStyle) {\n\t\tthis._endCapStyle = endCapStyle;\n\t}\n\tgetMitreLimit() {\n\t\treturn this._mitreLimit;\n\t}\n\tsetMitreLimit(mitreLimit) {\n\t\tthis._mitreLimit = mitreLimit;\n\t}\n\tsetSingleSided(isSingleSided) {\n\t\tthis._isSingleSided = isSingleSided;\n\t}\n\tgetClass() {\n\t\treturn BufferParameters;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nBufferParameters.constructor_ = function () {\n\tthis._quadrantSegments = BufferParameters.DEFAULT_QUADRANT_SEGMENTS;\n\tthis._endCapStyle = BufferParameters.CAP_ROUND;\n\tthis._joinStyle = BufferParameters.JOIN_ROUND;\n\tthis._mitreLimit = BufferParameters.DEFAULT_MITRE_LIMIT;\n\tthis._isSingleSided = false;\n\tthis._simplifyFactor = BufferParameters.DEFAULT_SIMPLIFY_FACTOR;\n\tif (arguments.length === 0) {} else if (arguments.length === 1) {\n\t\tlet quadrantSegments = arguments[0];\n\t\tthis.setQuadrantSegments(quadrantSegments);\n\t} else if (arguments.length === 2) {\n\t\tlet quadrantSegments = arguments[0], endCapStyle = arguments[1];\n\t\tthis.setQuadrantSegments(quadrantSegments);\n\t\tthis.setEndCapStyle(endCapStyle);\n\t} else if (arguments.length === 4) {\n\t\tlet quadrantSegments = arguments[0], endCapStyle = arguments[1], joinStyle = arguments[2], mitreLimit = arguments[3];\n\t\tthis.setQuadrantSegments(quadrantSegments);\n\t\tthis.setEndCapStyle(endCapStyle);\n\t\tthis.setJoinStyle(joinStyle);\n\t\tthis.setMitreLimit(mitreLimit);\n\t}\n};\nBufferParameters.CAP_ROUND = 1;\nBufferParameters.CAP_FLAT = 2;\nBufferParameters.CAP_SQUARE = 3;\nBufferParameters.JOIN_ROUND = 1;\nBufferParameters.JOIN_MITRE = 2;\nBufferParameters.JOIN_BEVEL = 3;\nBufferParameters.DEFAULT_QUADRANT_SEGMENTS = 8;\nBufferParameters.DEFAULT_MITRE_LIMIT = 5.0;\nBufferParameters.DEFAULT_SIMPLIFY_FACTOR = 0.01;\n","import Position from '../../geomgraph/Position';\nimport Orientation from '../../algorithm/Orientation';\nimport Assert from '../../util/Assert';\nexport default class RightmostEdgeFinder {\n\tconstructor() {\n\t\tRightmostEdgeFinder.constructor_.apply(this, arguments);\n\t}\n\tgetCoordinate() {\n\t\treturn this._minCoord;\n\t}\n\tgetRightmostSide(de, index) {\n\t\tvar side = this.getRightmostSideOfSegment(de, index);\n\t\tif (side < 0) side = this.getRightmostSideOfSegment(de, index - 1);\n\t\tif (side < 0) {\n\t\t\tthis._minCoord = null;\n\t\t\tthis.checkForRightmostCoordinate(de);\n\t\t}\n\t\treturn side;\n\t}\n\tfindRightmostEdgeAtVertex() {\n\t\tvar pts = this._minDe.getEdge().getCoordinates();\n\t\tAssert.isTrue(this._minIndex > 0 && this._minIndex < pts.length, \"rightmost point expected to be interior vertex of edge\");\n\t\tvar pPrev = pts[this._minIndex - 1];\n\t\tvar pNext = pts[this._minIndex + 1];\n\t\tvar orientation = Orientation.index(this._minCoord, pNext, pPrev);\n\t\tvar usePrev = false;\n\t\tif (pPrev.y < this._minCoord.y && pNext.y < this._minCoord.y && orientation === Orientation.COUNTERCLOCKWISE) {\n\t\t\tusePrev = true;\n\t\t} else if (pPrev.y > this._minCoord.y && pNext.y > this._minCoord.y && orientation === Orientation.CLOCKWISE) {\n\t\t\tusePrev = true;\n\t\t}\n\t\tif (usePrev) {\n\t\t\tthis._minIndex = this._minIndex - 1;\n\t\t}\n\t}\n\tgetRightmostSideOfSegment(de, i) {\n\t\tvar e = de.getEdge();\n\t\tvar coord = e.getCoordinates();\n\t\tif (i < 0 || i + 1 >= coord.length) return -1;\n\t\tif (coord[i].y === coord[i + 1].y) return -1;\n\t\tvar pos = Position.LEFT;\n\t\tif (coord[i].y < coord[i + 1].y) pos = Position.RIGHT;\n\t\treturn pos;\n\t}\n\tgetEdge() {\n\t\treturn this._orientedDe;\n\t}\n\tcheckForRightmostCoordinate(de) {\n\t\tvar coord = de.getEdge().getCoordinates();\n\t\tfor (var i = 0; i < coord.length - 1; i++) {\n\t\t\tif (this._minCoord === null || coord[i].x > this._minCoord.x) {\n\t\t\t\tthis._minDe = de;\n\t\t\t\tthis._minIndex = i;\n\t\t\t\tthis._minCoord = coord[i];\n\t\t\t}\n\t\t}\n\t}\n\tfindRightmostEdgeAtNode() {\n\t\tvar node = this._minDe.getNode();\n\t\tvar star = node.getEdges();\n\t\tthis._minDe = star.getRightmostEdge();\n\t\tif (!this._minDe.isForward()) {\n\t\t\tthis._minDe = this._minDe.getSym();\n\t\t\tthis._minIndex = this._minDe.getEdge().getCoordinates().length - 1;\n\t\t}\n\t}\n\tfindEdge(dirEdgeList) {\n\t\tfor (var i = dirEdgeList.iterator(); i.hasNext(); ) {\n\t\t\tvar de = i.next();\n\t\t\tif (!de.isForward()) continue;\n\t\t\tthis.checkForRightmostCoordinate(de);\n\t\t}\n\t\tAssert.isTrue(this._minIndex !== 0 || this._minCoord.equals(this._minDe.getCoordinate()), \"inconsistency in rightmost processing\");\n\t\tif (this._minIndex === 0) {\n\t\t\tthis.findRightmostEdgeAtNode();\n\t\t} else {\n\t\t\tthis.findRightmostEdgeAtVertex();\n\t\t}\n\t\tthis._orientedDe = this._minDe;\n\t\tvar rightmostSide = this.getRightmostSide(this._minDe, this._minIndex);\n\t\tif (rightmostSide === Position.LEFT) {\n\t\t\tthis._orientedDe = this._minDe.getSym();\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn RightmostEdgeFinder;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nRightmostEdgeFinder.constructor_ = function () {\n\tthis._minIndex = -1;\n\tthis._minCoord = null;\n\tthis._minDe = null;\n\tthis._orientedDe = null;\n};\n","export default function LinkedList () {\n this.array_ = []\n}\nLinkedList.prototype.addLast = function (e) {\n this.array_.push(e)\n}\nLinkedList.prototype.removeFirst = function () {\n return this.array_.shift()\n}\nLinkedList.prototype.isEmpty = function () {\n return this.array_.length === 0\n}\n","import HashSet from '../../../../../java/util/HashSet';\nimport Position from '../../geomgraph/Position';\nimport Stack from '../../../../../java/util/Stack';\nimport RightmostEdgeFinder from './RightmostEdgeFinder';\nimport TopologyException from '../../geom/TopologyException';\nimport LinkedList from '../../../../../java/util/LinkedList';\nimport Comparable from '../../../../../java/lang/Comparable';\nimport ArrayList from '../../../../../java/util/ArrayList';\nimport Envelope from '../../geom/Envelope';\nexport default class BufferSubgraph {\n\tconstructor() {\n\t\tBufferSubgraph.constructor_.apply(this, arguments);\n\t}\n\tclearVisitedEdges() {\n\t\tfor (var it = this._dirEdgeList.iterator(); it.hasNext(); ) {\n\t\t\tvar de = it.next();\n\t\t\tde.setVisited(false);\n\t\t}\n\t}\n\tgetRightmostCoordinate() {\n\t\treturn this._rightMostCoord;\n\t}\n\tcomputeNodeDepth(n) {\n\t\tvar startEdge = null;\n\t\tfor (var i = n.getEdges().iterator(); i.hasNext(); ) {\n\t\t\tvar de = i.next();\n\t\t\tif (de.isVisited() || de.getSym().isVisited()) {\n\t\t\t\tstartEdge = de;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (startEdge === null) throw new TopologyException(\"unable to find edge to compute depths at \" + n.getCoordinate());\n\t\tn.getEdges().computeDepths(startEdge);\n\t\tfor (var i = n.getEdges().iterator(); i.hasNext(); ) {\n\t\t\tvar de = i.next();\n\t\t\tde.setVisited(true);\n\t\t\tthis.copySymDepths(de);\n\t\t}\n\t}\n\tcomputeDepth(outsideDepth) {\n\t\tthis.clearVisitedEdges();\n\t\tvar de = this._finder.getEdge();\n\t\tvar n = de.getNode();\n\t\tvar label = de.getLabel();\n\t\tde.setEdgeDepths(Position.RIGHT, outsideDepth);\n\t\tthis.copySymDepths(de);\n\t\tthis.computeDepths(de);\n\t}\n\tcreate(node) {\n\t\tthis.addReachable(node);\n\t\tthis._finder.findEdge(this._dirEdgeList);\n\t\tthis._rightMostCoord = this._finder.getCoordinate();\n\t}\n\tfindResultEdges() {\n\t\tfor (var it = this._dirEdgeList.iterator(); it.hasNext(); ) {\n\t\t\tvar de = it.next();\n\t\t\tif (de.getDepth(Position.RIGHT) >= 1 && de.getDepth(Position.LEFT) <= 0 && !de.isInteriorAreaEdge()) {\n\t\t\t\tde.setInResult(true);\n\t\t\t}\n\t\t}\n\t}\n\tcomputeDepths(startEdge) {\n\t\tvar nodesVisited = new HashSet();\n\t\tvar nodeQueue = new LinkedList();\n\t\tvar startNode = startEdge.getNode();\n\t\tnodeQueue.addLast(startNode);\n\t\tnodesVisited.add(startNode);\n\t\tstartEdge.setVisited(true);\n\t\twhile (!nodeQueue.isEmpty()) {\n\t\t\tvar n = nodeQueue.removeFirst();\n\t\t\tnodesVisited.add(n);\n\t\t\tthis.computeNodeDepth(n);\n\t\t\tfor (var i = n.getEdges().iterator(); i.hasNext(); ) {\n\t\t\t\tvar de = i.next();\n\t\t\t\tvar sym = de.getSym();\n\t\t\t\tif (sym.isVisited()) continue;\n\t\t\t\tvar adjNode = sym.getNode();\n\t\t\t\tif (!nodesVisited.contains(adjNode)) {\n\t\t\t\t\tnodeQueue.addLast(adjNode);\n\t\t\t\t\tnodesVisited.add(adjNode);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tcompareTo(o) {\n\t\tvar graph = o;\n\t\tif (this._rightMostCoord.x < graph._rightMostCoord.x) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (this._rightMostCoord.x > graph._rightMostCoord.x) {\n\t\t\treturn 1;\n\t\t}\n\t\treturn 0;\n\t}\n\tgetEnvelope() {\n\t\tif (this._env === null) {\n\t\t\tvar edgeEnv = new Envelope();\n\t\t\tfor (var it = this._dirEdgeList.iterator(); it.hasNext(); ) {\n\t\t\t\tvar dirEdge = it.next();\n\t\t\t\tvar pts = dirEdge.getEdge().getCoordinates();\n\t\t\t\tfor (var i = 0; i < pts.length - 1; i++) {\n\t\t\t\t\tedgeEnv.expandToInclude(pts[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._env = edgeEnv;\n\t\t}\n\t\treturn this._env;\n\t}\n\taddReachable(startNode) {\n\t\tvar nodeStack = new Stack();\n\t\tnodeStack.add(startNode);\n\t\twhile (!nodeStack.empty()) {\n\t\t\tvar node = nodeStack.pop();\n\t\t\tthis.add(node, nodeStack);\n\t\t}\n\t}\n\tcopySymDepths(de) {\n\t\tvar sym = de.getSym();\n\t\tsym.setDepth(Position.LEFT, de.getDepth(Position.RIGHT));\n\t\tsym.setDepth(Position.RIGHT, de.getDepth(Position.LEFT));\n\t}\n\tadd(node, nodeStack) {\n\t\tnode.setVisited(true);\n\t\tthis._nodes.add(node);\n\t\tfor (var i = node.getEdges().iterator(); i.hasNext(); ) {\n\t\t\tvar de = i.next();\n\t\t\tthis._dirEdgeList.add(de);\n\t\t\tvar sym = de.getSym();\n\t\t\tvar symNode = sym.getNode();\n\t\t\tif (!symNode.isVisited()) nodeStack.push(symNode);\n\t\t}\n\t}\n\tgetNodes() {\n\t\treturn this._nodes;\n\t}\n\tgetDirectedEdges() {\n\t\treturn this._dirEdgeList;\n\t}\n\tgetClass() {\n\t\treturn BufferSubgraph;\n\t}\n\tget interfaces_() {\n\t\treturn [Comparable];\n\t}\n}\nBufferSubgraph.constructor_ = function () {\n\tthis._finder = null;\n\tthis._dirEdgeList = new ArrayList();\n\tthis._nodes = new ArrayList();\n\tthis._rightMostCoord = null;\n\tthis._env = null;\n\tthis._finder = new RightmostEdgeFinder();\n};\n","import Location from '../geom/Location';\nimport Position from './Position';\nimport PointLocation from '../algorithm/PointLocation';\nimport TopologyException from '../geom/TopologyException';\nimport Orientation from '../algorithm/Orientation';\nimport Label from './Label';\nimport ArrayList from '../../../../java/util/ArrayList';\nimport Assert from '../util/Assert';\nexport default class EdgeRing {\n\tconstructor() {\n\t\tEdgeRing.constructor_.apply(this, arguments);\n\t}\n\tcomputeRing() {\n\t\tif (this._ring !== null) return null;\n\t\tvar coord = new Array(this._pts.size()).fill(null);\n\t\tfor (var i = 0; i < this._pts.size(); i++) {\n\t\t\tcoord[i] = this._pts.get(i);\n\t\t}\n\t\tthis._ring = this._geometryFactory.createLinearRing(coord);\n\t\tthis._isHole = Orientation.isCCW(this._ring.getCoordinates());\n\t}\n\tisIsolated() {\n\t\treturn this._label.getGeometryCount() === 1;\n\t}\n\tcomputePoints(start) {\n\t\tthis._startDe = start;\n\t\tvar de = start;\n\t\tvar isFirstEdge = true;\n\t\tdo {\n\t\t\tif (de === null) throw new TopologyException(\"Found null DirectedEdge\");\n\t\t\tif (de.getEdgeRing() === this) throw new TopologyException(\"Directed Edge visited twice during ring-building at \" + de.getCoordinate());\n\t\t\tthis._edges.add(de);\n\t\t\tvar label = de.getLabel();\n\t\t\tAssert.isTrue(label.isArea());\n\t\t\tthis.mergeLabel(label);\n\t\t\tthis.addPoints(de.getEdge(), de.isForward(), isFirstEdge);\n\t\t\tisFirstEdge = false;\n\t\t\tthis.setEdgeRing(de, this);\n\t\t\tde = this.getNext(de);\n\t\t} while (de !== this._startDe);\n\t}\n\tgetLinearRing() {\n\t\treturn this._ring;\n\t}\n\tgetCoordinate(i) {\n\t\treturn this._pts.get(i);\n\t}\n\tcomputeMaxNodeDegree() {\n\t\tthis._maxNodeDegree = 0;\n\t\tvar de = this._startDe;\n\t\tdo {\n\t\t\tvar node = de.getNode();\n\t\t\tvar degree = node.getEdges().getOutgoingDegree(this);\n\t\t\tif (degree > this._maxNodeDegree) this._maxNodeDegree = degree;\n\t\t\tde = this.getNext(de);\n\t\t} while (de !== this._startDe);\n\t\tthis._maxNodeDegree *= 2;\n\t}\n\taddPoints(edge, isForward, isFirstEdge) {\n\t\tvar edgePts = edge.getCoordinates();\n\t\tif (isForward) {\n\t\t\tvar startIndex = 1;\n\t\t\tif (isFirstEdge) startIndex = 0;\n\t\t\tfor (var i = startIndex; i < edgePts.length; i++) {\n\t\t\t\tthis._pts.add(edgePts[i]);\n\t\t\t}\n\t\t} else {\n\t\t\tvar startIndex = edgePts.length - 2;\n\t\t\tif (isFirstEdge) startIndex = edgePts.length - 1;\n\t\t\tfor (var i = startIndex; i >= 0; i--) {\n\t\t\t\tthis._pts.add(edgePts[i]);\n\t\t\t}\n\t\t}\n\t}\n\tisHole() {\n\t\treturn this._isHole;\n\t}\n\tsetInResult() {\n\t\tvar de = this._startDe;\n\t\tdo {\n\t\t\tde.getEdge().setInResult(true);\n\t\t\tde = de.getNext();\n\t\t} while (de !== this._startDe);\n\t}\n\tcontainsPoint(p) {\n\t\tvar shell = this.getLinearRing();\n\t\tvar env = shell.getEnvelopeInternal();\n\t\tif (!env.contains(p)) return false;\n\t\tif (!PointLocation.isInRing(p, shell.getCoordinates())) return false;\n\t\tfor (var i = this._holes.iterator(); i.hasNext(); ) {\n\t\t\tvar hole = i.next();\n\t\t\tif (hole.containsPoint(p)) return false;\n\t\t}\n\t\treturn true;\n\t}\n\taddHole(ring) {\n\t\tthis._holes.add(ring);\n\t}\n\tisShell() {\n\t\treturn this._shell === null;\n\t}\n\tgetLabel() {\n\t\treturn this._label;\n\t}\n\tgetEdges() {\n\t\treturn this._edges;\n\t}\n\tgetMaxNodeDegree() {\n\t\tif (this._maxNodeDegree < 0) this.computeMaxNodeDegree();\n\t\treturn this._maxNodeDegree;\n\t}\n\tgetShell() {\n\t\treturn this._shell;\n\t}\n\tmergeLabel() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet deLabel = arguments[0];\n\t\t\tthis.mergeLabel(deLabel, 0);\n\t\t\tthis.mergeLabel(deLabel, 1);\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet deLabel = arguments[0], geomIndex = arguments[1];\n\t\t\tvar loc = deLabel.getLocation(geomIndex, Position.RIGHT);\n\t\t\tif (loc === Location.NONE) return null;\n\t\t\tif (this._label.getLocation(geomIndex) === Location.NONE) {\n\t\t\t\tthis._label.setLocation(geomIndex, loc);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t}\n\tsetShell(shell) {\n\t\tthis._shell = shell;\n\t\tif (shell !== null) shell.addHole(this);\n\t}\n\ttoPolygon(geometryFactory) {\n\t\tvar holeLR = new Array(this._holes.size()).fill(null);\n\t\tfor (var i = 0; i < this._holes.size(); i++) {\n\t\t\tholeLR[i] = this._holes.get(i).getLinearRing();\n\t\t}\n\t\tvar poly = geometryFactory.createPolygon(this.getLinearRing(), holeLR);\n\t\treturn poly;\n\t}\n\tgetClass() {\n\t\treturn EdgeRing;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nEdgeRing.constructor_ = function () {\n\tthis._startDe = null;\n\tthis._maxNodeDegree = -1;\n\tthis._edges = new ArrayList();\n\tthis._pts = new ArrayList();\n\tthis._label = new Label(Location.NONE);\n\tthis._ring = null;\n\tthis._isHole = null;\n\tthis._shell = null;\n\tthis._holes = new ArrayList();\n\tthis._geometryFactory = null;\n\tif (arguments.length === 0) {} else if (arguments.length === 2) {\n\t\tlet start = arguments[0], geometryFactory = arguments[1];\n\t\tthis._geometryFactory = geometryFactory;\n\t\tthis.computePoints(start);\n\t\tthis.computeRing();\n\t}\n};\n","import EdgeRing from '../../geomgraph/EdgeRing';\nexport default class MinimalEdgeRing extends EdgeRing {\n\tconstructor() {\n\t\tsuper();\n\t\tMinimalEdgeRing.constructor_.apply(this, arguments);\n\t}\n\tsetEdgeRing(de, er) {\n\t\tde.setMinEdgeRing(er);\n\t}\n\tgetNext(de) {\n\t\treturn de.getNextMin();\n\t}\n\tgetClass() {\n\t\treturn MinimalEdgeRing;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nMinimalEdgeRing.constructor_ = function () {\n\tlet start = arguments[0], geometryFactory = arguments[1];\n\tEdgeRing.constructor_.call(this, start, geometryFactory);\n};\n","import MinimalEdgeRing from './MinimalEdgeRing';\nimport EdgeRing from '../../geomgraph/EdgeRing';\nimport ArrayList from '../../../../../java/util/ArrayList';\nexport default class MaximalEdgeRing extends EdgeRing {\n\tconstructor() {\n\t\tsuper();\n\t\tMaximalEdgeRing.constructor_.apply(this, arguments);\n\t}\n\tbuildMinimalRings() {\n\t\tvar minEdgeRings = new ArrayList();\n\t\tvar de = this._startDe;\n\t\tdo {\n\t\t\tif (de.getMinEdgeRing() === null) {\n\t\t\t\tvar minEr = new MinimalEdgeRing(de, this._geometryFactory);\n\t\t\t\tminEdgeRings.add(minEr);\n\t\t\t}\n\t\t\tde = de.getNext();\n\t\t} while (de !== this._startDe);\n\t\treturn minEdgeRings;\n\t}\n\tsetEdgeRing(de, er) {\n\t\tde.setEdgeRing(er);\n\t}\n\tlinkDirectedEdgesForMinimalEdgeRings() {\n\t\tvar de = this._startDe;\n\t\tdo {\n\t\t\tvar node = de.getNode();\n\t\t\tnode.getEdges().linkMinimalDirectedEdges(this);\n\t\t\tde = de.getNext();\n\t\t} while (de !== this._startDe);\n\t}\n\tgetNext(de) {\n\t\treturn de.getNext();\n\t}\n\tgetClass() {\n\t\treturn MaximalEdgeRing;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nMaximalEdgeRing.constructor_ = function () {\n\tlet start = arguments[0], geometryFactory = arguments[1];\n\tEdgeRing.constructor_.call(this, start, geometryFactory);\n};\n","import PointLocation from '../../algorithm/PointLocation';\nimport TopologyException from '../../geom/TopologyException';\nimport MaximalEdgeRing from './MaximalEdgeRing';\nimport ArrayList from '../../../../../java/util/ArrayList';\nimport Assert from '../../util/Assert';\nimport PlanarGraph from '../../geomgraph/PlanarGraph';\nexport default class PolygonBuilder {\n\tconstructor() {\n\t\tPolygonBuilder.constructor_.apply(this, arguments);\n\t}\n\tsortShellsAndHoles(edgeRings, shellList, freeHoleList) {\n\t\tfor (var it = edgeRings.iterator(); it.hasNext(); ) {\n\t\t\tvar er = it.next();\n\t\t\tif (er.isHole()) {\n\t\t\t\tfreeHoleList.add(er);\n\t\t\t} else {\n\t\t\t\tshellList.add(er);\n\t\t\t}\n\t\t}\n\t}\n\tcomputePolygons(shellList) {\n\t\tvar resultPolyList = new ArrayList();\n\t\tfor (var it = shellList.iterator(); it.hasNext(); ) {\n\t\t\tvar er = it.next();\n\t\t\tvar poly = er.toPolygon(this._geometryFactory);\n\t\t\tresultPolyList.add(poly);\n\t\t}\n\t\treturn resultPolyList;\n\t}\n\tplaceFreeHoles(shellList, freeHoleList) {\n\t\tfor (var it = freeHoleList.iterator(); it.hasNext(); ) {\n\t\t\tvar hole = it.next();\n\t\t\tif (hole.getShell() === null) {\n\t\t\t\tvar shell = this.findEdgeRingContaining(hole, shellList);\n\t\t\t\tif (shell === null) throw new TopologyException(\"unable to assign hole to a shell\", hole.getCoordinate(0));\n\t\t\t\thole.setShell(shell);\n\t\t\t}\n\t\t}\n\t}\n\tbuildMinimalEdgeRings(maxEdgeRings, shellList, freeHoleList) {\n\t\tvar edgeRings = new ArrayList();\n\t\tfor (var it = maxEdgeRings.iterator(); it.hasNext(); ) {\n\t\t\tvar er = it.next();\n\t\t\tif (er.getMaxNodeDegree() > 2) {\n\t\t\t\ter.linkDirectedEdgesForMinimalEdgeRings();\n\t\t\t\tvar minEdgeRings = er.buildMinimalRings();\n\t\t\t\tvar shell = this.findShell(minEdgeRings);\n\t\t\t\tif (shell !== null) {\n\t\t\t\t\tthis.placePolygonHoles(shell, minEdgeRings);\n\t\t\t\t\tshellList.add(shell);\n\t\t\t\t} else {\n\t\t\t\t\tfreeHoleList.addAll(minEdgeRings);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tedgeRings.add(er);\n\t\t\t}\n\t\t}\n\t\treturn edgeRings;\n\t}\n\tcontainsPoint(p) {\n\t\tfor (var it = this._shellList.iterator(); it.hasNext(); ) {\n\t\t\tvar er = it.next();\n\t\t\tif (er.containsPoint(p)) return true;\n\t\t}\n\t\treturn false;\n\t}\n\tbuildMaximalEdgeRings(dirEdges) {\n\t\tvar maxEdgeRings = new ArrayList();\n\t\tfor (var it = dirEdges.iterator(); it.hasNext(); ) {\n\t\t\tvar de = it.next();\n\t\t\tif (de.isInResult() && de.getLabel().isArea()) {\n\t\t\t\tif (de.getEdgeRing() === null) {\n\t\t\t\t\tvar er = new MaximalEdgeRing(de, this._geometryFactory);\n\t\t\t\t\tmaxEdgeRings.add(er);\n\t\t\t\t\ter.setInResult();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn maxEdgeRings;\n\t}\n\tplacePolygonHoles(shell, minEdgeRings) {\n\t\tfor (var it = minEdgeRings.iterator(); it.hasNext(); ) {\n\t\t\tvar er = it.next();\n\t\t\tif (er.isHole()) {\n\t\t\t\ter.setShell(shell);\n\t\t\t}\n\t\t}\n\t}\n\tgetPolygons() {\n\t\tvar resultPolyList = this.computePolygons(this._shellList);\n\t\treturn resultPolyList;\n\t}\n\tfindEdgeRingContaining(testEr, shellList) {\n\t\tvar testRing = testEr.getLinearRing();\n\t\tvar testEnv = testRing.getEnvelopeInternal();\n\t\tvar testPt = testRing.getCoordinateN(0);\n\t\tvar minShell = null;\n\t\tvar minEnv = null;\n\t\tfor (var it = shellList.iterator(); it.hasNext(); ) {\n\t\t\tvar tryShell = it.next();\n\t\t\tvar tryRing = tryShell.getLinearRing();\n\t\t\tvar tryEnv = tryRing.getEnvelopeInternal();\n\t\t\tif (minShell !== null) minEnv = minShell.getLinearRing().getEnvelopeInternal();\n\t\t\tvar isContained = false;\n\t\t\tif (tryEnv.contains(testEnv) && PointLocation.isInRing(testPt, tryRing.getCoordinates())) isContained = true;\n\t\t\tif (isContained) {\n\t\t\t\tif (minShell === null || minEnv.contains(tryEnv)) {\n\t\t\t\t\tminShell = tryShell;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn minShell;\n\t}\n\tfindShell(minEdgeRings) {\n\t\tvar shellCount = 0;\n\t\tvar shell = null;\n\t\tfor (var it = minEdgeRings.iterator(); it.hasNext(); ) {\n\t\t\tvar er = it.next();\n\t\t\tif (!er.isHole()) {\n\t\t\t\tshell = er;\n\t\t\t\tshellCount++;\n\t\t\t}\n\t\t}\n\t\tAssert.isTrue(shellCount <= 1, \"found two shells in MinimalEdgeRing list\");\n\t\treturn shell;\n\t}\n\tadd() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet graph = arguments[0];\n\t\t\tthis.add(graph.getEdgeEnds(), graph.getNodes());\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet dirEdges = arguments[0], nodes = arguments[1];\n\t\t\tPlanarGraph.linkResultDirectedEdges(nodes);\n\t\t\tvar maxEdgeRings = this.buildMaximalEdgeRings(dirEdges);\n\t\t\tvar freeHoleList = new ArrayList();\n\t\t\tvar edgeRings = this.buildMinimalEdgeRings(maxEdgeRings, this._shellList, freeHoleList);\n\t\t\tthis.sortShellsAndHoles(edgeRings, this._shellList, freeHoleList);\n\t\t\tthis.placeFreeHoles(this._shellList, freeHoleList);\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn PolygonBuilder;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nPolygonBuilder.constructor_ = function () {\n\tthis._geometryFactory = null;\n\tthis._shellList = new ArrayList();\n\tlet geometryFactory = arguments[0];\n\tthis._geometryFactory = geometryFactory;\n};\n","import CoordinateList from '../../geom/CoordinateList';\nimport Orientation from '../../algorithm/Orientation';\nimport Distance from '../../algorithm/Distance';\nexport default class BufferInputLineSimplifier {\n\tconstructor() {\n\t\tBufferInputLineSimplifier.constructor_.apply(this, arguments);\n\t}\n\tstatic simplify(inputLine, distanceTol) {\n\t\tvar simp = new BufferInputLineSimplifier(inputLine);\n\t\treturn simp.simplify(distanceTol);\n\t}\n\tisDeletable(i0, i1, i2, distanceTol) {\n\t\tvar p0 = this._inputLine[i0];\n\t\tvar p1 = this._inputLine[i1];\n\t\tvar p2 = this._inputLine[i2];\n\t\tif (!this.isConcave(p0, p1, p2)) return false;\n\t\tif (!this.isShallow(p0, p1, p2, distanceTol)) return false;\n\t\treturn this.isShallowSampled(p0, p1, i0, i2, distanceTol);\n\t}\n\tdeleteShallowConcavities() {\n\t\tvar index = 1;\n\t\tvar maxIndex = this._inputLine.length - 1;\n\t\tvar midIndex = this.findNextNonDeletedIndex(index);\n\t\tvar lastIndex = this.findNextNonDeletedIndex(midIndex);\n\t\tvar isChanged = false;\n\t\twhile (lastIndex < this._inputLine.length) {\n\t\t\tvar isMiddleVertexDeleted = false;\n\t\t\tif (this.isDeletable(index, midIndex, lastIndex, this._distanceTol)) {\n\t\t\t\tthis._isDeleted[midIndex] = BufferInputLineSimplifier.DELETE;\n\t\t\t\tisMiddleVertexDeleted = true;\n\t\t\t\tisChanged = true;\n\t\t\t}\n\t\t\tif (isMiddleVertexDeleted) index = lastIndex; else index = midIndex;\n\t\t\tmidIndex = this.findNextNonDeletedIndex(index);\n\t\t\tlastIndex = this.findNextNonDeletedIndex(midIndex);\n\t\t}\n\t\treturn isChanged;\n\t}\n\tisShallowConcavity(p0, p1, p2, distanceTol) {\n\t\tvar orientation = Orientation.index(p0, p1, p2);\n\t\tvar isAngleToSimplify = orientation === this._angleOrientation;\n\t\tif (!isAngleToSimplify) return false;\n\t\tvar dist = Distance.pointToSegment(p1, p0, p2);\n\t\treturn dist < distanceTol;\n\t}\n\tisShallowSampled(p0, p2, i0, i2, distanceTol) {\n\t\tvar inc = Math.trunc((i2 - i0) / BufferInputLineSimplifier.NUM_PTS_TO_CHECK);\n\t\tif (inc <= 0) inc = 1;\n\t\tfor (var i = i0; i < i2; i += inc) {\n\t\t\tif (!this.isShallow(p0, p2, this._inputLine[i], distanceTol)) return false;\n\t\t}\n\t\treturn true;\n\t}\n\tisConcave(p0, p1, p2) {\n\t\tvar orientation = Orientation.index(p0, p1, p2);\n\t\tvar isConcave = orientation === this._angleOrientation;\n\t\treturn isConcave;\n\t}\n\tsimplify(distanceTol) {\n\t\tthis._distanceTol = Math.abs(distanceTol);\n\t\tif (distanceTol < 0) this._angleOrientation = Orientation.CLOCKWISE;\n\t\tthis._isDeleted = new Array(this._inputLine.length).fill(null);\n\t\tvar isChanged = false;\n\t\tdo {\n\t\t\tisChanged = this.deleteShallowConcavities();\n\t\t} while (isChanged);\n\t\treturn this.collapseLine();\n\t}\n\tfindNextNonDeletedIndex(index) {\n\t\tvar next = index + 1;\n\t\twhile (next < this._inputLine.length && this._isDeleted[next] === BufferInputLineSimplifier.DELETE) next++;\n\t\treturn next;\n\t}\n\tisShallow(p0, p1, p2, distanceTol) {\n\t\tvar dist = Distance.pointToSegment(p1, p0, p2);\n\t\treturn dist < distanceTol;\n\t}\n\tcollapseLine() {\n\t\tvar coordList = new CoordinateList();\n\t\tfor (var i = 0; i < this._inputLine.length; i++) {\n\t\t\tif (this._isDeleted[i] !== BufferInputLineSimplifier.DELETE) coordList.add(this._inputLine[i]);\n\t\t}\n\t\treturn coordList.toCoordinateArray();\n\t}\n\tgetClass() {\n\t\treturn BufferInputLineSimplifier;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nBufferInputLineSimplifier.constructor_ = function () {\n\tthis._inputLine = null;\n\tthis._distanceTol = null;\n\tthis._isDeleted = null;\n\tthis._angleOrientation = Orientation.COUNTERCLOCKWISE;\n\tlet inputLine = arguments[0];\n\tthis._inputLine = inputLine;\n};\nBufferInputLineSimplifier.INIT = 0;\nBufferInputLineSimplifier.DELETE = 1;\nBufferInputLineSimplifier.KEEP = 1;\nBufferInputLineSimplifier.NUM_PTS_TO_CHECK = 10;\n","import GeometryFactory from '../../geom/GeometryFactory';\nimport Coordinate from '../../geom/Coordinate';\nimport ArrayList from '../../../../../java/util/ArrayList';\nexport default class OffsetSegmentString {\n\tconstructor() {\n\t\tOffsetSegmentString.constructor_.apply(this, arguments);\n\t}\n\tgetCoordinates() {\n\t\tvar coord = this._ptList.toArray(OffsetSegmentString.COORDINATE_ARRAY_TYPE);\n\t\treturn coord;\n\t}\n\tsetPrecisionModel(precisionModel) {\n\t\tthis._precisionModel = precisionModel;\n\t}\n\taddPt(pt) {\n\t\tvar bufPt = new Coordinate(pt);\n\t\tthis._precisionModel.makePrecise(bufPt);\n\t\tif (this.isRedundant(bufPt)) return null;\n\t\tthis._ptList.add(bufPt);\n\t}\n\treverse() {}\n\taddPts(pt, isForward) {\n\t\tif (isForward) {\n\t\t\tfor (var i = 0; i < pt.length; i++) {\n\t\t\t\tthis.addPt(pt[i]);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var i = pt.length - 1; i >= 0; i--) {\n\t\t\t\tthis.addPt(pt[i]);\n\t\t\t}\n\t\t}\n\t}\n\tisRedundant(pt) {\n\t\tif (this._ptList.size() < 1) return false;\n\t\tvar lastPt = this._ptList.get(this._ptList.size() - 1);\n\t\tvar ptDist = pt.distance(lastPt);\n\t\tif (ptDist < this._minimimVertexDistance) return true;\n\t\treturn false;\n\t}\n\ttoString() {\n\t\tvar fact = new GeometryFactory();\n\t\tvar line = fact.createLineString(this.getCoordinates());\n\t\treturn line.toString();\n\t}\n\tcloseRing() {\n\t\tif (this._ptList.size() < 1) return null;\n\t\tvar startPt = new Coordinate(this._ptList.get(0));\n\t\tvar lastPt = this._ptList.get(this._ptList.size() - 1);\n\t\tvar last2Pt = null;\n\t\tif (this._ptList.size() >= 2) last2Pt = this._ptList.get(this._ptList.size() - 2);\n\t\tif (startPt.equals(lastPt)) return null;\n\t\tthis._ptList.add(startPt);\n\t}\n\tsetMinimumVertexDistance(minimimVertexDistance) {\n\t\tthis._minimimVertexDistance = minimimVertexDistance;\n\t}\n\tgetClass() {\n\t\treturn OffsetSegmentString;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nOffsetSegmentString.constructor_ = function () {\n\tthis._ptList = null;\n\tthis._precisionModel = null;\n\tthis._minimimVertexDistance = 0.0;\n\tthis._ptList = new ArrayList();\n};\nOffsetSegmentString.COORDINATE_ARRAY_TYPE = new Array(0).fill(null);\n","import BufferParameters from './BufferParameters';\nimport NotRepresentableException from '../../algorithm/NotRepresentableException';\nimport Position from '../../geomgraph/Position';\nimport Coordinate from '../../geom/Coordinate';\nimport Orientation from '../../algorithm/Orientation';\nimport OffsetSegmentString from './OffsetSegmentString';\nimport LineSegment from '../../geom/LineSegment';\nimport Angle from '../../algorithm/Angle';\nimport RobustLineIntersector from '../../algorithm/RobustLineIntersector';\nimport HCoordinate from '../../algorithm/HCoordinate';\nexport default class OffsetSegmentGenerator {\n\tconstructor() {\n\t\tOffsetSegmentGenerator.constructor_.apply(this, arguments);\n\t}\n\taddNextSegment(p, addStartPoint) {\n\t\tthis._s0 = this._s1;\n\t\tthis._s1 = this._s2;\n\t\tthis._s2 = p;\n\t\tthis._seg0.setCoordinates(this._s0, this._s1);\n\t\tthis.computeOffsetSegment(this._seg0, this._side, this._distance, this._offset0);\n\t\tthis._seg1.setCoordinates(this._s1, this._s2);\n\t\tthis.computeOffsetSegment(this._seg1, this._side, this._distance, this._offset1);\n\t\tif (this._s1.equals(this._s2)) return null;\n\t\tvar orientation = Orientation.index(this._s0, this._s1, this._s2);\n\t\tvar outsideTurn = orientation === Orientation.CLOCKWISE && this._side === Position.LEFT || orientation === Orientation.COUNTERCLOCKWISE && this._side === Position.RIGHT;\n\t\tif (orientation === 0) {\n\t\t\tthis.addCollinear(addStartPoint);\n\t\t} else if (outsideTurn) {\n\t\t\tthis.addOutsideTurn(orientation, addStartPoint);\n\t\t} else {\n\t\t\tthis.addInsideTurn(orientation, addStartPoint);\n\t\t}\n\t}\n\taddLineEndCap(p0, p1) {\n\t\tvar seg = new LineSegment(p0, p1);\n\t\tvar offsetL = new LineSegment();\n\t\tthis.computeOffsetSegment(seg, Position.LEFT, this._distance, offsetL);\n\t\tvar offsetR = new LineSegment();\n\t\tthis.computeOffsetSegment(seg, Position.RIGHT, this._distance, offsetR);\n\t\tvar dx = p1.x - p0.x;\n\t\tvar dy = p1.y - p0.y;\n\t\tvar angle = Math.atan2(dy, dx);\n\t\tswitch (this._bufParams.getEndCapStyle()) {\n\t\t\tcase BufferParameters.CAP_ROUND:\n\t\t\t\tthis._segList.addPt(offsetL.p1);\n\t\t\t\tthis.addDirectedFillet(p1, angle + Math.PI / 2, angle - Math.PI / 2, Orientation.CLOCKWISE, this._distance);\n\t\t\t\tthis._segList.addPt(offsetR.p1);\n\t\t\t\tbreak;\n\t\t\tcase BufferParameters.CAP_FLAT:\n\t\t\t\tthis._segList.addPt(offsetL.p1);\n\t\t\t\tthis._segList.addPt(offsetR.p1);\n\t\t\t\tbreak;\n\t\t\tcase BufferParameters.CAP_SQUARE:\n\t\t\t\tvar squareCapSideOffset = new Coordinate();\n\t\t\t\tsquareCapSideOffset.x = Math.abs(this._distance) * Math.cos(angle);\n\t\t\t\tsquareCapSideOffset.y = Math.abs(this._distance) * Math.sin(angle);\n\t\t\t\tvar squareCapLOffset = new Coordinate(offsetL.p1.x + squareCapSideOffset.x, offsetL.p1.y + squareCapSideOffset.y);\n\t\t\t\tvar squareCapROffset = new Coordinate(offsetR.p1.x + squareCapSideOffset.x, offsetR.p1.y + squareCapSideOffset.y);\n\t\t\t\tthis._segList.addPt(squareCapLOffset);\n\t\t\t\tthis._segList.addPt(squareCapROffset);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tgetCoordinates() {\n\t\tvar pts = this._segList.getCoordinates();\n\t\treturn pts;\n\t}\n\taddMitreJoin(p, offset0, offset1, distance) {\n\t\tvar isMitreWithinLimit = true;\n\t\tvar intPt = null;\n\t\ttry {\n\t\t\tintPt = HCoordinate.intersection(offset0.p0, offset0.p1, offset1.p0, offset1.p1);\n\t\t\tvar mitreRatio = distance <= 0.0 ? 1.0 : intPt.distance(p) / Math.abs(distance);\n\t\t\tif (mitreRatio > this._bufParams.getMitreLimit()) isMitreWithinLimit = false;\n\t\t} catch (ex) {\n\t\t\tif (ex instanceof NotRepresentableException) {\n\t\t\t\tintPt = new Coordinate(0, 0);\n\t\t\t\tisMitreWithinLimit = false;\n\t\t\t} else throw ex;\n\t\t} finally {}\n\t\tif (isMitreWithinLimit) {\n\t\t\tthis._segList.addPt(intPt);\n\t\t} else {\n\t\t\tthis.addLimitedMitreJoin(offset0, offset1, distance, this._bufParams.getMitreLimit());\n\t\t}\n\t}\n\taddOutsideTurn(orientation, addStartPoint) {\n\t\tif (this._offset0.p1.distance(this._offset1.p0) < this._distance * OffsetSegmentGenerator.OFFSET_SEGMENT_SEPARATION_FACTOR) {\n\t\t\tthis._segList.addPt(this._offset0.p1);\n\t\t\treturn null;\n\t\t}\n\t\tif (this._bufParams.getJoinStyle() === BufferParameters.JOIN_MITRE) {\n\t\t\tthis.addMitreJoin(this._s1, this._offset0, this._offset1, this._distance);\n\t\t} else if (this._bufParams.getJoinStyle() === BufferParameters.JOIN_BEVEL) {\n\t\t\tthis.addBevelJoin(this._offset0, this._offset1);\n\t\t} else {\n\t\t\tif (addStartPoint) this._segList.addPt(this._offset0.p1);\n\t\t\tthis.addCornerFillet(this._s1, this._offset0.p1, this._offset1.p0, orientation, this._distance);\n\t\t\tthis._segList.addPt(this._offset1.p0);\n\t\t}\n\t}\n\tcreateSquare(p) {\n\t\tthis._segList.addPt(new Coordinate(p.x + this._distance, p.y + this._distance));\n\t\tthis._segList.addPt(new Coordinate(p.x + this._distance, p.y - this._distance));\n\t\tthis._segList.addPt(new Coordinate(p.x - this._distance, p.y - this._distance));\n\t\tthis._segList.addPt(new Coordinate(p.x - this._distance, p.y + this._distance));\n\t\tthis._segList.closeRing();\n\t}\n\taddSegments(pt, isForward) {\n\t\tthis._segList.addPts(pt, isForward);\n\t}\n\taddFirstSegment() {\n\t\tthis._segList.addPt(this._offset1.p0);\n\t}\n\taddCornerFillet(p, p0, p1, direction, radius) {\n\t\tvar dx0 = p0.x - p.x;\n\t\tvar dy0 = p0.y - p.y;\n\t\tvar startAngle = Math.atan2(dy0, dx0);\n\t\tvar dx1 = p1.x - p.x;\n\t\tvar dy1 = p1.y - p.y;\n\t\tvar endAngle = Math.atan2(dy1, dx1);\n\t\tif (direction === Orientation.CLOCKWISE) {\n\t\t\tif (startAngle <= endAngle) startAngle += 2.0 * Math.PI;\n\t\t} else {\n\t\t\tif (startAngle >= endAngle) startAngle -= 2.0 * Math.PI;\n\t\t}\n\t\tthis._segList.addPt(p0);\n\t\tthis.addDirectedFillet(p, startAngle, endAngle, direction, radius);\n\t\tthis._segList.addPt(p1);\n\t}\n\taddLastSegment() {\n\t\tthis._segList.addPt(this._offset1.p1);\n\t}\n\tinitSideSegments(s1, s2, side) {\n\t\tthis._s1 = s1;\n\t\tthis._s2 = s2;\n\t\tthis._side = side;\n\t\tthis._seg1.setCoordinates(s1, s2);\n\t\tthis.computeOffsetSegment(this._seg1, side, this._distance, this._offset1);\n\t}\n\taddLimitedMitreJoin(offset0, offset1, distance, mitreLimit) {\n\t\tvar basePt = this._seg0.p1;\n\t\tvar ang0 = Angle.angle(basePt, this._seg0.p0);\n\t\tvar ang1 = Angle.angle(basePt, this._seg1.p1);\n\t\tvar angDiff = Angle.angleBetweenOriented(this._seg0.p0, basePt, this._seg1.p1);\n\t\tvar angDiffHalf = angDiff / 2;\n\t\tvar midAng = Angle.normalize(ang0 + angDiffHalf);\n\t\tvar mitreMidAng = Angle.normalize(midAng + Math.PI);\n\t\tvar mitreDist = mitreLimit * distance;\n\t\tvar bevelDelta = mitreDist * Math.abs(Math.sin(angDiffHalf));\n\t\tvar bevelHalfLen = distance - bevelDelta;\n\t\tvar bevelMidX = basePt.x + mitreDist * Math.cos(mitreMidAng);\n\t\tvar bevelMidY = basePt.y + mitreDist * Math.sin(mitreMidAng);\n\t\tvar bevelMidPt = new Coordinate(bevelMidX, bevelMidY);\n\t\tvar mitreMidLine = new LineSegment(basePt, bevelMidPt);\n\t\tvar bevelEndLeft = mitreMidLine.pointAlongOffset(1.0, bevelHalfLen);\n\t\tvar bevelEndRight = mitreMidLine.pointAlongOffset(1.0, -bevelHalfLen);\n\t\tif (this._side === Position.LEFT) {\n\t\t\tthis._segList.addPt(bevelEndLeft);\n\t\t\tthis._segList.addPt(bevelEndRight);\n\t\t} else {\n\t\t\tthis._segList.addPt(bevelEndRight);\n\t\t\tthis._segList.addPt(bevelEndLeft);\n\t\t}\n\t}\n\taddDirectedFillet(p, startAngle, endAngle, direction, radius) {\n\t\tvar directionFactor = direction === Orientation.CLOCKWISE ? -1 : 1;\n\t\tvar totalAngle = Math.abs(startAngle - endAngle);\n\t\tvar nSegs = Math.trunc(totalAngle / this._filletAngleQuantum + 0.5);\n\t\tif (nSegs < 1) return null;\n\t\tvar initAngle = null, currAngleInc = null;\n\t\tinitAngle = 0.0;\n\t\tcurrAngleInc = totalAngle / nSegs;\n\t\tvar currAngle = initAngle;\n\t\tvar pt = new Coordinate();\n\t\twhile (currAngle < totalAngle) {\n\t\t\tvar angle = startAngle + directionFactor * currAngle;\n\t\t\tpt.x = p.x + radius * Math.cos(angle);\n\t\t\tpt.y = p.y + radius * Math.sin(angle);\n\t\t\tthis._segList.addPt(pt);\n\t\t\tcurrAngle += currAngleInc;\n\t\t}\n\t}\n\tcomputeOffsetSegment(seg, side, distance, offset) {\n\t\tvar sideSign = side === Position.LEFT ? 1 : -1;\n\t\tvar dx = seg.p1.x - seg.p0.x;\n\t\tvar dy = seg.p1.y - seg.p0.y;\n\t\tvar len = Math.sqrt(dx * dx + dy * dy);\n\t\tvar ux = sideSign * distance * dx / len;\n\t\tvar uy = sideSign * distance * dy / len;\n\t\toffset.p0.x = seg.p0.x - uy;\n\t\toffset.p0.y = seg.p0.y + ux;\n\t\toffset.p1.x = seg.p1.x - uy;\n\t\toffset.p1.y = seg.p1.y + ux;\n\t}\n\taddInsideTurn(orientation, addStartPoint) {\n\t\tthis._li.computeIntersection(this._offset0.p0, this._offset0.p1, this._offset1.p0, this._offset1.p1);\n\t\tif (this._li.hasIntersection()) {\n\t\t\tthis._segList.addPt(this._li.getIntersection(0));\n\t\t} else {\n\t\t\tthis._hasNarrowConcaveAngle = true;\n\t\t\tif (this._offset0.p1.distance(this._offset1.p0) < this._distance * OffsetSegmentGenerator.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR) {\n\t\t\t\tthis._segList.addPt(this._offset0.p1);\n\t\t\t} else {\n\t\t\t\tthis._segList.addPt(this._offset0.p1);\n\t\t\t\tif (this._closingSegLengthFactor > 0) {\n\t\t\t\t\tvar mid0 = new Coordinate((this._closingSegLengthFactor * this._offset0.p1.x + this._s1.x) / (this._closingSegLengthFactor + 1), (this._closingSegLengthFactor * this._offset0.p1.y + this._s1.y) / (this._closingSegLengthFactor + 1));\n\t\t\t\t\tthis._segList.addPt(mid0);\n\t\t\t\t\tvar mid1 = new Coordinate((this._closingSegLengthFactor * this._offset1.p0.x + this._s1.x) / (this._closingSegLengthFactor + 1), (this._closingSegLengthFactor * this._offset1.p0.y + this._s1.y) / (this._closingSegLengthFactor + 1));\n\t\t\t\t\tthis._segList.addPt(mid1);\n\t\t\t\t} else {\n\t\t\t\t\tthis._segList.addPt(this._s1);\n\t\t\t\t}\n\t\t\t\tthis._segList.addPt(this._offset1.p0);\n\t\t\t}\n\t\t}\n\t}\n\tcreateCircle(p) {\n\t\tvar pt = new Coordinate(p.x + this._distance, p.y);\n\t\tthis._segList.addPt(pt);\n\t\tthis.addDirectedFillet(p, 0.0, 2.0 * Math.PI, -1, this._distance);\n\t\tthis._segList.closeRing();\n\t}\n\taddBevelJoin(offset0, offset1) {\n\t\tthis._segList.addPt(offset0.p1);\n\t\tthis._segList.addPt(offset1.p0);\n\t}\n\tinit(distance) {\n\t\tthis._distance = distance;\n\t\tthis._maxCurveSegmentError = distance * (1 - Math.cos(this._filletAngleQuantum / 2.0));\n\t\tthis._segList = new OffsetSegmentString();\n\t\tthis._segList.setPrecisionModel(this._precisionModel);\n\t\tthis._segList.setMinimumVertexDistance(distance * OffsetSegmentGenerator.CURVE_VERTEX_SNAP_DISTANCE_FACTOR);\n\t}\n\taddCollinear(addStartPoint) {\n\t\tthis._li.computeIntersection(this._s0, this._s1, this._s1, this._s2);\n\t\tvar numInt = this._li.getIntersectionNum();\n\t\tif (numInt >= 2) {\n\t\t\tif (this._bufParams.getJoinStyle() === BufferParameters.JOIN_BEVEL || this._bufParams.getJoinStyle() === BufferParameters.JOIN_MITRE) {\n\t\t\t\tif (addStartPoint) this._segList.addPt(this._offset0.p1);\n\t\t\t\tthis._segList.addPt(this._offset1.p0);\n\t\t\t} else {\n\t\t\t\tthis.addCornerFillet(this._s1, this._offset0.p1, this._offset1.p0, Orientation.CLOCKWISE, this._distance);\n\t\t\t}\n\t\t}\n\t}\n\tcloseRing() {\n\t\tthis._segList.closeRing();\n\t}\n\thasNarrowConcaveAngle() {\n\t\treturn this._hasNarrowConcaveAngle;\n\t}\n\tgetClass() {\n\t\treturn OffsetSegmentGenerator;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nOffsetSegmentGenerator.constructor_ = function () {\n\tthis._maxCurveSegmentError = 0.0;\n\tthis._filletAngleQuantum = null;\n\tthis._closingSegLengthFactor = 1;\n\tthis._segList = null;\n\tthis._distance = 0.0;\n\tthis._precisionModel = null;\n\tthis._bufParams = null;\n\tthis._li = null;\n\tthis._s0 = null;\n\tthis._s1 = null;\n\tthis._s2 = null;\n\tthis._seg0 = new LineSegment();\n\tthis._seg1 = new LineSegment();\n\tthis._offset0 = new LineSegment();\n\tthis._offset1 = new LineSegment();\n\tthis._side = 0;\n\tthis._hasNarrowConcaveAngle = false;\n\tlet precisionModel = arguments[0], bufParams = arguments[1], distance = arguments[2];\n\tthis._precisionModel = precisionModel;\n\tthis._bufParams = bufParams;\n\tthis._li = new RobustLineIntersector();\n\tthis._filletAngleQuantum = Math.PI / 2.0 / bufParams.getQuadrantSegments();\n\tif (bufParams.getQuadrantSegments() >= 8 && bufParams.getJoinStyle() === BufferParameters.JOIN_ROUND) this._closingSegLengthFactor = OffsetSegmentGenerator.MAX_CLOSING_SEG_LEN_FACTOR;\n\tthis.init(distance);\n};\nOffsetSegmentGenerator.OFFSET_SEGMENT_SEPARATION_FACTOR = 1.0E-3;\nOffsetSegmentGenerator.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR = 1.0E-3;\nOffsetSegmentGenerator.CURVE_VERTEX_SNAP_DISTANCE_FACTOR = 1.0E-6;\nOffsetSegmentGenerator.MAX_CLOSING_SEG_LEN_FACTOR = 80;\n","import BufferParameters from './BufferParameters';\nimport Position from '../../geomgraph/Position';\nimport Coordinate from '../../geom/Coordinate';\nimport BufferInputLineSimplifier from './BufferInputLineSimplifier';\nimport CoordinateArrays from '../../geom/CoordinateArrays';\nimport OffsetSegmentGenerator from './OffsetSegmentGenerator';\nexport default class OffsetCurveBuilder {\n\tconstructor() {\n\t\tOffsetCurveBuilder.constructor_.apply(this, arguments);\n\t}\n\tstatic copyCoordinates(pts) {\n\t\tvar copy = new Array(pts.length).fill(null);\n\t\tfor (var i = 0; i < copy.length; i++) {\n\t\t\tcopy[i] = new Coordinate(pts[i]);\n\t\t}\n\t\treturn copy;\n\t}\n\tgetOffsetCurve(inputPts, distance) {\n\t\tthis._distance = distance;\n\t\tif (distance === 0.0) return null;\n\t\tvar isRightSide = distance < 0.0;\n\t\tvar posDistance = Math.abs(distance);\n\t\tvar segGen = this.getSegGen(posDistance);\n\t\tif (inputPts.length <= 1) {\n\t\t\tthis.computePointCurve(inputPts[0], segGen);\n\t\t} else {\n\t\t\tthis.computeOffsetCurve(inputPts, isRightSide, segGen);\n\t\t}\n\t\tvar curvePts = segGen.getCoordinates();\n\t\tif (isRightSide) CoordinateArrays.reverse(curvePts);\n\t\treturn curvePts;\n\t}\n\tcomputeSingleSidedBufferCurve(inputPts, isRightSide, segGen) {\n\t\tvar distTol = this.simplifyTolerance(this._distance);\n\t\tif (isRightSide) {\n\t\t\tsegGen.addSegments(inputPts, true);\n\t\t\tvar simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol);\n\t\t\tvar n2 = simp2.length - 1;\n\t\t\tsegGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT);\n\t\t\tsegGen.addFirstSegment();\n\t\t\tfor (var i = n2 - 2; i >= 0; i--) {\n\t\t\t\tsegGen.addNextSegment(simp2[i], true);\n\t\t\t}\n\t\t} else {\n\t\t\tsegGen.addSegments(inputPts, false);\n\t\t\tvar simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol);\n\t\t\tvar n1 = simp1.length - 1;\n\t\t\tsegGen.initSideSegments(simp1[0], simp1[1], Position.LEFT);\n\t\t\tsegGen.addFirstSegment();\n\t\t\tfor (var i = 2; i <= n1; i++) {\n\t\t\t\tsegGen.addNextSegment(simp1[i], true);\n\t\t\t}\n\t\t}\n\t\tsegGen.addLastSegment();\n\t\tsegGen.closeRing();\n\t}\n\tcomputeRingBufferCurve(inputPts, side, segGen) {\n\t\tvar distTol = this.simplifyTolerance(this._distance);\n\t\tif (side === Position.RIGHT) distTol = -distTol;\n\t\tvar simp = BufferInputLineSimplifier.simplify(inputPts, distTol);\n\t\tvar n = simp.length - 1;\n\t\tsegGen.initSideSegments(simp[n - 1], simp[0], side);\n\t\tfor (var i = 1; i <= n; i++) {\n\t\t\tvar addStartPoint = i !== 1;\n\t\t\tsegGen.addNextSegment(simp[i], addStartPoint);\n\t\t}\n\t\tsegGen.closeRing();\n\t}\n\tcomputeLineBufferCurve(inputPts, segGen) {\n\t\tvar distTol = this.simplifyTolerance(this._distance);\n\t\tvar simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol);\n\t\tvar n1 = simp1.length - 1;\n\t\tsegGen.initSideSegments(simp1[0], simp1[1], Position.LEFT);\n\t\tfor (var i = 2; i <= n1; i++) {\n\t\t\tsegGen.addNextSegment(simp1[i], true);\n\t\t}\n\t\tsegGen.addLastSegment();\n\t\tsegGen.addLineEndCap(simp1[n1 - 1], simp1[n1]);\n\t\tvar simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol);\n\t\tvar n2 = simp2.length - 1;\n\t\tsegGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT);\n\t\tfor (var i = n2 - 2; i >= 0; i--) {\n\t\t\tsegGen.addNextSegment(simp2[i], true);\n\t\t}\n\t\tsegGen.addLastSegment();\n\t\tsegGen.addLineEndCap(simp2[1], simp2[0]);\n\t\tsegGen.closeRing();\n\t}\n\tcomputePointCurve(pt, segGen) {\n\t\tswitch (this._bufParams.getEndCapStyle()) {\n\t\t\tcase BufferParameters.CAP_ROUND:\n\t\t\t\tsegGen.createCircle(pt);\n\t\t\t\tbreak;\n\t\t\tcase BufferParameters.CAP_SQUARE:\n\t\t\t\tsegGen.createSquare(pt);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tgetLineCurve(inputPts, distance) {\n\t\tthis._distance = distance;\n\t\tif (distance < 0.0 && !this._bufParams.isSingleSided()) return null;\n\t\tif (distance === 0.0) return null;\n\t\tvar posDistance = Math.abs(distance);\n\t\tvar segGen = this.getSegGen(posDistance);\n\t\tif (inputPts.length <= 1) {\n\t\t\tthis.computePointCurve(inputPts[0], segGen);\n\t\t} else {\n\t\t\tif (this._bufParams.isSingleSided()) {\n\t\t\t\tvar isRightSide = distance < 0.0;\n\t\t\t\tthis.computeSingleSidedBufferCurve(inputPts, isRightSide, segGen);\n\t\t\t} else this.computeLineBufferCurve(inputPts, segGen);\n\t\t}\n\t\tvar lineCoord = segGen.getCoordinates();\n\t\treturn lineCoord;\n\t}\n\tgetBufferParameters() {\n\t\treturn this._bufParams;\n\t}\n\tsimplifyTolerance(bufDistance) {\n\t\treturn bufDistance * this._bufParams.getSimplifyFactor();\n\t}\n\tgetRingCurve(inputPts, side, distance) {\n\t\tthis._distance = distance;\n\t\tif (inputPts.length <= 2) return this.getLineCurve(inputPts, distance);\n\t\tif (distance === 0.0) {\n\t\t\treturn OffsetCurveBuilder.copyCoordinates(inputPts);\n\t\t}\n\t\tvar segGen = this.getSegGen(distance);\n\t\tthis.computeRingBufferCurve(inputPts, side, segGen);\n\t\treturn segGen.getCoordinates();\n\t}\n\tcomputeOffsetCurve(inputPts, isRightSide, segGen) {\n\t\tvar distTol = this.simplifyTolerance(this._distance);\n\t\tif (isRightSide) {\n\t\t\tvar simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol);\n\t\t\tvar n2 = simp2.length - 1;\n\t\t\tsegGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT);\n\t\t\tsegGen.addFirstSegment();\n\t\t\tfor (var i = n2 - 2; i >= 0; i--) {\n\t\t\t\tsegGen.addNextSegment(simp2[i], true);\n\t\t\t}\n\t\t} else {\n\t\t\tvar simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol);\n\t\t\tvar n1 = simp1.length - 1;\n\t\t\tsegGen.initSideSegments(simp1[0], simp1[1], Position.LEFT);\n\t\t\tsegGen.addFirstSegment();\n\t\t\tfor (var i = 2; i <= n1; i++) {\n\t\t\t\tsegGen.addNextSegment(simp1[i], true);\n\t\t\t}\n\t\t}\n\t\tsegGen.addLastSegment();\n\t}\n\tgetSegGen(distance) {\n\t\treturn new OffsetSegmentGenerator(this._precisionModel, this._bufParams, distance);\n\t}\n\tgetClass() {\n\t\treturn OffsetCurveBuilder;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nOffsetCurveBuilder.constructor_ = function () {\n\tthis._distance = 0.0;\n\tthis._precisionModel = null;\n\tthis._bufParams = null;\n\tlet precisionModel = arguments[0], bufParams = arguments[1];\n\tthis._precisionModel = precisionModel;\n\tthis._bufParams = bufParams;\n};\n","import hasInterface from '../../../../../hasInterface';\nimport Position from '../../geomgraph/Position';\nimport Coordinate from '../../geom/Coordinate';\nimport Orientation from '../../algorithm/Orientation';\nimport Collections from '../../../../../java/util/Collections';\nimport DirectedEdge from '../../geomgraph/DirectedEdge';\nimport LineSegment from '../../geom/LineSegment';\nimport Comparable from '../../../../../java/lang/Comparable';\nimport ArrayList from '../../../../../java/util/ArrayList';\nimport List from '../../../../../java/util/List';\nexport default class SubgraphDepthLocater {\n\tconstructor() {\n\t\tSubgraphDepthLocater.constructor_.apply(this, arguments);\n\t}\n\tfindStabbedSegments() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet stabbingRayLeftPt = arguments[0];\n\t\t\tvar stabbedSegments = new ArrayList();\n\t\t\tfor (var i = this._subgraphs.iterator(); i.hasNext(); ) {\n\t\t\t\tvar bsg = i.next();\n\t\t\t\tvar env = bsg.getEnvelope();\n\t\t\t\tif (stabbingRayLeftPt.y < env.getMinY() || stabbingRayLeftPt.y > env.getMaxY()) continue;\n\t\t\t\tthis.findStabbedSegments(stabbingRayLeftPt, bsg.getDirectedEdges(), stabbedSegments);\n\t\t\t}\n\t\t\treturn stabbedSegments;\n\t\t} else if (arguments.length === 3) {\n\t\t\tif (hasInterface(arguments[2], List) && (arguments[0] instanceof Coordinate && arguments[1] instanceof DirectedEdge)) {\n\t\t\t\tlet stabbingRayLeftPt = arguments[0], dirEdge = arguments[1], stabbedSegments = arguments[2];\n\t\t\t\tvar pts = dirEdge.getEdge().getCoordinates();\n\t\t\t\tfor (var i = 0; i < pts.length - 1; i++) {\n\t\t\t\t\tthis._seg.p0 = pts[i];\n\t\t\t\t\tthis._seg.p1 = pts[i + 1];\n\t\t\t\t\tif (this._seg.p0.y > this._seg.p1.y) this._seg.reverse();\n\t\t\t\t\tvar maxx = Math.max(this._seg.p0.x, this._seg.p1.x);\n\t\t\t\t\tif (maxx < stabbingRayLeftPt.x) continue;\n\t\t\t\t\tif (this._seg.isHorizontal()) continue;\n\t\t\t\t\tif (stabbingRayLeftPt.y < this._seg.p0.y || stabbingRayLeftPt.y > this._seg.p1.y) continue;\n\t\t\t\t\tif (Orientation.index(this._seg.p0, this._seg.p1, stabbingRayLeftPt) === Orientation.RIGHT) continue;\n\t\t\t\t\tvar depth = dirEdge.getDepth(Position.LEFT);\n\t\t\t\t\tif (!this._seg.p0.equals(pts[i])) depth = dirEdge.getDepth(Position.RIGHT);\n\t\t\t\t\tvar ds = new DepthSegment(this._seg, depth);\n\t\t\t\t\tstabbedSegments.add(ds);\n\t\t\t\t}\n\t\t\t} else if (hasInterface(arguments[2], List) && (arguments[0] instanceof Coordinate && hasInterface(arguments[1], List))) {\n\t\t\t\tlet stabbingRayLeftPt = arguments[0], dirEdges = arguments[1], stabbedSegments = arguments[2];\n\t\t\t\tfor (var i = dirEdges.iterator(); i.hasNext(); ) {\n\t\t\t\t\tvar de = i.next();\n\t\t\t\t\tif (!de.isForward()) continue;\n\t\t\t\t\tthis.findStabbedSegments(stabbingRayLeftPt, de, stabbedSegments);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tgetDepth(p) {\n\t\tvar stabbedSegments = this.findStabbedSegments(p);\n\t\tif (stabbedSegments.size() === 0) return 0;\n\t\tvar ds = Collections.min(stabbedSegments);\n\t\treturn ds._leftDepth;\n\t}\n\tgetClass() {\n\t\treturn SubgraphDepthLocater;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nclass DepthSegment {\n\tconstructor() {\n\t\tDepthSegment.constructor_.apply(this, arguments);\n\t}\n\tcompareTo(obj) {\n\t\tvar other = obj;\n\t\tif (this._upwardSeg.minX() >= other._upwardSeg.maxX()) return 1;\n\t\tif (this._upwardSeg.maxX() <= other._upwardSeg.minX()) return -1;\n\t\tvar orientIndex = this._upwardSeg.orientationIndex(other._upwardSeg);\n\t\tif (orientIndex !== 0) return orientIndex;\n\t\torientIndex = -1 * other._upwardSeg.orientationIndex(this._upwardSeg);\n\t\tif (orientIndex !== 0) return orientIndex;\n\t\treturn this._upwardSeg.compareTo(other._upwardSeg);\n\t}\n\tcompareX(seg0, seg1) {\n\t\tvar compare0 = seg0.p0.compareTo(seg1.p0);\n\t\tif (compare0 !== 0) return compare0;\n\t\treturn seg0.p1.compareTo(seg1.p1);\n\t}\n\ttoString() {\n\t\treturn this._upwardSeg.toString();\n\t}\n\tgetClass() {\n\t\treturn DepthSegment;\n\t}\n\tget interfaces_() {\n\t\treturn [Comparable];\n\t}\n}\nDepthSegment.constructor_ = function () {\n\tthis._upwardSeg = null;\n\tthis._leftDepth = null;\n\tlet seg = arguments[0], depth = arguments[1];\n\tthis._upwardSeg = new LineSegment(seg);\n\tthis._leftDepth = depth;\n};\nSubgraphDepthLocater.DepthSegment = DepthSegment;\nSubgraphDepthLocater.constructor_ = function () {\n\tthis._subgraphs = null;\n\tthis._seg = new LineSegment();\n\tlet subgraphs = arguments[0];\n\tthis._subgraphs = subgraphs;\n};\n","import Location from '../../geom/Location';\nimport LineString from '../../geom/LineString';\nimport Position from '../../geomgraph/Position';\nimport Point from '../../geom/Point';\nimport NodedSegmentString from '../../noding/NodedSegmentString';\nimport Polygon from '../../geom/Polygon';\nimport MultiPoint from '../../geom/MultiPoint';\nimport LinearRing from '../../geom/LinearRing';\nimport Orientation from '../../algorithm/Orientation';\nimport MultiPolygon from '../../geom/MultiPolygon';\nimport Label from '../../geomgraph/Label';\nimport GeometryCollection from '../../geom/GeometryCollection';\nimport CoordinateArrays from '../../geom/CoordinateArrays';\nimport ArrayList from '../../../../../java/util/ArrayList';\nimport Distance from '../../algorithm/Distance';\nimport MultiLineString from '../../geom/MultiLineString';\nimport Triangle from '../../geom/Triangle';\nexport default class OffsetCurveSetBuilder {\n\tconstructor() {\n\t\tOffsetCurveSetBuilder.constructor_.apply(this, arguments);\n\t}\n\taddPoint(p) {\n\t\tif (this._distance <= 0.0) return null;\n\t\tvar coord = p.getCoordinates();\n\t\tvar curve = this._curveBuilder.getLineCurve(coord, this._distance);\n\t\tthis.addCurve(curve, Location.EXTERIOR, Location.INTERIOR);\n\t}\n\taddPolygon(p) {\n\t\tvar offsetDistance = this._distance;\n\t\tvar offsetSide = Position.LEFT;\n\t\tif (this._distance < 0.0) {\n\t\t\toffsetDistance = -this._distance;\n\t\t\toffsetSide = Position.RIGHT;\n\t\t}\n\t\tvar shell = p.getExteriorRing();\n\t\tvar shellCoord = CoordinateArrays.removeRepeatedPoints(shell.getCoordinates());\n\t\tif (this._distance < 0.0 && this.isErodedCompletely(shell, this._distance)) return null;\n\t\tif (this._distance <= 0.0 && shellCoord.length < 3) return null;\n\t\tthis.addPolygonRing(shellCoord, offsetDistance, offsetSide, Location.EXTERIOR, Location.INTERIOR);\n\t\tfor (var i = 0; i < p.getNumInteriorRing(); i++) {\n\t\t\tvar hole = p.getInteriorRingN(i);\n\t\t\tvar holeCoord = CoordinateArrays.removeRepeatedPoints(hole.getCoordinates());\n\t\t\tif (this._distance > 0.0 && this.isErodedCompletely(hole, -this._distance)) continue;\n\t\t\tthis.addPolygonRing(holeCoord, offsetDistance, Position.opposite(offsetSide), Location.INTERIOR, Location.EXTERIOR);\n\t\t}\n\t}\n\tisTriangleErodedCompletely(triangleCoord, bufferDistance) {\n\t\tvar tri = new Triangle(triangleCoord[0], triangleCoord[1], triangleCoord[2]);\n\t\tvar inCentre = tri.inCentre();\n\t\tvar distToCentre = Distance.pointToSegment(inCentre, tri.p0, tri.p1);\n\t\treturn distToCentre < Math.abs(bufferDistance);\n\t}\n\taddLineString(line) {\n\t\tif (this._distance <= 0.0 && !this._curveBuilder.getBufferParameters().isSingleSided()) return null;\n\t\tvar coord = CoordinateArrays.removeRepeatedPoints(line.getCoordinates());\n\t\tvar curve = this._curveBuilder.getLineCurve(coord, this._distance);\n\t\tthis.addCurve(curve, Location.EXTERIOR, Location.INTERIOR);\n\t}\n\taddCurve(coord, leftLoc, rightLoc) {\n\t\tif (coord === null || coord.length < 2) return null;\n\t\tvar e = new NodedSegmentString(coord, new Label(0, Location.BOUNDARY, leftLoc, rightLoc));\n\t\tthis._curveList.add(e);\n\t}\n\tgetCurves() {\n\t\tthis.add(this._inputGeom);\n\t\treturn this._curveList;\n\t}\n\taddPolygonRing(coord, offsetDistance, side, cwLeftLoc, cwRightLoc) {\n\t\tif (offsetDistance === 0.0 && coord.length < LinearRing.MINIMUM_VALID_SIZE) return null;\n\t\tvar leftLoc = cwLeftLoc;\n\t\tvar rightLoc = cwRightLoc;\n\t\tif (coord.length >= LinearRing.MINIMUM_VALID_SIZE && Orientation.isCCW(coord)) {\n\t\t\tleftLoc = cwRightLoc;\n\t\t\trightLoc = cwLeftLoc;\n\t\t\tside = Position.opposite(side);\n\t\t}\n\t\tvar curve = this._curveBuilder.getRingCurve(coord, side, offsetDistance);\n\t\tthis.addCurve(curve, leftLoc, rightLoc);\n\t}\n\tadd(g) {\n\t\tif (g.isEmpty()) return null;\n\t\tif (g instanceof Polygon) this.addPolygon(g); else if (g instanceof LineString) this.addLineString(g); else if (g instanceof Point) this.addPoint(g); else if (g instanceof MultiPoint) this.addCollection(g); else if (g instanceof MultiLineString) this.addCollection(g); else if (g instanceof MultiPolygon) this.addCollection(g); else if (g instanceof GeometryCollection) this.addCollection(g); else throw new UnsupportedOperationException(g.getClass().getName());\n\t}\n\tisErodedCompletely(ring, bufferDistance) {\n\t\tvar ringCoord = ring.getCoordinates();\n\t\tvar minDiam = 0.0;\n\t\tif (ringCoord.length < 4) return bufferDistance < 0;\n\t\tif (ringCoord.length === 4) return this.isTriangleErodedCompletely(ringCoord, bufferDistance);\n\t\tvar env = ring.getEnvelopeInternal();\n\t\tvar envMinDimension = Math.min(env.getHeight(), env.getWidth());\n\t\tif (bufferDistance < 0.0 && 2 * Math.abs(bufferDistance) > envMinDimension) return true;\n\t\treturn false;\n\t}\n\taddCollection(gc) {\n\t\tfor (var i = 0; i < gc.getNumGeometries(); i++) {\n\t\t\tvar g = gc.getGeometryN(i);\n\t\t\tthis.add(g);\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn OffsetCurveSetBuilder;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nOffsetCurveSetBuilder.constructor_ = function () {\n\tthis._inputGeom = null;\n\tthis._distance = null;\n\tthis._curveBuilder = null;\n\tthis._curveList = new ArrayList();\n\tlet inputGeom = arguments[0], distance = arguments[1], curveBuilder = arguments[2];\n\tthis._inputGeom = inputGeom;\n\tthis._distance = distance;\n\tthis._curveBuilder = curveBuilder;\n};\n","import StringBuffer from '../../../../java/lang/StringBuffer';\nimport Location from '../geom/Location';\nimport Position from './Position';\nimport TopologyException from '../geom/TopologyException';\nimport System from '../../../../java/lang/System';\nimport SimplePointInAreaLocator from '../algorithm/locate/SimplePointInAreaLocator';\nimport ArrayList from '../../../../java/util/ArrayList';\nimport Assert from '../util/Assert';\nimport TreeMap from '../../../../java/util/TreeMap';\nexport default class EdgeEndStar {\n\tconstructor() {\n\t\tEdgeEndStar.constructor_.apply(this, arguments);\n\t}\n\tgetNextCW(ee) {\n\t\tthis.getEdges();\n\t\tvar i = this._edgeList.indexOf(ee);\n\t\tvar iNextCW = i - 1;\n\t\tif (i === 0) iNextCW = this._edgeList.size() - 1;\n\t\treturn this._edgeList.get(iNextCW);\n\t}\n\tpropagateSideLabels(geomIndex) {\n\t\tvar startLoc = Location.NONE;\n\t\tfor (var it = this.iterator(); it.hasNext(); ) {\n\t\t\tvar e = it.next();\n\t\t\tvar label = e.getLabel();\n\t\t\tif (label.isArea(geomIndex) && label.getLocation(geomIndex, Position.LEFT) !== Location.NONE) startLoc = label.getLocation(geomIndex, Position.LEFT);\n\t\t}\n\t\tif (startLoc === Location.NONE) return null;\n\t\tvar currLoc = startLoc;\n\t\tfor (var it = this.iterator(); it.hasNext(); ) {\n\t\t\tvar e = it.next();\n\t\t\tvar label = e.getLabel();\n\t\t\tif (label.getLocation(geomIndex, Position.ON) === Location.NONE) label.setLocation(geomIndex, Position.ON, currLoc);\n\t\t\tif (label.isArea(geomIndex)) {\n\t\t\t\tvar leftLoc = label.getLocation(geomIndex, Position.LEFT);\n\t\t\t\tvar rightLoc = label.getLocation(geomIndex, Position.RIGHT);\n\t\t\t\tif (rightLoc !== Location.NONE) {\n\t\t\t\t\tif (rightLoc !== currLoc) throw new TopologyException(\"side location conflict\", e.getCoordinate());\n\t\t\t\t\tif (leftLoc === Location.NONE) {\n\t\t\t\t\t\tAssert.shouldNeverReachHere(\"found single null side (at \" + e.getCoordinate() + \")\");\n\t\t\t\t\t}\n\t\t\t\t\tcurrLoc = leftLoc;\n\t\t\t\t} else {\n\t\t\t\t\tAssert.isTrue(label.getLocation(geomIndex, Position.LEFT) === Location.NONE, \"found single null side\");\n\t\t\t\t\tlabel.setLocation(geomIndex, Position.RIGHT, currLoc);\n\t\t\t\t\tlabel.setLocation(geomIndex, Position.LEFT, currLoc);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tgetCoordinate() {\n\t\tvar it = this.iterator();\n\t\tif (!it.hasNext()) return null;\n\t\tvar e = it.next();\n\t\treturn e.getCoordinate();\n\t}\n\tprint(out) {\n\t\tSystem.out.println(\"EdgeEndStar: \" + this.getCoordinate());\n\t\tfor (var it = this.iterator(); it.hasNext(); ) {\n\t\t\tvar e = it.next();\n\t\t\te.print(out);\n\t\t}\n\t}\n\tisAreaLabelsConsistent(geomGraph) {\n\t\tthis.computeEdgeEndLabels(geomGraph.getBoundaryNodeRule());\n\t\treturn this.checkAreaLabelsConsistent(0);\n\t}\n\tcheckAreaLabelsConsistent(geomIndex) {\n\t\tvar edges = this.getEdges();\n\t\tif (edges.size() <= 0) return true;\n\t\tvar lastEdgeIndex = edges.size() - 1;\n\t\tvar startLabel = edges.get(lastEdgeIndex).getLabel();\n\t\tvar startLoc = startLabel.getLocation(geomIndex, Position.LEFT);\n\t\tAssert.isTrue(startLoc !== Location.NONE, \"Found unlabelled area edge\");\n\t\tvar currLoc = startLoc;\n\t\tfor (var it = this.iterator(); it.hasNext(); ) {\n\t\t\tvar e = it.next();\n\t\t\tvar label = e.getLabel();\n\t\t\tAssert.isTrue(label.isArea(geomIndex), \"Found non-area edge\");\n\t\t\tvar leftLoc = label.getLocation(geomIndex, Position.LEFT);\n\t\t\tvar rightLoc = label.getLocation(geomIndex, Position.RIGHT);\n\t\t\tif (leftLoc === rightLoc) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (rightLoc !== currLoc) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tcurrLoc = leftLoc;\n\t\t}\n\t\treturn true;\n\t}\n\tfindIndex(eSearch) {\n\t\tthis.iterator();\n\t\tfor (var i = 0; i < this._edgeList.size(); i++) {\n\t\t\tvar e = this._edgeList.get(i);\n\t\t\tif (e === eSearch) return i;\n\t\t}\n\t\treturn -1;\n\t}\n\titerator() {\n\t\treturn this.getEdges().iterator();\n\t}\n\tgetEdges() {\n\t\tif (this._edgeList === null) {\n\t\t\tthis._edgeList = new ArrayList(this._edgeMap.values());\n\t\t}\n\t\treturn this._edgeList;\n\t}\n\tgetLocation(geomIndex, p, geom) {\n\t\tif (this._ptInAreaLocation[geomIndex] === Location.NONE) {\n\t\t\tthis._ptInAreaLocation[geomIndex] = SimplePointInAreaLocator.locate(p, geom[geomIndex].getGeometry());\n\t\t}\n\t\treturn this._ptInAreaLocation[geomIndex];\n\t}\n\ttoString() {\n\t\tvar buf = new StringBuffer();\n\t\tbuf.append(\"EdgeEndStar: \" + this.getCoordinate());\n\t\tbuf.append(\"\\n\");\n\t\tfor (var it = this.iterator(); it.hasNext(); ) {\n\t\t\tvar e = it.next();\n\t\t\tbuf.append(e);\n\t\t\tbuf.append(\"\\n\");\n\t\t}\n\t\treturn buf.toString();\n\t}\n\tcomputeEdgeEndLabels(boundaryNodeRule) {\n\t\tfor (var it = this.iterator(); it.hasNext(); ) {\n\t\t\tvar ee = it.next();\n\t\t\tee.computeLabel(boundaryNodeRule);\n\t\t}\n\t}\n\tcomputeLabelling(geomGraph) {\n\t\tthis.computeEdgeEndLabels(geomGraph[0].getBoundaryNodeRule());\n\t\tthis.propagateSideLabels(0);\n\t\tthis.propagateSideLabels(1);\n\t\tvar hasDimensionalCollapseEdge = [false, false];\n\t\tfor (var it = this.iterator(); it.hasNext(); ) {\n\t\t\tvar e = it.next();\n\t\t\tvar label = e.getLabel();\n\t\t\tfor (var geomi = 0; geomi < 2; geomi++) {\n\t\t\t\tif (label.isLine(geomi) && label.getLocation(geomi) === Location.BOUNDARY) hasDimensionalCollapseEdge[geomi] = true;\n\t\t\t}\n\t\t}\n\t\tfor (var it = this.iterator(); it.hasNext(); ) {\n\t\t\tvar e = it.next();\n\t\t\tvar label = e.getLabel();\n\t\t\tfor (var geomi = 0; geomi < 2; geomi++) {\n\t\t\t\tif (label.isAnyNull(geomi)) {\n\t\t\t\t\tvar loc = Location.NONE;\n\t\t\t\t\tif (hasDimensionalCollapseEdge[geomi]) {\n\t\t\t\t\t\tloc = Location.EXTERIOR;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar p = e.getCoordinate();\n\t\t\t\t\t\tloc = this.getLocation(geomi, p, geomGraph);\n\t\t\t\t\t}\n\t\t\t\t\tlabel.setAllLocationsIfNull(geomi, loc);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tgetDegree() {\n\t\treturn this._edgeMap.size();\n\t}\n\tinsertEdgeEnd(e, obj) {\n\t\tthis._edgeMap.put(e, obj);\n\t\tthis._edgeList = null;\n\t}\n\tgetClass() {\n\t\treturn EdgeEndStar;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nEdgeEndStar.constructor_ = function () {\n\tthis._edgeMap = new TreeMap();\n\tthis._edgeList = null;\n\tthis._ptInAreaLocation = [Location.NONE, Location.NONE];\n};\n","import Location from '../geom/Location';\nimport Position from './Position';\nimport TopologyException from '../geom/TopologyException';\nimport EdgeEndStar from './EdgeEndStar';\nimport System from '../../../../java/lang/System';\nimport Label from './Label';\nimport ArrayList from '../../../../java/util/ArrayList';\nimport Quadrant from './Quadrant';\nimport Assert from '../util/Assert';\nexport default class DirectedEdgeStar extends EdgeEndStar {\n\tconstructor() {\n\t\tsuper();\n\t\tDirectedEdgeStar.constructor_.apply(this, arguments);\n\t}\n\tlinkResultDirectedEdges() {\n\t\tthis.getResultAreaEdges();\n\t\tvar firstOut = null;\n\t\tvar incoming = null;\n\t\tvar state = this._SCANNING_FOR_INCOMING;\n\t\tfor (var i = 0; i < this._resultAreaEdgeList.size(); i++) {\n\t\t\tvar nextOut = this._resultAreaEdgeList.get(i);\n\t\t\tvar nextIn = nextOut.getSym();\n\t\t\tif (!nextOut.getLabel().isArea()) continue;\n\t\t\tif (firstOut === null && nextOut.isInResult()) firstOut = nextOut;\n\t\t\tswitch (state) {\n\t\t\t\tcase this._SCANNING_FOR_INCOMING:\n\t\t\t\t\tif (!nextIn.isInResult()) continue;\n\t\t\t\t\tincoming = nextIn;\n\t\t\t\t\tstate = this._LINKING_TO_OUTGOING;\n\t\t\t\t\tbreak;\n\t\t\t\tcase this._LINKING_TO_OUTGOING:\n\t\t\t\t\tif (!nextOut.isInResult()) continue;\n\t\t\t\t\tincoming.setNext(nextOut);\n\t\t\t\t\tstate = this._SCANNING_FOR_INCOMING;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (state === this._LINKING_TO_OUTGOING) {\n\t\t\tif (firstOut === null) throw new TopologyException(\"no outgoing dirEdge found\", this.getCoordinate());\n\t\t\tAssert.isTrue(firstOut.isInResult(), \"unable to link last incoming dirEdge\");\n\t\t\tincoming.setNext(firstOut);\n\t\t}\n\t}\n\tinsert(ee) {\n\t\tvar de = ee;\n\t\tthis.insertEdgeEnd(de, de);\n\t}\n\tgetRightmostEdge() {\n\t\tvar edges = this.getEdges();\n\t\tvar size = edges.size();\n\t\tif (size < 1) return null;\n\t\tvar de0 = edges.get(0);\n\t\tif (size === 1) return de0;\n\t\tvar deLast = edges.get(size - 1);\n\t\tvar quad0 = de0.getQuadrant();\n\t\tvar quad1 = deLast.getQuadrant();\n\t\tif (Quadrant.isNorthern(quad0) && Quadrant.isNorthern(quad1)) return de0; else if (!Quadrant.isNorthern(quad0) && !Quadrant.isNorthern(quad1)) return deLast; else {\n\t\t\tvar nonHorizontalEdge = null;\n\t\t\tif (de0.getDy() !== 0) return de0; else if (deLast.getDy() !== 0) return deLast;\n\t\t}\n\t\tAssert.shouldNeverReachHere(\"found two horizontal edges incident on node\");\n\t\treturn null;\n\t}\n\tprint(out) {\n\t\tSystem.out.println(\"DirectedEdgeStar: \" + this.getCoordinate());\n\t\tfor (var it = this.iterator(); it.hasNext(); ) {\n\t\t\tvar de = it.next();\n\t\t\tout.print(\"out \");\n\t\t\tde.print(out);\n\t\t\tout.println();\n\t\t\tout.print(\"in \");\n\t\t\tde.getSym().print(out);\n\t\t\tout.println();\n\t\t}\n\t}\n\tgetResultAreaEdges() {\n\t\tif (this._resultAreaEdgeList !== null) return this._resultAreaEdgeList;\n\t\tthis._resultAreaEdgeList = new ArrayList();\n\t\tfor (var it = this.iterator(); it.hasNext(); ) {\n\t\t\tvar de = it.next();\n\t\t\tif (de.isInResult() || de.getSym().isInResult()) this._resultAreaEdgeList.add(de);\n\t\t}\n\t\treturn this._resultAreaEdgeList;\n\t}\n\tupdateLabelling(nodeLabel) {\n\t\tfor (var it = this.iterator(); it.hasNext(); ) {\n\t\t\tvar de = it.next();\n\t\t\tvar label = de.getLabel();\n\t\t\tlabel.setAllLocationsIfNull(0, nodeLabel.getLocation(0));\n\t\t\tlabel.setAllLocationsIfNull(1, nodeLabel.getLocation(1));\n\t\t}\n\t}\n\tlinkAllDirectedEdges() {\n\t\tthis.getEdges();\n\t\tvar prevOut = null;\n\t\tvar firstIn = null;\n\t\tfor (var i = this._edgeList.size() - 1; i >= 0; i--) {\n\t\t\tvar nextOut = this._edgeList.get(i);\n\t\t\tvar nextIn = nextOut.getSym();\n\t\t\tif (firstIn === null) firstIn = nextIn;\n\t\t\tif (prevOut !== null) nextIn.setNext(prevOut);\n\t\t\tprevOut = nextOut;\n\t\t}\n\t\tfirstIn.setNext(prevOut);\n\t}\n\tcomputeDepths() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet de = arguments[0];\n\t\t\tvar edgeIndex = this.findIndex(de);\n\t\t\tvar label = de.getLabel();\n\t\t\tvar startDepth = de.getDepth(Position.LEFT);\n\t\t\tvar targetLastDepth = de.getDepth(Position.RIGHT);\n\t\t\tvar nextDepth = this.computeDepths(edgeIndex + 1, this._edgeList.size(), startDepth);\n\t\t\tvar lastDepth = this.computeDepths(0, edgeIndex, nextDepth);\n\t\t\tif (lastDepth !== targetLastDepth) throw new TopologyException(\"depth mismatch at \" + de.getCoordinate());\n\t\t} else if (arguments.length === 3) {\n\t\t\tlet startIndex = arguments[0], endIndex = arguments[1], startDepth = arguments[2];\n\t\t\tvar currDepth = startDepth;\n\t\t\tfor (var i = startIndex; i < endIndex; i++) {\n\t\t\t\tvar nextDe = this._edgeList.get(i);\n\t\t\t\tvar label = nextDe.getLabel();\n\t\t\t\tnextDe.setEdgeDepths(Position.RIGHT, currDepth);\n\t\t\t\tcurrDepth = nextDe.getDepth(Position.LEFT);\n\t\t\t}\n\t\t\treturn currDepth;\n\t\t}\n\t}\n\tmergeSymLabels() {\n\t\tfor (var it = this.iterator(); it.hasNext(); ) {\n\t\t\tvar de = it.next();\n\t\t\tvar label = de.getLabel();\n\t\t\tlabel.merge(de.getSym().getLabel());\n\t\t}\n\t}\n\tlinkMinimalDirectedEdges(er) {\n\t\tvar firstOut = null;\n\t\tvar incoming = null;\n\t\tvar state = this._SCANNING_FOR_INCOMING;\n\t\tfor (var i = this._resultAreaEdgeList.size() - 1; i >= 0; i--) {\n\t\t\tvar nextOut = this._resultAreaEdgeList.get(i);\n\t\t\tvar nextIn = nextOut.getSym();\n\t\t\tif (firstOut === null && nextOut.getEdgeRing() === er) firstOut = nextOut;\n\t\t\tswitch (state) {\n\t\t\t\tcase this._SCANNING_FOR_INCOMING:\n\t\t\t\t\tif (nextIn.getEdgeRing() !== er) continue;\n\t\t\t\t\tincoming = nextIn;\n\t\t\t\t\tstate = this._LINKING_TO_OUTGOING;\n\t\t\t\t\tbreak;\n\t\t\t\tcase this._LINKING_TO_OUTGOING:\n\t\t\t\t\tif (nextOut.getEdgeRing() !== er) continue;\n\t\t\t\t\tincoming.setNextMin(nextOut);\n\t\t\t\t\tstate = this._SCANNING_FOR_INCOMING;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (state === this._LINKING_TO_OUTGOING) {\n\t\t\tAssert.isTrue(firstOut !== null, \"found null for first outgoing dirEdge\");\n\t\t\tAssert.isTrue(firstOut.getEdgeRing() === er, \"unable to link last incoming dirEdge\");\n\t\t\tincoming.setNextMin(firstOut);\n\t\t}\n\t}\n\tgetOutgoingDegree() {\n\t\tif (arguments.length === 0) {\n\t\t\tvar degree = 0;\n\t\t\tfor (var it = this.iterator(); it.hasNext(); ) {\n\t\t\t\tvar de = it.next();\n\t\t\t\tif (de.isInResult()) degree++;\n\t\t\t}\n\t\t\treturn degree;\n\t\t} else if (arguments.length === 1) {\n\t\t\tlet er = arguments[0];\n\t\t\tvar degree = 0;\n\t\t\tfor (var it = this.iterator(); it.hasNext(); ) {\n\t\t\t\tvar de = it.next();\n\t\t\t\tif (de.getEdgeRing() === er) degree++;\n\t\t\t}\n\t\t\treturn degree;\n\t\t}\n\t}\n\tgetLabel() {\n\t\treturn this._label;\n\t}\n\tfindCoveredLineEdges() {\n\t\tvar startLoc = Location.NONE;\n\t\tfor (var it = this.iterator(); it.hasNext(); ) {\n\t\t\tvar nextOut = it.next();\n\t\t\tvar nextIn = nextOut.getSym();\n\t\t\tif (!nextOut.isLineEdge()) {\n\t\t\t\tif (nextOut.isInResult()) {\n\t\t\t\t\tstartLoc = Location.INTERIOR;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (nextIn.isInResult()) {\n\t\t\t\t\tstartLoc = Location.EXTERIOR;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (startLoc === Location.NONE) return null;\n\t\tvar currLoc = startLoc;\n\t\tfor (var it = this.iterator(); it.hasNext(); ) {\n\t\t\tvar nextOut = it.next();\n\t\t\tvar nextIn = nextOut.getSym();\n\t\t\tif (nextOut.isLineEdge()) {\n\t\t\t\tnextOut.getEdge().setCovered(currLoc === Location.INTERIOR);\n\t\t\t} else {\n\t\t\t\tif (nextOut.isInResult()) currLoc = Location.EXTERIOR;\n\t\t\t\tif (nextIn.isInResult()) currLoc = Location.INTERIOR;\n\t\t\t}\n\t\t}\n\t}\n\tcomputeLabelling(geom) {\n\t\tsuper.computeLabelling.call(this, geom);\n\t\tthis._label = new Label(Location.NONE);\n\t\tfor (var it = this.iterator(); it.hasNext(); ) {\n\t\t\tvar ee = it.next();\n\t\t\tvar e = ee.getEdge();\n\t\t\tvar eLabel = e.getLabel();\n\t\t\tfor (var i = 0; i < 2; i++) {\n\t\t\t\tvar eLoc = eLabel.getLocation(i);\n\t\t\t\tif (eLoc === Location.INTERIOR || eLoc === Location.BOUNDARY) this._label.setLocation(i, Location.INTERIOR);\n\t\t\t}\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn DirectedEdgeStar;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nDirectedEdgeStar.constructor_ = function () {\n\tthis._resultAreaEdgeList = null;\n\tthis._label = null;\n\tthis._SCANNING_FOR_INCOMING = 1;\n\tthis._LINKING_TO_OUTGOING = 2;\n};\n","import DirectedEdgeStar from '../../geomgraph/DirectedEdgeStar';\nimport Node from '../../geomgraph/Node';\nimport NodeFactory from '../../geomgraph/NodeFactory';\nexport default class OverlayNodeFactory extends NodeFactory {\n\tconstructor() {\n\t\tsuper();\n\t\tOverlayNodeFactory.constructor_.apply(this, arguments);\n\t}\n\tcreateNode(coord) {\n\t\treturn new Node(coord, new DirectedEdgeStar());\n\t}\n\tgetClass() {\n\t\treturn OverlayNodeFactory;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nOverlayNodeFactory.constructor_ = function () {};\n","import Comparable from '../../../../java/lang/Comparable';\nimport CoordinateArrays from '../geom/CoordinateArrays';\nexport default class OrientedCoordinateArray {\n\tconstructor() {\n\t\tOrientedCoordinateArray.constructor_.apply(this, arguments);\n\t}\n\tstatic orientation(pts) {\n\t\treturn CoordinateArrays.increasingDirection(pts) === 1;\n\t}\n\tstatic compareOriented(pts1, orientation1, pts2, orientation2) {\n\t\tvar dir1 = orientation1 ? 1 : -1;\n\t\tvar dir2 = orientation2 ? 1 : -1;\n\t\tvar limit1 = orientation1 ? pts1.length : -1;\n\t\tvar limit2 = orientation2 ? pts2.length : -1;\n\t\tvar i1 = orientation1 ? 0 : pts1.length - 1;\n\t\tvar i2 = orientation2 ? 0 : pts2.length - 1;\n\t\tvar comp = 0;\n\t\twhile (true) {\n\t\t\tvar compPt = pts1[i1].compareTo(pts2[i2]);\n\t\t\tif (compPt !== 0) return compPt;\n\t\t\ti1 += dir1;\n\t\t\ti2 += dir2;\n\t\t\tvar done1 = i1 === limit1;\n\t\t\tvar done2 = i2 === limit2;\n\t\t\tif (done1 && !done2) return -1;\n\t\t\tif (!done1 && done2) return 1;\n\t\t\tif (done1 && done2) return 0;\n\t\t}\n\t}\n\tcompareTo(o1) {\n\t\tvar oca = o1;\n\t\tvar comp = OrientedCoordinateArray.compareOriented(this._pts, this._orientation, oca._pts, oca._orientation);\n\t\treturn comp;\n\t}\n\tgetClass() {\n\t\treturn OrientedCoordinateArray;\n\t}\n\tget interfaces_() {\n\t\treturn [Comparable];\n\t}\n}\nOrientedCoordinateArray.constructor_ = function () {\n\tthis._pts = null;\n\tthis._orientation = null;\n\tlet pts = arguments[0];\n\tthis._pts = pts;\n\tthis._orientation = OrientedCoordinateArray.orientation(pts);\n};\n","import OrientedCoordinateArray from '../noding/OrientedCoordinateArray';\nimport ArrayList from '../../../../java/util/ArrayList';\nimport TreeMap from '../../../../java/util/TreeMap';\nexport default class EdgeList {\n\tconstructor() {\n\t\tEdgeList.constructor_.apply(this, arguments);\n\t}\n\tprint(out) {\n\t\tout.print(\"MULTILINESTRING ( \");\n\t\tfor (var j = 0; j < this._edges.size(); j++) {\n\t\t\tvar e = this._edges.get(j);\n\t\t\tif (j > 0) out.print(\",\");\n\t\t\tout.print(\"(\");\n\t\t\tvar pts = e.getCoordinates();\n\t\t\tfor (var i = 0; i < pts.length; i++) {\n\t\t\t\tif (i > 0) out.print(\",\");\n\t\t\t\tout.print(pts[i].x + \" \" + pts[i].y);\n\t\t\t}\n\t\t\tout.println(\")\");\n\t\t}\n\t\tout.print(\") \");\n\t}\n\taddAll(edgeColl) {\n\t\tfor (var i = edgeColl.iterator(); i.hasNext(); ) {\n\t\t\tthis.add(i.next());\n\t\t}\n\t}\n\tfindEdgeIndex(e) {\n\t\tfor (var i = 0; i < this._edges.size(); i++) {\n\t\t\tif (this._edges.get(i).equals(e)) return i;\n\t\t}\n\t\treturn -1;\n\t}\n\titerator() {\n\t\treturn this._edges.iterator();\n\t}\n\tgetEdges() {\n\t\treturn this._edges;\n\t}\n\tget(i) {\n\t\treturn this._edges.get(i);\n\t}\n\tfindEqualEdge(e) {\n\t\tvar oca = new OrientedCoordinateArray(e.getCoordinates());\n\t\tvar matchEdge = this._ocaMap.get(oca);\n\t\treturn matchEdge;\n\t}\n\tadd(e) {\n\t\tthis._edges.add(e);\n\t\tvar oca = new OrientedCoordinateArray(e.getCoordinates());\n\t\tthis._ocaMap.put(oca, e);\n\t}\n\tgetClass() {\n\t\treturn EdgeList;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nEdgeList.constructor_ = function () {\n\tthis._edges = new ArrayList();\n\tthis._ocaMap = new TreeMap();\n};\n","export default class SegmentIntersector {\n\tconstructor() {\n\t\tSegmentIntersector.constructor_.apply(this, arguments);\n\t}\n\tprocessIntersections(e0, segIndex0, e1, segIndex1) {}\n\tisDone() {}\n\tgetClass() {\n\t\treturn SegmentIntersector;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nSegmentIntersector.constructor_ = function () {};\n","import SegmentIntersector from './SegmentIntersector';\nexport default class IntersectionAdder {\n\tconstructor() {\n\t\tIntersectionAdder.constructor_.apply(this, arguments);\n\t}\n\tstatic isAdjacentSegments(i1, i2) {\n\t\treturn Math.abs(i1 - i2) === 1;\n\t}\n\tisTrivialIntersection(e0, segIndex0, e1, segIndex1) {\n\t\tif (e0 === e1) {\n\t\t\tif (this._li.getIntersectionNum() === 1) {\n\t\t\t\tif (IntersectionAdder.isAdjacentSegments(segIndex0, segIndex1)) return true;\n\t\t\t\tif (e0.isClosed()) {\n\t\t\t\t\tvar maxSegIndex = e0.size() - 1;\n\t\t\t\t\tif (segIndex0 === 0 && segIndex1 === maxSegIndex || segIndex1 === 0 && segIndex0 === maxSegIndex) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\tgetProperIntersectionPoint() {\n\t\treturn this._properIntersectionPoint;\n\t}\n\thasProperInteriorIntersection() {\n\t\treturn this._hasProperInterior;\n\t}\n\tgetLineIntersector() {\n\t\treturn this._li;\n\t}\n\thasProperIntersection() {\n\t\treturn this._hasProper;\n\t}\n\tprocessIntersections(e0, segIndex0, e1, segIndex1) {\n\t\tif (e0 === e1 && segIndex0 === segIndex1) return null;\n\t\tthis.numTests++;\n\t\tvar p00 = e0.getCoordinates()[segIndex0];\n\t\tvar p01 = e0.getCoordinates()[segIndex0 + 1];\n\t\tvar p10 = e1.getCoordinates()[segIndex1];\n\t\tvar p11 = e1.getCoordinates()[segIndex1 + 1];\n\t\tthis._li.computeIntersection(p00, p01, p10, p11);\n\t\tif (this._li.hasIntersection()) {\n\t\t\tthis.numIntersections++;\n\t\t\tif (this._li.isInteriorIntersection()) {\n\t\t\t\tthis.numInteriorIntersections++;\n\t\t\t\tthis._hasInterior = true;\n\t\t\t}\n\t\t\tif (!this.isTrivialIntersection(e0, segIndex0, e1, segIndex1)) {\n\t\t\t\tthis._hasIntersection = true;\n\t\t\t\te0.addIntersections(this._li, segIndex0, 0);\n\t\t\t\te1.addIntersections(this._li, segIndex1, 1);\n\t\t\t\tif (this._li.isProper()) {\n\t\t\t\t\tthis.numProperIntersections++;\n\t\t\t\t\tthis._hasProper = true;\n\t\t\t\t\tthis._hasProperInterior = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\thasIntersection() {\n\t\treturn this._hasIntersection;\n\t}\n\tisDone() {\n\t\treturn false;\n\t}\n\thasInteriorIntersection() {\n\t\treturn this._hasInterior;\n\t}\n\tgetClass() {\n\t\treturn IntersectionAdder;\n\t}\n\tget interfaces_() {\n\t\treturn [SegmentIntersector];\n\t}\n}\nIntersectionAdder.constructor_ = function () {\n\tthis._hasIntersection = false;\n\tthis._hasProper = false;\n\tthis._hasProperInterior = false;\n\tthis._hasInterior = false;\n\tthis._properIntersectionPoint = null;\n\tthis._li = null;\n\tthis._isSelfIntersection = null;\n\tthis.numIntersections = 0;\n\tthis.numInteriorIntersections = 0;\n\tthis.numProperIntersections = 0;\n\tthis.numTests = 0;\n\tlet li = arguments[0];\n\tthis._li = li;\n};\n","import Location from '../../geom/Location';\nimport BufferSubgraph from './BufferSubgraph';\nimport PolygonBuilder from '../overlay/PolygonBuilder';\nimport GeometryFactory from '../../geom/GeometryFactory';\nimport Position from '../../geomgraph/Position';\nimport MCIndexNoder from '../../noding/MCIndexNoder';\nimport OffsetCurveBuilder from './OffsetCurveBuilder';\nimport Collections from '../../../../../java/util/Collections';\nimport SubgraphDepthLocater from './SubgraphDepthLocater';\nimport OffsetCurveSetBuilder from './OffsetCurveSetBuilder';\nimport Label from '../../geomgraph/Label';\nimport OverlayNodeFactory from '../overlay/OverlayNodeFactory';\nimport EdgeList from '../../geomgraph/EdgeList';\nimport ArrayList from '../../../../../java/util/ArrayList';\nimport RobustLineIntersector from '../../algorithm/RobustLineIntersector';\nimport IntersectionAdder from '../../noding/IntersectionAdder';\nimport Edge from '../../geomgraph/Edge';\nimport PlanarGraph from '../../geomgraph/PlanarGraph';\nexport default class BufferBuilder {\n\tconstructor() {\n\t\tBufferBuilder.constructor_.apply(this, arguments);\n\t}\n\tstatic depthDelta(label) {\n\t\tvar lLoc = label.getLocation(0, Position.LEFT);\n\t\tvar rLoc = label.getLocation(0, Position.RIGHT);\n\t\tif (lLoc === Location.INTERIOR && rLoc === Location.EXTERIOR) return 1; else if (lLoc === Location.EXTERIOR && rLoc === Location.INTERIOR) return -1;\n\t\treturn 0;\n\t}\n\tstatic convertSegStrings(it) {\n\t\tvar fact = new GeometryFactory();\n\t\tvar lines = new ArrayList();\n\t\twhile (it.hasNext()) {\n\t\t\tvar ss = it.next();\n\t\t\tvar line = fact.createLineString(ss.getCoordinates());\n\t\t\tlines.add(line);\n\t\t}\n\t\treturn fact.buildGeometry(lines);\n\t}\n\tsetWorkingPrecisionModel(pm) {\n\t\tthis._workingPrecisionModel = pm;\n\t}\n\tinsertUniqueEdge(e) {\n\t\tvar existingEdge = this._edgeList.findEqualEdge(e);\n\t\tif (existingEdge !== null) {\n\t\t\tvar existingLabel = existingEdge.getLabel();\n\t\t\tvar labelToMerge = e.getLabel();\n\t\t\tif (!existingEdge.isPointwiseEqual(e)) {\n\t\t\t\tlabelToMerge = new Label(e.getLabel());\n\t\t\t\tlabelToMerge.flip();\n\t\t\t}\n\t\t\texistingLabel.merge(labelToMerge);\n\t\t\tvar mergeDelta = BufferBuilder.depthDelta(labelToMerge);\n\t\t\tvar existingDelta = existingEdge.getDepthDelta();\n\t\t\tvar newDelta = existingDelta + mergeDelta;\n\t\t\texistingEdge.setDepthDelta(newDelta);\n\t\t} else {\n\t\t\tthis._edgeList.add(e);\n\t\t\te.setDepthDelta(BufferBuilder.depthDelta(e.getLabel()));\n\t\t}\n\t}\n\tbuildSubgraphs(subgraphList, polyBuilder) {\n\t\tvar processedGraphs = new ArrayList();\n\t\tfor (var i = subgraphList.iterator(); i.hasNext(); ) {\n\t\t\tvar subgraph = i.next();\n\t\t\tvar p = subgraph.getRightmostCoordinate();\n\t\t\tvar locater = new SubgraphDepthLocater(processedGraphs);\n\t\t\tvar outsideDepth = locater.getDepth(p);\n\t\t\tsubgraph.computeDepth(outsideDepth);\n\t\t\tsubgraph.findResultEdges();\n\t\t\tprocessedGraphs.add(subgraph);\n\t\t\tpolyBuilder.add(subgraph.getDirectedEdges(), subgraph.getNodes());\n\t\t}\n\t}\n\tcreateSubgraphs(graph) {\n\t\tvar subgraphList = new ArrayList();\n\t\tfor (var i = graph.getNodes().iterator(); i.hasNext(); ) {\n\t\t\tvar node = i.next();\n\t\t\tif (!node.isVisited()) {\n\t\t\t\tvar subgraph = new BufferSubgraph();\n\t\t\t\tsubgraph.create(node);\n\t\t\t\tsubgraphList.add(subgraph);\n\t\t\t}\n\t\t}\n\t\tCollections.sort(subgraphList, Collections.reverseOrder());\n\t\treturn subgraphList;\n\t}\n\tcreateEmptyResultGeometry() {\n\t\tvar emptyGeom = this._geomFact.createPolygon();\n\t\treturn emptyGeom;\n\t}\n\tgetNoder(precisionModel) {\n\t\tif (this._workingNoder !== null) return this._workingNoder;\n\t\tvar noder = new MCIndexNoder();\n\t\tvar li = new RobustLineIntersector();\n\t\tli.setPrecisionModel(precisionModel);\n\t\tnoder.setSegmentIntersector(new IntersectionAdder(li));\n\t\treturn noder;\n\t}\n\tbuffer(g, distance) {\n\t\tvar precisionModel = this._workingPrecisionModel;\n\t\tif (precisionModel === null) precisionModel = g.getPrecisionModel();\n\t\tthis._geomFact = g.getFactory();\n\t\tvar curveBuilder = new OffsetCurveBuilder(precisionModel, this._bufParams);\n\t\tvar curveSetBuilder = new OffsetCurveSetBuilder(g, distance, curveBuilder);\n\t\tvar bufferSegStrList = curveSetBuilder.getCurves();\n\t\tif (bufferSegStrList.size() <= 0) {\n\t\t\treturn this.createEmptyResultGeometry();\n\t\t}\n\t\tthis.computeNodedEdges(bufferSegStrList, precisionModel);\n\t\tthis._graph = new PlanarGraph(new OverlayNodeFactory());\n\t\tthis._graph.addEdges(this._edgeList.getEdges());\n\t\tvar subgraphList = this.createSubgraphs(this._graph);\n\t\tvar polyBuilder = new PolygonBuilder(this._geomFact);\n\t\tthis.buildSubgraphs(subgraphList, polyBuilder);\n\t\tvar resultPolyList = polyBuilder.getPolygons();\n\t\tif (resultPolyList.size() <= 0) {\n\t\t\treturn this.createEmptyResultGeometry();\n\t\t}\n\t\tvar resultGeom = this._geomFact.buildGeometry(resultPolyList);\n\t\treturn resultGeom;\n\t}\n\tcomputeNodedEdges(bufferSegStrList, precisionModel) {\n\t\tvar noder = this.getNoder(precisionModel);\n\t\tnoder.computeNodes(bufferSegStrList);\n\t\tvar nodedSegStrings = noder.getNodedSubstrings();\n\t\tfor (var i = nodedSegStrings.iterator(); i.hasNext(); ) {\n\t\t\tvar segStr = i.next();\n\t\t\tvar pts = segStr.getCoordinates();\n\t\t\tif (pts.length === 2 && pts[0].equals2D(pts[1])) continue;\n\t\t\tvar oldLabel = segStr.getData();\n\t\t\tvar edge = new Edge(segStr.getCoordinates(), new Label(oldLabel));\n\t\t\tthis.insertUniqueEdge(edge);\n\t\t}\n\t}\n\tsetNoder(noder) {\n\t\tthis._workingNoder = noder;\n\t}\n\tgetClass() {\n\t\treturn BufferBuilder;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nBufferBuilder.constructor_ = function () {\n\tthis._bufParams = null;\n\tthis._workingPrecisionModel = null;\n\tthis._workingNoder = null;\n\tthis._geomFact = null;\n\tthis._graph = null;\n\tthis._edgeList = new EdgeList();\n\tlet bufParams = arguments[0];\n\tthis._bufParams = bufParams;\n};\n","import GeometryFactory from '../geom/GeometryFactory';\nimport RobustLineIntersector from '../algorithm/RobustLineIntersector';\nimport RuntimeException from '../../../../java/lang/RuntimeException';\nexport default class NodingValidator {\n\tconstructor() {\n\t\tNodingValidator.constructor_.apply(this, arguments);\n\t}\n\tcheckEndPtVertexIntersections() {\n\t\tif (arguments.length === 0) {\n\t\t\tfor (var i = this._segStrings.iterator(); i.hasNext(); ) {\n\t\t\t\tvar ss = i.next();\n\t\t\t\tvar pts = ss.getCoordinates();\n\t\t\t\tthis.checkEndPtVertexIntersections(pts[0], this._segStrings);\n\t\t\t\tthis.checkEndPtVertexIntersections(pts[pts.length - 1], this._segStrings);\n\t\t\t}\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet testPt = arguments[0], segStrings = arguments[1];\n\t\t\tfor (var i = segStrings.iterator(); i.hasNext(); ) {\n\t\t\t\tvar ss = i.next();\n\t\t\t\tvar pts = ss.getCoordinates();\n\t\t\t\tfor (var j = 1; j < pts.length - 1; j++) {\n\t\t\t\t\tif (pts[j].equals(testPt)) throw new RuntimeException(\"found endpt/interior pt intersection at index \" + j + \" :pt \" + testPt);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tcheckInteriorIntersections() {\n\t\tif (arguments.length === 0) {\n\t\t\tfor (var i = this._segStrings.iterator(); i.hasNext(); ) {\n\t\t\t\tvar ss0 = i.next();\n\t\t\t\tfor (var j = this._segStrings.iterator(); j.hasNext(); ) {\n\t\t\t\t\tvar ss1 = j.next();\n\t\t\t\t\tthis.checkInteriorIntersections(ss0, ss1);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet ss0 = arguments[0], ss1 = arguments[1];\n\t\t\tvar pts0 = ss0.getCoordinates();\n\t\t\tvar pts1 = ss1.getCoordinates();\n\t\t\tfor (var i0 = 0; i0 < pts0.length - 1; i0++) {\n\t\t\t\tfor (var i1 = 0; i1 < pts1.length - 1; i1++) {\n\t\t\t\t\tthis.checkInteriorIntersections(ss0, i0, ss1, i1);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (arguments.length === 4) {\n\t\t\tlet e0 = arguments[0], segIndex0 = arguments[1], e1 = arguments[2], segIndex1 = arguments[3];\n\t\t\tif (e0 === e1 && segIndex0 === segIndex1) return null;\n\t\t\tvar p00 = e0.getCoordinates()[segIndex0];\n\t\t\tvar p01 = e0.getCoordinates()[segIndex0 + 1];\n\t\t\tvar p10 = e1.getCoordinates()[segIndex1];\n\t\t\tvar p11 = e1.getCoordinates()[segIndex1 + 1];\n\t\t\tthis._li.computeIntersection(p00, p01, p10, p11);\n\t\t\tif (this._li.hasIntersection()) {\n\t\t\t\tif (this._li.isProper() || this.hasInteriorIntersection(this._li, p00, p01) || this.hasInteriorIntersection(this._li, p10, p11)) {\n\t\t\t\t\tthrow new RuntimeException(\"found non-noded intersection at \" + p00 + \"-\" + p01 + \" and \" + p10 + \"-\" + p11);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tcheckValid() {\n\t\tthis.checkEndPtVertexIntersections();\n\t\tthis.checkInteriorIntersections();\n\t\tthis.checkCollapses();\n\t}\n\tcheckCollapses() {\n\t\tif (arguments.length === 0) {\n\t\t\tfor (var i = this._segStrings.iterator(); i.hasNext(); ) {\n\t\t\t\tvar ss = i.next();\n\t\t\t\tthis.checkCollapses(ss);\n\t\t\t}\n\t\t} else if (arguments.length === 1) {\n\t\t\tlet ss = arguments[0];\n\t\t\tvar pts = ss.getCoordinates();\n\t\t\tfor (var i = 0; i < pts.length - 2; i++) {\n\t\t\t\tthis.checkCollapse(pts[i], pts[i + 1], pts[i + 2]);\n\t\t\t}\n\t\t}\n\t}\n\thasInteriorIntersection(li, p0, p1) {\n\t\tfor (var i = 0; i < li.getIntersectionNum(); i++) {\n\t\t\tvar intPt = li.getIntersection(i);\n\t\t\tif (!(intPt.equals(p0) || intPt.equals(p1))) return true;\n\t\t}\n\t\treturn false;\n\t}\n\tcheckCollapse(p0, p1, p2) {\n\t\tif (p0.equals(p2)) throw new RuntimeException(\"found non-noded collapse at \" + NodingValidator.fact.createLineString([p0, p1, p2]));\n\t}\n\tgetClass() {\n\t\treturn NodingValidator;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nNodingValidator.constructor_ = function () {\n\tthis._li = new RobustLineIntersector();\n\tthis._segStrings = null;\n\tlet segStrings = arguments[0];\n\tthis._segStrings = segStrings;\n};\nNodingValidator.fact = new GeometryFactory();\n","import Coordinate from '../../geom/Coordinate';\nimport IllegalArgumentException from '../../../../../java/lang/IllegalArgumentException';\nimport Envelope from '../../geom/Envelope';\nimport Assert from '../../util/Assert';\nexport default class HotPixel {\n\tconstructor() {\n\t\tHotPixel.constructor_.apply(this, arguments);\n\t}\n\tintersectsScaled(p0, p1) {\n\t\tvar segMinx = Math.min(p0.x, p1.x);\n\t\tvar segMaxx = Math.max(p0.x, p1.x);\n\t\tvar segMiny = Math.min(p0.y, p1.y);\n\t\tvar segMaxy = Math.max(p0.y, p1.y);\n\t\tvar isOutsidePixelEnv = this._maxx < segMinx || this._minx > segMaxx || this._maxy < segMiny || this._miny > segMaxy;\n\t\tif (isOutsidePixelEnv) return false;\n\t\tvar intersects = this.intersectsToleranceSquare(p0, p1);\n\t\tAssert.isTrue(!(isOutsidePixelEnv && intersects), \"Found bad envelope test\");\n\t\treturn intersects;\n\t}\n\tinitCorners(pt) {\n\t\tvar tolerance = 0.5;\n\t\tthis._minx = pt.x - tolerance;\n\t\tthis._maxx = pt.x + tolerance;\n\t\tthis._miny = pt.y - tolerance;\n\t\tthis._maxy = pt.y + tolerance;\n\t\tthis._corner[0] = new Coordinate(this._maxx, this._maxy);\n\t\tthis._corner[1] = new Coordinate(this._minx, this._maxy);\n\t\tthis._corner[2] = new Coordinate(this._minx, this._miny);\n\t\tthis._corner[3] = new Coordinate(this._maxx, this._miny);\n\t}\n\tintersects(p0, p1) {\n\t\tif (this._scaleFactor === 1.0) return this.intersectsScaled(p0, p1);\n\t\tthis.copyScaled(p0, this._p0Scaled);\n\t\tthis.copyScaled(p1, this._p1Scaled);\n\t\treturn this.intersectsScaled(this._p0Scaled, this._p1Scaled);\n\t}\n\tscale(val) {\n\t\treturn Math.round(val * this._scaleFactor);\n\t}\n\tgetCoordinate() {\n\t\treturn this._originalPt;\n\t}\n\tcopyScaled(p, pScaled) {\n\t\tpScaled.x = this.scale(p.x);\n\t\tpScaled.y = this.scale(p.y);\n\t}\n\tgetSafeEnvelope() {\n\t\tif (this._safeEnv === null) {\n\t\t\tvar safeTolerance = HotPixel.SAFE_ENV_EXPANSION_FACTOR / this._scaleFactor;\n\t\t\tthis._safeEnv = new Envelope(this._originalPt.x - safeTolerance, this._originalPt.x + safeTolerance, this._originalPt.y - safeTolerance, this._originalPt.y + safeTolerance);\n\t\t}\n\t\treturn this._safeEnv;\n\t}\n\tintersectsPixelClosure(p0, p1) {\n\t\tthis._li.computeIntersection(p0, p1, this._corner[0], this._corner[1]);\n\t\tif (this._li.hasIntersection()) return true;\n\t\tthis._li.computeIntersection(p0, p1, this._corner[1], this._corner[2]);\n\t\tif (this._li.hasIntersection()) return true;\n\t\tthis._li.computeIntersection(p0, p1, this._corner[2], this._corner[3]);\n\t\tif (this._li.hasIntersection()) return true;\n\t\tthis._li.computeIntersection(p0, p1, this._corner[3], this._corner[0]);\n\t\tif (this._li.hasIntersection()) return true;\n\t\treturn false;\n\t}\n\tintersectsToleranceSquare(p0, p1) {\n\t\tvar intersectsLeft = false;\n\t\tvar intersectsBottom = false;\n\t\tthis._li.computeIntersection(p0, p1, this._corner[0], this._corner[1]);\n\t\tif (this._li.isProper()) return true;\n\t\tthis._li.computeIntersection(p0, p1, this._corner[1], this._corner[2]);\n\t\tif (this._li.isProper()) return true;\n\t\tif (this._li.hasIntersection()) intersectsLeft = true;\n\t\tthis._li.computeIntersection(p0, p1, this._corner[2], this._corner[3]);\n\t\tif (this._li.isProper()) return true;\n\t\tif (this._li.hasIntersection()) intersectsBottom = true;\n\t\tthis._li.computeIntersection(p0, p1, this._corner[3], this._corner[0]);\n\t\tif (this._li.isProper()) return true;\n\t\tif (intersectsLeft && intersectsBottom) return true;\n\t\tif (p0.equals(this._pt)) return true;\n\t\tif (p1.equals(this._pt)) return true;\n\t\treturn false;\n\t}\n\taddSnappedNode(segStr, segIndex) {\n\t\tvar p0 = segStr.getCoordinate(segIndex);\n\t\tvar p1 = segStr.getCoordinate(segIndex + 1);\n\t\tif (this.intersects(p0, p1)) {\n\t\t\tsegStr.addIntersection(this.getCoordinate(), segIndex);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tgetClass() {\n\t\treturn HotPixel;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nHotPixel.constructor_ = function () {\n\tthis._li = null;\n\tthis._pt = null;\n\tthis._originalPt = null;\n\tthis._ptScaled = null;\n\tthis._p0Scaled = null;\n\tthis._p1Scaled = null;\n\tthis._scaleFactor = null;\n\tthis._minx = null;\n\tthis._maxx = null;\n\tthis._miny = null;\n\tthis._maxy = null;\n\tthis._corner = new Array(4).fill(null);\n\tthis._safeEnv = null;\n\tlet pt = arguments[0], scaleFactor = arguments[1], li = arguments[2];\n\tthis._originalPt = pt;\n\tthis._pt = pt;\n\tthis._scaleFactor = scaleFactor;\n\tthis._li = li;\n\tif (scaleFactor <= 0) throw new IllegalArgumentException(\"Scale factor must be non-zero\");\n\tif (scaleFactor !== 1.0) {\n\t\tthis._pt = new Coordinate(this.scale(pt.x), this.scale(pt.y));\n\t\tthis._p0Scaled = new Coordinate();\n\t\tthis._p1Scaled = new Coordinate();\n\t}\n\tthis.initCorners(this._pt);\n};\nHotPixel.SAFE_ENV_EXPANSION_FACTOR = 0.75;\n","import LineSegment from '../../geom/LineSegment';\nexport default class MonotoneChainSelectAction {\n\tconstructor() {\n\t\tMonotoneChainSelectAction.constructor_.apply(this, arguments);\n\t}\n\tselect() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet seg = arguments[0];\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet mc = arguments[0], startIndex = arguments[1];\n\t\t\tmc.getLineSegment(startIndex, this.selectedSegment);\n\t\t\tthis.select(this.selectedSegment);\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn MonotoneChainSelectAction;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nMonotoneChainSelectAction.constructor_ = function () {\n\tthis.selectedSegment = new LineSegment();\n};\n","import MonotoneChainSelectAction from '../../index/chain/MonotoneChainSelectAction';\nimport MonotoneChain from '../../index/chain/MonotoneChain';\nimport ItemVisitor from '../../index/ItemVisitor';\nexport default class MCIndexPointSnapper {\n\tconstructor() {\n\t\tMCIndexPointSnapper.constructor_.apply(this, arguments);\n\t}\n\tsnap() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet hotPixel = arguments[0];\n\t\t\treturn this.snap(hotPixel, null, -1);\n\t\t} else if (arguments.length === 3) {\n\t\t\tlet hotPixel = arguments[0], parentEdge = arguments[1], hotPixelVertexIndex = arguments[2];\n\t\t\tvar pixelEnv = hotPixel.getSafeEnvelope();\n\t\t\tvar hotPixelSnapAction = new HotPixelSnapAction(hotPixel, parentEdge, hotPixelVertexIndex);\n\t\t\tthis._index.query(pixelEnv, new (class {\n\t\t\t\tget interfaces_() {\n\t\t\t\t\treturn [ItemVisitor];\n\t\t\t\t}\n\t\t\t\tvisitItem(item) {\n\t\t\t\t\tvar testChain = item;\n\t\t\t\t\ttestChain.select(pixelEnv, hotPixelSnapAction);\n\t\t\t\t}\n\t\t\t})());\n\t\t\treturn hotPixelSnapAction.isNodeAdded();\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn MCIndexPointSnapper;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nclass HotPixelSnapAction extends MonotoneChainSelectAction {\n\tconstructor() {\n\t\tsuper();\n\t\tHotPixelSnapAction.constructor_.apply(this, arguments);\n\t}\n\tisNodeAdded() {\n\t\treturn this._isNodeAdded;\n\t}\n\tselect() {\n\t\tif (arguments.length === 2 && (Number.isInteger(arguments[1]) && arguments[0] instanceof MonotoneChain)) {\n\t\t\tlet mc = arguments[0], startIndex = arguments[1];\n\t\t\tvar ss = mc.getContext();\n\t\t\tif (this._parentEdge !== null) {\n\t\t\t\tif (ss === this._parentEdge && startIndex === this._hotPixelVertexIndex) return null;\n\t\t\t}\n\t\t\tthis._isNodeAdded = this._hotPixel.addSnappedNode(ss, startIndex);\n\t\t} else return super.select.apply(this, arguments);\n\t}\n\tgetClass() {\n\t\treturn HotPixelSnapAction;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nHotPixelSnapAction.constructor_ = function () {\n\tthis._hotPixel = null;\n\tthis._parentEdge = null;\n\tthis._hotPixelVertexIndex = null;\n\tthis._isNodeAdded = false;\n\tlet hotPixel = arguments[0], parentEdge = arguments[1], hotPixelVertexIndex = arguments[2];\n\tthis._hotPixel = hotPixel;\n\tthis._parentEdge = parentEdge;\n\tthis._hotPixelVertexIndex = hotPixelVertexIndex;\n};\nMCIndexPointSnapper.HotPixelSnapAction = HotPixelSnapAction;\nMCIndexPointSnapper.constructor_ = function () {\n\tthis._index = null;\n\tlet index = arguments[0];\n\tthis._index = index;\n};\n","import SegmentIntersector from './SegmentIntersector';\nimport ArrayList from '../../../../java/util/ArrayList';\nexport default class InteriorIntersectionFinderAdder {\n\tconstructor() {\n\t\tInteriorIntersectionFinderAdder.constructor_.apply(this, arguments);\n\t}\n\tprocessIntersections(e0, segIndex0, e1, segIndex1) {\n\t\tif (e0 === e1 && segIndex0 === segIndex1) return null;\n\t\tvar p00 = e0.getCoordinates()[segIndex0];\n\t\tvar p01 = e0.getCoordinates()[segIndex0 + 1];\n\t\tvar p10 = e1.getCoordinates()[segIndex1];\n\t\tvar p11 = e1.getCoordinates()[segIndex1 + 1];\n\t\tthis._li.computeIntersection(p00, p01, p10, p11);\n\t\tif (this._li.hasIntersection()) {\n\t\t\tif (this._li.isInteriorIntersection()) {\n\t\t\t\tfor (var intIndex = 0; intIndex < this._li.getIntersectionNum(); intIndex++) {\n\t\t\t\t\tthis._interiorIntersections.add(this._li.getIntersection(intIndex));\n\t\t\t\t}\n\t\t\t\te0.addIntersections(this._li, segIndex0, 0);\n\t\t\t\te1.addIntersections(this._li, segIndex1, 1);\n\t\t\t}\n\t\t}\n\t}\n\tisDone() {\n\t\treturn false;\n\t}\n\tgetInteriorIntersections() {\n\t\treturn this._interiorIntersections;\n\t}\n\tgetClass() {\n\t\treturn InteriorIntersectionFinderAdder;\n\t}\n\tget interfaces_() {\n\t\treturn [SegmentIntersector];\n\t}\n}\nInteriorIntersectionFinderAdder.constructor_ = function () {\n\tthis._li = null;\n\tthis._interiorIntersections = null;\n\tlet li = arguments[0];\n\tthis._li = li;\n\tthis._interiorIntersections = new ArrayList();\n};\n","import NodingValidator from '../NodingValidator';\nimport hasInterface from '../../../../../hasInterface';\nimport Collection from '../../../../../java/util/Collection';\nimport Noder from '../Noder';\nimport MCIndexNoder from '../MCIndexNoder';\nimport NodedSegmentString from '../NodedSegmentString';\nimport HotPixel from './HotPixel';\nimport Exception from '../../../../../java/lang/Exception';\nimport MCIndexPointSnapper from './MCIndexPointSnapper';\nimport RobustLineIntersector from '../../algorithm/RobustLineIntersector';\nimport InteriorIntersectionFinderAdder from '../InteriorIntersectionFinderAdder';\nexport default class MCIndexSnapRounder {\n\tconstructor() {\n\t\tMCIndexSnapRounder.constructor_.apply(this, arguments);\n\t}\n\tcheckCorrectness(inputSegmentStrings) {\n\t\tvar resultSegStrings = NodedSegmentString.getNodedSubstrings(inputSegmentStrings);\n\t\tvar nv = new NodingValidator(resultSegStrings);\n\t\ttry {\n\t\t\tnv.checkValid();\n\t\t} catch (ex) {\n\t\t\tif (ex instanceof Exception) {\n\t\t\t\tex.printStackTrace();\n\t\t\t} else throw ex;\n\t\t} finally {}\n\t}\n\tgetNodedSubstrings() {\n\t\treturn NodedSegmentString.getNodedSubstrings(this._nodedSegStrings);\n\t}\n\tsnapRound(segStrings, li) {\n\t\tvar intersections = this.findInteriorIntersections(segStrings, li);\n\t\tthis.computeIntersectionSnaps(intersections);\n\t\tthis.computeVertexSnaps(segStrings);\n\t}\n\tfindInteriorIntersections(segStrings, li) {\n\t\tvar intFinderAdder = new InteriorIntersectionFinderAdder(li);\n\t\tthis._noder.setSegmentIntersector(intFinderAdder);\n\t\tthis._noder.computeNodes(segStrings);\n\t\treturn intFinderAdder.getInteriorIntersections();\n\t}\n\tcomputeVertexSnaps() {\n\t\tif (hasInterface(arguments[0], Collection)) {\n\t\t\tlet edges = arguments[0];\n\t\t\tfor (var i0 = edges.iterator(); i0.hasNext(); ) {\n\t\t\t\tvar edge0 = i0.next();\n\t\t\t\tthis.computeVertexSnaps(edge0);\n\t\t\t}\n\t\t} else if (arguments[0] instanceof NodedSegmentString) {\n\t\t\tlet e = arguments[0];\n\t\t\tvar pts0 = e.getCoordinates();\n\t\t\tfor (var i = 0; i < pts0.length; i++) {\n\t\t\t\tvar hotPixel = new HotPixel(pts0[i], this._scaleFactor, this._li);\n\t\t\t\tvar isNodeAdded = this._pointSnapper.snap(hotPixel, e, i);\n\t\t\t\tif (isNodeAdded) {\n\t\t\t\t\te.addIntersection(pts0[i], i);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tcomputeNodes(inputSegmentStrings) {\n\t\tthis._nodedSegStrings = inputSegmentStrings;\n\t\tthis._noder = new MCIndexNoder();\n\t\tthis._pointSnapper = new MCIndexPointSnapper(this._noder.getIndex());\n\t\tthis.snapRound(inputSegmentStrings, this._li);\n\t}\n\tcomputeIntersectionSnaps(snapPts) {\n\t\tfor (var it = snapPts.iterator(); it.hasNext(); ) {\n\t\t\tvar snapPt = it.next();\n\t\t\tvar hotPixel = new HotPixel(snapPt, this._scaleFactor, this._li);\n\t\t\tthis._pointSnapper.snap(hotPixel);\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn MCIndexSnapRounder;\n\t}\n\tget interfaces_() {\n\t\treturn [Noder];\n\t}\n}\nMCIndexSnapRounder.constructor_ = function () {\n\tthis._pm = null;\n\tthis._li = null;\n\tthis._scaleFactor = null;\n\tthis._noder = null;\n\tthis._pointSnapper = null;\n\tthis._nodedSegStrings = null;\n\tlet pm = arguments[0];\n\tthis._pm = pm;\n\tthis._li = new RobustLineIntersector();\n\tthis._li.setPrecisionModel(pm);\n\tthis._scaleFactor = pm.getScale();\n};\n","import BufferParameters from './BufferParameters';\nimport Geometry from '../../geom/Geometry';\nimport BufferBuilder from './BufferBuilder';\nimport ScaledNoder from '../../noding/ScaledNoder';\nimport TopologyException from '../../geom/TopologyException';\nimport MathUtil from '../../math/MathUtil';\nimport PrecisionModel from '../../geom/PrecisionModel';\nimport RuntimeException from '../../../../../java/lang/RuntimeException';\nimport MCIndexSnapRounder from '../../noding/snapround/MCIndexSnapRounder';\nexport default class BufferOp {\n\tconstructor() {\n\t\tBufferOp.constructor_.apply(this, arguments);\n\t}\n\tstatic bufferOp() {\n\t\tif (arguments.length === 2) {\n\t\t\tlet g = arguments[0], distance = arguments[1];\n\t\t\tvar gBuf = new BufferOp(g);\n\t\t\tvar geomBuf = gBuf.getResultGeometry(distance);\n\t\t\treturn geomBuf;\n\t\t} else if (arguments.length === 3) {\n\t\t\tif (Number.isInteger(arguments[2]) && (arguments[0] instanceof Geometry && typeof arguments[1] === \"number\")) {\n\t\t\t\tlet g = arguments[0], distance = arguments[1], quadrantSegments = arguments[2];\n\t\t\t\tvar bufOp = new BufferOp(g);\n\t\t\t\tbufOp.setQuadrantSegments(quadrantSegments);\n\t\t\t\tvar geomBuf = bufOp.getResultGeometry(distance);\n\t\t\t\treturn geomBuf;\n\t\t\t} else if (arguments[2] instanceof BufferParameters && (arguments[0] instanceof Geometry && typeof arguments[1] === \"number\")) {\n\t\t\t\tlet g = arguments[0], distance = arguments[1], params = arguments[2];\n\t\t\t\tvar bufOp = new BufferOp(g, params);\n\t\t\t\tvar geomBuf = bufOp.getResultGeometry(distance);\n\t\t\t\treturn geomBuf;\n\t\t\t}\n\t\t} else if (arguments.length === 4) {\n\t\t\tlet g = arguments[0], distance = arguments[1], quadrantSegments = arguments[2], endCapStyle = arguments[3];\n\t\t\tvar bufOp = new BufferOp(g);\n\t\t\tbufOp.setQuadrantSegments(quadrantSegments);\n\t\t\tbufOp.setEndCapStyle(endCapStyle);\n\t\t\tvar geomBuf = bufOp.getResultGeometry(distance);\n\t\t\treturn geomBuf;\n\t\t}\n\t}\n\tstatic precisionScaleFactor(g, distance, maxPrecisionDigits) {\n\t\tvar env = g.getEnvelopeInternal();\n\t\tvar envMax = MathUtil.max(Math.abs(env.getMaxX()), Math.abs(env.getMaxY()), Math.abs(env.getMinX()), Math.abs(env.getMinY()));\n\t\tvar expandByDistance = distance > 0.0 ? distance : 0.0;\n\t\tvar bufEnvMax = envMax + 2 * expandByDistance;\n\t\tvar bufEnvPrecisionDigits = Math.trunc(Math.log(bufEnvMax) / Math.log(10) + 1.0);\n\t\tvar minUnitLog10 = maxPrecisionDigits - bufEnvPrecisionDigits;\n\t\tvar scaleFactor = Math.pow(10.0, minUnitLog10);\n\t\treturn scaleFactor;\n\t}\n\tbufferFixedPrecision(fixedPM) {\n\t\tvar noder = new ScaledNoder(new MCIndexSnapRounder(new PrecisionModel(1.0)), fixedPM.getScale());\n\t\tvar bufBuilder = new BufferBuilder(this._bufParams);\n\t\tbufBuilder.setWorkingPrecisionModel(fixedPM);\n\t\tbufBuilder.setNoder(noder);\n\t\tthis._resultGeometry = bufBuilder.buffer(this._argGeom, this._distance);\n\t}\n\tbufferReducedPrecision() {\n\t\tif (arguments.length === 0) {\n\t\t\tfor (var precDigits = BufferOp.MAX_PRECISION_DIGITS; precDigits >= 0; precDigits--) {\n\t\t\t\ttry {\n\t\t\t\t\tthis.bufferReducedPrecision(precDigits);\n\t\t\t\t} catch (ex) {\n\t\t\t\t\tif (ex instanceof TopologyException) {\n\t\t\t\t\t\tthis._saveException = ex;\n\t\t\t\t\t} else throw ex;\n\t\t\t\t} finally {}\n\t\t\t\tif (this._resultGeometry !== null) return null;\n\t\t\t}\n\t\t\tthrow this._saveException;\n\t\t} else if (arguments.length === 1) {\n\t\t\tlet precisionDigits = arguments[0];\n\t\t\tvar sizeBasedScaleFactor = BufferOp.precisionScaleFactor(this._argGeom, this._distance, precisionDigits);\n\t\t\tvar fixedPM = new PrecisionModel(sizeBasedScaleFactor);\n\t\t\tthis.bufferFixedPrecision(fixedPM);\n\t\t}\n\t}\n\tcomputeGeometry() {\n\t\tthis.bufferOriginalPrecision();\n\t\tif (this._resultGeometry !== null) return null;\n\t\tvar argPM = this._argGeom.getFactory().getPrecisionModel();\n\t\tif (argPM.getType() === PrecisionModel.FIXED) this.bufferFixedPrecision(argPM); else this.bufferReducedPrecision();\n\t}\n\tsetQuadrantSegments(quadrantSegments) {\n\t\tthis._bufParams.setQuadrantSegments(quadrantSegments);\n\t}\n\tbufferOriginalPrecision() {\n\t\ttry {\n\t\t\tvar bufBuilder = new BufferBuilder(this._bufParams);\n\t\t\tthis._resultGeometry = bufBuilder.buffer(this._argGeom, this._distance);\n\t\t} catch (ex) {\n\t\t\tif (ex instanceof RuntimeException) {\n\t\t\t\tthis._saveException = ex;\n\t\t\t} else throw ex;\n\t\t} finally {}\n\t}\n\tgetResultGeometry(distance) {\n\t\tthis._distance = distance;\n\t\tthis.computeGeometry();\n\t\treturn this._resultGeometry;\n\t}\n\tsetEndCapStyle(endCapStyle) {\n\t\tthis._bufParams.setEndCapStyle(endCapStyle);\n\t}\n\tgetClass() {\n\t\treturn BufferOp;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nBufferOp.constructor_ = function () {\n\tthis._argGeom = null;\n\tthis._distance = null;\n\tthis._bufParams = new BufferParameters();\n\tthis._resultGeometry = null;\n\tthis._saveException = null;\n\tif (arguments.length === 1) {\n\t\tlet g = arguments[0];\n\t\tthis._argGeom = g;\n\t} else if (arguments.length === 2) {\n\t\tlet g = arguments[0], bufParams = arguments[1];\n\t\tthis._argGeom = g;\n\t\tthis._bufParams = bufParams;\n\t}\n};\nBufferOp.CAP_ROUND = BufferParameters.CAP_ROUND;\nBufferOp.CAP_BUTT = BufferParameters.CAP_FLAT;\nBufferOp.CAP_FLAT = BufferParameters.CAP_FLAT;\nBufferOp.CAP_SQUARE = BufferParameters.CAP_SQUARE;\nBufferOp.MAX_PRECISION_DIGITS = 12;\n","import Polygon from '../Polygon';\nimport GeometryCollection from '../GeometryCollection';\nimport ArrayList from '../../../../../java/util/ArrayList';\nimport GeometryFilter from '../GeometryFilter';\nexport default class PolygonExtracter {\n\tconstructor() {\n\t\tPolygonExtracter.constructor_.apply(this, arguments);\n\t}\n\tstatic getPolygons() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet geom = arguments[0];\n\t\t\treturn PolygonExtracter.getPolygons(geom, new ArrayList());\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet geom = arguments[0], list = arguments[1];\n\t\t\tif (geom instanceof Polygon) {\n\t\t\t\tlist.add(geom);\n\t\t\t} else if (geom instanceof GeometryCollection) {\n\t\t\t\tgeom.apply(new PolygonExtracter(list));\n\t\t\t}\n\t\t\treturn list;\n\t\t}\n\t}\n\tfilter(geom) {\n\t\tif (geom instanceof Polygon) this._comps.add(geom);\n\t}\n\tgetClass() {\n\t\treturn PolygonExtracter;\n\t}\n\tget interfaces_() {\n\t\treturn [GeometryFilter];\n\t}\n}\nPolygonExtracter.constructor_ = function () {\n\tthis._comps = null;\n\tlet comps = arguments[0];\n\tthis._comps = comps;\n};\n","export default class GeometryLocation {\n\tconstructor() {\n\t\tGeometryLocation.constructor_.apply(this, arguments);\n\t}\n\tisInsideArea() {\n\t\treturn this._segIndex === GeometryLocation.INSIDE_AREA;\n\t}\n\tgetCoordinate() {\n\t\treturn this._pt;\n\t}\n\tgetGeometryComponent() {\n\t\treturn this._component;\n\t}\n\tgetSegmentIndex() {\n\t\treturn this._segIndex;\n\t}\n\tgetClass() {\n\t\treturn GeometryLocation;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nGeometryLocation.constructor_ = function () {\n\tthis._component = null;\n\tthis._segIndex = null;\n\tthis._pt = null;\n\tif (arguments.length === 2) {\n\t\tlet component = arguments[0], pt = arguments[1];\n\t\tGeometryLocation.constructor_.call(this, component, GeometryLocation.INSIDE_AREA, pt);\n\t} else if (arguments.length === 3) {\n\t\tlet component = arguments[0], segIndex = arguments[1], pt = arguments[2];\n\t\tthis._component = component;\n\t\tthis._segIndex = segIndex;\n\t\tthis._pt = pt;\n\t}\n};\nGeometryLocation.INSIDE_AREA = -1;\n","import Point from '../Point';\nimport Collections from '../../../../../java/util/Collections';\nimport GeometryCollection from '../GeometryCollection';\nimport ArrayList from '../../../../../java/util/ArrayList';\nimport GeometryFilter from '../GeometryFilter';\nexport default class PointExtracter {\n\tconstructor() {\n\t\tPointExtracter.constructor_.apply(this, arguments);\n\t}\n\tstatic getPoints() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet geom = arguments[0];\n\t\t\tif (geom instanceof Point) {\n\t\t\t\treturn Collections.singletonList(geom);\n\t\t\t}\n\t\t\treturn PointExtracter.getPoints(geom, new ArrayList());\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet geom = arguments[0], list = arguments[1];\n\t\t\tif (geom instanceof Point) {\n\t\t\t\tlist.add(geom);\n\t\t\t} else if (geom instanceof GeometryCollection) {\n\t\t\t\tgeom.apply(new PointExtracter(list));\n\t\t\t}\n\t\t\treturn list;\n\t\t}\n\t}\n\tfilter(geom) {\n\t\tif (geom instanceof Point) this._pts.add(geom);\n\t}\n\tgetClass() {\n\t\treturn PointExtracter;\n\t}\n\tget interfaces_() {\n\t\treturn [GeometryFilter];\n\t}\n}\nPointExtracter.constructor_ = function () {\n\tthis._pts = null;\n\tlet pts = arguments[0];\n\tthis._pts = pts;\n};\n","import LineString from '../../geom/LineString';\nimport Point from '../../geom/Point';\nimport Polygon from '../../geom/Polygon';\nimport GeometryLocation from './GeometryLocation';\nimport ArrayList from '../../../../../java/util/ArrayList';\nimport GeometryFilter from '../../geom/GeometryFilter';\nexport default class ConnectedElementLocationFilter {\n\tconstructor() {\n\t\tConnectedElementLocationFilter.constructor_.apply(this, arguments);\n\t}\n\tstatic getLocations(geom) {\n\t\tvar locations = new ArrayList();\n\t\tgeom.apply(new ConnectedElementLocationFilter(locations));\n\t\treturn locations;\n\t}\n\tfilter(geom) {\n\t\tif (geom instanceof Point || geom instanceof LineString || geom instanceof Polygon) this._locations.add(new GeometryLocation(geom, 0, geom.getCoordinate()));\n\t}\n\tgetClass() {\n\t\treturn ConnectedElementLocationFilter;\n\t}\n\tget interfaces_() {\n\t\treturn [GeometryFilter];\n\t}\n}\nConnectedElementLocationFilter.constructor_ = function () {\n\tthis._locations = null;\n\tlet locations = arguments[0];\n\tthis._locations = locations;\n};\n","import PointLocator from '../../algorithm/PointLocator';\nimport PolygonExtracter from '../../geom/util/PolygonExtracter';\nimport Location from '../../geom/Location';\nimport LineString from '../../geom/LineString';\nimport hasInterface from '../../../../../hasInterface';\nimport IllegalArgumentException from '../../../../../java/lang/IllegalArgumentException';\nimport Point from '../../geom/Point';\nimport Polygon from '../../geom/Polygon';\nimport GeometryLocation from './GeometryLocation';\nimport Double from '../../../../../java/lang/Double';\nimport PointExtracter from '../../geom/util/PointExtracter';\nimport ConnectedElementLocationFilter from './ConnectedElementLocationFilter';\nimport LineSegment from '../../geom/LineSegment';\nimport LinearComponentExtracter from '../../geom/util/LinearComponentExtracter';\nimport List from '../../../../../java/util/List';\nimport Distance from '../../algorithm/Distance';\nexport default class DistanceOp {\n\tconstructor() {\n\t\tDistanceOp.constructor_.apply(this, arguments);\n\t}\n\tstatic distance(g0, g1) {\n\t\tvar distOp = new DistanceOp(g0, g1);\n\t\treturn distOp.distance();\n\t}\n\tstatic isWithinDistance(g0, g1, distance) {\n\t\tvar envDist = g0.getEnvelopeInternal().distance(g1.getEnvelopeInternal());\n\t\tif (envDist > distance) return false;\n\t\tvar distOp = new DistanceOp(g0, g1, distance);\n\t\treturn distOp.distance() <= distance;\n\t}\n\tstatic nearestPoints(g0, g1) {\n\t\tvar distOp = new DistanceOp(g0, g1);\n\t\treturn distOp.nearestPoints();\n\t}\n\tcomputeContainmentDistance() {\n\t\tif (arguments.length === 0) {\n\t\t\tvar locPtPoly = new Array(2).fill(null);\n\t\t\tthis.computeContainmentDistance(0, locPtPoly);\n\t\t\tif (this._minDistance <= this._terminateDistance) return null;\n\t\t\tthis.computeContainmentDistance(1, locPtPoly);\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet polyGeomIndex = arguments[0], locPtPoly = arguments[1];\n\t\t\tvar polyGeom = this._geom[polyGeomIndex];\n\t\t\tif (polyGeom.getDimension() < 2) return null;\n\t\t\tvar locationsIndex = 1 - polyGeomIndex;\n\t\t\tvar polys = PolygonExtracter.getPolygons(polyGeom);\n\t\t\tif (polys.size() > 0) {\n\t\t\t\tvar insideLocs = ConnectedElementLocationFilter.getLocations(this._geom[locationsIndex]);\n\t\t\t\tthis.computeContainmentDistance(insideLocs, polys, locPtPoly);\n\t\t\t\tif (this._minDistance <= this._terminateDistance) {\n\t\t\t\t\tthis._minDistanceLocation[locationsIndex] = locPtPoly[0];\n\t\t\t\t\tthis._minDistanceLocation[polyGeomIndex] = locPtPoly[1];\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (arguments.length === 3) {\n\t\t\tif (arguments[2] instanceof Array && (hasInterface(arguments[0], List) && hasInterface(arguments[1], List))) {\n\t\t\t\tlet locs = arguments[0], polys = arguments[1], locPtPoly = arguments[2];\n\t\t\t\tfor (var i = 0; i < locs.size(); i++) {\n\t\t\t\t\tvar loc = locs.get(i);\n\t\t\t\t\tfor (var j = 0; j < polys.size(); j++) {\n\t\t\t\t\t\tthis.computeContainmentDistance(loc, polys.get(j), locPtPoly);\n\t\t\t\t\t\tif (this._minDistance <= this._terminateDistance) return null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (arguments[2] instanceof Array && (arguments[0] instanceof GeometryLocation && arguments[1] instanceof Polygon)) {\n\t\t\t\tlet ptLoc = arguments[0], poly = arguments[1], locPtPoly = arguments[2];\n\t\t\t\tvar pt = ptLoc.getCoordinate();\n\t\t\t\tif (Location.EXTERIOR !== this._ptLocator.locate(pt, poly)) {\n\t\t\t\t\tthis._minDistance = 0.0;\n\t\t\t\t\tlocPtPoly[0] = ptLoc;\n\t\t\t\t\tlocPtPoly[1] = new GeometryLocation(poly, pt);\n\t\t\t\t\t;\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tcomputeMinDistanceLinesPoints(lines, points, locGeom) {\n\t\tfor (var i = 0; i < lines.size(); i++) {\n\t\t\tvar line = lines.get(i);\n\t\t\tfor (var j = 0; j < points.size(); j++) {\n\t\t\t\tvar pt = points.get(j);\n\t\t\t\tthis.computeMinDistance(line, pt, locGeom);\n\t\t\t\tif (this._minDistance <= this._terminateDistance) return null;\n\t\t\t}\n\t\t}\n\t}\n\tcomputeFacetDistance() {\n\t\tvar locGeom = new Array(2).fill(null);\n\t\tvar lines0 = LinearComponentExtracter.getLines(this._geom[0]);\n\t\tvar lines1 = LinearComponentExtracter.getLines(this._geom[1]);\n\t\tvar pts0 = PointExtracter.getPoints(this._geom[0]);\n\t\tvar pts1 = PointExtracter.getPoints(this._geom[1]);\n\t\tthis.computeMinDistanceLines(lines0, lines1, locGeom);\n\t\tthis.updateMinDistance(locGeom, false);\n\t\tif (this._minDistance <= this._terminateDistance) return null;\n\t\tlocGeom[0] = null;\n\t\tlocGeom[1] = null;\n\t\tthis.computeMinDistanceLinesPoints(lines0, pts1, locGeom);\n\t\tthis.updateMinDistance(locGeom, false);\n\t\tif (this._minDistance <= this._terminateDistance) return null;\n\t\tlocGeom[0] = null;\n\t\tlocGeom[1] = null;\n\t\tthis.computeMinDistanceLinesPoints(lines1, pts0, locGeom);\n\t\tthis.updateMinDistance(locGeom, true);\n\t\tif (this._minDistance <= this._terminateDistance) return null;\n\t\tlocGeom[0] = null;\n\t\tlocGeom[1] = null;\n\t\tthis.computeMinDistancePoints(pts0, pts1, locGeom);\n\t\tthis.updateMinDistance(locGeom, false);\n\t}\n\tnearestLocations() {\n\t\tthis.computeMinDistance();\n\t\treturn this._minDistanceLocation;\n\t}\n\tupdateMinDistance(locGeom, flip) {\n\t\tif (locGeom[0] === null) return null;\n\t\tif (flip) {\n\t\t\tthis._minDistanceLocation[0] = locGeom[1];\n\t\t\tthis._minDistanceLocation[1] = locGeom[0];\n\t\t} else {\n\t\t\tthis._minDistanceLocation[0] = locGeom[0];\n\t\t\tthis._minDistanceLocation[1] = locGeom[1];\n\t\t}\n\t}\n\tnearestPoints() {\n\t\tthis.computeMinDistance();\n\t\tvar nearestPts = [this._minDistanceLocation[0].getCoordinate(), this._minDistanceLocation[1].getCoordinate()];\n\t\treturn nearestPts;\n\t}\n\tcomputeMinDistance() {\n\t\tif (arguments.length === 0) {\n\t\t\tif (this._minDistanceLocation !== null) return null;\n\t\t\tthis._minDistanceLocation = new Array(2).fill(null);\n\t\t\tthis.computeContainmentDistance();\n\t\t\tif (this._minDistance <= this._terminateDistance) return null;\n\t\t\tthis.computeFacetDistance();\n\t\t} else if (arguments.length === 3) {\n\t\t\tif (arguments[2] instanceof Array && (arguments[0] instanceof LineString && arguments[1] instanceof Point)) {\n\t\t\t\tlet line = arguments[0], pt = arguments[1], locGeom = arguments[2];\n\t\t\t\tif (line.getEnvelopeInternal().distance(pt.getEnvelopeInternal()) > this._minDistance) return null;\n\t\t\t\tvar coord0 = line.getCoordinates();\n\t\t\t\tvar coord = pt.getCoordinate();\n\t\t\t\tfor (var i = 0; i < coord0.length - 1; i++) {\n\t\t\t\t\tvar dist = Distance.pointToSegment(coord, coord0[i], coord0[i + 1]);\n\t\t\t\t\tif (dist < this._minDistance) {\n\t\t\t\t\t\tthis._minDistance = dist;\n\t\t\t\t\t\tvar seg = new LineSegment(coord0[i], coord0[i + 1]);\n\t\t\t\t\t\tvar segClosestPoint = seg.closestPoint(coord);\n\t\t\t\t\t\tlocGeom[0] = new GeometryLocation(line, i, segClosestPoint);\n\t\t\t\t\t\tlocGeom[1] = new GeometryLocation(pt, 0, coord);\n\t\t\t\t\t}\n\t\t\t\t\tif (this._minDistance <= this._terminateDistance) return null;\n\t\t\t\t}\n\t\t\t} else if (arguments[2] instanceof Array && (arguments[0] instanceof LineString && arguments[1] instanceof LineString)) {\n\t\t\t\tlet line0 = arguments[0], line1 = arguments[1], locGeom = arguments[2];\n\t\t\t\tif (line0.getEnvelopeInternal().distance(line1.getEnvelopeInternal()) > this._minDistance) return null;\n\t\t\t\tvar coord0 = line0.getCoordinates();\n\t\t\t\tvar coord1 = line1.getCoordinates();\n\t\t\t\tfor (var i = 0; i < coord0.length - 1; i++) {\n\t\t\t\t\tfor (var j = 0; j < coord1.length - 1; j++) {\n\t\t\t\t\t\tvar dist = Distance.segmentToSegment(coord0[i], coord0[i + 1], coord1[j], coord1[j + 1]);\n\t\t\t\t\t\tif (dist < this._minDistance) {\n\t\t\t\t\t\t\tthis._minDistance = dist;\n\t\t\t\t\t\t\tvar seg0 = new LineSegment(coord0[i], coord0[i + 1]);\n\t\t\t\t\t\t\tvar seg1 = new LineSegment(coord1[j], coord1[j + 1]);\n\t\t\t\t\t\t\tvar closestPt = seg0.closestPoints(seg1);\n\t\t\t\t\t\t\tlocGeom[0] = new GeometryLocation(line0, i, closestPt[0]);\n\t\t\t\t\t\t\tlocGeom[1] = new GeometryLocation(line1, j, closestPt[1]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this._minDistance <= this._terminateDistance) return null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tcomputeMinDistancePoints(points0, points1, locGeom) {\n\t\tfor (var i = 0; i < points0.size(); i++) {\n\t\t\tvar pt0 = points0.get(i);\n\t\t\tfor (var j = 0; j < points1.size(); j++) {\n\t\t\t\tvar pt1 = points1.get(j);\n\t\t\t\tvar dist = pt0.getCoordinate().distance(pt1.getCoordinate());\n\t\t\t\tif (dist < this._minDistance) {\n\t\t\t\t\tthis._minDistance = dist;\n\t\t\t\t\tlocGeom[0] = new GeometryLocation(pt0, 0, pt0.getCoordinate());\n\t\t\t\t\tlocGeom[1] = new GeometryLocation(pt1, 0, pt1.getCoordinate());\n\t\t\t\t}\n\t\t\t\tif (this._minDistance <= this._terminateDistance) return null;\n\t\t\t}\n\t\t}\n\t}\n\tdistance() {\n\t\tif (this._geom[0] === null || this._geom[1] === null) throw new IllegalArgumentException(\"null geometries are not supported\");\n\t\tif (this._geom[0].isEmpty() || this._geom[1].isEmpty()) return 0.0;\n\t\tthis.computeMinDistance();\n\t\treturn this._minDistance;\n\t}\n\tcomputeMinDistanceLines(lines0, lines1, locGeom) {\n\t\tfor (var i = 0; i < lines0.size(); i++) {\n\t\t\tvar line0 = lines0.get(i);\n\t\t\tfor (var j = 0; j < lines1.size(); j++) {\n\t\t\t\tvar line1 = lines1.get(j);\n\t\t\t\tthis.computeMinDistance(line0, line1, locGeom);\n\t\t\t\tif (this._minDistance <= this._terminateDistance) return null;\n\t\t\t}\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn DistanceOp;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nDistanceOp.constructor_ = function () {\n\tthis._geom = null;\n\tthis._terminateDistance = 0.0;\n\tthis._ptLocator = new PointLocator();\n\tthis._minDistanceLocation = null;\n\tthis._minDistance = Double.MAX_VALUE;\n\tif (arguments.length === 2) {\n\t\tlet g0 = arguments[0], g1 = arguments[1];\n\t\tDistanceOp.constructor_.call(this, g0, g1, 0.0);\n\t} else if (arguments.length === 3) {\n\t\tlet g0 = arguments[0], g1 = arguments[1], terminateDistance = arguments[2];\n\t\tthis._geom = new Array(2).fill(null);\n\t\tthis._geom[0] = g0;\n\t\tthis._geom[1] = g1;\n\t\tthis._terminateDistance = terminateDistance;\n\t}\n};\n","import CoordinateList from '../../geom/CoordinateList';\nimport CoordinateArrays from '../../geom/CoordinateArrays';\nimport ArrayList from '../../../../../java/util/ArrayList';\nexport default class EdgeString {\n\tconstructor() {\n\t\tEdgeString.constructor_.apply(this, arguments);\n\t}\n\tgetCoordinates() {\n\t\tif (this._coordinates === null) {\n\t\t\tvar forwardDirectedEdges = 0;\n\t\t\tvar reverseDirectedEdges = 0;\n\t\t\tvar coordinateList = new CoordinateList();\n\t\t\tfor (var i = this._directedEdges.iterator(); i.hasNext(); ) {\n\t\t\t\tvar directedEdge = i.next();\n\t\t\t\tif (directedEdge.getEdgeDirection()) {\n\t\t\t\t\tforwardDirectedEdges++;\n\t\t\t\t} else {\n\t\t\t\t\treverseDirectedEdges++;\n\t\t\t\t}\n\t\t\t\tcoordinateList.add(directedEdge.getEdge().getLine().getCoordinates(), false, directedEdge.getEdgeDirection());\n\t\t\t}\n\t\t\tthis._coordinates = coordinateList.toCoordinateArray();\n\t\t\tif (reverseDirectedEdges > forwardDirectedEdges) {\n\t\t\t\tCoordinateArrays.reverse(this._coordinates);\n\t\t\t}\n\t\t}\n\t\treturn this._coordinates;\n\t}\n\ttoLineString() {\n\t\treturn this._factory.createLineString(this.getCoordinates());\n\t}\n\tadd(directedEdge) {\n\t\tthis._directedEdges.add(directedEdge);\n\t}\n\tgetClass() {\n\t\treturn EdgeString;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nEdgeString.constructor_ = function () {\n\tthis._factory = null;\n\tthis._directedEdges = new ArrayList();\n\tthis._coordinates = null;\n\tlet factory = arguments[0];\n\tthis._factory = factory;\n};\n","export default class GraphComponent {\n\tconstructor() {\n\t\tGraphComponent.constructor_.apply(this, arguments);\n\t}\n\tstatic getComponentWithVisitedState(i, visitedState) {\n\t\twhile (i.hasNext()) {\n\t\t\tvar comp = i.next();\n\t\t\tif (comp.isVisited() === visitedState) return comp;\n\t\t}\n\t\treturn null;\n\t}\n\tstatic setVisited(i, visited) {\n\t\twhile (i.hasNext()) {\n\t\t\tvar comp = i.next();\n\t\t\tcomp.setVisited(visited);\n\t\t}\n\t}\n\tstatic setMarked(i, marked) {\n\t\twhile (i.hasNext()) {\n\t\t\tvar comp = i.next();\n\t\t\tcomp.setMarked(marked);\n\t\t}\n\t}\n\tsetVisited(isVisited) {\n\t\tthis._isVisited = isVisited;\n\t}\n\tisMarked() {\n\t\treturn this._isMarked;\n\t}\n\tsetData(data) {\n\t\tthis._data = data;\n\t}\n\tgetData() {\n\t\treturn this._data;\n\t}\n\tsetMarked(isMarked) {\n\t\tthis._isMarked = isMarked;\n\t}\n\tgetContext() {\n\t\treturn this._data;\n\t}\n\tisVisited() {\n\t\treturn this._isVisited;\n\t}\n\tsetContext(data) {\n\t\tthis._data = data;\n\t}\n\tgetClass() {\n\t\treturn GraphComponent;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nGraphComponent.constructor_ = function () {\n\tthis._isMarked = false;\n\tthis._isVisited = false;\n\tthis._data = null;\n};\n","import Orientation from '../algorithm/Orientation';\nimport Comparable from '../../../../java/lang/Comparable';\nimport ArrayList from '../../../../java/util/ArrayList';\nimport Quadrant from '../geomgraph/Quadrant';\nimport GraphComponent from './GraphComponent';\nexport default class DirectedEdge extends GraphComponent {\n\tconstructor() {\n\t\tsuper();\n\t\tDirectedEdge.constructor_.apply(this, arguments);\n\t}\n\tstatic toEdges(dirEdges) {\n\t\tvar edges = new ArrayList();\n\t\tfor (var i = dirEdges.iterator(); i.hasNext(); ) {\n\t\t\tedges.add(i.next()._parentEdge);\n\t\t}\n\t\treturn edges;\n\t}\n\tisRemoved() {\n\t\treturn this._parentEdge === null;\n\t}\n\tcompareDirection(e) {\n\t\tif (this._quadrant > e._quadrant) return 1;\n\t\tif (this._quadrant < e._quadrant) return -1;\n\t\treturn Orientation.index(e._p0, e._p1, this._p1);\n\t}\n\tgetCoordinate() {\n\t\treturn this._from.getCoordinate();\n\t}\n\tprint(out) {\n\t\tvar className = this.getClass().getName();\n\t\tvar lastDotPos = className.lastIndexOf('.');\n\t\tvar name = className.substring(lastDotPos + 1);\n\t\tout.print(\" \" + name + \": \" + this._p0 + \" - \" + this._p1 + \" \" + this._quadrant + \":\" + this._angle);\n\t}\n\tgetDirectionPt() {\n\t\treturn this._p1;\n\t}\n\tgetAngle() {\n\t\treturn this._angle;\n\t}\n\tcompareTo(obj) {\n\t\tvar de = obj;\n\t\treturn this.compareDirection(de);\n\t}\n\tgetFromNode() {\n\t\treturn this._from;\n\t}\n\tgetSym() {\n\t\treturn this._sym;\n\t}\n\tsetEdge(parentEdge) {\n\t\tthis._parentEdge = parentEdge;\n\t}\n\tremove() {\n\t\tthis._sym = null;\n\t\tthis._parentEdge = null;\n\t}\n\tgetEdge() {\n\t\treturn this._parentEdge;\n\t}\n\tgetQuadrant() {\n\t\treturn this._quadrant;\n\t}\n\tsetSym(sym) {\n\t\tthis._sym = sym;\n\t}\n\tgetToNode() {\n\t\treturn this._to;\n\t}\n\tgetEdgeDirection() {\n\t\treturn this._edgeDirection;\n\t}\n\tgetClass() {\n\t\treturn DirectedEdge;\n\t}\n\tget interfaces_() {\n\t\treturn [Comparable];\n\t}\n}\nDirectedEdge.constructor_ = function () {\n\tthis._parentEdge = null;\n\tthis._from = null;\n\tthis._to = null;\n\tthis._p0 = null;\n\tthis._p1 = null;\n\tthis._sym = null;\n\tthis._edgeDirection = null;\n\tthis._quadrant = null;\n\tthis._angle = null;\n\tif (arguments.length === 0) {} else if (arguments.length === 4) {\n\t\tlet from = arguments[0], to = arguments[1], directionPt = arguments[2], edgeDirection = arguments[3];\n\t\tthis._from = from;\n\t\tthis._to = to;\n\t\tthis._edgeDirection = edgeDirection;\n\t\tthis._p0 = from.getCoordinate();\n\t\tthis._p1 = directionPt;\n\t\tvar dx = this._p1.x - this._p0.x;\n\t\tvar dy = this._p1.y - this._p0.y;\n\t\tthis._quadrant = Quadrant.quadrant(dx, dy);\n\t\tthis._angle = Math.atan2(dy, dx);\n\t}\n};\n","import DirectedEdge from '../../planargraph/DirectedEdge';\nimport Assert from '../../util/Assert';\nexport default class LineMergeDirectedEdge extends DirectedEdge {\n\tconstructor() {\n\t\tsuper();\n\t\tLineMergeDirectedEdge.constructor_.apply(this, arguments);\n\t}\n\tgetNext() {\n\t\tif (this.getToNode().getDegree() !== 2) {\n\t\t\treturn null;\n\t\t}\n\t\tif (this.getToNode().getOutEdges().getEdges().get(0) === this.getSym()) {\n\t\t\treturn this.getToNode().getOutEdges().getEdges().get(1);\n\t\t}\n\t\tAssert.isTrue(this.getToNode().getOutEdges().getEdges().get(1) === this.getSym());\n\t\treturn this.getToNode().getOutEdges().getEdges().get(0);\n\t}\n\tgetClass() {\n\t\treturn LineMergeDirectedEdge;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nLineMergeDirectedEdge.constructor_ = function () {\n\tlet from = arguments[0], to = arguments[1], directionPt = arguments[2], edgeDirection = arguments[3];\n\tDirectedEdge.constructor_.call(this, from, to, directionPt, edgeDirection);\n};\n","import Node from './Node';\nimport GraphComponent from './GraphComponent';\nexport default class Edge extends GraphComponent {\n\tconstructor() {\n\t\tsuper();\n\t\tEdge.constructor_.apply(this, arguments);\n\t}\n\tisRemoved() {\n\t\treturn this._dirEdge === null;\n\t}\n\tsetDirectedEdges(de0, de1) {\n\t\tthis._dirEdge = [de0, de1];\n\t\tde0.setEdge(this);\n\t\tde1.setEdge(this);\n\t\tde0.setSym(de1);\n\t\tde1.setSym(de0);\n\t\tde0.getFromNode().addOutEdge(de0);\n\t\tde1.getFromNode().addOutEdge(de1);\n\t}\n\tgetDirEdge() {\n\t\tif (Number.isInteger(arguments[0])) {\n\t\t\tlet i = arguments[0];\n\t\t\treturn this._dirEdge[i];\n\t\t} else if (arguments[0] instanceof Node) {\n\t\t\tlet fromNode = arguments[0];\n\t\t\tif (this._dirEdge[0].getFromNode() === fromNode) return this._dirEdge[0];\n\t\t\tif (this._dirEdge[1].getFromNode() === fromNode) return this._dirEdge[1];\n\t\t\treturn null;\n\t\t}\n\t}\n\tremove() {\n\t\tthis._dirEdge = null;\n\t}\n\tgetOppositeNode(node) {\n\t\tif (this._dirEdge[0].getFromNode() === node) return this._dirEdge[0].getToNode();\n\t\tif (this._dirEdge[1].getFromNode() === node) return this._dirEdge[1].getToNode();\n\t\treturn null;\n\t}\n\tgetClass() {\n\t\treturn Edge;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nEdge.constructor_ = function () {\n\tthis._dirEdge = null;\n\tif (arguments.length === 0) {} else if (arguments.length === 2) {\n\t\tlet de0 = arguments[0], de1 = arguments[1];\n\t\tthis.setDirectedEdges(de0, de1);\n\t}\n};\n","import Collections from '../../../../java/util/Collections';\nimport DirectedEdge from './DirectedEdge';\nimport ArrayList from '../../../../java/util/ArrayList';\nimport Edge from './Edge';\nexport default class DirectedEdgeStar {\n\tconstructor() {\n\t\tDirectedEdgeStar.constructor_.apply(this, arguments);\n\t}\n\tgetNextEdge(dirEdge) {\n\t\tvar i = this.getIndex(dirEdge);\n\t\treturn this._outEdges.get(this.getIndex(i + 1));\n\t}\n\tgetCoordinate() {\n\t\tvar it = this.iterator();\n\t\tif (!it.hasNext()) return null;\n\t\tvar e = it.next();\n\t\treturn e.getCoordinate();\n\t}\n\titerator() {\n\t\tthis.sortEdges();\n\t\treturn this._outEdges.iterator();\n\t}\n\tsortEdges() {\n\t\tif (!this._sorted) {\n\t\t\tCollections.sort(this._outEdges);\n\t\t\tthis._sorted = true;\n\t\t}\n\t}\n\tremove(de) {\n\t\tthis._outEdges.remove(de);\n\t}\n\tgetEdges() {\n\t\tthis.sortEdges();\n\t\treturn this._outEdges;\n\t}\n\tgetNextCWEdge(dirEdge) {\n\t\tvar i = this.getIndex(dirEdge);\n\t\treturn this._outEdges.get(this.getIndex(i - 1));\n\t}\n\tgetIndex() {\n\t\tif (arguments[0] instanceof Edge) {\n\t\t\tlet edge = arguments[0];\n\t\t\tthis.sortEdges();\n\t\t\tfor (var i = 0; i < this._outEdges.size(); i++) {\n\t\t\t\tvar de = this._outEdges.get(i);\n\t\t\t\tif (de.getEdge() === edge) return i;\n\t\t\t}\n\t\t\treturn -1;\n\t\t} else if (arguments[0] instanceof DirectedEdge) {\n\t\t\tlet dirEdge = arguments[0];\n\t\t\tthis.sortEdges();\n\t\t\tfor (var i = 0; i < this._outEdges.size(); i++) {\n\t\t\t\tvar de = this._outEdges.get(i);\n\t\t\t\tif (de === dirEdge) return i;\n\t\t\t}\n\t\t\treturn -1;\n\t\t} else if (Number.isInteger(arguments[0])) {\n\t\t\tlet i = arguments[0];\n\t\t\tvar modi = i % this._outEdges.size();\n\t\t\tif (modi < 0) modi += this._outEdges.size();\n\t\t\treturn modi;\n\t\t}\n\t}\n\tadd(de) {\n\t\tthis._outEdges.add(de);\n\t\tthis._sorted = false;\n\t}\n\tgetDegree() {\n\t\treturn this._outEdges.size();\n\t}\n\tgetClass() {\n\t\treturn DirectedEdgeStar;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nDirectedEdgeStar.constructor_ = function () {\n\tthis._outEdges = new ArrayList();\n\tthis._sorted = false;\n};\n","import DirectedEdgeStar from './DirectedEdgeStar';\nimport HashSet from '../../../../java/util/HashSet';\nimport DirectedEdge from './DirectedEdge';\nimport GraphComponent from './GraphComponent';\nexport default class Node extends GraphComponent {\n\tconstructor() {\n\t\tsuper();\n\t\tNode.constructor_.apply(this, arguments);\n\t}\n\tstatic getEdgesBetween(node0, node1) {\n\t\tvar edges0 = DirectedEdge.toEdges(node0.getOutEdges().getEdges());\n\t\tvar commonEdges = new HashSet(edges0);\n\t\tvar edges1 = DirectedEdge.toEdges(node1.getOutEdges().getEdges());\n\t\tcommonEdges.retainAll(edges1);\n\t\treturn commonEdges;\n\t}\n\tisRemoved() {\n\t\treturn this._pt === null;\n\t}\n\taddOutEdge(de) {\n\t\tthis._deStar.add(de);\n\t}\n\tgetCoordinate() {\n\t\treturn this._pt;\n\t}\n\tgetOutEdges() {\n\t\treturn this._deStar;\n\t}\n\tremove() {\n\t\tif (arguments.length === 0) {\n\t\t\tthis._pt = null;\n\t\t} else if (arguments.length === 1) {\n\t\t\tlet de = arguments[0];\n\t\t\tthis._deStar.remove(de);\n\t\t}\n\t}\n\tgetIndex(edge) {\n\t\treturn this._deStar.getIndex(edge);\n\t}\n\tgetDegree() {\n\t\treturn this._deStar.getDegree();\n\t}\n\tgetClass() {\n\t\treturn Node;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nNode.constructor_ = function () {\n\tthis._pt = null;\n\tthis._deStar = null;\n\tif (arguments.length === 1) {\n\t\tlet pt = arguments[0];\n\t\tNode.constructor_.call(this, pt, new DirectedEdgeStar());\n\t} else if (arguments.length === 2) {\n\t\tlet pt = arguments[0], deStar = arguments[1];\n\t\tthis._pt = pt;\n\t\tthis._deStar = deStar;\n\t}\n};\n","import Edge from '../../planargraph/Edge';\nexport default class LineMergeEdge extends Edge {\n\tconstructor() {\n\t\tsuper();\n\t\tLineMergeEdge.constructor_.apply(this, arguments);\n\t}\n\tgetLine() {\n\t\treturn this._line;\n\t}\n\tgetClass() {\n\t\treturn LineMergeEdge;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nLineMergeEdge.constructor_ = function () {\n\tthis._line = null;\n\tlet line = arguments[0];\n\tthis._line = line;\n};\n","import TreeMap from '../../../../java/util/TreeMap';\nexport default class NodeMap {\n\tconstructor() {\n\t\tNodeMap.constructor_.apply(this, arguments);\n\t}\n\tfind(coord) {\n\t\treturn this._nodeMap.get(coord);\n\t}\n\titerator() {\n\t\treturn this._nodeMap.values().iterator();\n\t}\n\tremove(pt) {\n\t\treturn this._nodeMap.remove(pt);\n\t}\n\tvalues() {\n\t\treturn this._nodeMap.values();\n\t}\n\tadd(n) {\n\t\tthis._nodeMap.put(n.getCoordinate(), n);\n\t\treturn n;\n\t}\n\tgetClass() {\n\t\treturn NodeMap;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nNodeMap.constructor_ = function () {\n\tthis._nodeMap = new TreeMap();\n};\n","import HashSet from '../../../../java/util/HashSet';\nimport Node from './Node';\nimport NodeMap from './NodeMap';\nimport DirectedEdge from './DirectedEdge';\nimport ArrayList from '../../../../java/util/ArrayList';\nimport Edge from './Edge';\nexport default class PlanarGraph {\n\tconstructor() {\n\t\tPlanarGraph.constructor_.apply(this, arguments);\n\t}\n\tfindNodesOfDegree(degree) {\n\t\tvar nodesFound = new ArrayList();\n\t\tfor (var i = this.nodeIterator(); i.hasNext(); ) {\n\t\t\tvar node = i.next();\n\t\t\tif (node.getDegree() === degree) nodesFound.add(node);\n\t\t}\n\t\treturn nodesFound;\n\t}\n\tdirEdgeIterator() {\n\t\treturn this._dirEdges.iterator();\n\t}\n\tedgeIterator() {\n\t\treturn this._edges.iterator();\n\t}\n\tremove() {\n\t\tif (arguments[0] instanceof Edge) {\n\t\t\tlet edge = arguments[0];\n\t\t\tthis.remove(edge.getDirEdge(0));\n\t\t\tthis.remove(edge.getDirEdge(1));\n\t\t\tthis._edges.remove(edge);\n\t\t\tedge.remove();\n\t\t} else if (arguments[0] instanceof DirectedEdge) {\n\t\t\tlet de = arguments[0];\n\t\t\tvar sym = de.getSym();\n\t\t\tif (sym !== null) sym.setSym(null);\n\t\t\tde.getFromNode().remove(de);\n\t\t\tde.remove();\n\t\t\tthis._dirEdges.remove(de);\n\t\t} else if (arguments[0] instanceof Node) {\n\t\t\tlet node = arguments[0];\n\t\t\tvar outEdges = node.getOutEdges().getEdges();\n\t\t\tfor (var i = outEdges.iterator(); i.hasNext(); ) {\n\t\t\t\tvar de = i.next();\n\t\t\t\tvar sym = de.getSym();\n\t\t\t\tif (sym !== null) this.remove(sym);\n\t\t\t\tthis._dirEdges.remove(de);\n\t\t\t\tvar edge = de.getEdge();\n\t\t\t\tif (edge !== null) {\n\t\t\t\t\tthis._edges.remove(edge);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._nodeMap.remove(node.getCoordinate());\n\t\t\tnode.remove();\n\t\t}\n\t}\n\tfindNode(pt) {\n\t\treturn this._nodeMap.find(pt);\n\t}\n\tgetEdges() {\n\t\treturn this._edges;\n\t}\n\tnodeIterator() {\n\t\treturn this._nodeMap.iterator();\n\t}\n\tcontains() {\n\t\tif (arguments[0] instanceof Edge) {\n\t\t\tlet e = arguments[0];\n\t\t\treturn this._edges.contains(e);\n\t\t} else if (arguments[0] instanceof DirectedEdge) {\n\t\t\tlet de = arguments[0];\n\t\t\treturn this._dirEdges.contains(de);\n\t\t}\n\t}\n\tadd() {\n\t\tif (arguments[0] instanceof Node) {\n\t\t\tlet node = arguments[0];\n\t\t\tthis._nodeMap.add(node);\n\t\t} else if (arguments[0] instanceof Edge) {\n\t\t\tlet edge = arguments[0];\n\t\t\tthis._edges.add(edge);\n\t\t\tthis.add(edge.getDirEdge(0));\n\t\t\tthis.add(edge.getDirEdge(1));\n\t\t} else if (arguments[0] instanceof DirectedEdge) {\n\t\t\tlet dirEdge = arguments[0];\n\t\t\tthis._dirEdges.add(dirEdge);\n\t\t}\n\t}\n\tgetNodes() {\n\t\treturn this._nodeMap.values();\n\t}\n\tgetClass() {\n\t\treturn PlanarGraph;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nPlanarGraph.constructor_ = function () {\n\tthis._edges = new HashSet();\n\tthis._dirEdges = new HashSet();\n\tthis._nodeMap = new NodeMap();\n};\n","import LineMergeDirectedEdge from './LineMergeDirectedEdge';\nimport Node from '../../planargraph/Node';\nimport CoordinateArrays from '../../geom/CoordinateArrays';\nimport LineMergeEdge from './LineMergeEdge';\nimport PlanarGraph from '../../planargraph/PlanarGraph';\nexport default class LineMergeGraph extends PlanarGraph {\n\tconstructor() {\n\t\tsuper();\n\t\tLineMergeGraph.constructor_.apply(this, arguments);\n\t}\n\taddEdge(lineString) {\n\t\tif (lineString.isEmpty()) {\n\t\t\treturn null;\n\t\t}\n\t\tvar coordinates = CoordinateArrays.removeRepeatedPoints(lineString.getCoordinates());\n\t\tif (coordinates.length <= 1) return null;\n\t\tvar startCoordinate = coordinates[0];\n\t\tvar endCoordinate = coordinates[coordinates.length - 1];\n\t\tvar startNode = this.getNode(startCoordinate);\n\t\tvar endNode = this.getNode(endCoordinate);\n\t\tvar directedEdge0 = new LineMergeDirectedEdge(startNode, endNode, coordinates[1], true);\n\t\tvar directedEdge1 = new LineMergeDirectedEdge(endNode, startNode, coordinates[coordinates.length - 2], false);\n\t\tvar edge = new LineMergeEdge(lineString);\n\t\tedge.setDirectedEdges(directedEdge0, directedEdge1);\n\t\tthis.add(edge);\n\t}\n\tgetNode(coordinate) {\n\t\tvar node = this.findNode(coordinate);\n\t\tif (node === null) {\n\t\t\tnode = new Node(coordinate);\n\t\t\tthis.add(node);\n\t\t}\n\t\treturn node;\n\t}\n\tgetClass() {\n\t\treturn LineMergeGraph;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nLineMergeGraph.constructor_ = function () {};\n","import LineString from '../../geom/LineString';\nimport Geometry from '../../geom/Geometry';\nimport hasInterface from '../../../../../hasInterface';\nimport Collection from '../../../../../java/util/Collection';\nimport EdgeString from './EdgeString';\nimport LineMergeGraph from './LineMergeGraph';\nimport GeometryComponentFilter from '../../geom/GeometryComponentFilter';\nimport ArrayList from '../../../../../java/util/ArrayList';\nimport Assert from '../../util/Assert';\nimport GraphComponent from '../../planargraph/GraphComponent';\nexport default class LineMerger {\n\tconstructor() {\n\t\tLineMerger.constructor_.apply(this, arguments);\n\t}\n\tbuildEdgeStringsForUnprocessedNodes() {\n\t\tfor (var i = this._graph.getNodes().iterator(); i.hasNext(); ) {\n\t\t\tvar node = i.next();\n\t\t\tif (!node.isMarked()) {\n\t\t\t\tAssert.isTrue(node.getDegree() === 2);\n\t\t\t\tthis.buildEdgeStringsStartingAt(node);\n\t\t\t\tnode.setMarked(true);\n\t\t\t}\n\t\t}\n\t}\n\tbuildEdgeStringsForNonDegree2Nodes() {\n\t\tfor (var i = this._graph.getNodes().iterator(); i.hasNext(); ) {\n\t\t\tvar node = i.next();\n\t\t\tif (node.getDegree() !== 2) {\n\t\t\t\tthis.buildEdgeStringsStartingAt(node);\n\t\t\t\tnode.setMarked(true);\n\t\t\t}\n\t\t}\n\t}\n\tbuildEdgeStringsForObviousStartNodes() {\n\t\tthis.buildEdgeStringsForNonDegree2Nodes();\n\t}\n\tgetMergedLineStrings() {\n\t\tthis.merge();\n\t\treturn this._mergedLineStrings;\n\t}\n\tbuildEdgeStringsStartingAt(node) {\n\t\tfor (var i = node.getOutEdges().iterator(); i.hasNext(); ) {\n\t\t\tvar directedEdge = i.next();\n\t\t\tif (directedEdge.getEdge().isMarked()) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis._edgeStrings.add(this.buildEdgeStringStartingWith(directedEdge));\n\t\t}\n\t}\n\tmerge() {\n\t\tif (this._mergedLineStrings !== null) {\n\t\t\treturn null;\n\t\t}\n\t\tGraphComponent.setMarked(this._graph.nodeIterator(), false);\n\t\tGraphComponent.setMarked(this._graph.edgeIterator(), false);\n\t\tthis._edgeStrings = new ArrayList();\n\t\tthis.buildEdgeStringsForObviousStartNodes();\n\t\tthis.buildEdgeStringsForIsolatedLoops();\n\t\tthis._mergedLineStrings = new ArrayList();\n\t\tfor (var i = this._edgeStrings.iterator(); i.hasNext(); ) {\n\t\t\tvar edgeString = i.next();\n\t\t\tthis._mergedLineStrings.add(edgeString.toLineString());\n\t\t}\n\t}\n\tbuildEdgeStringStartingWith(start) {\n\t\tvar edgeString = new EdgeString(this._factory);\n\t\tvar current = start;\n\t\tdo {\n\t\t\tedgeString.add(current);\n\t\t\tcurrent.getEdge().setMarked(true);\n\t\t\tcurrent = current.getNext();\n\t\t} while (current !== null && current !== start);\n\t\treturn edgeString;\n\t}\n\tadd() {\n\t\tif (arguments[0] instanceof Geometry) {\n\t\t\tlet geometry = arguments[0];\n\t\t\tgeometry.apply(new (class {\n\t\t\t\tget interfaces_() {\n\t\t\t\t\treturn [GeometryComponentFilter];\n\t\t\t\t}\n\t\t\t\tfilter(component) {\n\t\t\t\t\tif (component instanceof LineString) {\n\t\t\t\t\t\tthis.add(component);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})());\n\t\t} else if (hasInterface(arguments[0], Collection)) {\n\t\t\tlet geometries = arguments[0];\n\t\t\tthis._mergedLineStrings = null;\n\t\t\tfor (var i = geometries.iterator(); i.hasNext(); ) {\n\t\t\t\tvar geometry = i.next();\n\t\t\t\tthis.add(geometry);\n\t\t\t}\n\t\t} else if (arguments[0] instanceof LineString) {\n\t\t\tlet lineString = arguments[0];\n\t\t\tif (this._factory === null) {\n\t\t\t\tthis._factory = lineString.getFactory();\n\t\t\t}\n\t\t\tthis._graph.addEdge(lineString);\n\t\t}\n\t}\n\tbuildEdgeStringsForIsolatedLoops() {\n\t\tthis.buildEdgeStringsForUnprocessedNodes();\n\t}\n\tgetClass() {\n\t\treturn LineMerger;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nLineMerger.constructor_ = function () {\n\tthis._graph = new LineMergeGraph();\n\tthis._mergedLineStrings = null;\n\tthis._factory = null;\n\tthis._edgeStrings = null;\n};\n","import WKTWriter from '../io/WKTWriter';\nimport CoordinateArraySequence from '../geom/impl/CoordinateArraySequence';\nimport Octant from './Octant';\nimport SegmentString from './SegmentString';\nexport default class BasicSegmentString {\n\tconstructor() {\n\t\tBasicSegmentString.constructor_.apply(this, arguments);\n\t}\n\tgetCoordinates() {\n\t\treturn this._pts;\n\t}\n\tsize() {\n\t\treturn this._pts.length;\n\t}\n\tgetCoordinate(i) {\n\t\treturn this._pts[i];\n\t}\n\tisClosed() {\n\t\treturn this._pts[0].equals(this._pts[this._pts.length - 1]);\n\t}\n\tgetSegmentOctant(index) {\n\t\tif (index === this._pts.length - 1) return -1;\n\t\treturn Octant.octant(this.getCoordinate(index), this.getCoordinate(index + 1));\n\t}\n\tsetData(data) {\n\t\tthis._data = data;\n\t}\n\tgetData() {\n\t\treturn this._data;\n\t}\n\ttoString() {\n\t\treturn WKTWriter.toLineString(new CoordinateArraySequence(this._pts));\n\t}\n\tgetClass() {\n\t\treturn BasicSegmentString;\n\t}\n\tget interfaces_() {\n\t\treturn [SegmentString];\n\t}\n}\nBasicSegmentString.constructor_ = function () {\n\tthis._pts = null;\n\tthis._data = null;\n\tlet pts = arguments[0], data = arguments[1];\n\tthis._pts = pts;\n\tthis._data = data;\n};\n","import SegmentIntersector from './SegmentIntersector';\nimport ArrayList from '../../../../java/util/ArrayList';\nexport default class InteriorIntersectionFinder {\n\tconstructor() {\n\t\tInteriorIntersectionFinder.constructor_.apply(this, arguments);\n\t}\n\tstatic createAllIntersectionsFinder(li) {\n\t\tvar finder = new InteriorIntersectionFinder(li);\n\t\tfinder.setFindAllIntersections(true);\n\t\treturn finder;\n\t}\n\tstatic createAnyIntersectionFinder(li) {\n\t\treturn new InteriorIntersectionFinder(li);\n\t}\n\tstatic createIntersectionCounter(li) {\n\t\tvar finder = new InteriorIntersectionFinder(li);\n\t\tfinder.setFindAllIntersections(true);\n\t\tfinder.setKeepIntersections(false);\n\t\treturn finder;\n\t}\n\tgetInteriorIntersection() {\n\t\treturn this._interiorIntersection;\n\t}\n\tsetCheckEndSegmentsOnly(isCheckEndSegmentsOnly) {\n\t\tthis._isCheckEndSegmentsOnly = isCheckEndSegmentsOnly;\n\t}\n\tgetIntersectionSegments() {\n\t\treturn this._intSegments;\n\t}\n\tcount() {\n\t\treturn this._intersectionCount;\n\t}\n\tgetIntersections() {\n\t\treturn this._intersections;\n\t}\n\tsetFindAllIntersections(findAllIntersections) {\n\t\tthis._findAllIntersections = findAllIntersections;\n\t}\n\tsetKeepIntersections(keepIntersections) {\n\t\tthis._keepIntersections = keepIntersections;\n\t}\n\tprocessIntersections(e0, segIndex0, e1, segIndex1) {\n\t\tif (!this._findAllIntersections && this.hasIntersection()) return null;\n\t\tif (e0 === e1 && segIndex0 === segIndex1) return null;\n\t\tif (this._isCheckEndSegmentsOnly) {\n\t\t\tvar isEndSegPresent = this.isEndSegment(e0, segIndex0) || this.isEndSegment(e1, segIndex1);\n\t\t\tif (!isEndSegPresent) return null;\n\t\t}\n\t\tvar p00 = e0.getCoordinates()[segIndex0];\n\t\tvar p01 = e0.getCoordinates()[segIndex0 + 1];\n\t\tvar p10 = e1.getCoordinates()[segIndex1];\n\t\tvar p11 = e1.getCoordinates()[segIndex1 + 1];\n\t\tthis._li.computeIntersection(p00, p01, p10, p11);\n\t\tif (this._li.hasIntersection()) {\n\t\t\tif (this._li.isInteriorIntersection()) {\n\t\t\t\tthis._intSegments = new Array(4).fill(null);\n\t\t\t\tthis._intSegments[0] = p00;\n\t\t\t\tthis._intSegments[1] = p01;\n\t\t\t\tthis._intSegments[2] = p10;\n\t\t\t\tthis._intSegments[3] = p11;\n\t\t\t\tthis._interiorIntersection = this._li.getIntersection(0);\n\t\t\t\tif (this._keepIntersections) this._intersections.add(this._interiorIntersection);\n\t\t\t\tthis._intersectionCount++;\n\t\t\t}\n\t\t}\n\t}\n\tisEndSegment(segStr, index) {\n\t\tif (index === 0) return true;\n\t\tif (index >= segStr.size() - 2) return true;\n\t\treturn false;\n\t}\n\thasIntersection() {\n\t\treturn this._interiorIntersection !== null;\n\t}\n\tisDone() {\n\t\tif (this._findAllIntersections) return false;\n\t\treturn this._interiorIntersection !== null;\n\t}\n\tgetClass() {\n\t\treturn InteriorIntersectionFinder;\n\t}\n\tget interfaces_() {\n\t\treturn [SegmentIntersector];\n\t}\n}\nInteriorIntersectionFinder.constructor_ = function () {\n\tthis._findAllIntersections = false;\n\tthis._isCheckEndSegmentsOnly = false;\n\tthis._li = null;\n\tthis._interiorIntersection = null;\n\tthis._intSegments = null;\n\tthis._intersections = new ArrayList();\n\tthis._intersectionCount = 0;\n\tthis._keepIntersections = true;\n\tlet li = arguments[0];\n\tthis._li = li;\n\tthis._interiorIntersection = null;\n};\n","import WKTWriter from '../io/WKTWriter';\nimport MCIndexNoder from './MCIndexNoder';\nimport TopologyException from '../geom/TopologyException';\nimport RobustLineIntersector from '../algorithm/RobustLineIntersector';\nimport InteriorIntersectionFinder from './InteriorIntersectionFinder';\nexport default class FastNodingValidator {\n\tconstructor() {\n\t\tFastNodingValidator.constructor_.apply(this, arguments);\n\t}\n\tstatic computeIntersections(segStrings) {\n\t\tvar nv = new FastNodingValidator(segStrings);\n\t\tnv.setFindAllIntersections(true);\n\t\tnv.isValid();\n\t\treturn nv.getIntersections();\n\t}\n\texecute() {\n\t\tif (this._segInt !== null) return null;\n\t\tthis.checkInteriorIntersections();\n\t}\n\tgetIntersections() {\n\t\treturn this._segInt.getIntersections();\n\t}\n\tisValid() {\n\t\tthis.execute();\n\t\treturn this._isValid;\n\t}\n\tsetFindAllIntersections(findAllIntersections) {\n\t\tthis._findAllIntersections = findAllIntersections;\n\t}\n\tcheckInteriorIntersections() {\n\t\tthis._isValid = true;\n\t\tthis._segInt = new InteriorIntersectionFinder(this._li);\n\t\tthis._segInt.setFindAllIntersections(this._findAllIntersections);\n\t\tvar noder = new MCIndexNoder();\n\t\tnoder.setSegmentIntersector(this._segInt);\n\t\tnoder.computeNodes(this._segStrings);\n\t\tif (this._segInt.hasIntersection()) {\n\t\t\tthis._isValid = false;\n\t\t\treturn null;\n\t\t}\n\t}\n\tcheckValid() {\n\t\tthis.execute();\n\t\tif (!this._isValid) throw new TopologyException(this.getErrorMessage(), this._segInt.getInteriorIntersection());\n\t}\n\tgetErrorMessage() {\n\t\tif (this._isValid) return \"no intersections found\";\n\t\tvar intSegs = this._segInt.getIntersectionSegments();\n\t\treturn \"found non-noded intersection between \" + WKTWriter.toLineString(intSegs[0], intSegs[1]) + \" and \" + WKTWriter.toLineString(intSegs[2], intSegs[3]);\n\t}\n\tgetClass() {\n\t\treturn FastNodingValidator;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nFastNodingValidator.constructor_ = function () {\n\tthis._li = new RobustLineIntersector();\n\tthis._segStrings = null;\n\tthis._findAllIntersections = false;\n\tthis._segInt = null;\n\tthis._isValid = true;\n\tlet segStrings = arguments[0];\n\tthis._segStrings = segStrings;\n};\n","import BasicSegmentString from '../noding/BasicSegmentString';\nimport FastNodingValidator from '../noding/FastNodingValidator';\nimport ArrayList from '../../../../java/util/ArrayList';\nexport default class EdgeNodingValidator {\n\tconstructor() {\n\t\tEdgeNodingValidator.constructor_.apply(this, arguments);\n\t}\n\tstatic toSegmentStrings(edges) {\n\t\tvar segStrings = new ArrayList();\n\t\tfor (var i = edges.iterator(); i.hasNext(); ) {\n\t\t\tvar e = i.next();\n\t\t\tsegStrings.add(new BasicSegmentString(e.getCoordinates(), e));\n\t\t}\n\t\treturn segStrings;\n\t}\n\tstatic checkValid(edges) {\n\t\tvar validator = new EdgeNodingValidator(edges);\n\t\tvalidator.checkValid();\n\t}\n\tcheckValid() {\n\t\tthis._nv.checkValid();\n\t}\n\tgetClass() {\n\t\treturn EdgeNodingValidator;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nEdgeNodingValidator.constructor_ = function () {\n\tthis._nv = null;\n\tlet edges = arguments[0];\n\tthis._nv = new FastNodingValidator(EdgeNodingValidator.toSegmentStrings(edges));\n};\n","import GeometryFactory from '../GeometryFactory';\nimport ArrayList from '../../../../../java/util/ArrayList';\nexport default class GeometryCollectionMapper {\n\tconstructor() {\n\t\tGeometryCollectionMapper.constructor_.apply(this, arguments);\n\t}\n\tstatic map(gc, op) {\n\t\tvar mapper = new GeometryCollectionMapper(op);\n\t\treturn mapper.map(gc);\n\t}\n\tmap(gc) {\n\t\tvar mapped = new ArrayList();\n\t\tfor (var i = 0; i < gc.getNumGeometries(); i++) {\n\t\t\tvar g = this._mapOp.map(gc.getGeometryN(i));\n\t\t\tif (!g.isEmpty()) mapped.add(g);\n\t\t}\n\t\treturn gc.getFactory().createGeometryCollection(GeometryFactory.toGeometryArray(mapped));\n\t}\n\tgetClass() {\n\t\treturn GeometryCollectionMapper;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nGeometryCollectionMapper.constructor_ = function () {\n\tthis._mapOp = null;\n\tlet mapOp = arguments[0];\n\tthis._mapOp = mapOp;\n};\n","import ArrayList from '../../../../../java/util/ArrayList';\nimport Assert from '../../util/Assert';\nimport OverlayOp from './OverlayOp';\nexport default class LineBuilder {\n\tconstructor() {\n\t\tLineBuilder.constructor_.apply(this, arguments);\n\t}\n\tcollectLines(opCode) {\n\t\tfor (var it = this._op.getGraph().getEdgeEnds().iterator(); it.hasNext(); ) {\n\t\t\tvar de = it.next();\n\t\t\tthis.collectLineEdge(de, opCode, this._lineEdgesList);\n\t\t\tthis.collectBoundaryTouchEdge(de, opCode, this._lineEdgesList);\n\t\t}\n\t}\n\tlabelIsolatedLine(e, targetIndex) {\n\t\tvar loc = this._ptLocator.locate(e.getCoordinate(), this._op.getArgGeometry(targetIndex));\n\t\te.getLabel().setLocation(targetIndex, loc);\n\t}\n\tbuild(opCode) {\n\t\tthis.findCoveredLineEdges();\n\t\tthis.collectLines(opCode);\n\t\tthis.buildLines(opCode);\n\t\treturn this._resultLineList;\n\t}\n\tcollectLineEdge(de, opCode, edges) {\n\t\tvar label = de.getLabel();\n\t\tvar e = de.getEdge();\n\t\tif (de.isLineEdge()) {\n\t\t\tif (!de.isVisited() && OverlayOp.isResultOfOp(label, opCode) && !e.isCovered()) {\n\t\t\t\tedges.add(e);\n\t\t\t\tde.setVisitedEdge(true);\n\t\t\t}\n\t\t}\n\t}\n\tfindCoveredLineEdges() {\n\t\tfor (var nodeit = this._op.getGraph().getNodes().iterator(); nodeit.hasNext(); ) {\n\t\t\tvar node = nodeit.next();\n\t\t\tnode.getEdges().findCoveredLineEdges();\n\t\t}\n\t\tfor (var it = this._op.getGraph().getEdgeEnds().iterator(); it.hasNext(); ) {\n\t\t\tvar de = it.next();\n\t\t\tvar e = de.getEdge();\n\t\t\tif (de.isLineEdge() && !e.isCoveredSet()) {\n\t\t\t\tvar isCovered = this._op.isCoveredByA(de.getCoordinate());\n\t\t\t\te.setCovered(isCovered);\n\t\t\t}\n\t\t}\n\t}\n\tlabelIsolatedLines(edgesList) {\n\t\tfor (var it = edgesList.iterator(); it.hasNext(); ) {\n\t\t\tvar e = it.next();\n\t\t\tvar label = e.getLabel();\n\t\t\tif (e.isIsolated()) {\n\t\t\t\tif (label.isNull(0)) this.labelIsolatedLine(e, 0); else this.labelIsolatedLine(e, 1);\n\t\t\t}\n\t\t}\n\t}\n\tbuildLines(opCode) {\n\t\tfor (var it = this._lineEdgesList.iterator(); it.hasNext(); ) {\n\t\t\tvar e = it.next();\n\t\t\tvar label = e.getLabel();\n\t\t\tvar line = this._geometryFactory.createLineString(e.getCoordinates());\n\t\t\tthis._resultLineList.add(line);\n\t\t\te.setInResult(true);\n\t\t}\n\t}\n\tcollectBoundaryTouchEdge(de, opCode, edges) {\n\t\tvar label = de.getLabel();\n\t\tif (de.isLineEdge()) return null;\n\t\tif (de.isVisited()) return null;\n\t\tif (de.isInteriorAreaEdge()) return null;\n\t\tif (de.getEdge().isInResult()) return null;\n\t\tAssert.isTrue(!(de.isInResult() || de.getSym().isInResult()) || !de.getEdge().isInResult());\n\t\tif (OverlayOp.isResultOfOp(label, opCode) && opCode === OverlayOp.INTERSECTION) {\n\t\t\tedges.add(de.getEdge());\n\t\t\tde.setVisitedEdge(true);\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn LineBuilder;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nLineBuilder.constructor_ = function () {\n\tthis._op = null;\n\tthis._geometryFactory = null;\n\tthis._ptLocator = null;\n\tthis._lineEdgesList = new ArrayList();\n\tthis._resultLineList = new ArrayList();\n\tlet op = arguments[0], geometryFactory = arguments[1], ptLocator = arguments[2];\n\tthis._op = op;\n\tthis._geometryFactory = geometryFactory;\n\tthis._ptLocator = ptLocator;\n};\n","import ArrayList from '../../../../../java/util/ArrayList';\nimport OverlayOp from './OverlayOp';\nexport default class PointBuilder {\n\tconstructor() {\n\t\tPointBuilder.constructor_.apply(this, arguments);\n\t}\n\tfilterCoveredNodeToPoint(n) {\n\t\tvar coord = n.getCoordinate();\n\t\tif (!this._op.isCoveredByLA(coord)) {\n\t\t\tvar pt = this._geometryFactory.createPoint(coord);\n\t\t\tthis._resultPointList.add(pt);\n\t\t}\n\t}\n\textractNonCoveredResultNodes(opCode) {\n\t\tfor (var nodeit = this._op.getGraph().getNodes().iterator(); nodeit.hasNext(); ) {\n\t\t\tvar n = nodeit.next();\n\t\t\tif (n.isInResult()) continue;\n\t\t\tif (n.isIncidentEdgeInResult()) continue;\n\t\t\tif (n.getEdges().getDegree() === 0 || opCode === OverlayOp.INTERSECTION) {\n\t\t\t\tvar label = n.getLabel();\n\t\t\t\tif (OverlayOp.isResultOfOp(label, opCode)) {\n\t\t\t\t\tthis.filterCoveredNodeToPoint(n);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tbuild(opCode) {\n\t\tthis.extractNonCoveredResultNodes(opCode);\n\t\treturn this._resultPointList;\n\t}\n\tgetClass() {\n\t\treturn PointBuilder;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nPointBuilder.constructor_ = function () {\n\tthis._op = null;\n\tthis._geometryFactory = null;\n\tthis._resultPointList = new ArrayList();\n\tlet op = arguments[0], geometryFactory = arguments[1], ptLocator = arguments[2];\n\tthis._op = op;\n\tthis._geometryFactory = geometryFactory;\n};\n","import LineString from '../../../geom/LineString';\nimport CoordinateList from '../../../geom/CoordinateList';\nimport Coordinate from '../../../geom/Coordinate';\nimport Double from '../../../../../../java/lang/Double';\nimport LineSegment from '../../../geom/LineSegment';\nexport default class LineStringSnapper {\n\tconstructor() {\n\t\tLineStringSnapper.constructor_.apply(this, arguments);\n\t}\n\tstatic isClosed(pts) {\n\t\tif (pts.length <= 1) return false;\n\t\treturn pts[0].equals2D(pts[pts.length - 1]);\n\t}\n\tsnapVertices(srcCoords, snapPts) {\n\t\tvar end = this._isClosed ? srcCoords.size() - 1 : srcCoords.size();\n\t\tfor (var i = 0; i < end; i++) {\n\t\t\tvar srcPt = srcCoords.get(i);\n\t\t\tvar snapVert = this.findSnapForVertex(srcPt, snapPts);\n\t\t\tif (snapVert !== null) {\n\t\t\t\tsrcCoords.set(i, new Coordinate(snapVert));\n\t\t\t\tif (i === 0 && this._isClosed) srcCoords.set(srcCoords.size() - 1, new Coordinate(snapVert));\n\t\t\t}\n\t\t}\n\t}\n\tfindSnapForVertex(pt, snapPts) {\n\t\tfor (var i = 0; i < snapPts.length; i++) {\n\t\t\tif (pt.equals2D(snapPts[i])) return null;\n\t\t\tif (pt.distance(snapPts[i]) < this._snapTolerance) return snapPts[i];\n\t\t}\n\t\treturn null;\n\t}\n\tsnapTo(snapPts) {\n\t\tvar coordList = new CoordinateList(this._srcPts);\n\t\tthis.snapVertices(coordList, snapPts);\n\t\tthis.snapSegments(coordList, snapPts);\n\t\tvar newPts = coordList.toCoordinateArray();\n\t\treturn newPts;\n\t}\n\tsnapSegments(srcCoords, snapPts) {\n\t\tif (snapPts.length === 0) return null;\n\t\tvar distinctPtCount = snapPts.length;\n\t\tif (snapPts[0].equals2D(snapPts[snapPts.length - 1])) distinctPtCount = snapPts.length - 1;\n\t\tfor (var i = 0; i < distinctPtCount; i++) {\n\t\t\tvar snapPt = snapPts[i];\n\t\t\tvar index = this.findSegmentIndexToSnap(snapPt, srcCoords);\n\t\t\tif (index >= 0) {\n\t\t\t\tsrcCoords.add(index + 1, new Coordinate(snapPt), false);\n\t\t\t}\n\t\t}\n\t}\n\tfindSegmentIndexToSnap(snapPt, srcCoords) {\n\t\tvar minDist = Double.MAX_VALUE;\n\t\tvar snapIndex = -1;\n\t\tfor (var i = 0; i < srcCoords.size() - 1; i++) {\n\t\t\tthis._seg.p0 = srcCoords.get(i);\n\t\t\tthis._seg.p1 = srcCoords.get(i + 1);\n\t\t\tif (this._seg.p0.equals2D(snapPt) || this._seg.p1.equals2D(snapPt)) {\n\t\t\t\tif (this._allowSnappingToSourceVertices) continue; else return -1;\n\t\t\t}\n\t\t\tvar dist = this._seg.distance(snapPt);\n\t\t\tif (dist < this._snapTolerance && dist < minDist) {\n\t\t\t\tminDist = dist;\n\t\t\t\tsnapIndex = i;\n\t\t\t}\n\t\t}\n\t\treturn snapIndex;\n\t}\n\tsetAllowSnappingToSourceVertices(allowSnappingToSourceVertices) {\n\t\tthis._allowSnappingToSourceVertices = allowSnappingToSourceVertices;\n\t}\n\tgetClass() {\n\t\treturn LineStringSnapper;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nLineStringSnapper.constructor_ = function () {\n\tthis._snapTolerance = 0.0;\n\tthis._srcPts = null;\n\tthis._seg = new LineSegment();\n\tthis._allowSnappingToSourceVertices = false;\n\tthis._isClosed = false;\n\tif (arguments[0] instanceof LineString && typeof arguments[1] === \"number\") {\n\t\tlet srcLine = arguments[0], snapTolerance = arguments[1];\n\t\tLineStringSnapper.constructor_.call(this, srcLine.getCoordinates(), snapTolerance);\n\t} else if (arguments[0] instanceof Array && typeof arguments[1] === \"number\") {\n\t\tlet srcPts = arguments[0], snapTolerance = arguments[1];\n\t\tthis._srcPts = srcPts;\n\t\tthis._isClosed = LineStringSnapper.isClosed(srcPts);\n\t\tthis._snapTolerance = snapTolerance;\n\t}\n};\n","import TreeSet from '../../../../../../java/util/TreeSet';\nimport GeometryTransformer from '../../../geom/util/GeometryTransformer';\nimport hasInterface from '../../../../../../hasInterface';\nimport Double from '../../../../../../java/lang/Double';\nimport LineStringSnapper from './LineStringSnapper';\nimport PrecisionModel from '../../../geom/PrecisionModel';\nimport Polygonal from '../../../geom/Polygonal';\nexport default class GeometrySnapper {\n\tconstructor() {\n\t\tGeometrySnapper.constructor_.apply(this, arguments);\n\t}\n\tstatic snap(g0, g1, snapTolerance) {\n\t\tvar snapGeom = new Array(2).fill(null);\n\t\tvar snapper0 = new GeometrySnapper(g0);\n\t\tsnapGeom[0] = snapper0.snapTo(g1, snapTolerance);\n\t\tvar snapper1 = new GeometrySnapper(g1);\n\t\tsnapGeom[1] = snapper1.snapTo(snapGeom[0], snapTolerance);\n\t\treturn snapGeom;\n\t}\n\tstatic computeOverlaySnapTolerance() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet g = arguments[0];\n\t\t\tvar snapTolerance = GeometrySnapper.computeSizeBasedSnapTolerance(g);\n\t\t\tvar pm = g.getPrecisionModel();\n\t\t\tif (pm.getType() === PrecisionModel.FIXED) {\n\t\t\t\tvar fixedSnapTol = 1 / pm.getScale() * 2 / 1.415;\n\t\t\t\tif (fixedSnapTol > snapTolerance) snapTolerance = fixedSnapTol;\n\t\t\t}\n\t\t\treturn snapTolerance;\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet g0 = arguments[0], g1 = arguments[1];\n\t\t\treturn Math.min(GeometrySnapper.computeOverlaySnapTolerance(g0), GeometrySnapper.computeOverlaySnapTolerance(g1));\n\t\t}\n\t}\n\tstatic computeSizeBasedSnapTolerance(g) {\n\t\tvar env = g.getEnvelopeInternal();\n\t\tvar minDimension = Math.min(env.getHeight(), env.getWidth());\n\t\tvar snapTol = minDimension * GeometrySnapper.SNAP_PRECISION_FACTOR;\n\t\treturn snapTol;\n\t}\n\tstatic snapToSelf(geom, snapTolerance, cleanResult) {\n\t\tvar snapper0 = new GeometrySnapper(geom);\n\t\treturn snapper0.snapToSelf(snapTolerance, cleanResult);\n\t}\n\tsnapTo(snapGeom, snapTolerance) {\n\t\tvar snapPts = this.extractTargetCoordinates(snapGeom);\n\t\tvar snapTrans = new SnapTransformer(snapTolerance, snapPts);\n\t\treturn snapTrans.transform(this._srcGeom);\n\t}\n\tsnapToSelf(snapTolerance, cleanResult) {\n\t\tvar snapPts = this.extractTargetCoordinates(this._srcGeom);\n\t\tvar snapTrans = new SnapTransformer(snapTolerance, snapPts, true);\n\t\tvar snappedGeom = snapTrans.transform(this._srcGeom);\n\t\tvar result = snappedGeom;\n\t\tif (cleanResult && hasInterface(result, Polygonal)) {\n\t\t\tresult = snappedGeom.buffer(0);\n\t\t}\n\t\treturn result;\n\t}\n\tcomputeSnapTolerance(ringPts) {\n\t\tvar minSegLen = this.computeMinimumSegmentLength(ringPts);\n\t\tvar snapTol = minSegLen / 10;\n\t\treturn snapTol;\n\t}\n\textractTargetCoordinates(g) {\n\t\tvar ptSet = new TreeSet();\n\t\tvar pts = g.getCoordinates();\n\t\tfor (var i = 0; i < pts.length; i++) {\n\t\t\tptSet.add(pts[i]);\n\t\t}\n\t\treturn ptSet.toArray(new Array(0).fill(null));\n\t}\n\tcomputeMinimumSegmentLength(pts) {\n\t\tvar minSegLen = Double.MAX_VALUE;\n\t\tfor (var i = 0; i < pts.length - 1; i++) {\n\t\t\tvar segLen = pts[i].distance(pts[i + 1]);\n\t\t\tif (segLen < minSegLen) minSegLen = segLen;\n\t\t}\n\t\treturn minSegLen;\n\t}\n\tgetClass() {\n\t\treturn GeometrySnapper;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nGeometrySnapper.constructor_ = function () {\n\tthis._srcGeom = null;\n\tlet srcGeom = arguments[0];\n\tthis._srcGeom = srcGeom;\n};\nGeometrySnapper.SNAP_PRECISION_FACTOR = 1e-9;\nclass SnapTransformer extends GeometryTransformer {\n\tconstructor() {\n\t\tsuper();\n\t\tSnapTransformer.constructor_.apply(this, arguments);\n\t}\n\tsnapLine(srcPts, snapPts) {\n\t\tvar snapper = new LineStringSnapper(srcPts, this._snapTolerance);\n\t\tsnapper.setAllowSnappingToSourceVertices(this._isSelfSnap);\n\t\treturn snapper.snapTo(snapPts);\n\t}\n\ttransformCoordinates(coords, parent) {\n\t\tvar srcPts = coords.toCoordinateArray();\n\t\tvar newPts = this.snapLine(srcPts, this._snapPts);\n\t\treturn this._factory.getCoordinateSequenceFactory().create(newPts);\n\t}\n\tgetClass() {\n\t\treturn SnapTransformer;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nSnapTransformer.constructor_ = function () {\n\tthis._snapTolerance = null;\n\tthis._snapPts = null;\n\tthis._isSelfSnap = false;\n\tif (arguments.length === 2) {\n\t\tlet snapTolerance = arguments[0], snapPts = arguments[1];\n\t\tthis._snapTolerance = snapTolerance;\n\t\tthis._snapPts = snapPts;\n\t} else if (arguments.length === 3) {\n\t\tlet snapTolerance = arguments[0], snapPts = arguments[1], isSelfSnap = arguments[2];\n\t\tthis._snapTolerance = snapTolerance;\n\t\tthis._snapPts = snapPts;\n\t\tthis._isSelfSnap = isSelfSnap;\n\t}\n};\n","import Double from '../../../../java/lang/Double';\nimport Long from '../../../../java/lang/Long';\nexport default class CommonBits {\n\tconstructor() {\n\t\tthis._isFirst = true;\n\t\tthis._commonMantissaBitsCount = 53;\n\t\tthis._commonBits = new Long();\n\t\tthis._commonSignExp = null;\n\t}\n\tgetCommon() {\n\t\treturn Double.longBitsToDouble(this._commonBits);\n\t}\n\tadd(num) {\n\t\tvar numBits = Double.doubleToLongBits(num);\n\t\tif (this._isFirst) {\n\t\t\tthis._commonBits = numBits;\n\t\t\tthis._commonSignExp = CommonBits.signExpBits(this._commonBits);\n\t\t\tthis._isFirst = false;\n\t\t\treturn null;\n\t\t}\n\t\tvar numSignExp = CommonBits.signExpBits(numBits);\n\t\tif (numSignExp !== this._commonSignExp) {\n\t\t\tthis._commonBits.high = 0 | 0;\n\t\t\tthis._commonBits.low = 0 | 0;\n\t\t\treturn null;\n\t\t}\n\t\tthis._commonMantissaBitsCount = CommonBits.numCommonMostSigMantissaBits(this._commonBits, numBits);\n\t\tthis._commonBits = CommonBits.zeroLowerBits(this._commonBits, 64 - (12 + this._commonMantissaBitsCount));\n\t}\n\ttoString() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet bits = arguments[0];\n\t\t\tvar x = Double.longBitsToDouble(bits);\n\t\t\tvar numStr = Long.toBinaryString(bits);\n\t\t\tvar padStr = \"0000000000000000000000000000000000000000000000000000000000000000\" + numStr;\n\t\t\tvar bitStr = padStr.substring(padStr.length - 64);\n\t\t\tvar str = bitStr.substring(0, 1) + \" \" + bitStr.substring(1, 12) + \"(exp) \" + bitStr.substring(12) + \" [ \" + x + \" ]\";\n\t\t\treturn str;\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn CommonBits;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n\tstatic getBit(bits, i) {\n\t\tvar mask = (1 << (i % 32));\n\t\tif (i < 32) {\n\t\t\treturn (bits.low & mask) != 0 ? 1 : 0;\n\t\t}\n\t\treturn (bits.high & mask) != 0 ? 1 : 0;\n\t}\n\tstatic signExpBits(num) {\n\t\treturn num.high >>> 20;\n\t}\n\tstatic zeroLowerBits(bits, nBits) {\n\t\tvar prop = 'low';\n\t\tif (nBits > 32) {\n\t\t\tbits.low = 0 | 0;\n\t\t\tnBits %= 32;\n\t\t\tprop = 'high';\n\t\t}\n\t\tif (nBits > 0) {\n\t\t\tvar mask = (nBits < 32) ? (~((1 << nBits) - 1)) : 0;\n\t\t\tbits[prop] &= mask;\n\t\t}\n\t\treturn bits;\n\t}\n\tstatic numCommonMostSigMantissaBits (num1, num2) {\n\t\tvar count = 0;\n\t\tfor (var i = 52; i >= 0; i--) {\n\t\t\tif (CommonBits.getBit(num1, i) !== CommonBits.getBit(num2, i)) return count;\n\t\t\tcount++;\n\t\t}\n\t\treturn 52;\n\t}\n}\n\n","import CommonBits from './CommonBits';\nimport CoordinateFilter from '../geom/CoordinateFilter';\nimport Coordinate from '../geom/Coordinate';\nimport CoordinateSequenceFilter from '../geom/CoordinateSequenceFilter';\nexport default class CommonBitsRemover {\n\tconstructor() {\n\t\tCommonBitsRemover.constructor_.apply(this, arguments);\n\t}\n\taddCommonBits(geom) {\n\t\tvar trans = new Translater(this._commonCoord);\n\t\tgeom.apply(trans);\n\t\tgeom.geometryChanged();\n\t}\n\tremoveCommonBits(geom) {\n\t\tif (this._commonCoord.x === 0.0 && this._commonCoord.y === 0.0) return geom;\n\t\tvar invCoord = new Coordinate(this._commonCoord);\n\t\tinvCoord.x = -invCoord.x;\n\t\tinvCoord.y = -invCoord.y;\n\t\tvar trans = new Translater(invCoord);\n\t\tgeom.apply(trans);\n\t\tgeom.geometryChanged();\n\t\treturn geom;\n\t}\n\tgetCommonCoordinate() {\n\t\treturn this._commonCoord;\n\t}\n\tadd(geom) {\n\t\tgeom.apply(this._ccFilter);\n\t\tthis._commonCoord = this._ccFilter.getCommonCoordinate();\n\t}\n\tgetClass() {\n\t\treturn CommonBitsRemover;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nclass CommonCoordinateFilter {\n\tconstructor() {\n\t\tCommonCoordinateFilter.constructor_.apply(this, arguments);\n\t}\n\tfilter(coord) {\n\t\tthis._commonBitsX.add(coord.x);\n\t\tthis._commonBitsY.add(coord.y);\n\t}\n\tgetCommonCoordinate() {\n\t\treturn new Coordinate(this._commonBitsX.getCommon(), this._commonBitsY.getCommon());\n\t}\n\tgetClass() {\n\t\treturn CommonCoordinateFilter;\n\t}\n\tget interfaces_() {\n\t\treturn [CoordinateFilter];\n\t}\n}\nCommonCoordinateFilter.constructor_ = function () {\n\tthis._commonBitsX = new CommonBits();\n\tthis._commonBitsY = new CommonBits();\n};\nclass Translater {\n\tconstructor() {\n\t\tTranslater.constructor_.apply(this, arguments);\n\t}\n\tfilter(seq, i) {\n\t\tvar xp = seq.getOrdinate(i, 0) + this.trans.x;\n\t\tvar yp = seq.getOrdinate(i, 1) + this.trans.y;\n\t\tseq.setOrdinate(i, 0, xp);\n\t\tseq.setOrdinate(i, 1, yp);\n\t}\n\tisDone() {\n\t\treturn false;\n\t}\n\tisGeometryChanged() {\n\t\treturn true;\n\t}\n\tgetClass() {\n\t\treturn Translater;\n\t}\n\tget interfaces_() {\n\t\treturn [CoordinateSequenceFilter];\n\t}\n}\nTranslater.constructor_ = function () {\n\tthis.trans = null;\n\tlet trans = arguments[0];\n\tthis.trans = trans;\n};\nCommonBitsRemover.CommonCoordinateFilter = CommonCoordinateFilter;\nCommonBitsRemover.Translater = Translater;\nCommonBitsRemover.constructor_ = function () {\n\tthis._commonCoord = null;\n\tthis._ccFilter = new CommonCoordinateFilter();\n};\n","import GeometrySnapper from './GeometrySnapper';\nimport System from '../../../../../../java/lang/System';\nimport CommonBitsRemover from '../../../precision/CommonBitsRemover';\nimport OverlayOp from '../OverlayOp';\nexport default class SnapOverlayOp {\n\tconstructor() {\n\t\tSnapOverlayOp.constructor_.apply(this, arguments);\n\t}\n\tstatic overlayOp(g0, g1, opCode) {\n\t\tvar op = new SnapOverlayOp(g0, g1);\n\t\treturn op.getResultGeometry(opCode);\n\t}\n\tstatic union(g0, g1) {\n\t\treturn SnapOverlayOp.overlayOp(g0, g1, OverlayOp.UNION);\n\t}\n\tstatic intersection(g0, g1) {\n\t\treturn SnapOverlayOp.overlayOp(g0, g1, OverlayOp.INTERSECTION);\n\t}\n\tstatic symDifference(g0, g1) {\n\t\treturn SnapOverlayOp.overlayOp(g0, g1, OverlayOp.SYMDIFFERENCE);\n\t}\n\tstatic difference(g0, g1) {\n\t\treturn SnapOverlayOp.overlayOp(g0, g1, OverlayOp.DIFFERENCE);\n\t}\n\tselfSnap(geom) {\n\t\tvar snapper0 = new GeometrySnapper(geom);\n\t\tvar snapGeom = snapper0.snapTo(geom, this._snapTolerance);\n\t\treturn snapGeom;\n\t}\n\tremoveCommonBits(geom) {\n\t\tthis._cbr = new CommonBitsRemover();\n\t\tthis._cbr.add(geom[0]);\n\t\tthis._cbr.add(geom[1]);\n\t\tvar remGeom = new Array(2).fill(null);\n\t\tremGeom[0] = this._cbr.removeCommonBits(geom[0].copy());\n\t\tremGeom[1] = this._cbr.removeCommonBits(geom[1].copy());\n\t\treturn remGeom;\n\t}\n\tprepareResult(geom) {\n\t\tthis._cbr.addCommonBits(geom);\n\t\treturn geom;\n\t}\n\tgetResultGeometry(opCode) {\n\t\tvar prepGeom = this.snap(this._geom);\n\t\tvar result = OverlayOp.overlayOp(prepGeom[0], prepGeom[1], opCode);\n\t\treturn this.prepareResult(result);\n\t}\n\tcheckValid(g) {\n\t\tif (!g.isValid()) {\n\t\t\tSystem.out.println(\"Snapped geometry is invalid\");\n\t\t}\n\t}\n\tcomputeSnapTolerance() {\n\t\tthis._snapTolerance = GeometrySnapper.computeOverlaySnapTolerance(this._geom[0], this._geom[1]);\n\t}\n\tsnap(geom) {\n\t\tvar remGeom = this.removeCommonBits(geom);\n\t\tvar snapGeom = GeometrySnapper.snap(remGeom[0], remGeom[1], this._snapTolerance);\n\t\treturn snapGeom;\n\t}\n\tgetClass() {\n\t\treturn SnapOverlayOp;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nSnapOverlayOp.constructor_ = function () {\n\tthis._geom = new Array(2).fill(null);\n\tthis._snapTolerance = null;\n\tthis._cbr = null;\n\tlet g1 = arguments[0], g2 = arguments[1];\n\tthis._geom[0] = g1;\n\tthis._geom[1] = g2;\n\tthis.computeSnapTolerance();\n};\n","import SnapOverlayOp from './SnapOverlayOp';\nimport RuntimeException from '../../../../../../java/lang/RuntimeException';\nimport OverlayOp from '../OverlayOp';\nexport default class SnapIfNeededOverlayOp {\n\tconstructor() {\n\t\tSnapIfNeededOverlayOp.constructor_.apply(this, arguments);\n\t}\n\tstatic overlayOp(g0, g1, opCode) {\n\t\tvar op = new SnapIfNeededOverlayOp(g0, g1);\n\t\treturn op.getResultGeometry(opCode);\n\t}\n\tstatic union(g0, g1) {\n\t\treturn SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.UNION);\n\t}\n\tstatic intersection(g0, g1) {\n\t\treturn SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.INTERSECTION);\n\t}\n\tstatic symDifference(g0, g1) {\n\t\treturn SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.SYMDIFFERENCE);\n\t}\n\tstatic difference(g0, g1) {\n\t\treturn SnapIfNeededOverlayOp.overlayOp(g0, g1, OverlayOp.DIFFERENCE);\n\t}\n\tgetResultGeometry(opCode) {\n\t\tvar result = null;\n\t\tvar isSuccess = false;\n\t\tvar savedException = null;\n\t\ttry {\n\t\t\tresult = OverlayOp.overlayOp(this._geom[0], this._geom[1], opCode);\n\t\t\tvar isValid = true;\n\t\t\tif (isValid) isSuccess = true;\n\t\t} catch (ex) {\n\t\t\tif (ex instanceof RuntimeException) {\n\t\t\t\tsavedException = ex;\n\t\t\t} else throw ex;\n\t\t} finally {}\n\t\tif (!isSuccess) {\n\t\t\ttry {\n\t\t\t\tresult = SnapOverlayOp.overlayOp(this._geom[0], this._geom[1], opCode);\n\t\t\t} catch (ex) {\n\t\t\t\tif (ex instanceof RuntimeException) {\n\t\t\t\t\tthrow savedException;\n\t\t\t\t} else throw ex;\n\t\t\t} finally {}\n\t\t}\n\t\treturn result;\n\t}\n\tgetClass() {\n\t\treturn SnapIfNeededOverlayOp;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nSnapIfNeededOverlayOp.constructor_ = function () {\n\tthis._geom = new Array(2).fill(null);\n\tlet g1 = arguments[0], g2 = arguments[1];\n\tthis._geom[0] = g1;\n\tthis._geom[1] = g2;\n};\n","import BoundaryNodeRule from '../algorithm/BoundaryNodeRule';\nimport GeometryGraph from '../geomgraph/GeometryGraph';\nimport RobustLineIntersector from '../algorithm/RobustLineIntersector';\nexport default class GeometryGraphOperation {\n\tconstructor() {\n\t\tGeometryGraphOperation.constructor_.apply(this, arguments);\n\t}\n\tgetArgGeometry(i) {\n\t\treturn this._arg[i].getGeometry();\n\t}\n\tsetComputationPrecision(pm) {\n\t\tthis._resultPrecisionModel = pm;\n\t\tthis._li.setPrecisionModel(this._resultPrecisionModel);\n\t}\n\tgetClass() {\n\t\treturn GeometryGraphOperation;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nGeometryGraphOperation.constructor_ = function () {\n\tthis._li = new RobustLineIntersector();\n\tthis._resultPrecisionModel = null;\n\tthis._arg = null;\n\tif (arguments.length === 1) {\n\t\tlet g0 = arguments[0];\n\t\tthis.setComputationPrecision(g0.getPrecisionModel());\n\t\tthis._arg = new Array(1).fill(null);\n\t\tthis._arg[0] = new GeometryGraph(0, g0);\n\t\t;\n\t} else if (arguments.length === 2) {\n\t\tlet g0 = arguments[0], g1 = arguments[1];\n\t\tGeometryGraphOperation.constructor_.call(this, g0, g1, BoundaryNodeRule.OGC_SFS_BOUNDARY_RULE);\n\t} else if (arguments.length === 3) {\n\t\tlet g0 = arguments[0], g1 = arguments[1], boundaryNodeRule = arguments[2];\n\t\tif (g0.getPrecisionModel().compareTo(g1.getPrecisionModel()) >= 0) this.setComputationPrecision(g0.getPrecisionModel()); else this.setComputationPrecision(g1.getPrecisionModel());\n\t\tthis._arg = new Array(2).fill(null);\n\t\tthis._arg[0] = new GeometryGraph(0, g0, boundaryNodeRule);\n\t\tthis._arg[1] = new GeometryGraph(1, g1, boundaryNodeRule);\n\t}\n};\n","import PointLocator from '../../algorithm/PointLocator';\nimport Location from '../../geom/Location';\nimport EdgeNodingValidator from '../../geomgraph/EdgeNodingValidator';\nimport GeometryCollectionMapper from '../../geom/util/GeometryCollectionMapper';\nimport PolygonBuilder from './PolygonBuilder';\nimport Position from '../../geomgraph/Position';\nimport IllegalArgumentException from '../../../../../java/lang/IllegalArgumentException';\nimport LineBuilder from './LineBuilder';\nimport PointBuilder from './PointBuilder';\nimport SnapIfNeededOverlayOp from './snap/SnapIfNeededOverlayOp';\nimport Label from '../../geomgraph/Label';\nimport OverlayNodeFactory from './OverlayNodeFactory';\nimport GeometryGraphOperation from '../GeometryGraphOperation';\nimport EdgeList from '../../geomgraph/EdgeList';\nimport ArrayList from '../../../../../java/util/ArrayList';\nimport Assert from '../../util/Assert';\nimport PlanarGraph from '../../geomgraph/PlanarGraph';\nexport default class OverlayOp extends GeometryGraphOperation {\n\tconstructor() {\n\t\tsuper();\n\t\tOverlayOp.constructor_.apply(this, arguments);\n\t}\n\tstatic overlayOp(geom0, geom1, opCode) {\n\t\tvar gov = new OverlayOp(geom0, geom1);\n\t\tvar geomOv = gov.getResultGeometry(opCode);\n\t\treturn geomOv;\n\t}\n\tstatic union(geom, other) {\n\t\tif (geom.isEmpty() || other.isEmpty()) {\n\t\t\tif (geom.isEmpty() && other.isEmpty()) return OverlayOp.createEmptyResult(OverlayOp.UNION, geom, other, geom.getFactory());\n\t\t\tif (geom.isEmpty()) return other.copy();\n\t\t\tif (other.isEmpty()) return geom.copy();\n\t\t}\n\t\tif (geom.isGeometryCollection() || other.isGeometryCollection()) throw new IllegalArgumentException(\"This method does not support GeometryCollection arguments\");\n\t\treturn SnapIfNeededOverlayOp.overlayOp(geom, other, OverlayOp.UNION);\n\t}\n\tstatic intersection(geom, other) {\n\t\tif (geom.isEmpty() || other.isEmpty()) return OverlayOp.createEmptyResult(OverlayOp.INTERSECTION, geom, other, geom.getFactory());\n\t\tif (geom.isGeometryCollection()) {\n\t\t\tvar g2 = other;\n\t\t\treturn GeometryCollectionMapper.map(geom, new (class {\n\t\t\t\tget interfaces_() {\n\t\t\t\t\treturn [MapOp];\n\t\t\t\t}\n\t\t\t\tmap(g) {\n\t\t\t\t\treturn g.intersection(g2);\n\t\t\t\t}\n\t\t\t})());\n\t\t}\n\t\tif (geom.isGeometryCollection() || other.isGeometryCollection()) throw new IllegalArgumentException(\"This method does not support GeometryCollection arguments\");\n\t\treturn SnapIfNeededOverlayOp.overlayOp(geom, other, OverlayOp.INTERSECTION);\n\t}\n\tstatic symDifference(geom, other) {\n\t\tif (geom.isEmpty() || other.isEmpty()) {\n\t\t\tif (geom.isEmpty() && other.isEmpty()) return OverlayOp.createEmptyResult(OverlayOp.SYMDIFFERENCE, geom, other, geom.getFactory());\n\t\t\tif (geom.isEmpty()) return other.copy();\n\t\t\tif (other.isEmpty()) return geom.copy();\n\t\t}\n\t\tif (geom.isGeometryCollection() || other.isGeometryCollection()) throw new IllegalArgumentException(\"This method does not support GeometryCollection arguments\");\n\t\treturn SnapIfNeededOverlayOp.overlayOp(geom, other, OverlayOp.SYMDIFFERENCE);\n\t}\n\tstatic resultDimension(opCode, g0, g1) {\n\t\tvar dim0 = g0.getDimension();\n\t\tvar dim1 = g1.getDimension();\n\t\tvar resultDimension = -1;\n\t\tswitch (opCode) {\n\t\t\tcase OverlayOp.INTERSECTION:\n\t\t\t\tresultDimension = Math.min(dim0, dim1);\n\t\t\t\tbreak;\n\t\t\tcase OverlayOp.UNION:\n\t\t\t\tresultDimension = Math.max(dim0, dim1);\n\t\t\t\tbreak;\n\t\t\tcase OverlayOp.DIFFERENCE:\n\t\t\t\tresultDimension = dim0;\n\t\t\t\tbreak;\n\t\t\tcase OverlayOp.SYMDIFFERENCE:\n\t\t\t\tresultDimension = Math.max(dim0, dim1);\n\t\t\t\tbreak;\n\t\t}\n\t\treturn resultDimension;\n\t}\n\tstatic createEmptyResult(overlayOpCode, a, b, geomFact) {\n\t\tvar result = null;\n\t\tswitch (OverlayOp.resultDimension(overlayOpCode, a, b)) {\n\t\t\tcase -1:\n\t\t\t\tresult = geomFact.createGeometryCollection();\n\t\t\t\tbreak;\n\t\t\tcase 0:\n\t\t\t\tresult = geomFact.createPoint();\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tresult = geomFact.createLineString();\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tresult = geomFact.createPolygon();\n\t\t\t\tbreak;\n\t\t}\n\t\treturn result;\n\t}\n\tstatic difference(geom, other) {\n\t\tif (geom.isEmpty()) return OverlayOp.createEmptyResult(OverlayOp.DIFFERENCE, geom, other, geom.getFactory());\n\t\tif (other.isEmpty()) return geom.copy();\n\t\tif (geom.isGeometryCollection() || other.isGeometryCollection()) throw new IllegalArgumentException(\"This method does not support GeometryCollection arguments\");\n\t\treturn SnapIfNeededOverlayOp.overlayOp(geom, other, OverlayOp.DIFFERENCE);\n\t}\n\tstatic isResultOfOp() {\n\t\tif (arguments.length === 2) {\n\t\t\tlet label = arguments[0], opCode = arguments[1];\n\t\t\tvar loc0 = label.getLocation(0);\n\t\t\tvar loc1 = label.getLocation(1);\n\t\t\treturn OverlayOp.isResultOfOp(loc0, loc1, opCode);\n\t\t} else if (arguments.length === 3) {\n\t\t\tlet loc0 = arguments[0], loc1 = arguments[1], overlayOpCode = arguments[2];\n\t\t\tif (loc0 === Location.BOUNDARY) loc0 = Location.INTERIOR;\n\t\t\tif (loc1 === Location.BOUNDARY) loc1 = Location.INTERIOR;\n\t\t\tswitch (overlayOpCode) {\n\t\t\t\tcase OverlayOp.INTERSECTION:\n\t\t\t\t\treturn loc0 === Location.INTERIOR && loc1 === Location.INTERIOR;\n\t\t\t\tcase OverlayOp.UNION:\n\t\t\t\t\treturn loc0 === Location.INTERIOR || loc1 === Location.INTERIOR;\n\t\t\t\tcase OverlayOp.DIFFERENCE:\n\t\t\t\t\treturn loc0 === Location.INTERIOR && loc1 !== Location.INTERIOR;\n\t\t\t\tcase OverlayOp.SYMDIFFERENCE:\n\t\t\t\t\treturn loc0 === Location.INTERIOR && loc1 !== Location.INTERIOR || loc0 !== Location.INTERIOR && loc1 === Location.INTERIOR;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n\tinsertUniqueEdge(e) {\n\t\tvar existingEdge = this._edgeList.findEqualEdge(e);\n\t\tif (existingEdge !== null) {\n\t\t\tvar existingLabel = existingEdge.getLabel();\n\t\t\tvar labelToMerge = e.getLabel();\n\t\t\tif (!existingEdge.isPointwiseEqual(e)) {\n\t\t\t\tlabelToMerge = new Label(e.getLabel());\n\t\t\t\tlabelToMerge.flip();\n\t\t\t}\n\t\t\tvar depth = existingEdge.getDepth();\n\t\t\tif (depth.isNull()) {\n\t\t\t\tdepth.add(existingLabel);\n\t\t\t}\n\t\t\tdepth.add(labelToMerge);\n\t\t\texistingLabel.merge(labelToMerge);\n\t\t} else {\n\t\t\tthis._edgeList.add(e);\n\t\t}\n\t}\n\tgetGraph() {\n\t\treturn this._graph;\n\t}\n\tcancelDuplicateResultEdges() {\n\t\tfor (var it = this._graph.getEdgeEnds().iterator(); it.hasNext(); ) {\n\t\t\tvar de = it.next();\n\t\t\tvar sym = de.getSym();\n\t\t\tif (de.isInResult() && sym.isInResult()) {\n\t\t\t\tde.setInResult(false);\n\t\t\t\tsym.setInResult(false);\n\t\t\t}\n\t\t}\n\t}\n\tisCoveredByLA(coord) {\n\t\tif (this.isCovered(coord, this._resultLineList)) return true;\n\t\tif (this.isCovered(coord, this._resultPolyList)) return true;\n\t\treturn false;\n\t}\n\tcomputeGeometry(resultPointList, resultLineList, resultPolyList, opcode) {\n\t\tvar geomList = new ArrayList();\n\t\tgeomList.addAll(resultPointList);\n\t\tgeomList.addAll(resultLineList);\n\t\tgeomList.addAll(resultPolyList);\n\t\tif (geomList.isEmpty()) return OverlayOp.createEmptyResult(opcode, this._arg[0].getGeometry(), this._arg[1].getGeometry(), this._geomFact);\n\t\treturn this._geomFact.buildGeometry(geomList);\n\t}\n\tmergeSymLabels() {\n\t\tfor (var nodeit = this._graph.getNodes().iterator(); nodeit.hasNext(); ) {\n\t\t\tvar node = nodeit.next();\n\t\t\tnode.getEdges().mergeSymLabels();\n\t\t}\n\t}\n\tisCovered(coord, geomList) {\n\t\tfor (var it = geomList.iterator(); it.hasNext(); ) {\n\t\t\tvar geom = it.next();\n\t\t\tvar loc = this._ptLocator.locate(coord, geom);\n\t\t\tif (loc !== Location.EXTERIOR) return true;\n\t\t}\n\t\treturn false;\n\t}\n\treplaceCollapsedEdges() {\n\t\tvar newEdges = new ArrayList();\n\t\tfor (var it = this._edgeList.iterator(); it.hasNext(); ) {\n\t\t\tvar e = it.next();\n\t\t\tif (e.isCollapsed()) {\n\t\t\t\tit.remove();\n\t\t\t\tnewEdges.add(e.getCollapsedEdge());\n\t\t\t}\n\t\t}\n\t\tthis._edgeList.addAll(newEdges);\n\t}\n\tupdateNodeLabelling() {\n\t\tfor (var nodeit = this._graph.getNodes().iterator(); nodeit.hasNext(); ) {\n\t\t\tvar node = nodeit.next();\n\t\t\tvar lbl = node.getEdges().getLabel();\n\t\t\tnode.getLabel().merge(lbl);\n\t\t}\n\t}\n\tgetResultGeometry(overlayOpCode) {\n\t\tthis.computeOverlay(overlayOpCode);\n\t\treturn this._resultGeom;\n\t}\n\tinsertUniqueEdges(edges) {\n\t\tfor (var i = edges.iterator(); i.hasNext(); ) {\n\t\t\tvar e = i.next();\n\t\t\tthis.insertUniqueEdge(e);\n\t\t}\n\t}\n\tcomputeOverlay(opCode) {\n\t\tthis.copyPoints(0);\n\t\tthis.copyPoints(1);\n\t\tthis._arg[0].computeSelfNodes(this._li, false);\n\t\tthis._arg[1].computeSelfNodes(this._li, false);\n\t\tthis._arg[0].computeEdgeIntersections(this._arg[1], this._li, true);\n\t\tvar baseSplitEdges = new ArrayList();\n\t\tthis._arg[0].computeSplitEdges(baseSplitEdges);\n\t\tthis._arg[1].computeSplitEdges(baseSplitEdges);\n\t\tvar splitEdges = baseSplitEdges;\n\t\tthis.insertUniqueEdges(baseSplitEdges);\n\t\tthis.computeLabelsFromDepths();\n\t\tthis.replaceCollapsedEdges();\n\t\tEdgeNodingValidator.checkValid(this._edgeList.getEdges());\n\t\tthis._graph.addEdges(this._edgeList.getEdges());\n\t\tthis.computeLabelling();\n\t\tthis.labelIncompleteNodes();\n\t\tthis.findResultAreaEdges(opCode);\n\t\tthis.cancelDuplicateResultEdges();\n\t\tvar polyBuilder = new PolygonBuilder(this._geomFact);\n\t\tpolyBuilder.add(this._graph);\n\t\tthis._resultPolyList = polyBuilder.getPolygons();\n\t\tvar lineBuilder = new LineBuilder(this, this._geomFact, this._ptLocator);\n\t\tthis._resultLineList = lineBuilder.build(opCode);\n\t\tvar pointBuilder = new PointBuilder(this, this._geomFact, this._ptLocator);\n\t\tthis._resultPointList = pointBuilder.build(opCode);\n\t\tthis._resultGeom = this.computeGeometry(this._resultPointList, this._resultLineList, this._resultPolyList, opCode);\n\t}\n\tlabelIncompleteNode(n, targetIndex) {\n\t\tvar loc = this._ptLocator.locate(n.getCoordinate(), this._arg[targetIndex].getGeometry());\n\t\tn.getLabel().setLocation(targetIndex, loc);\n\t}\n\tcopyPoints(argIndex) {\n\t\tfor (var i = this._arg[argIndex].getNodeIterator(); i.hasNext(); ) {\n\t\t\tvar graphNode = i.next();\n\t\t\tvar newNode = this._graph.addNode(graphNode.getCoordinate());\n\t\t\tnewNode.setLabel(argIndex, graphNode.getLabel().getLocation(argIndex));\n\t\t}\n\t}\n\tfindResultAreaEdges(opCode) {\n\t\tfor (var it = this._graph.getEdgeEnds().iterator(); it.hasNext(); ) {\n\t\t\tvar de = it.next();\n\t\t\tvar label = de.getLabel();\n\t\t\tif (label.isArea() && !de.isInteriorAreaEdge() && OverlayOp.isResultOfOp(label.getLocation(0, Position.RIGHT), label.getLocation(1, Position.RIGHT), opCode)) {\n\t\t\t\tde.setInResult(true);\n\t\t\t}\n\t\t}\n\t}\n\tcomputeLabelsFromDepths() {\n\t\tfor (var it = this._edgeList.iterator(); it.hasNext(); ) {\n\t\t\tvar e = it.next();\n\t\t\tvar lbl = e.getLabel();\n\t\t\tvar depth = e.getDepth();\n\t\t\tif (!depth.isNull()) {\n\t\t\t\tdepth.normalize();\n\t\t\t\tfor (var i = 0; i < 2; i++) {\n\t\t\t\t\tif (!lbl.isNull(i) && lbl.isArea() && !depth.isNull(i)) {\n\t\t\t\t\t\tif (depth.getDelta(i) === 0) {\n\t\t\t\t\t\t\tlbl.toLine(i);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tAssert.isTrue(!depth.isNull(i, Position.LEFT), \"depth of LEFT side has not been initialized\");\n\t\t\t\t\t\t\tlbl.setLocation(i, Position.LEFT, depth.getLocation(i, Position.LEFT));\n\t\t\t\t\t\t\tAssert.isTrue(!depth.isNull(i, Position.RIGHT), \"depth of RIGHT side has not been initialized\");\n\t\t\t\t\t\t\tlbl.setLocation(i, Position.RIGHT, depth.getLocation(i, Position.RIGHT));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tcomputeLabelling() {\n\t\tfor (var nodeit = this._graph.getNodes().iterator(); nodeit.hasNext(); ) {\n\t\t\tvar node = nodeit.next();\n\t\t\tnode.getEdges().computeLabelling(this._arg);\n\t\t}\n\t\tthis.mergeSymLabels();\n\t\tthis.updateNodeLabelling();\n\t}\n\tlabelIncompleteNodes() {\n\t\tvar nodeCount = 0;\n\t\tfor (var ni = this._graph.getNodes().iterator(); ni.hasNext(); ) {\n\t\t\tvar n = ni.next();\n\t\t\tvar label = n.getLabel();\n\t\t\tif (n.isIsolated()) {\n\t\t\t\tnodeCount++;\n\t\t\t\tif (label.isNull(0)) this.labelIncompleteNode(n, 0); else this.labelIncompleteNode(n, 1);\n\t\t\t}\n\t\t\tn.getEdges().updateLabelling(label);\n\t\t}\n\t}\n\tisCoveredByA(coord) {\n\t\tif (this.isCovered(coord, this._resultPolyList)) return true;\n\t\treturn false;\n\t}\n\tgetClass() {\n\t\treturn OverlayOp;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nOverlayOp.constructor_ = function () {\n\tthis._ptLocator = new PointLocator();\n\tthis._geomFact = null;\n\tthis._resultGeom = null;\n\tthis._graph = null;\n\tthis._edgeList = new EdgeList();\n\tthis._resultPolyList = new ArrayList();\n\tthis._resultLineList = new ArrayList();\n\tthis._resultPointList = new ArrayList();\n\tlet g0 = arguments[0], g1 = arguments[1];\n\tGeometryGraphOperation.constructor_.call(this, g0, g1);\n\tthis._graph = new PlanarGraph(new OverlayNodeFactory());\n\tthis._geomFact = g0.getFactory();\n};\nOverlayOp.INTERSECTION = 1;\nOverlayOp.UNION = 2;\nOverlayOp.DIFFERENCE = 3;\nOverlayOp.SYMDIFFERENCE = 4;\n","import DirectedEdge from '../../planargraph/DirectedEdge';\nexport default class PolygonizeDirectedEdge extends DirectedEdge {\n\tconstructor() {\n\t\tsuper();\n\t\tPolygonizeDirectedEdge.constructor_.apply(this, arguments);\n\t}\n\tgetNext() {\n\t\treturn this._next;\n\t}\n\tisInRing() {\n\t\treturn this._edgeRing !== null;\n\t}\n\tsetRing(edgeRing) {\n\t\tthis._edgeRing = edgeRing;\n\t}\n\tsetLabel(label) {\n\t\tthis._label = label;\n\t}\n\tgetLabel() {\n\t\treturn this._label;\n\t}\n\tsetNext(next) {\n\t\tthis._next = next;\n\t}\n\tgetRing() {\n\t\treturn this._edgeRing;\n\t}\n\tgetClass() {\n\t\treturn PolygonizeDirectedEdge;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nPolygonizeDirectedEdge.constructor_ = function () {\n\tthis._edgeRing = null;\n\tthis._next = null;\n\tthis._label = -1;\n\tlet from = arguments[0], to = arguments[1], directionPt = arguments[2], edgeDirection = arguments[3];\n\tDirectedEdge.constructor_.call(this, from, to, directionPt, edgeDirection);\n};\n","import Edge from '../../planargraph/Edge';\nexport default class PolygonizeEdge extends Edge {\n\tconstructor() {\n\t\tsuper();\n\t\tPolygonizeEdge.constructor_.apply(this, arguments);\n\t}\n\tgetLine() {\n\t\treturn this._line;\n\t}\n\tgetClass() {\n\t\treturn PolygonizeEdge;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nPolygonizeEdge.constructor_ = function () {\n\tthis._line = null;\n\tlet line = arguments[0];\n\tthis._line = line;\n};\n","import CoordinateList from '../../geom/CoordinateList';\nimport WKTWriter from '../../io/WKTWriter';\nimport CoordinateArraySequence from '../../geom/impl/CoordinateArraySequence';\nimport PointLocation from '../../algorithm/PointLocation';\nimport LinearRing from '../../geom/LinearRing';\nimport Exception from '../../../../../java/lang/Exception';\nimport Orientation from '../../algorithm/Orientation';\nimport System from '../../../../../java/lang/System';\nimport CoordinateArrays from '../../geom/CoordinateArrays';\nimport ArrayList from '../../../../../java/util/ArrayList';\nimport Comparator from '../../../../../java/util/Comparator';\nimport Assert from '../../util/Assert';\nexport default class EdgeRing {\n\tconstructor() {\n\t\tEdgeRing.constructor_.apply(this, arguments);\n\t}\n\tstatic findDirEdgesInRing(startDE) {\n\t\tvar de = startDE;\n\t\tvar edges = new ArrayList();\n\t\tdo {\n\t\t\tedges.add(de);\n\t\t\tde = de.getNext();\n\t\t\tAssert.isTrue(de !== null, \"found null DE in ring\");\n\t\t\tAssert.isTrue(de === startDE || !de.isInRing(), \"found DE already in ring\");\n\t\t} while (de !== startDE);\n\t\treturn edges;\n\t}\n\tstatic addEdge(coords, isForward, coordList) {\n\t\tif (isForward) {\n\t\t\tfor (var i = 0; i < coords.length; i++) {\n\t\t\t\tcoordList.add(coords[i], false);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var i = coords.length - 1; i >= 0; i--) {\n\t\t\t\tcoordList.add(coords[i], false);\n\t\t\t}\n\t\t}\n\t}\n\tstatic findEdgeRingContaining(testEr, shellList) {\n\t\tvar testRing = testEr.getRing();\n\t\tvar testEnv = testRing.getEnvelopeInternal();\n\t\tvar testPt = testRing.getCoordinateN(0);\n\t\tvar minShell = null;\n\t\tvar minShellEnv = null;\n\t\tfor (var it = shellList.iterator(); it.hasNext(); ) {\n\t\t\tvar tryShell = it.next();\n\t\t\tvar tryShellRing = tryShell.getRing();\n\t\t\tvar tryShellEnv = tryShellRing.getEnvelopeInternal();\n\t\t\tif (tryShellEnv.equals(testEnv)) continue;\n\t\t\tif (!tryShellEnv.contains(testEnv)) continue;\n\t\t\ttestPt = CoordinateArrays.ptNotInList(testRing.getCoordinates(), tryShellRing.getCoordinates());\n\t\t\tvar isContained = false;\n\t\t\tif (PointLocation.isInRing(testPt, tryShellRing.getCoordinates())) isContained = true;\n\t\t\tif (isContained) {\n\t\t\t\tif (minShell === null || minShellEnv.contains(tryShellEnv)) {\n\t\t\t\t\tminShell = tryShell;\n\t\t\t\t\tminShellEnv = minShell.getRing().getEnvelopeInternal();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn minShell;\n\t}\n\tisIncluded() {\n\t\treturn this._isIncluded;\n\t}\n\tgetCoordinates() {\n\t\tif (this._ringPts === null) {\n\t\t\tvar coordList = new CoordinateList();\n\t\t\tfor (var i = this._deList.iterator(); i.hasNext(); ) {\n\t\t\t\tvar de = i.next();\n\t\t\t\tvar edge = de.getEdge();\n\t\t\t\tEdgeRing.addEdge(edge.getLine().getCoordinates(), de.getEdgeDirection(), coordList);\n\t\t\t}\n\t\t\tthis._ringPts = coordList.toCoordinateArray();\n\t\t}\n\t\treturn this._ringPts;\n\t}\n\tisIncludedSet() {\n\t\treturn this._isIncludedSet;\n\t}\n\tisValid() {\n\t\tthis.getCoordinates();\n\t\tif (this._ringPts.length <= 3) return false;\n\t\tthis.getRing();\n\t\treturn this._ring.isValid();\n\t}\n\tbuild(startDE) {\n\t\tvar de = startDE;\n\t\tdo {\n\t\t\tthis.add(de);\n\t\t\tde.setRing(this);\n\t\t\tde = de.getNext();\n\t\t\tAssert.isTrue(de !== null, \"found null DE in ring\");\n\t\t\tAssert.isTrue(de === startDE || !de.isInRing(), \"found DE already in ring\");\n\t\t} while (de !== startDE);\n\t}\n\tisOuterHole() {\n\t\tif (!this._isHole) return false;\n\t\treturn !this.hasShell();\n\t}\n\tgetPolygon() {\n\t\tvar holeLR = null;\n\t\tif (this._holes !== null) {\n\t\t\tholeLR = new Array(this._holes.size()).fill(null);\n\t\t\tfor (var i = 0; i < this._holes.size(); i++) {\n\t\t\t\tholeLR[i] = this._holes.get(i);\n\t\t\t}\n\t\t}\n\t\tvar poly = this._factory.createPolygon(this._ring, holeLR);\n\t\treturn poly;\n\t}\n\tisHole() {\n\t\treturn this._isHole;\n\t}\n\tisProcessed() {\n\t\treturn this._isProcessed;\n\t}\n\taddHole() {\n\t\tif (arguments[0] instanceof LinearRing) {\n\t\t\tlet hole = arguments[0];\n\t\t\tif (this._holes === null) this._holes = new ArrayList();\n\t\t\tthis._holes.add(hole);\n\t\t} else if (arguments[0] instanceof EdgeRing) {\n\t\t\tlet holeER = arguments[0];\n\t\t\tholeER.setShell(this);\n\t\t\tvar hole = holeER.getRing();\n\t\t\tif (this._holes === null) this._holes = new ArrayList();\n\t\t\tthis._holes.add(hole);\n\t\t}\n\t}\n\tsetIncluded(isIncluded) {\n\t\tthis._isIncluded = isIncluded;\n\t\tthis._isIncludedSet = true;\n\t}\n\tgetOuterHole() {\n\t\tif (this.isHole()) return null;\n\t\tfor (var i = 0; i < this._deList.size(); i++) {\n\t\t\tvar de = this._deList.get(i);\n\t\t\tvar adjRing = de.getSym().getRing();\n\t\t\tif (adjRing.isOuterHole()) return adjRing;\n\t\t}\n\t\treturn null;\n\t}\n\tcomputeHole() {\n\t\tvar ring = this.getRing();\n\t\tthis._isHole = Orientation.isCCW(ring.getCoordinates());\n\t}\n\thasShell() {\n\t\treturn this._shell !== null;\n\t}\n\tisOuterShell() {\n\t\treturn this.getOuterHole() !== null;\n\t}\n\tgetLineString() {\n\t\tthis.getCoordinates();\n\t\treturn this._factory.createLineString(this._ringPts);\n\t}\n\ttoString() {\n\t\treturn WKTWriter.toLineString(new CoordinateArraySequence(this.getCoordinates()));\n\t}\n\tgetShell() {\n\t\tif (this.isHole()) return this._shell;\n\t\treturn this;\n\t}\n\tadd(de) {\n\t\tthis._deList.add(de);\n\t}\n\tgetRing() {\n\t\tif (this._ring !== null) return this._ring;\n\t\tthis.getCoordinates();\n\t\tif (this._ringPts.length < 3) System.out.println(this._ringPts);\n\t\ttry {\n\t\t\tthis._ring = this._factory.createLinearRing(this._ringPts);\n\t\t} catch (ex) {\n\t\t\tif (ex instanceof Exception) {\n\t\t\t\tSystem.out.println(this._ringPts);\n\t\t\t} else throw ex;\n\t\t} finally {}\n\t\treturn this._ring;\n\t}\n\tupdateIncluded() {\n\t\tif (this.isHole()) return null;\n\t\tfor (var i = 0; i < this._deList.size(); i++) {\n\t\t\tvar de = this._deList.get(i);\n\t\t\tvar adjShell = de.getSym().getRing().getShell();\n\t\t\tif (adjShell !== null && adjShell.isIncludedSet()) {\n\t\t\t\tthis.setIncluded(!adjShell.isIncluded());\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t}\n\tsetShell(shell) {\n\t\tthis._shell = shell;\n\t}\n\tsetProcessed(isProcessed) {\n\t\tthis._isProcessed = isProcessed;\n\t}\n\tgetClass() {\n\t\treturn EdgeRing;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nclass EnvelopeComparator {\n\tconstructor() {\n\t\tEnvelopeComparator.constructor_.apply(this, arguments);\n\t}\n\tcompare(obj0, obj1) {\n\t\tvar r0 = obj0;\n\t\tvar r1 = obj1;\n\t\treturn r0.getRing().getEnvelope().compareTo(r1.getRing().getEnvelope());\n\t}\n\tgetClass() {\n\t\treturn EnvelopeComparator;\n\t}\n\tget interfaces_() {\n\t\treturn [Comparator];\n\t}\n}\nEnvelopeComparator.constructor_ = function () {};\nEdgeRing.EnvelopeComparator = EnvelopeComparator;\nEdgeRing.constructor_ = function () {\n\tthis._factory = null;\n\tthis._deList = new ArrayList();\n\tthis._lowestEdge = null;\n\tthis._ring = null;\n\tthis._ringPts = null;\n\tthis._holes = null;\n\tthis._shell = null;\n\tthis._isHole = null;\n\tthis._isProcessed = false;\n\tthis._isIncludedSet = false;\n\tthis._isIncluded = false;\n\tlet factory = arguments[0];\n\tthis._factory = factory;\n};\n","import PolygonizeDirectedEdge from './PolygonizeDirectedEdge';\nimport HashSet from '../../../../../java/util/HashSet';\nimport Stack from '../../../../../java/util/Stack';\nimport Node from '../../planargraph/Node';\nimport PolygonizeEdge from './PolygonizeEdge';\nimport EdgeRing from './EdgeRing';\nimport CoordinateArrays from '../../geom/CoordinateArrays';\nimport ArrayList from '../../../../../java/util/ArrayList';\nimport Assert from '../../util/Assert';\nimport PlanarGraph from '../../planargraph/PlanarGraph';\nexport default class PolygonizeGraph extends PlanarGraph {\n\tconstructor() {\n\t\tsuper();\n\t\tPolygonizeGraph.constructor_.apply(this, arguments);\n\t}\n\tstatic findLabeledEdgeRings(dirEdges) {\n\t\tvar edgeRingStarts = new ArrayList();\n\t\tvar currLabel = 1;\n\t\tfor (var i = dirEdges.iterator(); i.hasNext(); ) {\n\t\t\tvar de = i.next();\n\t\t\tif (de.isMarked()) continue;\n\t\t\tif (de.getLabel() >= 0) continue;\n\t\t\tedgeRingStarts.add(de);\n\t\t\tvar edges = EdgeRing.findDirEdgesInRing(de);\n\t\t\tPolygonizeGraph.label(edges, currLabel);\n\t\t\tcurrLabel++;\n\t\t}\n\t\treturn edgeRingStarts;\n\t}\n\tstatic getDegreeNonDeleted(node) {\n\t\tvar edges = node.getOutEdges().getEdges();\n\t\tvar degree = 0;\n\t\tfor (var i = edges.iterator(); i.hasNext(); ) {\n\t\t\tvar de = i.next();\n\t\t\tif (!de.isMarked()) degree++;\n\t\t}\n\t\treturn degree;\n\t}\n\tstatic deleteAllEdges(node) {\n\t\tvar edges = node.getOutEdges().getEdges();\n\t\tfor (var i = edges.iterator(); i.hasNext(); ) {\n\t\t\tvar de = i.next();\n\t\t\tde.setMarked(true);\n\t\t\tvar sym = de.getSym();\n\t\t\tif (sym !== null) sym.setMarked(true);\n\t\t}\n\t}\n\tstatic label(dirEdges, label) {\n\t\tfor (var i = dirEdges.iterator(); i.hasNext(); ) {\n\t\t\tvar de = i.next();\n\t\t\tde.setLabel(label);\n\t\t}\n\t}\n\tstatic computeNextCWEdges(node) {\n\t\tvar deStar = node.getOutEdges();\n\t\tvar startDE = null;\n\t\tvar prevDE = null;\n\t\tfor (var i = deStar.getEdges().iterator(); i.hasNext(); ) {\n\t\t\tvar outDE = i.next();\n\t\t\tif (outDE.isMarked()) continue;\n\t\t\tif (startDE === null) startDE = outDE;\n\t\t\tif (prevDE !== null) {\n\t\t\t\tvar sym = prevDE.getSym();\n\t\t\t\tsym.setNext(outDE);\n\t\t\t}\n\t\t\tprevDE = outDE;\n\t\t}\n\t\tif (prevDE !== null) {\n\t\t\tvar sym = prevDE.getSym();\n\t\t\tsym.setNext(startDE);\n\t\t}\n\t}\n\tstatic computeNextCCWEdges(node, label) {\n\t\tvar deStar = node.getOutEdges();\n\t\tvar firstOutDE = null;\n\t\tvar prevInDE = null;\n\t\tvar edges = deStar.getEdges();\n\t\tfor (var i = edges.size() - 1; i >= 0; i--) {\n\t\t\tvar de = edges.get(i);\n\t\t\tvar sym = de.getSym();\n\t\t\tvar outDE = null;\n\t\t\tif (de.getLabel() === label) outDE = de;\n\t\t\tvar inDE = null;\n\t\t\tif (sym.getLabel() === label) inDE = sym;\n\t\t\tif (outDE === null && inDE === null) continue;\n\t\t\tif (inDE !== null) {\n\t\t\t\tprevInDE = inDE;\n\t\t\t}\n\t\t\tif (outDE !== null) {\n\t\t\t\tif (prevInDE !== null) {\n\t\t\t\t\tprevInDE.setNext(outDE);\n\t\t\t\t\tprevInDE = null;\n\t\t\t\t}\n\t\t\t\tif (firstOutDE === null) firstOutDE = outDE;\n\t\t\t}\n\t\t}\n\t\tif (prevInDE !== null) {\n\t\t\tAssert.isTrue(firstOutDE !== null);\n\t\t\tprevInDE.setNext(firstOutDE);\n\t\t}\n\t}\n\tstatic getDegree(node, label) {\n\t\tvar edges = node.getOutEdges().getEdges();\n\t\tvar degree = 0;\n\t\tfor (var i = edges.iterator(); i.hasNext(); ) {\n\t\t\tvar de = i.next();\n\t\t\tif (de.getLabel() === label) degree++;\n\t\t}\n\t\treturn degree;\n\t}\n\tstatic findIntersectionNodes(startDE, label) {\n\t\tvar de = startDE;\n\t\tvar intNodes = null;\n\t\tdo {\n\t\t\tvar node = de.getFromNode();\n\t\t\tif (PolygonizeGraph.getDegree(node, label) > 1) {\n\t\t\t\tif (intNodes === null) intNodes = new ArrayList();\n\t\t\t\tintNodes.add(node);\n\t\t\t}\n\t\t\tde = de.getNext();\n\t\t\tAssert.isTrue(de !== null, \"found null DE in ring\");\n\t\t\tAssert.isTrue(de === startDE || !de.isInRing(), \"found DE already in ring\");\n\t\t} while (de !== startDE);\n\t\treturn intNodes;\n\t}\n\tfindEdgeRing(startDE) {\n\t\tvar er = new EdgeRing(this._factory);\n\t\ter.build(startDE);\n\t\treturn er;\n\t}\n\tcomputeDepthParity() {\n\t\tif (arguments.length === 0) {\n\t\t\twhile (true) {\n\t\t\t\tvar de = null;\n\t\t\t\tif (de === null) return null;\n\t\t\t\tthis.computeDepthParity(de);\n\t\t\t}\n\t\t} else if (arguments.length === 1) {\n\t\t\tlet de = arguments[0];\n\t\t}\n\t}\n\tcomputeNextCWEdges() {\n\t\tfor (var iNode = this.nodeIterator(); iNode.hasNext(); ) {\n\t\t\tvar node = iNode.next();\n\t\t\tPolygonizeGraph.computeNextCWEdges(node);\n\t\t}\n\t}\n\taddEdge(line) {\n\t\tif (line.isEmpty()) {\n\t\t\treturn null;\n\t\t}\n\t\tvar linePts = CoordinateArrays.removeRepeatedPoints(line.getCoordinates());\n\t\tif (linePts.length < 2) {\n\t\t\treturn null;\n\t\t}\n\t\tvar startPt = linePts[0];\n\t\tvar endPt = linePts[linePts.length - 1];\n\t\tvar nStart = this.getNode(startPt);\n\t\tvar nEnd = this.getNode(endPt);\n\t\tvar de0 = new PolygonizeDirectedEdge(nStart, nEnd, linePts[1], true);\n\t\tvar de1 = new PolygonizeDirectedEdge(nEnd, nStart, linePts[linePts.length - 2], false);\n\t\tvar edge = new PolygonizeEdge(line);\n\t\tedge.setDirectedEdges(de0, de1);\n\t\tthis.add(edge);\n\t}\n\tdeleteCutEdges() {\n\t\tthis.computeNextCWEdges();\n\t\tPolygonizeGraph.findLabeledEdgeRings(this._dirEdges);\n\t\tvar cutLines = new ArrayList();\n\t\tfor (var i = this._dirEdges.iterator(); i.hasNext(); ) {\n\t\t\tvar de = i.next();\n\t\t\tif (de.isMarked()) continue;\n\t\t\tvar sym = de.getSym();\n\t\t\tif (de.getLabel() === sym.getLabel()) {\n\t\t\t\tde.setMarked(true);\n\t\t\t\tsym.setMarked(true);\n\t\t\t\tvar e = de.getEdge();\n\t\t\t\tcutLines.add(e.getLine());\n\t\t\t}\n\t\t}\n\t\treturn cutLines;\n\t}\n\tgetEdgeRings() {\n\t\tthis.computeNextCWEdges();\n\t\tPolygonizeGraph.label(this._dirEdges, -1);\n\t\tvar maximalRings = PolygonizeGraph.findLabeledEdgeRings(this._dirEdges);\n\t\tthis.convertMaximalToMinimalEdgeRings(maximalRings);\n\t\tvar edgeRingList = new ArrayList();\n\t\tfor (var i = this._dirEdges.iterator(); i.hasNext(); ) {\n\t\t\tvar de = i.next();\n\t\t\tif (de.isMarked()) continue;\n\t\t\tif (de.isInRing()) continue;\n\t\t\tvar er = this.findEdgeRing(de);\n\t\t\tedgeRingList.add(er);\n\t\t}\n\t\treturn edgeRingList;\n\t}\n\tgetNode(pt) {\n\t\tvar node = this.findNode(pt);\n\t\tif (node === null) {\n\t\t\tnode = new Node(pt);\n\t\t\tthis.add(node);\n\t\t}\n\t\treturn node;\n\t}\n\tconvertMaximalToMinimalEdgeRings(ringEdges) {\n\t\tfor (var i = ringEdges.iterator(); i.hasNext(); ) {\n\t\t\tvar de = i.next();\n\t\t\tvar label = de.getLabel();\n\t\t\tvar intNodes = PolygonizeGraph.findIntersectionNodes(de, label);\n\t\t\tif (intNodes === null) continue;\n\t\t\tfor (var iNode = intNodes.iterator(); iNode.hasNext(); ) {\n\t\t\t\tvar node = iNode.next();\n\t\t\t\tPolygonizeGraph.computeNextCCWEdges(node, label);\n\t\t\t}\n\t\t}\n\t}\n\tdeleteDangles() {\n\t\tvar nodesToRemove = this.findNodesOfDegree(1);\n\t\tvar dangleLines = new HashSet();\n\t\tvar nodeStack = new Stack();\n\t\tfor (var i = nodesToRemove.iterator(); i.hasNext(); ) {\n\t\t\tnodeStack.push(i.next());\n\t\t}\n\t\twhile (!nodeStack.isEmpty()) {\n\t\t\tvar node = nodeStack.pop();\n\t\t\tPolygonizeGraph.deleteAllEdges(node);\n\t\t\tvar nodeOutEdges = node.getOutEdges().getEdges();\n\t\t\tfor (var i = nodeOutEdges.iterator(); i.hasNext(); ) {\n\t\t\t\tvar de = i.next();\n\t\t\t\tde.setMarked(true);\n\t\t\t\tvar sym = de.getSym();\n\t\t\t\tif (sym !== null) sym.setMarked(true);\n\t\t\t\tvar e = de.getEdge();\n\t\t\t\tdangleLines.add(e.getLine());\n\t\t\t\tvar toNode = de.getToNode();\n\t\t\t\tif (PolygonizeGraph.getDegreeNonDeleted(toNode) === 1) nodeStack.push(toNode);\n\t\t\t}\n\t\t}\n\t\treturn dangleLines;\n\t}\n\tgetClass() {\n\t\treturn PolygonizeGraph;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nPolygonizeGraph.constructor_ = function () {\n\tthis._factory = null;\n\tlet factory = arguments[0];\n\tthis._factory = factory;\n};\n","import LineString from '../../geom/LineString';\nimport Geometry from '../../geom/Geometry';\nimport PolygonizeGraph from './PolygonizeGraph';\nimport hasInterface from '../../../../../hasInterface';\nimport GeometryFactory from '../../geom/GeometryFactory';\nimport Collection from '../../../../../java/util/Collection';\nimport Collections from '../../../../../java/util/Collections';\nimport EdgeRing from './EdgeRing';\nimport GeometryComponentFilter from '../../geom/GeometryComponentFilter';\nimport ArrayList from '../../../../../java/util/ArrayList';\nexport default class Polygonizer {\n\tconstructor() {\n\t\tPolygonizer.constructor_.apply(this, arguments);\n\t}\n\tstatic findOuterShells(shellList) {\n\t\tfor (var i = shellList.iterator(); i.hasNext(); ) {\n\t\t\tvar er = i.next();\n\t\t\tvar outerHoleER = er.getOuterHole();\n\t\t\tif (outerHoleER !== null && !outerHoleER.isProcessed()) {\n\t\t\t\ter.setIncluded(true);\n\t\t\t\touterHoleER.setProcessed(true);\n\t\t\t}\n\t\t}\n\t}\n\tstatic extractPolygons(shellList, includeAll) {\n\t\tvar polyList = new ArrayList();\n\t\tfor (var i = shellList.iterator(); i.hasNext(); ) {\n\t\t\tvar er = i.next();\n\t\t\tif (includeAll || er.isIncluded()) {\n\t\t\t\tpolyList.add(er.getPolygon());\n\t\t\t}\n\t\t}\n\t\treturn polyList;\n\t}\n\tstatic assignHolesToShells(holeList, shellList) {\n\t\tfor (var i = holeList.iterator(); i.hasNext(); ) {\n\t\t\tvar holeER = i.next();\n\t\t\tPolygonizer.assignHoleToShell(holeER, shellList);\n\t\t}\n\t}\n\tstatic assignHoleToShell(holeER, shellList) {\n\t\tvar shell = EdgeRing.findEdgeRingContaining(holeER, shellList);\n\t\tif (shell !== null) {\n\t\t\tshell.addHole(holeER);\n\t\t}\n\t}\n\tstatic findDisjointShells(shellList) {\n\t\tPolygonizer.findOuterShells(shellList);\n\t\tvar isMoreToScan = null;\n\t\tdo {\n\t\t\tisMoreToScan = false;\n\t\t\tfor (var i = shellList.iterator(); i.hasNext(); ) {\n\t\t\t\tvar er = i.next();\n\t\t\t\tif (er.isIncludedSet()) continue;\n\t\t\t\ter.updateIncluded();\n\t\t\t\tif (!er.isIncludedSet()) {\n\t\t\t\t\tisMoreToScan = true;\n\t\t\t\t}\n\t\t\t}\n\t\t} while (isMoreToScan);\n\t}\n\tgetGeometry() {\n\t\tif (this._geomFactory === null) this._geomFactory = new GeometryFactory();\n\t\tthis.polygonize();\n\t\tif (this._extractOnlyPolygonal) {\n\t\t\treturn this._geomFactory.buildGeometry(this._polyList);\n\t\t}\n\t\treturn this._geomFactory.createGeometryCollection(GeometryFactory.toGeometryArray(this._polyList));\n\t}\n\tgetInvalidRingLines() {\n\t\tthis.polygonize();\n\t\treturn this._invalidRingLines;\n\t}\n\tfindValidRings(edgeRingList, validEdgeRingList, invalidRingList) {\n\t\tfor (var i = edgeRingList.iterator(); i.hasNext(); ) {\n\t\t\tvar er = i.next();\n\t\t\tif (er.isValid()) validEdgeRingList.add(er); else invalidRingList.add(er.getLineString());\n\t\t}\n\t}\n\tpolygonize() {\n\t\tif (this._polyList !== null) return null;\n\t\tthis._polyList = new ArrayList();\n\t\tif (this._graph === null) return null;\n\t\tthis._dangles = this._graph.deleteDangles();\n\t\tthis._cutEdges = this._graph.deleteCutEdges();\n\t\tvar edgeRingList = this._graph.getEdgeRings();\n\t\tvar validEdgeRingList = new ArrayList();\n\t\tthis._invalidRingLines = new ArrayList();\n\t\tif (this._isCheckingRingsValid) {\n\t\t\tthis.findValidRings(edgeRingList, validEdgeRingList, this._invalidRingLines);\n\t\t} else {\n\t\t\tvalidEdgeRingList = edgeRingList;\n\t\t}\n\t\tthis.findShellsAndHoles(validEdgeRingList);\n\t\tPolygonizer.assignHolesToShells(this._holeList, this._shellList);\n\t\tCollections.sort(this._shellList, new EdgeRing.EnvelopeComparator());\n\t\tvar includeAll = true;\n\t\tif (this._extractOnlyPolygonal) {\n\t\t\tPolygonizer.findDisjointShells(this._shellList);\n\t\t\tincludeAll = false;\n\t\t}\n\t\tthis._polyList = Polygonizer.extractPolygons(this._shellList, includeAll);\n\t}\n\tgetDangles() {\n\t\tthis.polygonize();\n\t\treturn this._dangles;\n\t}\n\tgetCutEdges() {\n\t\tthis.polygonize();\n\t\treturn this._cutEdges;\n\t}\n\tgetPolygons() {\n\t\tthis.polygonize();\n\t\treturn this._polyList;\n\t}\n\tadd() {\n\t\tif (hasInterface(arguments[0], Collection)) {\n\t\t\tlet geomList = arguments[0];\n\t\t\tfor (var i = geomList.iterator(); i.hasNext(); ) {\n\t\t\t\tvar geometry = i.next();\n\t\t\t\tthis.add(geometry);\n\t\t\t}\n\t\t} else if (arguments[0] instanceof LineString) {\n\t\t\tlet line = arguments[0];\n\t\t\tthis._geomFactory = line.getFactory();\n\t\t\tif (this._graph === null) this._graph = new PolygonizeGraph(this._geomFactory);\n\t\t\tthis._graph.addEdge(line);\n\t\t} else if (arguments[0] instanceof Geometry) {\n\t\t\tlet g = arguments[0];\n\t\t\tg.apply(this._lineStringAdder);\n\t\t}\n\t}\n\tsetCheckRingsValid(isCheckingRingsValid) {\n\t\tthis._isCheckingRingsValid = isCheckingRingsValid;\n\t}\n\tfindShellsAndHoles(edgeRingList) {\n\t\tthis._holeList = new ArrayList();\n\t\tthis._shellList = new ArrayList();\n\t\tfor (var i = edgeRingList.iterator(); i.hasNext(); ) {\n\t\t\tvar er = i.next();\n\t\t\ter.computeHole();\n\t\t\tif (er.isHole()) this._holeList.add(er); else this._shellList.add(er);\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn Polygonizer;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nclass LineStringAdder {\n\tconstructor() {\n\t\tLineStringAdder.constructor_.apply(this, arguments);\n\t}\n\tfilter(g) {\n\t\tif (g instanceof LineString) this.p.add(g);\n\t}\n\tgetClass() {\n\t\treturn LineStringAdder;\n\t}\n\tget interfaces_() {\n\t\treturn [GeometryComponentFilter];\n\t}\n}\nLineStringAdder.constructor_ = function () {\n\tthis.p = null;\n\tlet p = arguments[0];\n\tthis.p = p;\n};\nPolygonizer.LineStringAdder = LineStringAdder;\nPolygonizer.constructor_ = function () {\n\tthis._lineStringAdder = new LineStringAdder(this);\n\tthis._graph = null;\n\tthis._dangles = new ArrayList();\n\tthis._cutEdges = new ArrayList();\n\tthis._invalidRingLines = new ArrayList();\n\tthis._holeList = null;\n\tthis._shellList = null;\n\tthis._polyList = null;\n\tthis._isCheckingRingsValid = true;\n\tthis._extractOnlyPolygonal = null;\n\tthis._geomFactory = null;\n\tif (arguments.length === 0) {\n\t\tPolygonizer.constructor_.call(this, false);\n\t} else if (arguments.length === 1) {\n\t\tlet extractOnlyPolygonal = arguments[0];\n\t\tthis._extractOnlyPolygonal = extractOnlyPolygonal;\n\t}\n};\n","import EdgeEnd from '../../geomgraph/EdgeEnd';\nimport Label from '../../geomgraph/Label';\nimport ArrayList from '../../../../../java/util/ArrayList';\nexport default class EdgeEndBuilder {\n\tconstructor() {\n\t\tEdgeEndBuilder.constructor_.apply(this, arguments);\n\t}\n\tcreateEdgeEndForNext(edge, l, eiCurr, eiNext) {\n\t\tvar iNext = eiCurr.segmentIndex + 1;\n\t\tif (iNext >= edge.getNumPoints() && eiNext === null) return null;\n\t\tvar pNext = edge.getCoordinate(iNext);\n\t\tif (eiNext !== null && eiNext.segmentIndex === eiCurr.segmentIndex) pNext = eiNext.coord;\n\t\tvar e = new EdgeEnd(edge, eiCurr.coord, pNext, new Label(edge.getLabel()));\n\t\tl.add(e);\n\t}\n\tcreateEdgeEndForPrev(edge, l, eiCurr, eiPrev) {\n\t\tvar iPrev = eiCurr.segmentIndex;\n\t\tif (eiCurr.dist === 0.0) {\n\t\t\tif (iPrev === 0) return null;\n\t\t\tiPrev--;\n\t\t}\n\t\tvar pPrev = edge.getCoordinate(iPrev);\n\t\tif (eiPrev !== null && eiPrev.segmentIndex >= iPrev) pPrev = eiPrev.coord;\n\t\tvar label = new Label(edge.getLabel());\n\t\tlabel.flip();\n\t\tvar e = new EdgeEnd(edge, eiCurr.coord, pPrev, label);\n\t\tl.add(e);\n\t}\n\tcomputeEdgeEnds() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet edges = arguments[0];\n\t\t\tvar l = new ArrayList();\n\t\t\tfor (var i = edges; i.hasNext(); ) {\n\t\t\t\tvar e = i.next();\n\t\t\t\tthis.computeEdgeEnds(e, l);\n\t\t\t}\n\t\t\treturn l;\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet edge = arguments[0], l = arguments[1];\n\t\t\tvar eiList = edge.getEdgeIntersectionList();\n\t\t\teiList.addEndpoints();\n\t\t\tvar it = eiList.iterator();\n\t\t\tvar eiPrev = null;\n\t\t\tvar eiCurr = null;\n\t\t\tif (!it.hasNext()) return null;\n\t\t\tvar eiNext = it.next();\n\t\t\tdo {\n\t\t\t\teiPrev = eiCurr;\n\t\t\t\teiCurr = eiNext;\n\t\t\t\teiNext = null;\n\t\t\t\tif (it.hasNext()) eiNext = it.next();\n\t\t\t\tif (eiCurr !== null) {\n\t\t\t\t\tthis.createEdgeEndForPrev(edge, l, eiCurr, eiPrev);\n\t\t\t\t\tthis.createEdgeEndForNext(edge, l, eiCurr, eiNext);\n\t\t\t\t}\n\t\t\t} while (eiCurr !== null);\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn EdgeEndBuilder;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nEdgeEndBuilder.constructor_ = function () {};\n","import Location from '../../geom/Location';\nimport EdgeEnd from '../../geomgraph/EdgeEnd';\nimport Position from '../../geomgraph/Position';\nimport GeometryGraph from '../../geomgraph/GeometryGraph';\nimport Label from '../../geomgraph/Label';\nimport ArrayList from '../../../../../java/util/ArrayList';\nimport Edge from '../../geomgraph/Edge';\nexport default class EdgeEndBundle extends EdgeEnd {\n\tconstructor() {\n\t\tsuper();\n\t\tEdgeEndBundle.constructor_.apply(this, arguments);\n\t}\n\tinsert(e) {\n\t\tthis._edgeEnds.add(e);\n\t}\n\tprint(out) {\n\t\tout.println(\"EdgeEndBundle--> Label: \" + this._label);\n\t\tfor (var it = this.iterator(); it.hasNext(); ) {\n\t\t\tvar ee = it.next();\n\t\t\tee.print(out);\n\t\t\tout.println();\n\t\t}\n\t}\n\titerator() {\n\t\treturn this._edgeEnds.iterator();\n\t}\n\tgetEdgeEnds() {\n\t\treturn this._edgeEnds;\n\t}\n\tcomputeLabelOn(geomIndex, boundaryNodeRule) {\n\t\tvar boundaryCount = 0;\n\t\tvar foundInterior = false;\n\t\tfor (var it = this.iterator(); it.hasNext(); ) {\n\t\t\tvar e = it.next();\n\t\t\tvar loc = e.getLabel().getLocation(geomIndex);\n\t\t\tif (loc === Location.BOUNDARY) boundaryCount++;\n\t\t\tif (loc === Location.INTERIOR) foundInterior = true;\n\t\t}\n\t\tvar loc = Location.NONE;\n\t\tif (foundInterior) loc = Location.INTERIOR;\n\t\tif (boundaryCount > 0) {\n\t\t\tloc = GeometryGraph.determineBoundary(boundaryNodeRule, boundaryCount);\n\t\t}\n\t\tthis._label.setLocation(geomIndex, loc);\n\t}\n\tcomputeLabelSide(geomIndex, side) {\n\t\tfor (var it = this.iterator(); it.hasNext(); ) {\n\t\t\tvar e = it.next();\n\t\t\tif (e.getLabel().isArea()) {\n\t\t\t\tvar loc = e.getLabel().getLocation(geomIndex, side);\n\t\t\t\tif (loc === Location.INTERIOR) {\n\t\t\t\t\tthis._label.setLocation(geomIndex, side, Location.INTERIOR);\n\t\t\t\t\treturn null;\n\t\t\t\t} else if (loc === Location.EXTERIOR) this._label.setLocation(geomIndex, side, Location.EXTERIOR);\n\t\t\t}\n\t\t}\n\t}\n\tgetLabel() {\n\t\treturn this._label;\n\t}\n\tcomputeLabelSides(geomIndex) {\n\t\tthis.computeLabelSide(geomIndex, Position.LEFT);\n\t\tthis.computeLabelSide(geomIndex, Position.RIGHT);\n\t}\n\tupdateIM(im) {\n\t\tEdge.updateIM(this._label, im);\n\t}\n\tcomputeLabel(boundaryNodeRule) {\n\t\tvar isArea = false;\n\t\tfor (var it = this.iterator(); it.hasNext(); ) {\n\t\t\tvar e = it.next();\n\t\t\tif (e.getLabel().isArea()) isArea = true;\n\t\t}\n\t\tif (isArea) this._label = new Label(Location.NONE, Location.NONE, Location.NONE); else this._label = new Label(Location.NONE);\n\t\tfor (var i = 0; i < 2; i++) {\n\t\t\tthis.computeLabelOn(i, boundaryNodeRule);\n\t\t\tif (isArea) this.computeLabelSides(i);\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn EdgeEndBundle;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nEdgeEndBundle.constructor_ = function () {\n\tthis._edgeEnds = new ArrayList();\n\tif (arguments.length === 1) {\n\t\tlet e = arguments[0];\n\t\tEdgeEndBundle.constructor_.call(this, null, e);\n\t} else if (arguments.length === 2) {\n\t\tlet boundaryNodeRule = arguments[0], e = arguments[1];\n\t\tEdgeEnd.constructor_.call(this, e.getEdge(), e.getCoordinate(), e.getDirectedCoordinate(), new Label(e.getLabel()));\n\t\tthis.insert(e);\n\t}\n};\n","import EdgeEndStar from '../../geomgraph/EdgeEndStar';\nimport EdgeEndBundle from './EdgeEndBundle';\nexport default class EdgeEndBundleStar extends EdgeEndStar {\n\tconstructor() {\n\t\tsuper();\n\t\tEdgeEndBundleStar.constructor_.apply(this, arguments);\n\t}\n\tupdateIM(im) {\n\t\tfor (var it = this.iterator(); it.hasNext(); ) {\n\t\t\tvar esb = it.next();\n\t\t\tesb.updateIM(im);\n\t\t}\n\t}\n\tinsert(e) {\n\t\tvar eb = this._edgeMap.get(e);\n\t\tif (eb === null) {\n\t\t\teb = new EdgeEndBundle(e);\n\t\t\tthis.insertEdgeEnd(e, eb);\n\t\t} else {\n\t\t\teb.insert(e);\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn EdgeEndBundleStar;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nEdgeEndBundleStar.constructor_ = function () {};\n","import Node from '../../geomgraph/Node';\nexport default class RelateNode extends Node {\n\tconstructor() {\n\t\tsuper();\n\t\tRelateNode.constructor_.apply(this, arguments);\n\t}\n\tupdateIMFromEdges(im) {\n\t\tthis._edges.updateIM(im);\n\t}\n\tcomputeIM(im) {\n\t\tim.setAtLeastIfValid(this._label.getLocation(0), this._label.getLocation(1), 0);\n\t}\n\tgetClass() {\n\t\treturn RelateNode;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nRelateNode.constructor_ = function () {\n\tlet coord = arguments[0], edges = arguments[1];\n\tNode.constructor_.call(this, coord, edges);\n};\n","import EdgeEndBundleStar from './EdgeEndBundleStar';\nimport RelateNode from './RelateNode';\nimport NodeFactory from '../../geomgraph/NodeFactory';\nexport default class RelateNodeFactory extends NodeFactory {\n\tconstructor() {\n\t\tsuper();\n\t\tRelateNodeFactory.constructor_.apply(this, arguments);\n\t}\n\tcreateNode(coord) {\n\t\treturn new RelateNode(coord, new EdgeEndBundleStar());\n\t}\n\tgetClass() {\n\t\treturn RelateNodeFactory;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nRelateNodeFactory.constructor_ = function () {};\n","import PointLocator from '../../algorithm/PointLocator';\nimport Location from '../../geom/Location';\nimport IntersectionMatrix from '../../geom/IntersectionMatrix';\nimport EdgeEndBuilder from './EdgeEndBuilder';\nimport NodeMap from '../../geomgraph/NodeMap';\nimport RelateNodeFactory from './RelateNodeFactory';\nimport ArrayList from '../../../../../java/util/ArrayList';\nimport RobustLineIntersector from '../../algorithm/RobustLineIntersector';\nimport Assert from '../../util/Assert';\nexport default class RelateComputer {\n\tconstructor() {\n\t\tRelateComputer.constructor_.apply(this, arguments);\n\t}\n\tinsertEdgeEnds(ee) {\n\t\tfor (var i = ee.iterator(); i.hasNext(); ) {\n\t\t\tvar e = i.next();\n\t\t\tthis._nodes.add(e);\n\t\t}\n\t}\n\tcomputeProperIntersectionIM(intersector, im) {\n\t\tvar dimA = this._arg[0].getGeometry().getDimension();\n\t\tvar dimB = this._arg[1].getGeometry().getDimension();\n\t\tvar hasProper = intersector.hasProperIntersection();\n\t\tvar hasProperInterior = intersector.hasProperInteriorIntersection();\n\t\tif (dimA === 2 && dimB === 2) {\n\t\t\tif (hasProper) im.setAtLeast(\"212101212\");\n\t\t} else if (dimA === 2 && dimB === 1) {\n\t\t\tif (hasProper) im.setAtLeast(\"FFF0FFFF2\");\n\t\t\tif (hasProperInterior) im.setAtLeast(\"1FFFFF1FF\");\n\t\t} else if (dimA === 1 && dimB === 2) {\n\t\t\tif (hasProper) im.setAtLeast(\"F0FFFFFF2\");\n\t\t\tif (hasProperInterior) im.setAtLeast(\"1F1FFFFFF\");\n\t\t} else if (dimA === 1 && dimB === 1) {\n\t\t\tif (hasProperInterior) im.setAtLeast(\"0FFFFFFFF\");\n\t\t}\n\t}\n\tlabelIsolatedEdges(thisIndex, targetIndex) {\n\t\tfor (var ei = this._arg[thisIndex].getEdgeIterator(); ei.hasNext(); ) {\n\t\t\tvar e = ei.next();\n\t\t\tif (e.isIsolated()) {\n\t\t\t\tthis.labelIsolatedEdge(e, targetIndex, this._arg[targetIndex].getGeometry());\n\t\t\t\tthis._isolatedEdges.add(e);\n\t\t\t}\n\t\t}\n\t}\n\tlabelIsolatedEdge(e, targetIndex, target) {\n\t\tif (target.getDimension() > 0) {\n\t\t\tvar loc = this._ptLocator.locate(e.getCoordinate(), target);\n\t\t\te.getLabel().setAllLocations(targetIndex, loc);\n\t\t} else {\n\t\t\te.getLabel().setAllLocations(targetIndex, Location.EXTERIOR);\n\t\t}\n\t}\n\tcomputeIM() {\n\t\tvar im = new IntersectionMatrix();\n\t\tim.set(Location.EXTERIOR, Location.EXTERIOR, 2);\n\t\tif (!this._arg[0].getGeometry().getEnvelopeInternal().intersects(this._arg[1].getGeometry().getEnvelopeInternal())) {\n\t\t\tthis.computeDisjointIM(im);\n\t\t\treturn im;\n\t\t}\n\t\tthis._arg[0].computeSelfNodes(this._li, false);\n\t\tthis._arg[1].computeSelfNodes(this._li, false);\n\t\tvar intersector = this._arg[0].computeEdgeIntersections(this._arg[1], this._li, false);\n\t\tthis.computeIntersectionNodes(0);\n\t\tthis.computeIntersectionNodes(1);\n\t\tthis.copyNodesAndLabels(0);\n\t\tthis.copyNodesAndLabels(1);\n\t\tthis.labelIsolatedNodes();\n\t\tthis.computeProperIntersectionIM(intersector, im);\n\t\tvar eeBuilder = new EdgeEndBuilder();\n\t\tvar ee0 = eeBuilder.computeEdgeEnds(this._arg[0].getEdgeIterator());\n\t\tthis.insertEdgeEnds(ee0);\n\t\tvar ee1 = eeBuilder.computeEdgeEnds(this._arg[1].getEdgeIterator());\n\t\tthis.insertEdgeEnds(ee1);\n\t\tthis.labelNodeEdges();\n\t\tthis.labelIsolatedEdges(0, 1);\n\t\tthis.labelIsolatedEdges(1, 0);\n\t\tthis.updateIM(im);\n\t\treturn im;\n\t}\n\tlabelNodeEdges() {\n\t\tfor (var ni = this._nodes.iterator(); ni.hasNext(); ) {\n\t\t\tvar node = ni.next();\n\t\t\tnode.getEdges().computeLabelling(this._arg);\n\t\t}\n\t}\n\tcopyNodesAndLabels(argIndex) {\n\t\tfor (var i = this._arg[argIndex].getNodeIterator(); i.hasNext(); ) {\n\t\t\tvar graphNode = i.next();\n\t\t\tvar newNode = this._nodes.addNode(graphNode.getCoordinate());\n\t\t\tnewNode.setLabel(argIndex, graphNode.getLabel().getLocation(argIndex));\n\t\t}\n\t}\n\tlabelIntersectionNodes(argIndex) {\n\t\tfor (var i = this._arg[argIndex].getEdgeIterator(); i.hasNext(); ) {\n\t\t\tvar e = i.next();\n\t\t\tvar eLoc = e.getLabel().getLocation(argIndex);\n\t\t\tfor (var eiIt = e.getEdgeIntersectionList().iterator(); eiIt.hasNext(); ) {\n\t\t\t\tvar ei = eiIt.next();\n\t\t\t\tvar n = this._nodes.find(ei.coord);\n\t\t\t\tif (n.getLabel().isNull(argIndex)) {\n\t\t\t\t\tif (eLoc === Location.BOUNDARY) n.setLabelBoundary(argIndex); else n.setLabel(argIndex, Location.INTERIOR);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tlabelIsolatedNode(n, targetIndex) {\n\t\tvar loc = this._ptLocator.locate(n.getCoordinate(), this._arg[targetIndex].getGeometry());\n\t\tn.getLabel().setAllLocations(targetIndex, loc);\n\t}\n\tcomputeIntersectionNodes(argIndex) {\n\t\tfor (var i = this._arg[argIndex].getEdgeIterator(); i.hasNext(); ) {\n\t\t\tvar e = i.next();\n\t\t\tvar eLoc = e.getLabel().getLocation(argIndex);\n\t\t\tfor (var eiIt = e.getEdgeIntersectionList().iterator(); eiIt.hasNext(); ) {\n\t\t\t\tvar ei = eiIt.next();\n\t\t\t\tvar n = this._nodes.addNode(ei.coord);\n\t\t\t\tif (eLoc === Location.BOUNDARY) n.setLabelBoundary(argIndex); else {\n\t\t\t\t\tif (n.getLabel().isNull(argIndex)) n.setLabel(argIndex, Location.INTERIOR);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tlabelIsolatedNodes() {\n\t\tfor (var ni = this._nodes.iterator(); ni.hasNext(); ) {\n\t\t\tvar n = ni.next();\n\t\t\tvar label = n.getLabel();\n\t\t\tAssert.isTrue(label.getGeometryCount() > 0, \"node with empty label found\");\n\t\t\tif (n.isIsolated()) {\n\t\t\t\tif (label.isNull(0)) this.labelIsolatedNode(n, 0); else this.labelIsolatedNode(n, 1);\n\t\t\t}\n\t\t}\n\t}\n\tupdateIM(im) {\n\t\tfor (var ei = this._isolatedEdges.iterator(); ei.hasNext(); ) {\n\t\t\tvar e = ei.next();\n\t\t\te.updateIM(im);\n\t\t}\n\t\tfor (var ni = this._nodes.iterator(); ni.hasNext(); ) {\n\t\t\tvar node = ni.next();\n\t\t\tnode.updateIM(im);\n\t\t\tnode.updateIMFromEdges(im);\n\t\t}\n\t}\n\tcomputeDisjointIM(im) {\n\t\tvar ga = this._arg[0].getGeometry();\n\t\tif (!ga.isEmpty()) {\n\t\t\tim.set(Location.INTERIOR, Location.EXTERIOR, ga.getDimension());\n\t\t\tim.set(Location.BOUNDARY, Location.EXTERIOR, ga.getBoundaryDimension());\n\t\t}\n\t\tvar gb = this._arg[1].getGeometry();\n\t\tif (!gb.isEmpty()) {\n\t\t\tim.set(Location.EXTERIOR, Location.INTERIOR, gb.getDimension());\n\t\t\tim.set(Location.EXTERIOR, Location.BOUNDARY, gb.getBoundaryDimension());\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn RelateComputer;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nRelateComputer.constructor_ = function () {\n\tthis._li = new RobustLineIntersector();\n\tthis._ptLocator = new PointLocator();\n\tthis._arg = null;\n\tthis._nodes = new NodeMap(new RelateNodeFactory());\n\tthis._im = null;\n\tthis._isolatedEdges = new ArrayList();\n\tthis._invalidPoint = null;\n\tlet arg = arguments[0];\n\tthis._arg = arg;\n};\n","import LineString from '../../geom/LineString';\nimport Coordinate from '../../geom/Coordinate';\nimport Point from '../../geom/Point';\nimport Polygon from '../../geom/Polygon';\nexport default class RectangleContains {\n\tconstructor() {\n\t\tRectangleContains.constructor_.apply(this, arguments);\n\t}\n\tstatic contains(rectangle, b) {\n\t\tvar rc = new RectangleContains(rectangle);\n\t\treturn rc.contains(b);\n\t}\n\tisContainedInBoundary(geom) {\n\t\tif (geom instanceof Polygon) return false;\n\t\tif (geom instanceof Point) return this.isPointContainedInBoundary(geom);\n\t\tif (geom instanceof LineString) return this.isLineStringContainedInBoundary(geom);\n\t\tfor (var i = 0; i < geom.getNumGeometries(); i++) {\n\t\t\tvar comp = geom.getGeometryN(i);\n\t\t\tif (!this.isContainedInBoundary(comp)) return false;\n\t\t}\n\t\treturn true;\n\t}\n\tisLineSegmentContainedInBoundary(p0, p1) {\n\t\tif (p0.equals(p1)) return this.isPointContainedInBoundary(p0);\n\t\tif (p0.x === p1.x) {\n\t\t\tif (p0.x === this._rectEnv.getMinX() || p0.x === this._rectEnv.getMaxX()) return true;\n\t\t} else if (p0.y === p1.y) {\n\t\t\tif (p0.y === this._rectEnv.getMinY() || p0.y === this._rectEnv.getMaxY()) return true;\n\t\t}\n\t\treturn false;\n\t}\n\tisLineStringContainedInBoundary(line) {\n\t\tvar seq = line.getCoordinateSequence();\n\t\tvar p0 = new Coordinate();\n\t\tvar p1 = new Coordinate();\n\t\tfor (var i = 0; i < seq.size() - 1; i++) {\n\t\t\tseq.getCoordinate(i, p0);\n\t\t\tseq.getCoordinate(i + 1, p1);\n\t\t\tif (!this.isLineSegmentContainedInBoundary(p0, p1)) return false;\n\t\t}\n\t\treturn true;\n\t}\n\tisPointContainedInBoundary() {\n\t\tif (arguments[0] instanceof Point) {\n\t\t\tlet point = arguments[0];\n\t\t\treturn this.isPointContainedInBoundary(point.getCoordinate());\n\t\t} else if (arguments[0] instanceof Coordinate) {\n\t\t\tlet pt = arguments[0];\n\t\t\treturn pt.x === this._rectEnv.getMinX() || pt.x === this._rectEnv.getMaxX() || pt.y === this._rectEnv.getMinY() || pt.y === this._rectEnv.getMaxY();\n\t\t}\n\t}\n\tcontains(geom) {\n\t\tif (!this._rectEnv.contains(geom.getEnvelopeInternal())) return false;\n\t\tif (this.isContainedInBoundary(geom)) return false;\n\t\treturn true;\n\t}\n\tgetClass() {\n\t\treturn RectangleContains;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nRectangleContains.constructor_ = function () {\n\tthis._rectEnv = null;\n\tlet rectangle = arguments[0];\n\tthis._rectEnv = rectangle.getEnvelopeInternal();\n};\n","import Coordinate from '../geom/Coordinate';\nimport RobustLineIntersector from './RobustLineIntersector';\nimport Envelope from '../geom/Envelope';\nexport default class RectangleLineIntersector {\n\tconstructor() {\n\t\tRectangleLineIntersector.constructor_.apply(this, arguments);\n\t}\n\tintersects(p0, p1) {\n\t\tvar segEnv = new Envelope(p0, p1);\n\t\tif (!this._rectEnv.intersects(segEnv)) return false;\n\t\tif (this._rectEnv.intersects(p0)) return true;\n\t\tif (this._rectEnv.intersects(p1)) return true;\n\t\tif (p0.compareTo(p1) > 0) {\n\t\t\tvar tmp = p0;\n\t\t\tp0 = p1;\n\t\t\tp1 = tmp;\n\t\t}\n\t\tvar isSegUpwards = false;\n\t\tif (p1.y > p0.y) isSegUpwards = true;\n\t\tif (isSegUpwards) {\n\t\t\tthis._li.computeIntersection(p0, p1, this._diagDown0, this._diagDown1);\n\t\t} else {\n\t\t\tthis._li.computeIntersection(p0, p1, this._diagUp0, this._diagUp1);\n\t\t}\n\t\tif (this._li.hasIntersection()) return true;\n\t\treturn false;\n\t}\n\tgetClass() {\n\t\treturn RectangleLineIntersector;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nRectangleLineIntersector.constructor_ = function () {\n\tthis._li = new RobustLineIntersector();\n\tthis._rectEnv = null;\n\tthis._diagUp0 = null;\n\tthis._diagUp1 = null;\n\tthis._diagDown0 = null;\n\tthis._diagDown1 = null;\n\tlet rectEnv = arguments[0];\n\tthis._rectEnv = rectEnv;\n\tthis._diagUp0 = new Coordinate(rectEnv.getMinX(), rectEnv.getMinY());\n\tthis._diagUp1 = new Coordinate(rectEnv.getMaxX(), rectEnv.getMaxY());\n\tthis._diagDown0 = new Coordinate(rectEnv.getMinX(), rectEnv.getMaxY());\n\tthis._diagDown1 = new Coordinate(rectEnv.getMaxX(), rectEnv.getMinY());\n};\n","import GeometryCollection from '../GeometryCollection';\nexport default class ShortCircuitedGeometryVisitor {\n\tconstructor() {\n\t\tShortCircuitedGeometryVisitor.constructor_.apply(this, arguments);\n\t}\n\tapplyTo(geom) {\n\t\tfor (var i = 0; i < geom.getNumGeometries() && !this._isDone; i++) {\n\t\t\tvar element = geom.getGeometryN(i);\n\t\t\tif (!(element instanceof GeometryCollection)) {\n\t\t\t\tthis.visit(element);\n\t\t\t\tif (this.isDone()) {\n\t\t\t\t\tthis._isDone = true;\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t} else this.applyTo(element);\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn ShortCircuitedGeometryVisitor;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nShortCircuitedGeometryVisitor.constructor_ = function () {\n\tthis._isDone = false;\n};\n","import Coordinate from '../../geom/Coordinate';\nimport Polygon from '../../geom/Polygon';\nimport RectangleLineIntersector from '../../algorithm/RectangleLineIntersector';\nimport ShortCircuitedGeometryVisitor from '../../geom/util/ShortCircuitedGeometryVisitor';\nimport SimplePointInAreaLocator from '../../algorithm/locate/SimplePointInAreaLocator';\nimport LinearComponentExtracter from '../../geom/util/LinearComponentExtracter';\nexport default class RectangleIntersects {\n\tconstructor() {\n\t\tRectangleIntersects.constructor_.apply(this, arguments);\n\t}\n\tstatic intersects(rectangle, b) {\n\t\tvar rp = new RectangleIntersects(rectangle);\n\t\treturn rp.intersects(b);\n\t}\n\tintersects(geom) {\n\t\tif (!this._rectEnv.intersects(geom.getEnvelopeInternal())) return false;\n\t\tvar visitor = new EnvelopeIntersectsVisitor(this._rectEnv);\n\t\tvisitor.applyTo(geom);\n\t\tif (visitor.intersects()) return true;\n\t\tvar ecpVisitor = new GeometryContainsPointVisitor(this._rectangle);\n\t\tecpVisitor.applyTo(geom);\n\t\tif (ecpVisitor.containsPoint()) return true;\n\t\tvar riVisitor = new RectangleIntersectsSegmentVisitor(this._rectangle);\n\t\triVisitor.applyTo(geom);\n\t\tif (riVisitor.intersects()) return true;\n\t\treturn false;\n\t}\n\tgetClass() {\n\t\treturn RectangleIntersects;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nRectangleIntersects.constructor_ = function () {\n\tthis._rectangle = null;\n\tthis._rectEnv = null;\n\tlet rectangle = arguments[0];\n\tthis._rectangle = rectangle;\n\tthis._rectEnv = rectangle.getEnvelopeInternal();\n};\nclass EnvelopeIntersectsVisitor extends ShortCircuitedGeometryVisitor {\n\tconstructor() {\n\t\tsuper();\n\t\tEnvelopeIntersectsVisitor.constructor_.apply(this, arguments);\n\t}\n\tisDone() {\n\t\treturn this._intersects === true;\n\t}\n\tvisit(element) {\n\t\tvar elementEnv = element.getEnvelopeInternal();\n\t\tif (!this._rectEnv.intersects(elementEnv)) {\n\t\t\treturn null;\n\t\t}\n\t\tif (this._rectEnv.contains(elementEnv)) {\n\t\t\tthis._intersects = true;\n\t\t\treturn null;\n\t\t}\n\t\tif (elementEnv.getMinX() >= this._rectEnv.getMinX() && elementEnv.getMaxX() <= this._rectEnv.getMaxX()) {\n\t\t\tthis._intersects = true;\n\t\t\treturn null;\n\t\t}\n\t\tif (elementEnv.getMinY() >= this._rectEnv.getMinY() && elementEnv.getMaxY() <= this._rectEnv.getMaxY()) {\n\t\t\tthis._intersects = true;\n\t\t\treturn null;\n\t\t}\n\t}\n\tintersects() {\n\t\treturn this._intersects;\n\t}\n\tgetClass() {\n\t\treturn EnvelopeIntersectsVisitor;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nEnvelopeIntersectsVisitor.constructor_ = function () {\n\tthis._rectEnv = null;\n\tthis._intersects = false;\n\tlet rectEnv = arguments[0];\n\tthis._rectEnv = rectEnv;\n};\nclass GeometryContainsPointVisitor extends ShortCircuitedGeometryVisitor {\n\tconstructor() {\n\t\tsuper();\n\t\tGeometryContainsPointVisitor.constructor_.apply(this, arguments);\n\t}\n\tisDone() {\n\t\treturn this._containsPoint === true;\n\t}\n\tvisit(geom) {\n\t\tif (!(geom instanceof Polygon)) return null;\n\t\tvar elementEnv = geom.getEnvelopeInternal();\n\t\tif (!this._rectEnv.intersects(elementEnv)) return null;\n\t\tvar rectPt = new Coordinate();\n\t\tfor (var i = 0; i < 4; i++) {\n\t\t\tthis._rectSeq.getCoordinate(i, rectPt);\n\t\t\tif (!elementEnv.contains(rectPt)) continue;\n\t\t\tif (SimplePointInAreaLocator.containsPointInPolygon(rectPt, geom)) {\n\t\t\t\tthis._containsPoint = true;\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t}\n\tcontainsPoint() {\n\t\treturn this._containsPoint;\n\t}\n\tgetClass() {\n\t\treturn GeometryContainsPointVisitor;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nGeometryContainsPointVisitor.constructor_ = function () {\n\tthis._rectSeq = null;\n\tthis._rectEnv = null;\n\tthis._containsPoint = false;\n\tlet rectangle = arguments[0];\n\tthis._rectSeq = rectangle.getExteriorRing().getCoordinateSequence();\n\tthis._rectEnv = rectangle.getEnvelopeInternal();\n};\nclass RectangleIntersectsSegmentVisitor extends ShortCircuitedGeometryVisitor {\n\tconstructor() {\n\t\tsuper();\n\t\tRectangleIntersectsSegmentVisitor.constructor_.apply(this, arguments);\n\t}\n\tintersects() {\n\t\treturn this._hasIntersection;\n\t}\n\tisDone() {\n\t\treturn this._hasIntersection === true;\n\t}\n\tvisit(geom) {\n\t\tvar elementEnv = geom.getEnvelopeInternal();\n\t\tif (!this._rectEnv.intersects(elementEnv)) return null;\n\t\tvar lines = LinearComponentExtracter.getLines(geom);\n\t\tthis.checkIntersectionWithLineStrings(lines);\n\t}\n\tcheckIntersectionWithLineStrings(lines) {\n\t\tfor (var i = lines.iterator(); i.hasNext(); ) {\n\t\t\tvar testLine = i.next();\n\t\t\tthis.checkIntersectionWithSegments(testLine);\n\t\t\tif (this._hasIntersection) return null;\n\t\t}\n\t}\n\tcheckIntersectionWithSegments(testLine) {\n\t\tvar seq1 = testLine.getCoordinateSequence();\n\t\tfor (var j = 1; j < seq1.size(); j++) {\n\t\t\tseq1.getCoordinate(j - 1, this._p0);\n\t\t\tseq1.getCoordinate(j, this._p1);\n\t\t\tif (this._rectIntersector.intersects(this._p0, this._p1)) {\n\t\t\t\tthis._hasIntersection = true;\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn RectangleIntersectsSegmentVisitor;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nRectangleIntersectsSegmentVisitor.constructor_ = function () {\n\tthis._rectEnv = null;\n\tthis._rectIntersector = null;\n\tthis._hasIntersection = false;\n\tthis._p0 = new Coordinate();\n\tthis._p1 = new Coordinate();\n\tlet rectangle = arguments[0];\n\tthis._rectEnv = rectangle.getEnvelopeInternal();\n\tthis._rectIntersector = new RectangleLineIntersector(this._rectEnv);\n};\n","import RelateComputer from './RelateComputer';\nimport GeometryGraphOperation from '../GeometryGraphOperation';\nimport RectangleContains from '../predicate/RectangleContains';\nimport RectangleIntersects from '../predicate/RectangleIntersects';\nexport default class RelateOp extends GeometryGraphOperation {\n\tconstructor() {\n\t\tsuper();\n\t\tRelateOp.constructor_.apply(this, arguments);\n\t}\n\tstatic covers(g1, g2) {\n\t\tif (g2.getDimension() === 2 && g1.getDimension() < 2) {\n\t\t\treturn false;\n\t\t}\n\t\tif (g2.getDimension() === 1 && g1.getDimension() < 1 && g2.getLength() > 0.0) {\n\t\t\treturn false;\n\t\t}\n\t\tif (!g1.getEnvelopeInternal().covers(g2.getEnvelopeInternal())) return false;\n\t\tif (g1.isRectangle()) {\n\t\t\treturn true;\n\t\t}\n\t\treturn new RelateOp(g1, g2).getIntersectionMatrix().isCovers();\n\t}\n\tstatic intersects(g1, g2) {\n\t\tif (!g1.getEnvelopeInternal().intersects(g2.getEnvelopeInternal())) return false;\n\t\tif (g1.isRectangle()) {\n\t\t\treturn RectangleIntersects.intersects(g1, g2);\n\t\t}\n\t\tif (g2.isRectangle()) {\n\t\t\treturn RectangleIntersects.intersects(g2, g1);\n\t\t}\n\t\tif (g1.isGeometryCollection() || g2.isGeometryCollection()) {\n\t\t\tvar r = false;\n\t\t\tfor (var i = 0; i < g1.getNumGeometries(); i++) {\n\t\t\t\tfor (var j = 0; j < g2.getNumGeometries(); j++) {\n\t\t\t\t\tif (g1.getGeometryN(i).intersects(g2.getGeometryN(j))) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn new RelateOp(g1, g2).getIntersectionMatrix().isIntersects();\n\t}\n\tstatic touches(g1, g2) {\n\t\tif (!g1.getEnvelopeInternal().intersects(g2.getEnvelopeInternal())) return false;\n\t\treturn new RelateOp(g1, g2).getIntersectionMatrix().isTouches(g1.getDimension(), g2.getDimension());\n\t}\n\tstatic relate() {\n\t\tif (arguments.length === 2) {\n\t\t\tlet a = arguments[0], b = arguments[1];\n\t\t\tvar relOp = new RelateOp(a, b);\n\t\t\tvar im = relOp.getIntersectionMatrix();\n\t\t\treturn im;\n\t\t} else if (arguments.length === 3) {\n\t\t\tlet a = arguments[0], b = arguments[1], boundaryNodeRule = arguments[2];\n\t\t\tvar relOp = new RelateOp(a, b, boundaryNodeRule);\n\t\t\tvar im = relOp.getIntersectionMatrix();\n\t\t\treturn im;\n\t\t}\n\t}\n\tstatic overlaps(g1, g2) {\n\t\tif (!g1.getEnvelopeInternal().intersects(g2.getEnvelopeInternal())) return false;\n\t\treturn new RelateOp(g1, g2).getIntersectionMatrix().isOverlaps(g1.getDimension(), g2.getDimension());\n\t}\n\tstatic crosses(g1, g2) {\n\t\tif (!g1.getEnvelopeInternal().intersects(g2.getEnvelopeInternal())) return false;\n\t\treturn new RelateOp(g1, g2).getIntersectionMatrix().isCrosses(g1.getDimension(), g2.getDimension());\n\t}\n\tstatic contains(g1, g2) {\n\t\tif (g2.getDimension() === 2 && g1.getDimension() < 2) {\n\t\t\treturn false;\n\t\t}\n\t\tif (g2.getDimension() === 1 && g1.getDimension() < 1 && g2.getLength() > 0.0) {\n\t\t\treturn false;\n\t\t}\n\t\tif (!g1.getEnvelopeInternal().contains(g2.getEnvelopeInternal())) return false;\n\t\tif (g1.isRectangle()) {\n\t\t\treturn RectangleContains.contains(g1, g2);\n\t\t}\n\t\treturn new RelateOp(g1, g2).getIntersectionMatrix().isContains();\n\t}\n\tgetIntersectionMatrix() {\n\t\treturn this._relate.computeIM();\n\t}\n\tgetClass() {\n\t\treturn RelateOp;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nRelateOp.constructor_ = function () {\n\tthis._relate = null;\n\tif (arguments.length === 2) {\n\t\tlet g0 = arguments[0], g1 = arguments[1];\n\t\tGeometryGraphOperation.constructor_.call(this, g0, g1);\n\t\tthis._relate = new RelateComputer(this._arg);\n\t} else if (arguments.length === 3) {\n\t\tlet g0 = arguments[0], g1 = arguments[1], boundaryNodeRule = arguments[2];\n\t\tGeometryGraphOperation.constructor_.call(this, g0, g1, boundaryNodeRule);\n\t\tthis._relate = new RelateComputer(this._arg);\n\t}\n};\n","import ArrayList from '../../../../../java/util/ArrayList';\nexport default class GeometryCombiner {\n\tconstructor() {\n\t\tGeometryCombiner.constructor_.apply(this, arguments);\n\t}\n\tstatic combine() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet geoms = arguments[0];\n\t\t\tvar combiner = new GeometryCombiner(geoms);\n\t\t\treturn combiner.combine();\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet g0 = arguments[0], g1 = arguments[1];\n\t\t\tvar combiner = new GeometryCombiner(GeometryCombiner.createList(g0, g1));\n\t\t\treturn combiner.combine();\n\t\t} else if (arguments.length === 3) {\n\t\t\tlet g0 = arguments[0], g1 = arguments[1], g2 = arguments[2];\n\t\t\tvar combiner = new GeometryCombiner(GeometryCombiner.createList(g0, g1, g2));\n\t\t\treturn combiner.combine();\n\t\t}\n\t}\n\tstatic extractFactory(geoms) {\n\t\tif (geoms.isEmpty()) return null;\n\t\treturn geoms.iterator().next().getFactory();\n\t}\n\tstatic createList() {\n\t\tif (arguments.length === 2) {\n\t\t\tlet obj0 = arguments[0], obj1 = arguments[1];\n\t\t\tvar list = new ArrayList();\n\t\t\tlist.add(obj0);\n\t\t\tlist.add(obj1);\n\t\t\treturn list;\n\t\t} else if (arguments.length === 3) {\n\t\t\tlet obj0 = arguments[0], obj1 = arguments[1], obj2 = arguments[2];\n\t\t\tvar list = new ArrayList();\n\t\t\tlist.add(obj0);\n\t\t\tlist.add(obj1);\n\t\t\tlist.add(obj2);\n\t\t\treturn list;\n\t\t}\n\t}\n\textractElements(geom, elems) {\n\t\tif (geom === null) return null;\n\t\tfor (var i = 0; i < geom.getNumGeometries(); i++) {\n\t\t\tvar elemGeom = geom.getGeometryN(i);\n\t\t\tif (this._skipEmpty && elemGeom.isEmpty()) continue;\n\t\t\telems.add(elemGeom);\n\t\t}\n\t}\n\tcombine() {\n\t\tvar elems = new ArrayList();\n\t\tfor (var i = this._inputGeoms.iterator(); i.hasNext(); ) {\n\t\t\tvar g = i.next();\n\t\t\tthis.extractElements(g, elems);\n\t\t}\n\t\tif (elems.size() === 0) {\n\t\t\tif (this._geomFactory !== null) {\n\t\t\t\treturn this._geomFactory.createGeometryCollection();\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t\treturn this._geomFactory.buildGeometry(elems);\n\t}\n\tgetClass() {\n\t\treturn GeometryCombiner;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nGeometryCombiner.constructor_ = function () {\n\tthis._geomFactory = null;\n\tthis._skipEmpty = false;\n\tthis._inputGeoms = null;\n\tlet geoms = arguments[0];\n\tthis._geomFactory = GeometryCombiner.extractFactory(geoms);\n\tthis._inputGeoms = geoms;\n};\n","import PointLocator from '../../algorithm/PointLocator';\nimport Location from '../../geom/Location';\nimport TreeSet from '../../../../../java/util/TreeSet';\nimport GeometryCombiner from '../../geom/util/GeometryCombiner';\nimport CoordinateArrays from '../../geom/CoordinateArrays';\nexport default class PointGeometryUnion {\n\tconstructor() {\n\t\tPointGeometryUnion.constructor_.apply(this, arguments);\n\t}\n\tstatic union(pointGeom, otherGeom) {\n\t\tvar unioner = new PointGeometryUnion(pointGeom, otherGeom);\n\t\treturn unioner.union();\n\t}\n\tunion() {\n\t\tvar locater = new PointLocator();\n\t\tvar exteriorCoords = new TreeSet();\n\t\tfor (var i = 0; i < this._pointGeom.getNumGeometries(); i++) {\n\t\t\tvar point = this._pointGeom.getGeometryN(i);\n\t\t\tvar coord = point.getCoordinate();\n\t\t\tvar loc = locater.locate(coord, this._otherGeom);\n\t\t\tif (loc === Location.EXTERIOR) exteriorCoords.add(coord);\n\t\t}\n\t\tif (exteriorCoords.size() === 0) return this._otherGeom;\n\t\tvar ptComp = null;\n\t\tvar coords = CoordinateArrays.toCoordinateArray(exteriorCoords);\n\t\tif (coords.length === 1) {\n\t\t\tptComp = this._geomFact.createPoint(coords[0]);\n\t\t} else {\n\t\t\tptComp = this._geomFact.createMultiPointFromCoords(coords);\n\t\t}\n\t\treturn GeometryCombiner.combine(ptComp, this._otherGeom);\n\t}\n\tgetClass() {\n\t\treturn PointGeometryUnion;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nPointGeometryUnion.constructor_ = function () {\n\tthis._pointGeom = null;\n\tthis._otherGeom = null;\n\tthis._geomFact = null;\n\tlet pointGeom = arguments[0], otherGeom = arguments[1];\n\tthis._pointGeom = pointGeom;\n\tthis._otherGeom = otherGeom;\n\tthis._geomFact = otherGeom.getFactory();\n};\n","import Geometry from '../Geometry';\nimport hasInterface from '../../../../../hasInterface';\nimport GeometryCollection from '../GeometryCollection';\nimport ArrayList from '../../../../../java/util/ArrayList';\nimport GeometryFilter from '../GeometryFilter';\nimport List from '../../../../../java/util/List';\nexport default class GeometryExtracter {\n\tconstructor() {\n\t\tGeometryExtracter.constructor_.apply(this, arguments);\n\t}\n\tstatic isOfType(geom, geometryType) {\n\t\tif (geom.getGeometryType() === geometryType) return true;\n\t\tif (geometryType === Geometry.TYPENAME_LINESTRING && geom.getGeometryType() === Geometry.TYPENAME_LINEARRING) return true;\n\t\treturn false;\n\t}\n\tstatic extract() {\n\t\tif (arguments.length === 2) {\n\t\t\tlet geom = arguments[0], geometryType = arguments[1];\n\t\t\treturn GeometryExtracter.extract(geom, geometryType, new ArrayList());\n\t\t} else if (arguments.length === 3) {\n\t\t\tif (hasInterface(arguments[2], List) && (arguments[0] instanceof Geometry && typeof arguments[1] === \"string\")) {\n\t\t\t\tlet geom = arguments[0], geometryType = arguments[1], list = arguments[2];\n\t\t\t\tif (geom.getGeometryType() === geometryType) {\n\t\t\t\t\tlist.add(geom);\n\t\t\t\t} else if (geom instanceof GeometryCollection) {\n\t\t\t\t\tgeom.apply(new GeometryExtracter(geometryType, list));\n\t\t\t\t}\n\t\t\t\treturn list;\n\t\t\t} else if (hasInterface(arguments[2], List) && (arguments[0] instanceof Geometry && arguments[1] instanceof Class)) {\n\t\t\t\tlet geom = arguments[0], clz = arguments[1], list = arguments[2];\n\t\t\t\treturn GeometryExtracter.extract(geom, GeometryExtracter.toGeometryType(clz), list);\n\t\t\t}\n\t\t}\n\t}\n\tfilter(geom) {\n\t\tif (this._geometryType === null || GeometryExtracter.isOfType(geom, this._geometryType)) this._comps.add(geom);\n\t}\n\tgetClass() {\n\t\treturn GeometryExtracter;\n\t}\n\tget interfaces_() {\n\t\treturn [GeometryFilter];\n\t}\n}\nGeometryExtracter.constructor_ = function () {\n\tthis._geometryType = null;\n\tthis._comps = null;\n\tlet geometryType = arguments[0], comps = arguments[1];\n\tthis._geometryType = geometryType;\n\tthis._comps = comps;\n};\n","import PolygonExtracter from '../../geom/util/PolygonExtracter';\nimport STRtree from '../../index/strtree/STRtree';\nimport Geometry from '../../geom/Geometry';\nimport hasInterface from '../../../../../hasInterface';\nimport GeometryFactory from '../../geom/GeometryFactory';\nimport GeometryCombiner from '../../geom/util/GeometryCombiner';\nimport Polygonal from '../../geom/Polygonal';\nimport ArrayList from '../../../../../java/util/ArrayList';\nimport List from '../../../../../java/util/List';\nexport default class CascadedPolygonUnion {\n\tconstructor() {\n\t\tCascadedPolygonUnion.constructor_.apply(this, arguments);\n\t}\n\tstatic restrictToPolygons(g) {\n\t\tif (hasInterface(g, Polygonal)) {\n\t\t\treturn g;\n\t\t}\n\t\tvar polygons = PolygonExtracter.getPolygons(g);\n\t\tif (polygons.size() === 1) return polygons.get(0);\n\t\treturn g.getFactory().createMultiPolygon(GeometryFactory.toPolygonArray(polygons));\n\t}\n\tstatic getGeometry(list, index) {\n\t\tif (index >= list.size()) return null;\n\t\treturn list.get(index);\n\t}\n\tstatic union(polys) {\n\t\tvar op = new CascadedPolygonUnion(polys);\n\t\treturn op.union();\n\t}\n\treduceToGeometries(geomTree) {\n\t\tvar geoms = new ArrayList();\n\t\tfor (var i = geomTree.iterator(); i.hasNext(); ) {\n\t\t\tvar o = i.next();\n\t\t\tvar geom = null;\n\t\t\tif (hasInterface(o, List)) {\n\t\t\t\tgeom = this.unionTree(o);\n\t\t\t} else if (o instanceof Geometry) {\n\t\t\t\tgeom = o;\n\t\t\t}\n\t\t\tgeoms.add(geom);\n\t\t}\n\t\treturn geoms;\n\t}\n\textractByEnvelope(env, geom, disjointGeoms) {\n\t\tvar intersectingGeoms = new ArrayList();\n\t\tfor (var i = 0; i < geom.getNumGeometries(); i++) {\n\t\t\tvar elem = geom.getGeometryN(i);\n\t\t\tif (elem.getEnvelopeInternal().intersects(env)) intersectingGeoms.add(elem); else disjointGeoms.add(elem);\n\t\t}\n\t\treturn this._geomFactory.buildGeometry(intersectingGeoms);\n\t}\n\tunionOptimized(g0, g1) {\n\t\tvar g0Env = g0.getEnvelopeInternal();\n\t\tvar g1Env = g1.getEnvelopeInternal();\n\t\tif (!g0Env.intersects(g1Env)) {\n\t\t\tvar combo = GeometryCombiner.combine(g0, g1);\n\t\t\treturn combo;\n\t\t}\n\t\tif (g0.getNumGeometries() <= 1 && g1.getNumGeometries() <= 1) return this.unionActual(g0, g1);\n\t\tvar commonEnv = g0Env.intersection(g1Env);\n\t\treturn this.unionUsingEnvelopeIntersection(g0, g1, commonEnv);\n\t}\n\tunion() {\n\t\tif (this._inputPolys === null) throw new IllegalStateException(\"union() method cannot be called twice\");\n\t\tif (this._inputPolys.isEmpty()) return null;\n\t\tthis._geomFactory = this._inputPolys.iterator().next().getFactory();\n\t\tvar index = new STRtree(CascadedPolygonUnion.STRTREE_NODE_CAPACITY);\n\t\tfor (var i = this._inputPolys.iterator(); i.hasNext(); ) {\n\t\t\tvar item = i.next();\n\t\t\tindex.insert(item.getEnvelopeInternal(), item);\n\t\t}\n\t\tthis._inputPolys = null;\n\t\tvar itemTree = index.itemsTree();\n\t\tvar unionAll = this.unionTree(itemTree);\n\t\treturn unionAll;\n\t}\n\tbinaryUnion() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet geoms = arguments[0];\n\t\t\treturn this.binaryUnion(geoms, 0, geoms.size());\n\t\t} else if (arguments.length === 3) {\n\t\t\tlet geoms = arguments[0], start = arguments[1], end = arguments[2];\n\t\t\tif (end - start <= 1) {\n\t\t\t\tvar g0 = CascadedPolygonUnion.getGeometry(geoms, start);\n\t\t\t\treturn this.unionSafe(g0, null);\n\t\t\t} else if (end - start === 2) {\n\t\t\t\treturn this.unionSafe(CascadedPolygonUnion.getGeometry(geoms, start), CascadedPolygonUnion.getGeometry(geoms, start + 1));\n\t\t\t} else {\n\t\t\t\tvar mid = Math.trunc((end + start) / 2);\n\t\t\t\tvar g0 = this.binaryUnion(geoms, start, mid);\n\t\t\t\tvar g1 = this.binaryUnion(geoms, mid, end);\n\t\t\t\treturn this.unionSafe(g0, g1);\n\t\t\t}\n\t\t}\n\t}\n\trepeatedUnion(geoms) {\n\t\tvar union = null;\n\t\tfor (var i = geoms.iterator(); i.hasNext(); ) {\n\t\t\tvar g = i.next();\n\t\t\tif (union === null) union = g.copy(); else union = union.union(g);\n\t\t}\n\t\treturn union;\n\t}\n\tunionSafe(g0, g1) {\n\t\tif (g0 === null && g1 === null) return null;\n\t\tif (g0 === null) return g1.copy();\n\t\tif (g1 === null) return g0.copy();\n\t\treturn this.unionOptimized(g0, g1);\n\t}\n\tunionActual(g0, g1) {\n\t\treturn CascadedPolygonUnion.restrictToPolygons(g0.union(g1));\n\t}\n\tunionTree(geomTree) {\n\t\tvar geoms = this.reduceToGeometries(geomTree);\n\t\tvar union = this.binaryUnion(geoms);\n\t\treturn union;\n\t}\n\tunionUsingEnvelopeIntersection(g0, g1, common) {\n\t\tvar disjointPolys = new ArrayList();\n\t\tvar g0Int = this.extractByEnvelope(common, g0, disjointPolys);\n\t\tvar g1Int = this.extractByEnvelope(common, g1, disjointPolys);\n\t\tvar union = this.unionActual(g0Int, g1Int);\n\t\tdisjointPolys.add(union);\n\t\tvar overallUnion = GeometryCombiner.combine(disjointPolys);\n\t\treturn overallUnion;\n\t}\n\tbufferUnion() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet geoms = arguments[0];\n\t\t\tvar factory = geoms.get(0).getFactory();\n\t\t\tvar gColl = factory.buildGeometry(geoms);\n\t\t\tvar unionAll = gColl.buffer(0.0);\n\t\t\treturn unionAll;\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet g0 = arguments[0], g1 = arguments[1];\n\t\t\tvar factory = g0.getFactory();\n\t\t\tvar gColl = factory.createGeometryCollection([g0, g1]);\n\t\t\tvar unionAll = gColl.buffer(0.0);\n\t\t\treturn unionAll;\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn CascadedPolygonUnion;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nCascadedPolygonUnion.constructor_ = function () {\n\tthis._inputPolys = null;\n\tthis._geomFactory = null;\n\tlet polys = arguments[0];\n\tthis._inputPolys = polys;\n\tif (this._inputPolys === null) this._inputPolys = new ArrayList();\n};\nCascadedPolygonUnion.STRTREE_NODE_CAPACITY = 4;\n","import Geometry from '../../geom/Geometry';\nimport PointGeometryUnion from './PointGeometryUnion';\nimport hasInterface from '../../../../../hasInterface';\nimport Collection from '../../../../../java/util/Collection';\nimport SnapIfNeededOverlayOp from '../overlay/snap/SnapIfNeededOverlayOp';\nimport ArrayList from '../../../../../java/util/ArrayList';\nimport GeometryExtracter from '../../geom/util/GeometryExtracter';\nimport OverlayOp from '../overlay/OverlayOp';\nimport CascadedPolygonUnion from './CascadedPolygonUnion';\nexport default class UnaryUnionOp {\n\tconstructor() {\n\t\tUnaryUnionOp.constructor_.apply(this, arguments);\n\t}\n\tstatic union() {\n\t\tif (arguments.length === 1) {\n\t\t\tif (hasInterface(arguments[0], Collection)) {\n\t\t\t\tlet geoms = arguments[0];\n\t\t\t\tvar op = new UnaryUnionOp(geoms);\n\t\t\t\treturn op.union();\n\t\t\t} else if (arguments[0] instanceof Geometry) {\n\t\t\t\tlet geom = arguments[0];\n\t\t\t\tvar op = new UnaryUnionOp(geom);\n\t\t\t\treturn op.union();\n\t\t\t}\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet geoms = arguments[0], geomFact = arguments[1];\n\t\t\tvar op = new UnaryUnionOp(geoms, geomFact);\n\t\t\treturn op.union();\n\t\t}\n\t}\n\tunionNoOpt(g0) {\n\t\tvar empty = this._geomFact.createPoint();\n\t\treturn SnapIfNeededOverlayOp.overlayOp(g0, empty, OverlayOp.UNION);\n\t}\n\tunionWithNull(g0, g1) {\n\t\tif (g0 === null && g1 === null) return null;\n\t\tif (g1 === null) return g0;\n\t\tif (g0 === null) return g1;\n\t\treturn g0.union(g1);\n\t}\n\textract() {\n\t\tif (hasInterface(arguments[0], Collection)) {\n\t\t\tlet geoms = arguments[0];\n\t\t\tfor (var i = geoms.iterator(); i.hasNext(); ) {\n\t\t\t\tvar geom = i.next();\n\t\t\t\tthis.extract(geom);\n\t\t\t}\n\t\t} else if (arguments[0] instanceof Geometry) {\n\t\t\tlet geom = arguments[0];\n\t\t\tif (this._geomFact === null) this._geomFact = geom.getFactory();\n\t\t\tGeometryExtracter.extract(geom, Geometry.TYPENAME_POLYGON, this._polygons);\n\t\t\tGeometryExtracter.extract(geom, Geometry.TYPENAME_LINESTRING, this._lines);\n\t\t\tGeometryExtracter.extract(geom, Geometry.TYPENAME_POINT, this._points);\n\t\t}\n\t}\n\tunion() {\n\t\tif (this._geomFact === null) {\n\t\t\treturn null;\n\t\t}\n\t\tvar unionPoints = null;\n\t\tif (this._points.size() > 0) {\n\t\t\tvar ptGeom = this._geomFact.buildGeometry(this._points);\n\t\t\tunionPoints = this.unionNoOpt(ptGeom);\n\t\t}\n\t\tvar unionLines = null;\n\t\tif (this._lines.size() > 0) {\n\t\t\tvar lineGeom = this._geomFact.buildGeometry(this._lines);\n\t\t\tunionLines = this.unionNoOpt(lineGeom);\n\t\t}\n\t\tvar unionPolygons = null;\n\t\tif (this._polygons.size() > 0) {\n\t\t\tunionPolygons = CascadedPolygonUnion.union(this._polygons);\n\t\t}\n\t\tvar unionLA = this.unionWithNull(unionLines, unionPolygons);\n\t\tvar union = null;\n\t\tif (unionPoints === null) union = unionLA; else if (unionLA === null) union = unionPoints; else union = PointGeometryUnion.union(unionPoints, unionLA);\n\t\tif (union === null) return this._geomFact.createGeometryCollection();\n\t\treturn union;\n\t}\n\tgetClass() {\n\t\treturn UnaryUnionOp;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nUnaryUnionOp.constructor_ = function () {\n\tthis._polygons = new ArrayList();\n\tthis._lines = new ArrayList();\n\tthis._points = new ArrayList();\n\tthis._geomFact = null;\n\tif (arguments.length === 1) {\n\t\tif (hasInterface(arguments[0], Collection)) {\n\t\t\tlet geoms = arguments[0];\n\t\t\tthis.extract(geoms);\n\t\t} else if (arguments[0] instanceof Geometry) {\n\t\t\tlet geom = arguments[0];\n\t\t\tthis.extract(geom);\n\t\t}\n\t} else if (arguments.length === 2) {\n\t\tlet geoms = arguments[0], geomFact = arguments[1];\n\t\tthis._geomFact = geomFact;\n\t\tthis.extract(geoms);\n\t}\n};\n","import Location from '../../geom/Location';\nimport GeometryFactory from '../../geom/GeometryFactory';\nimport Position from '../../geomgraph/Position';\nimport Polygon from '../../geom/Polygon';\nimport MultiPolygon from '../../geom/MultiPolygon';\nimport MaximalEdgeRing from '../overlay/MaximalEdgeRing';\nimport OverlayNodeFactory from '../overlay/OverlayNodeFactory';\nimport ArrayList from '../../../../../java/util/ArrayList';\nimport Assert from '../../util/Assert';\nimport PlanarGraph from '../../geomgraph/PlanarGraph';\nexport default class ConnectedInteriorTester {\n\tconstructor() {\n\t\tConnectedInteriorTester.constructor_.apply(this, arguments);\n\t}\n\tstatic findDifferentPoint(coord, pt) {\n\t\tfor (var i = 0; i < coord.length; i++) {\n\t\t\tif (!coord[i].equals(pt)) return coord[i];\n\t\t}\n\t\treturn null;\n\t}\n\tvisitInteriorRing(ring, graph) {\n\t\tvar pts = ring.getCoordinates();\n\t\tvar pt0 = pts[0];\n\t\tvar pt1 = ConnectedInteriorTester.findDifferentPoint(pts, pt0);\n\t\tvar e = graph.findEdgeInSameDirection(pt0, pt1);\n\t\tvar de = graph.findEdgeEnd(e);\n\t\tvar intDe = null;\n\t\tif (de.getLabel().getLocation(0, Position.RIGHT) === Location.INTERIOR) {\n\t\t\tintDe = de;\n\t\t} else if (de.getSym().getLabel().getLocation(0, Position.RIGHT) === Location.INTERIOR) {\n\t\t\tintDe = de.getSym();\n\t\t}\n\t\tAssert.isTrue(intDe !== null, \"unable to find dirEdge with Interior on RHS\");\n\t\tthis.visitLinkedDirectedEdges(intDe);\n\t}\n\tvisitShellInteriors(g, graph) {\n\t\tif (g instanceof Polygon) {\n\t\t\tvar p = g;\n\t\t\tthis.visitInteriorRing(p.getExteriorRing(), graph);\n\t\t}\n\t\tif (g instanceof MultiPolygon) {\n\t\t\tvar mp = g;\n\t\t\tfor (var i = 0; i < mp.getNumGeometries(); i++) {\n\t\t\t\tvar p = mp.getGeometryN(i);\n\t\t\t\tthis.visitInteriorRing(p.getExteriorRing(), graph);\n\t\t\t}\n\t\t}\n\t}\n\tgetCoordinate() {\n\t\treturn this._disconnectedRingcoord;\n\t}\n\tsetInteriorEdgesInResult(graph) {\n\t\tfor (var it = graph.getEdgeEnds().iterator(); it.hasNext(); ) {\n\t\t\tvar de = it.next();\n\t\t\tif (de.getLabel().getLocation(0, Position.RIGHT) === Location.INTERIOR) {\n\t\t\t\tde.setInResult(true);\n\t\t\t}\n\t\t}\n\t}\n\tvisitLinkedDirectedEdges(start) {\n\t\tvar startDe = start;\n\t\tvar de = start;\n\t\tdo {\n\t\t\tAssert.isTrue(de !== null, \"found null Directed Edge\");\n\t\t\tde.setVisited(true);\n\t\t\tde = de.getNext();\n\t\t} while (de !== startDe);\n\t}\n\tbuildEdgeRings(dirEdges) {\n\t\tvar edgeRings = new ArrayList();\n\t\tfor (var it = dirEdges.iterator(); it.hasNext(); ) {\n\t\t\tvar de = it.next();\n\t\t\tif (de.isInResult() && de.getEdgeRing() === null) {\n\t\t\t\tvar er = new MaximalEdgeRing(de, this._geometryFactory);\n\t\t\t\ter.linkDirectedEdgesForMinimalEdgeRings();\n\t\t\t\tvar minEdgeRings = er.buildMinimalRings();\n\t\t\t\tedgeRings.addAll(minEdgeRings);\n\t\t\t}\n\t\t}\n\t\treturn edgeRings;\n\t}\n\thasUnvisitedShellEdge(edgeRings) {\n\t\tfor (var i = 0; i < edgeRings.size(); i++) {\n\t\t\tvar er = edgeRings.get(i);\n\t\t\tif (er.isHole()) continue;\n\t\t\tvar edges = er.getEdges();\n\t\t\tvar de = edges.get(0);\n\t\t\tif (de.getLabel().getLocation(0, Position.RIGHT) !== Location.INTERIOR) continue;\n\t\t\tfor (var j = 0; j < edges.size(); j++) {\n\t\t\t\tde = edges.get(j);\n\t\t\t\tif (!de.isVisited()) {\n\t\t\t\t\tthis._disconnectedRingcoord = de.getCoordinate();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\tisInteriorsConnected() {\n\t\tvar splitEdges = new ArrayList();\n\t\tthis._geomGraph.computeSplitEdges(splitEdges);\n\t\tvar graph = new PlanarGraph(new OverlayNodeFactory());\n\t\tgraph.addEdges(splitEdges);\n\t\tthis.setInteriorEdgesInResult(graph);\n\t\tgraph.linkResultDirectedEdges();\n\t\tvar edgeRings = this.buildEdgeRings(graph.getEdgeEnds());\n\t\tthis.visitShellInteriors(this._geomGraph.getGeometry(), graph);\n\t\treturn !this.hasUnvisitedShellEdge(edgeRings);\n\t}\n\tgetClass() {\n\t\treturn ConnectedInteriorTester;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nConnectedInteriorTester.constructor_ = function () {\n\tthis._geometryFactory = new GeometryFactory();\n\tthis._geomGraph = null;\n\tthis._disconnectedRingcoord = null;\n\tlet geomGraph = arguments[0];\n\tthis._geomGraph = geomGraph;\n};\n","import Location from '../../geom/Location';\nimport EdgeEndBuilder from './EdgeEndBuilder';\nimport NodeMap from '../../geomgraph/NodeMap';\nimport RelateNodeFactory from './RelateNodeFactory';\nexport default class RelateNodeGraph {\n\tconstructor() {\n\t\tRelateNodeGraph.constructor_.apply(this, arguments);\n\t}\n\tinsertEdgeEnds(ee) {\n\t\tfor (var i = ee.iterator(); i.hasNext(); ) {\n\t\t\tvar e = i.next();\n\t\t\tthis._nodes.add(e);\n\t\t}\n\t}\n\tgetNodeIterator() {\n\t\treturn this._nodes.iterator();\n\t}\n\tcopyNodesAndLabels(geomGraph, argIndex) {\n\t\tfor (var nodeIt = geomGraph.getNodeIterator(); nodeIt.hasNext(); ) {\n\t\t\tvar graphNode = nodeIt.next();\n\t\t\tvar newNode = this._nodes.addNode(graphNode.getCoordinate());\n\t\t\tnewNode.setLabel(argIndex, graphNode.getLabel().getLocation(argIndex));\n\t\t}\n\t}\n\tbuild(geomGraph) {\n\t\tthis.computeIntersectionNodes(geomGraph, 0);\n\t\tthis.copyNodesAndLabels(geomGraph, 0);\n\t\tvar eeBuilder = new EdgeEndBuilder();\n\t\tvar eeList = eeBuilder.computeEdgeEnds(geomGraph.getEdgeIterator());\n\t\tthis.insertEdgeEnds(eeList);\n\t}\n\tcomputeIntersectionNodes(geomGraph, argIndex) {\n\t\tfor (var edgeIt = geomGraph.getEdgeIterator(); edgeIt.hasNext(); ) {\n\t\t\tvar e = edgeIt.next();\n\t\t\tvar eLoc = e.getLabel().getLocation(argIndex);\n\t\t\tfor (var eiIt = e.getEdgeIntersectionList().iterator(); eiIt.hasNext(); ) {\n\t\t\t\tvar ei = eiIt.next();\n\t\t\t\tvar n = this._nodes.addNode(ei.coord);\n\t\t\t\tif (eLoc === Location.BOUNDARY) n.setLabelBoundary(argIndex); else {\n\t\t\t\t\tif (n.getLabel().isNull(argIndex)) n.setLabel(argIndex, Location.INTERIOR);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn RelateNodeGraph;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nRelateNodeGraph.constructor_ = function () {\n\tthis._nodes = new NodeMap(new RelateNodeFactory());\n};\n","import RelateNodeGraph from '../relate/RelateNodeGraph';\nimport RobustLineIntersector from '../../algorithm/RobustLineIntersector';\nexport default class ConsistentAreaTester {\n\tconstructor() {\n\t\tConsistentAreaTester.constructor_.apply(this, arguments);\n\t}\n\tisNodeEdgeAreaLabelsConsistent() {\n\t\tfor (var nodeIt = this._nodeGraph.getNodeIterator(); nodeIt.hasNext(); ) {\n\t\t\tvar node = nodeIt.next();\n\t\t\tif (!node.getEdges().isAreaLabelsConsistent(this._geomGraph)) {\n\t\t\t\tthis._invalidPoint = node.getCoordinate().copy();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\tgetInvalidPoint() {\n\t\treturn this._invalidPoint;\n\t}\n\thasDuplicateRings() {\n\t\tfor (var nodeIt = this._nodeGraph.getNodeIterator(); nodeIt.hasNext(); ) {\n\t\t\tvar node = nodeIt.next();\n\t\t\tfor (var i = node.getEdges().iterator(); i.hasNext(); ) {\n\t\t\t\tvar eeb = i.next();\n\t\t\t\tif (eeb.getEdgeEnds().size() > 1) {\n\t\t\t\t\tthis._invalidPoint = eeb.getEdge().getCoordinate(0);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\tisNodeConsistentArea() {\n\t\tvar intersector = this._geomGraph.computeSelfNodes(this._li, true, true);\n\t\tif (intersector.hasProperIntersection()) {\n\t\t\tthis._invalidPoint = intersector.getProperIntersectionPoint();\n\t\t\treturn false;\n\t\t}\n\t\tthis._nodeGraph.build(this._geomGraph);\n\t\treturn this.isNodeEdgeAreaLabelsConsistent();\n\t}\n\tgetClass() {\n\t\treturn ConsistentAreaTester;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nConsistentAreaTester.constructor_ = function () {\n\tthis._li = new RobustLineIntersector();\n\tthis._geomGraph = null;\n\tthis._nodeGraph = new RelateNodeGraph();\n\tthis._invalidPoint = null;\n\tlet geomGraph = arguments[0];\n\tthis._geomGraph = geomGraph;\n};\n","import STRtree from '../../index/strtree/STRtree';\nimport IsValidOp from './IsValidOp';\nimport PointLocation from '../../algorithm/PointLocation';\nimport ArrayList from '../../../../../java/util/ArrayList';\nimport Envelope from '../../geom/Envelope';\nexport default class IndexedNestedRingTester {\n\tconstructor() {\n\t\tIndexedNestedRingTester.constructor_.apply(this, arguments);\n\t}\n\tbuildIndex() {\n\t\tthis._index = new STRtree();\n\t\tfor (var i = 0; i < this._rings.size(); i++) {\n\t\t\tvar ring = this._rings.get(i);\n\t\t\tvar env = ring.getEnvelopeInternal();\n\t\t\tthis._index.insert(env, ring);\n\t\t}\n\t}\n\tgetNestedPoint() {\n\t\treturn this._nestedPt;\n\t}\n\tisNonNested() {\n\t\tthis.buildIndex();\n\t\tfor (var i = 0; i < this._rings.size(); i++) {\n\t\t\tvar innerRing = this._rings.get(i);\n\t\t\tvar innerRingPts = innerRing.getCoordinates();\n\t\t\tvar results = this._index.query(innerRing.getEnvelopeInternal());\n\t\t\tfor (var j = 0; j < results.size(); j++) {\n\t\t\t\tvar searchRing = results.get(j);\n\t\t\t\tvar searchRingPts = searchRing.getCoordinates();\n\t\t\t\tif (innerRing === searchRing) continue;\n\t\t\t\tif (!innerRing.getEnvelopeInternal().intersects(searchRing.getEnvelopeInternal())) continue;\n\t\t\t\tvar innerRingPt = IsValidOp.findPtNotNode(innerRingPts, searchRing, this._graph);\n\t\t\t\tif (innerRingPt === null) continue;\n\t\t\t\tvar isInside = PointLocation.isInRing(innerRingPt, searchRingPts);\n\t\t\t\tif (isInside) {\n\t\t\t\t\tthis._nestedPt = innerRingPt;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\tadd(ring) {\n\t\tthis._rings.add(ring);\n\t\tthis._totalEnv.expandToInclude(ring.getEnvelopeInternal());\n\t}\n\tgetClass() {\n\t\treturn IndexedNestedRingTester;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nIndexedNestedRingTester.constructor_ = function () {\n\tthis._graph = null;\n\tthis._rings = new ArrayList();\n\tthis._totalEnv = new Envelope();\n\tthis._index = null;\n\tthis._nestedPt = null;\n\tlet graph = arguments[0];\n\tthis._graph = graph;\n};\n","export default class TopologyValidationError {\n\tconstructor() {\n\t\tTopologyValidationError.constructor_.apply(this, arguments);\n\t}\n\tgetErrorType() {\n\t\treturn this._errorType;\n\t}\n\tgetMessage() {\n\t\treturn TopologyValidationError.errMsg[this._errorType];\n\t}\n\tgetCoordinate() {\n\t\treturn this._pt;\n\t}\n\ttoString() {\n\t\tvar locStr = \"\";\n\t\tif (this._pt !== null) locStr = \" at or near point \" + this._pt;\n\t\treturn this.getMessage() + locStr;\n\t}\n\tgetClass() {\n\t\treturn TopologyValidationError;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nTopologyValidationError.constructor_ = function () {\n\tthis._errorType = null;\n\tthis._pt = null;\n\tif (arguments.length === 1) {\n\t\tlet errorType = arguments[0];\n\t\tTopologyValidationError.constructor_.call(this, errorType, null);\n\t} else if (arguments.length === 2) {\n\t\tlet errorType = arguments[0], pt = arguments[1];\n\t\tthis._errorType = errorType;\n\t\tif (pt !== null) this._pt = pt.copy();\n\t}\n};\nTopologyValidationError.ERROR = 0;\nTopologyValidationError.REPEATED_POINT = 1;\nTopologyValidationError.HOLE_OUTSIDE_SHELL = 2;\nTopologyValidationError.NESTED_HOLES = 3;\nTopologyValidationError.DISCONNECTED_INTERIOR = 4;\nTopologyValidationError.SELF_INTERSECTION = 5;\nTopologyValidationError.RING_SELF_INTERSECTION = 6;\nTopologyValidationError.NESTED_SHELLS = 7;\nTopologyValidationError.DUPLICATE_RINGS = 8;\nTopologyValidationError.TOO_FEW_POINTS = 9;\nTopologyValidationError.INVALID_COORDINATE = 10;\nTopologyValidationError.RING_NOT_CLOSED = 11;\nTopologyValidationError.errMsg = [\"Topology Validation Error\", \"Repeated Point\", \"Hole lies outside shell\", \"Holes are nested\", \"Interior is disconnected\", \"Self-intersection\", \"Ring Self-intersection\", \"Nested shells\", \"Duplicate Rings\", \"Too few distinct points in geometry component\", \"Invalid Coordinate\", \"Ring is not closed\"];\n","import Location from '../../geom/Location';\nimport TreeSet from '../../../../../java/util/TreeSet';\nimport LineString from '../../geom/LineString';\nimport Geometry from '../../geom/Geometry';\nimport ConnectedInteriorTester from './ConnectedInteriorTester';\nimport Coordinate from '../../geom/Coordinate';\nimport Point from '../../geom/Point';\nimport Polygon from '../../geom/Polygon';\nimport MultiPoint from '../../geom/MultiPoint';\nimport PointLocation from '../../algorithm/PointLocation';\nimport LinearRing from '../../geom/LinearRing';\nimport Double from '../../../../../java/lang/Double';\nimport GeometryGraph from '../../geomgraph/GeometryGraph';\nimport MultiPolygon from '../../geom/MultiPolygon';\nimport ConsistentAreaTester from './ConsistentAreaTester';\nimport GeometryCollection from '../../geom/GeometryCollection';\nimport IndexedNestedRingTester from './IndexedNestedRingTester';\nimport RobustLineIntersector from '../../algorithm/RobustLineIntersector';\nimport TopologyValidationError from './TopologyValidationError';\nimport IndexedPointInAreaLocator from '../../algorithm/locate/IndexedPointInAreaLocator';\nimport Assert from '../../util/Assert';\nexport default class IsValidOp {\n\tconstructor() {\n\t\tIsValidOp.constructor_.apply(this, arguments);\n\t}\n\tstatic findPtNotNode(testCoords, searchRing, graph) {\n\t\tvar searchEdge = graph.findEdge(searchRing);\n\t\tvar eiList = searchEdge.getEdgeIntersectionList();\n\t\tfor (var i = 0; i < testCoords.length; i++) {\n\t\t\tvar pt = testCoords[i];\n\t\t\tif (!eiList.isIntersection(pt)) return pt;\n\t\t}\n\t\treturn null;\n\t}\n\tstatic isValid() {\n\t\tif (arguments[0] instanceof Geometry) {\n\t\t\tlet geom = arguments[0];\n\t\t\tvar isValidOp = new IsValidOp(geom);\n\t\t\treturn isValidOp.isValid();\n\t\t} else if (arguments[0] instanceof Coordinate) {\n\t\t\tlet coord = arguments[0];\n\t\t\tif (Double.isNaN(coord.x)) return false;\n\t\t\tif (Double.isInfinite(coord.x)) return false;\n\t\t\tif (Double.isNaN(coord.y)) return false;\n\t\t\tif (Double.isInfinite(coord.y)) return false;\n\t\t\treturn true;\n\t\t}\n\t}\n\tcheckInvalidCoordinates() {\n\t\tif (arguments[0] instanceof Array) {\n\t\t\tlet coords = arguments[0];\n\t\t\tfor (var i = 0; i < coords.length; i++) {\n\t\t\t\tif (!IsValidOp.isValid(coords[i])) {\n\t\t\t\t\tthis._validErr = new TopologyValidationError(TopologyValidationError.INVALID_COORDINATE, coords[i]);\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (arguments[0] instanceof Polygon) {\n\t\t\tlet poly = arguments[0];\n\t\t\tthis.checkInvalidCoordinates(poly.getExteriorRing().getCoordinates());\n\t\t\tif (this._validErr !== null) return null;\n\t\t\tfor (var i = 0; i < poly.getNumInteriorRing(); i++) {\n\t\t\t\tthis.checkInvalidCoordinates(poly.getInteriorRingN(i).getCoordinates());\n\t\t\t\tif (this._validErr !== null) return null;\n\t\t\t}\n\t\t}\n\t}\n\tcheckHolesNotNested(p, graph) {\n\t\tvar nestedTester = new IndexedNestedRingTester(graph);\n\t\tfor (var i = 0; i < p.getNumInteriorRing(); i++) {\n\t\t\tvar innerHole = p.getInteriorRingN(i);\n\t\t\tnestedTester.add(innerHole);\n\t\t}\n\t\tvar isNonNested = nestedTester.isNonNested();\n\t\tif (!isNonNested) {\n\t\t\tthis._validErr = new TopologyValidationError(TopologyValidationError.NESTED_HOLES, nestedTester.getNestedPoint());\n\t\t}\n\t}\n\tcheckConsistentArea(graph) {\n\t\tvar cat = new ConsistentAreaTester(graph);\n\t\tvar isValidArea = cat.isNodeConsistentArea();\n\t\tif (!isValidArea) {\n\t\t\tthis._validErr = new TopologyValidationError(TopologyValidationError.SELF_INTERSECTION, cat.getInvalidPoint());\n\t\t\treturn null;\n\t\t}\n\t\tif (cat.hasDuplicateRings()) {\n\t\t\tthis._validErr = new TopologyValidationError(TopologyValidationError.DUPLICATE_RINGS, cat.getInvalidPoint());\n\t\t}\n\t}\n\tisValid() {\n\t\tthis.checkValid(this._parentGeometry);\n\t\treturn this._validErr === null;\n\t}\n\tcheckShellInsideHole(shell, hole, graph) {\n\t\tvar shellPts = shell.getCoordinates();\n\t\tvar holePts = hole.getCoordinates();\n\t\tvar shellPt = IsValidOp.findPtNotNode(shellPts, hole, graph);\n\t\tif (shellPt !== null) {\n\t\t\tvar insideHole = PointLocation.isInRing(shellPt, holePts);\n\t\t\tif (!insideHole) {\n\t\t\t\treturn shellPt;\n\t\t\t}\n\t\t}\n\t\tvar holePt = IsValidOp.findPtNotNode(holePts, shell, graph);\n\t\tif (holePt !== null) {\n\t\t\tvar insideShell = PointLocation.isInRing(holePt, shellPts);\n\t\t\tif (insideShell) {\n\t\t\t\treturn holePt;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t\tAssert.shouldNeverReachHere(\"points in shell and hole appear to be equal\");\n\t\treturn null;\n\t}\n\tcheckNoSelfIntersectingRings(graph) {\n\t\tfor (var i = graph.getEdgeIterator(); i.hasNext(); ) {\n\t\t\tvar e = i.next();\n\t\t\tthis.checkNoSelfIntersectingRing(e.getEdgeIntersectionList());\n\t\t\tif (this._validErr !== null) return null;\n\t\t}\n\t}\n\tcheckConnectedInteriors(graph) {\n\t\tvar cit = new ConnectedInteriorTester(graph);\n\t\tif (!cit.isInteriorsConnected()) this._validErr = new TopologyValidationError(TopologyValidationError.DISCONNECTED_INTERIOR, cit.getCoordinate());\n\t}\n\tcheckNoSelfIntersectingRing(eiList) {\n\t\tvar nodeSet = new TreeSet();\n\t\tvar isFirst = true;\n\t\tfor (var i = eiList.iterator(); i.hasNext(); ) {\n\t\t\tvar ei = i.next();\n\t\t\tif (isFirst) {\n\t\t\t\tisFirst = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (nodeSet.contains(ei.coord)) {\n\t\t\t\tthis._validErr = new TopologyValidationError(TopologyValidationError.RING_SELF_INTERSECTION, ei.coord);\n\t\t\t\treturn null;\n\t\t\t} else {\n\t\t\t\tnodeSet.add(ei.coord);\n\t\t\t}\n\t\t}\n\t}\n\tcheckHolesInShell(p, graph) {\n\t\tvar shell = p.getExteriorRing();\n\t\tvar pir = new IndexedPointInAreaLocator(shell);\n\t\tfor (var i = 0; i < p.getNumInteriorRing(); i++) {\n\t\t\tvar hole = p.getInteriorRingN(i);\n\t\t\tvar holePt = IsValidOp.findPtNotNode(hole.getCoordinates(), shell, graph);\n\t\t\tif (holePt === null) return null;\n\t\t\tvar outside = Location.EXTERIOR === pir.locate(holePt);\n\t\t\tif (outside) {\n\t\t\t\tthis._validErr = new TopologyValidationError(TopologyValidationError.HOLE_OUTSIDE_SHELL, holePt);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t}\n\tcheckTooFewPoints(graph) {\n\t\tif (graph.hasTooFewPoints()) {\n\t\t\tthis._validErr = new TopologyValidationError(TopologyValidationError.TOO_FEW_POINTS, graph.getInvalidPoint());\n\t\t\treturn null;\n\t\t}\n\t}\n\tgetValidationError() {\n\t\tthis.checkValid(this._parentGeometry);\n\t\treturn this._validErr;\n\t}\n\tcheckValid() {\n\t\tif (arguments[0] instanceof Point) {\n\t\t\tlet g = arguments[0];\n\t\t\tthis.checkInvalidCoordinates(g.getCoordinates());\n\t\t} else if (arguments[0] instanceof MultiPoint) {\n\t\t\tlet g = arguments[0];\n\t\t\tthis.checkInvalidCoordinates(g.getCoordinates());\n\t\t} else if (arguments[0] instanceof LinearRing) {\n\t\t\tlet g = arguments[0];\n\t\t\tthis.checkInvalidCoordinates(g.getCoordinates());\n\t\t\tif (this._validErr !== null) return null;\n\t\t\tthis.checkClosedRing(g);\n\t\t\tif (this._validErr !== null) return null;\n\t\t\tvar graph = new GeometryGraph(0, g);\n\t\t\tthis.checkTooFewPoints(graph);\n\t\t\tif (this._validErr !== null) return null;\n\t\t\tvar li = new RobustLineIntersector();\n\t\t\tgraph.computeSelfNodes(li, true, true);\n\t\t\tthis.checkNoSelfIntersectingRings(graph);\n\t\t} else if (arguments[0] instanceof LineString) {\n\t\t\tlet g = arguments[0];\n\t\t\tthis.checkInvalidCoordinates(g.getCoordinates());\n\t\t\tif (this._validErr !== null) return null;\n\t\t\tvar graph = new GeometryGraph(0, g);\n\t\t\tthis.checkTooFewPoints(graph);\n\t\t} else if (arguments[0] instanceof Polygon) {\n\t\t\tlet g = arguments[0];\n\t\t\tthis.checkInvalidCoordinates(g);\n\t\t\tif (this._validErr !== null) return null;\n\t\t\tthis.checkClosedRings(g);\n\t\t\tif (this._validErr !== null) return null;\n\t\t\tvar graph = new GeometryGraph(0, g);\n\t\t\tthis.checkTooFewPoints(graph);\n\t\t\tif (this._validErr !== null) return null;\n\t\t\tthis.checkConsistentArea(graph);\n\t\t\tif (this._validErr !== null) return null;\n\t\t\tif (!this._isSelfTouchingRingFormingHoleValid) {\n\t\t\t\tthis.checkNoSelfIntersectingRings(graph);\n\t\t\t\tif (this._validErr !== null) return null;\n\t\t\t}\n\t\t\tthis.checkHolesInShell(g, graph);\n\t\t\tif (this._validErr !== null) return null;\n\t\t\tthis.checkHolesNotNested(g, graph);\n\t\t\tif (this._validErr !== null) return null;\n\t\t\tthis.checkConnectedInteriors(graph);\n\t\t} else if (arguments[0] instanceof MultiPolygon) {\n\t\t\tlet g = arguments[0];\n\t\t\tfor (var i = 0; i < g.getNumGeometries(); i++) {\n\t\t\t\tvar p = g.getGeometryN(i);\n\t\t\t\tthis.checkInvalidCoordinates(p);\n\t\t\t\tif (this._validErr !== null) return null;\n\t\t\t\tthis.checkClosedRings(p);\n\t\t\t\tif (this._validErr !== null) return null;\n\t\t\t}\n\t\t\tvar graph = new GeometryGraph(0, g);\n\t\t\tthis.checkTooFewPoints(graph);\n\t\t\tif (this._validErr !== null) return null;\n\t\t\tthis.checkConsistentArea(graph);\n\t\t\tif (this._validErr !== null) return null;\n\t\t\tif (!this._isSelfTouchingRingFormingHoleValid) {\n\t\t\t\tthis.checkNoSelfIntersectingRings(graph);\n\t\t\t\tif (this._validErr !== null) return null;\n\t\t\t}\n\t\t\tfor (var i = 0; i < g.getNumGeometries(); i++) {\n\t\t\t\tvar p = g.getGeometryN(i);\n\t\t\t\tthis.checkHolesInShell(p, graph);\n\t\t\t\tif (this._validErr !== null) return null;\n\t\t\t}\n\t\t\tfor (var i = 0; i < g.getNumGeometries(); i++) {\n\t\t\t\tvar p = g.getGeometryN(i);\n\t\t\t\tthis.checkHolesNotNested(p, graph);\n\t\t\t\tif (this._validErr !== null) return null;\n\t\t\t}\n\t\t\tthis.checkShellsNotNested(g, graph);\n\t\t\tif (this._validErr !== null) return null;\n\t\t\tthis.checkConnectedInteriors(graph);\n\t\t} else if (arguments[0] instanceof GeometryCollection) {\n\t\t\tlet gc = arguments[0];\n\t\t\tfor (var i = 0; i < gc.getNumGeometries(); i++) {\n\t\t\t\tvar g = gc.getGeometryN(i);\n\t\t\t\tthis.checkValid(g);\n\t\t\t\tif (this._validErr !== null) return null;\n\t\t\t}\n\t\t} else if (arguments[0] instanceof Geometry) {\n\t\t\tlet g = arguments[0];\n\t\t\tthis._validErr = null;\n\t\t\tif (g.isEmpty()) return null;\n\t\t\tif (g instanceof Point) this.checkValid(g); else if (g instanceof MultiPoint) this.checkValid(g); else if (g instanceof LinearRing) this.checkValid(g); else if (g instanceof LineString) this.checkValid(g); else if (g instanceof Polygon) this.checkValid(g); else if (g instanceof MultiPolygon) this.checkValid(g); else if (g instanceof GeometryCollection) this.checkValid(g); else throw new UnsupportedOperationException(g.getClass().getName());\n\t\t}\n\t}\n\tsetSelfTouchingRingFormingHoleValid(isValid) {\n\t\tthis._isSelfTouchingRingFormingHoleValid = isValid;\n\t}\n\tcheckShellNotNested(shell, p, graph) {\n\t\tvar shellPts = shell.getCoordinates();\n\t\tvar polyShell = p.getExteriorRing();\n\t\tvar polyPts = polyShell.getCoordinates();\n\t\tvar shellPt = IsValidOp.findPtNotNode(shellPts, polyShell, graph);\n\t\tif (shellPt === null) return null;\n\t\tvar insidePolyShell = PointLocation.isInRing(shellPt, polyPts);\n\t\tif (!insidePolyShell) return null;\n\t\tif (p.getNumInteriorRing() <= 0) {\n\t\t\tthis._validErr = new TopologyValidationError(TopologyValidationError.NESTED_SHELLS, shellPt);\n\t\t\treturn null;\n\t\t}\n\t\tvar badNestedPt = null;\n\t\tfor (var i = 0; i < p.getNumInteriorRing(); i++) {\n\t\t\tvar hole = p.getInteriorRingN(i);\n\t\t\tbadNestedPt = this.checkShellInsideHole(shell, hole, graph);\n\t\t\tif (badNestedPt === null) return null;\n\t\t}\n\t\tthis._validErr = new TopologyValidationError(TopologyValidationError.NESTED_SHELLS, badNestedPt);\n\t}\n\tcheckClosedRings(poly) {\n\t\tthis.checkClosedRing(poly.getExteriorRing());\n\t\tif (this._validErr !== null) return null;\n\t\tfor (var i = 0; i < poly.getNumInteriorRing(); i++) {\n\t\t\tthis.checkClosedRing(poly.getInteriorRingN(i));\n\t\t\tif (this._validErr !== null) return null;\n\t\t}\n\t}\n\tcheckClosedRing(ring) {\n\t\tif (!ring.isClosed()) {\n\t\t\tvar pt = null;\n\t\t\tif (ring.getNumPoints() >= 1) pt = ring.getCoordinateN(0);\n\t\t\tthis._validErr = new TopologyValidationError(TopologyValidationError.RING_NOT_CLOSED, pt);\n\t\t}\n\t}\n\tcheckShellsNotNested(mp, graph) {\n\t\tfor (var i = 0; i < mp.getNumGeometries(); i++) {\n\t\t\tvar p = mp.getGeometryN(i);\n\t\t\tvar shell = p.getExteriorRing();\n\t\t\tfor (var j = 0; j < mp.getNumGeometries(); j++) {\n\t\t\t\tif (i === j) continue;\n\t\t\t\tvar p2 = mp.getGeometryN(j);\n\t\t\t\tthis.checkShellNotNested(shell, p2, graph);\n\t\t\t\tif (this._validErr !== null) return null;\n\t\t\t}\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn IsValidOp;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nIsValidOp.constructor_ = function () {\n\tthis._parentGeometry = null;\n\tthis._isSelfTouchingRingFormingHoleValid = false;\n\tthis._validErr = null;\n\tlet parentGeometry = arguments[0];\n\tthis._parentGeometry = parentGeometry;\n};\n","import LineString from '../geom/LineString';\nimport CoordinateList from '../geom/CoordinateList';\nimport Geometry from '../geom/Geometry';\nimport Coordinate from '../geom/Coordinate';\nimport GeometryEditor from '../geom/util/GeometryEditor';\nimport LinearRing from '../geom/LinearRing';\nexport default class PrecisionReducerCoordinateOperation extends GeometryEditor.CoordinateOperation {\n\tconstructor() {\n\t\tsuper();\n\t\tPrecisionReducerCoordinateOperation.constructor_.apply(this, arguments);\n\t}\n\tedit() {\n\t\tif (arguments.length === 2 && (arguments[1] instanceof Geometry && arguments[0] instanceof Array)) {\n\t\t\tlet coordinates = arguments[0], geom = arguments[1];\n\t\t\tif (coordinates.length === 0) return null;\n\t\t\tvar reducedCoords = new Array(coordinates.length).fill(null);\n\t\t\tfor (var i = 0; i < coordinates.length; i++) {\n\t\t\t\tvar coord = new Coordinate(coordinates[i]);\n\t\t\t\tthis._targetPM.makePrecise(coord);\n\t\t\t\treducedCoords[i] = coord;\n\t\t\t}\n\t\t\tvar noRepeatedCoordList = new CoordinateList(reducedCoords, false);\n\t\t\tvar noRepeatedCoords = noRepeatedCoordList.toCoordinateArray();\n\t\t\tvar minLength = 0;\n\t\t\tif (geom instanceof LineString) minLength = 2;\n\t\t\tif (geom instanceof LinearRing) minLength = 4;\n\t\t\tvar collapsedCoords = reducedCoords;\n\t\t\tif (this._removeCollapsed) collapsedCoords = null;\n\t\t\tif (noRepeatedCoords.length < minLength) {\n\t\t\t\treturn collapsedCoords;\n\t\t\t}\n\t\t\treturn noRepeatedCoords;\n\t\t} else return super.edit.apply(this, arguments);\n\t}\n\tgetClass() {\n\t\treturn PrecisionReducerCoordinateOperation;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nPrecisionReducerCoordinateOperation.constructor_ = function () {\n\tthis._targetPM = null;\n\tthis._removeCollapsed = true;\n\tlet targetPM = arguments[0], removeCollapsed = arguments[1];\n\tthis._targetPM = targetPM;\n\tthis._removeCollapsed = removeCollapsed;\n};\n","import hasInterface from '../../../../hasInterface';\nimport GeometryFactory from '../geom/GeometryFactory';\nimport IsValidOp from '../operation/valid/IsValidOp';\nimport GeometryEditor from '../geom/util/GeometryEditor';\nimport BufferOp from '../operation/buffer/BufferOp';\nimport Polygonal from '../geom/Polygonal';\nimport PrecisionReducerCoordinateOperation from './PrecisionReducerCoordinateOperation';\nexport default class GeometryPrecisionReducer {\n\tconstructor() {\n\t\tGeometryPrecisionReducer.constructor_.apply(this, arguments);\n\t}\n\tstatic reduce(g, precModel) {\n\t\tvar reducer = new GeometryPrecisionReducer(precModel);\n\t\treturn reducer.reduce(g);\n\t}\n\tstatic reducePointwise(g, precModel) {\n\t\tvar reducer = new GeometryPrecisionReducer(precModel);\n\t\treducer.setPointwise(true);\n\t\treturn reducer.reduce(g);\n\t}\n\tfixPolygonalTopology(geom) {\n\t\tvar geomToBuffer = geom;\n\t\tif (!this._changePrecisionModel) {\n\t\t\tgeomToBuffer = this.changePM(geom, this._targetPM);\n\t\t}\n\t\tvar bufGeom = BufferOp.bufferOp(geomToBuffer, 0);\n\t\tvar finalGeom = bufGeom;\n\t\tif (!this._changePrecisionModel) {\n\t\t\tfinalGeom = bufGeom.copy();\n\t\t\tthis.changePM(finalGeom, geom.getPrecisionModel());\n\t\t}\n\t\treturn finalGeom;\n\t}\n\treducePointwise(geom) {\n\t\tvar geomEdit = null;\n\t\tif (this._changePrecisionModel) {\n\t\t\tvar newFactory = this.createFactory(geom.getFactory(), this._targetPM);\n\t\t\tgeomEdit = new GeometryEditor(newFactory);\n\t\t} else geomEdit = new GeometryEditor();\n\t\tvar finalRemoveCollapsed = this._removeCollapsed;\n\t\tif (geom.getDimension() >= 2) finalRemoveCollapsed = true;\n\t\tvar reduceGeom = geomEdit.edit(geom, new PrecisionReducerCoordinateOperation(this._targetPM, finalRemoveCollapsed));\n\t\treturn reduceGeom;\n\t}\n\tchangePM(geom, newPM) {\n\t\tvar geomEditor = this.createEditor(geom.getFactory(), newPM);\n\t\treturn geomEditor.edit(geom, new GeometryEditor.NoOpGeometryOperation());\n\t}\n\tsetRemoveCollapsedComponents(removeCollapsed) {\n\t\tthis._removeCollapsed = removeCollapsed;\n\t}\n\tcreateFactory(inputFactory, pm) {\n\t\tvar newFactory = new GeometryFactory(pm, inputFactory.getSRID(), inputFactory.getCoordinateSequenceFactory());\n\t\treturn newFactory;\n\t}\n\tsetChangePrecisionModel(changePrecisionModel) {\n\t\tthis._changePrecisionModel = changePrecisionModel;\n\t}\n\treduce(geom) {\n\t\tvar reducePW = this.reducePointwise(geom);\n\t\tif (this._isPointwise) return reducePW;\n\t\tif (!hasInterface(reducePW, Polygonal)) return reducePW;\n\t\tif (IsValidOp.isValid(reducePW)) return reducePW;\n\t\treturn this.fixPolygonalTopology(reducePW);\n\t}\n\tsetPointwise(isPointwise) {\n\t\tthis._isPointwise = isPointwise;\n\t}\n\tcreateEditor(geomFactory, newPM) {\n\t\tif (geomFactory.getPrecisionModel() === newPM) return new GeometryEditor();\n\t\tvar newFactory = this.createFactory(geomFactory, newPM);\n\t\tvar geomEdit = new GeometryEditor(newFactory);\n\t\treturn geomEdit;\n\t}\n\tgetClass() {\n\t\treturn GeometryPrecisionReducer;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nGeometryPrecisionReducer.constructor_ = function () {\n\tthis._targetPM = null;\n\tthis._removeCollapsed = true;\n\tthis._changePrecisionModel = false;\n\tthis._isPointwise = false;\n\tlet pm = arguments[0];\n\tthis._targetPM = pm;\n};\n","import CoordinateList from '../geom/CoordinateList';\nimport Coordinate from '../geom/Coordinate';\nimport LineSegment from '../geom/LineSegment';\nexport default class DouglasPeuckerLineSimplifier {\n\tconstructor() {\n\t\tDouglasPeuckerLineSimplifier.constructor_.apply(this, arguments);\n\t}\n\tstatic simplify(pts, distanceTolerance) {\n\t\tvar simp = new DouglasPeuckerLineSimplifier(pts);\n\t\tsimp.setDistanceTolerance(distanceTolerance);\n\t\treturn simp.simplify();\n\t}\n\tsimplifySection(i, j) {\n\t\tif (i + 1 === j) {\n\t\t\treturn null;\n\t\t}\n\t\tthis._seg.p0 = this._pts[i];\n\t\tthis._seg.p1 = this._pts[j];\n\t\tvar maxDistance = -1.0;\n\t\tvar maxIndex = i;\n\t\tfor (var k = i + 1; k < j; k++) {\n\t\t\tvar distance = this._seg.distance(this._pts[k]);\n\t\t\tif (distance > maxDistance) {\n\t\t\t\tmaxDistance = distance;\n\t\t\t\tmaxIndex = k;\n\t\t\t}\n\t\t}\n\t\tif (maxDistance <= this._distanceTolerance) {\n\t\t\tfor (var k = i + 1; k < j; k++) {\n\t\t\t\tthis._usePt[k] = false;\n\t\t\t}\n\t\t} else {\n\t\t\tthis.simplifySection(i, maxIndex);\n\t\t\tthis.simplifySection(maxIndex, j);\n\t\t}\n\t}\n\tsetDistanceTolerance(distanceTolerance) {\n\t\tthis._distanceTolerance = distanceTolerance;\n\t}\n\tsimplify() {\n\t\tthis._usePt = new Array(this._pts.length).fill(null);\n\t\tfor (var i = 0; i < this._pts.length; i++) {\n\t\t\tthis._usePt[i] = true;\n\t\t}\n\t\tthis.simplifySection(0, this._pts.length - 1);\n\t\tvar coordList = new CoordinateList();\n\t\tfor (var i = 0; i < this._pts.length; i++) {\n\t\t\tif (this._usePt[i]) coordList.add(new Coordinate(this._pts[i]));\n\t\t}\n\t\treturn coordList.toCoordinateArray();\n\t}\n\tgetClass() {\n\t\treturn DouglasPeuckerLineSimplifier;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nDouglasPeuckerLineSimplifier.constructor_ = function () {\n\tthis._pts = null;\n\tthis._usePt = null;\n\tthis._distanceTolerance = null;\n\tthis._seg = new LineSegment();\n\tlet pts = arguments[0];\n\tthis._pts = pts;\n};\n","import DouglasPeuckerLineSimplifier from './DouglasPeuckerLineSimplifier';\nimport GeometryTransformer from '../geom/util/GeometryTransformer';\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException';\nimport Polygon from '../geom/Polygon';\nimport LinearRing from '../geom/LinearRing';\nimport MultiPolygon from '../geom/MultiPolygon';\nexport default class DouglasPeuckerSimplifier {\n\tconstructor() {\n\t\tDouglasPeuckerSimplifier.constructor_.apply(this, arguments);\n\t}\n\tstatic simplify(geom, distanceTolerance) {\n\t\tvar tss = new DouglasPeuckerSimplifier(geom);\n\t\ttss.setDistanceTolerance(distanceTolerance);\n\t\treturn tss.getResultGeometry();\n\t}\n\tsetEnsureValid(isEnsureValidTopology) {\n\t\tthis._isEnsureValidTopology = isEnsureValidTopology;\n\t}\n\tgetResultGeometry() {\n\t\tif (this._inputGeom.isEmpty()) return this._inputGeom.copy();\n\t\treturn new DPTransformer(this._isEnsureValidTopology, this._distanceTolerance).transform(this._inputGeom);\n\t}\n\tsetDistanceTolerance(distanceTolerance) {\n\t\tif (distanceTolerance < 0.0) throw new IllegalArgumentException(\"Tolerance must be non-negative\");\n\t\tthis._distanceTolerance = distanceTolerance;\n\t}\n\tgetClass() {\n\t\treturn DouglasPeuckerSimplifier;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nclass DPTransformer extends GeometryTransformer {\n\tconstructor() {\n\t\tsuper();\n\t\tDPTransformer.constructor_.apply(this, arguments);\n\t}\n\ttransformPolygon(geom, parent) {\n\t\tif (geom.isEmpty()) return null;\n\t\tvar rawGeom = super.transformPolygon.call(this, geom, parent);\n\t\tif (parent instanceof MultiPolygon) {\n\t\t\treturn rawGeom;\n\t\t}\n\t\treturn this.createValidArea(rawGeom);\n\t}\n\tcreateValidArea(rawAreaGeom) {\n\t\tif (this._isEnsureValidTopology) return rawAreaGeom.buffer(0.0);\n\t\treturn rawAreaGeom;\n\t}\n\ttransformCoordinates(coords, parent) {\n\t\tvar inputPts = coords.toCoordinateArray();\n\t\tvar newPts = null;\n\t\tif (inputPts.length === 0) {\n\t\t\tnewPts = new Array(0).fill(null);\n\t\t} else {\n\t\t\tnewPts = DouglasPeuckerLineSimplifier.simplify(inputPts, this._distanceTolerance);\n\t\t}\n\t\treturn this._factory.getCoordinateSequenceFactory().create(newPts);\n\t}\n\ttransformMultiPolygon(geom, parent) {\n\t\tvar rawGeom = super.transformMultiPolygon.call(this, geom, parent);\n\t\treturn this.createValidArea(rawGeom);\n\t}\n\ttransformLinearRing(geom, parent) {\n\t\tvar removeDegenerateRings = parent instanceof Polygon;\n\t\tvar simpResult = super.transformLinearRing.call(this, geom, parent);\n\t\tif (removeDegenerateRings && !(simpResult instanceof LinearRing)) return null;\n\t\t;\n\t\treturn simpResult;\n\t}\n\tgetClass() {\n\t\treturn DPTransformer;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nDPTransformer.constructor_ = function () {\n\tthis._isEnsureValidTopology = true;\n\tthis._distanceTolerance = null;\n\tlet isEnsureValidTopology = arguments[0], distanceTolerance = arguments[1];\n\tthis._isEnsureValidTopology = isEnsureValidTopology;\n\tthis._distanceTolerance = distanceTolerance;\n};\nDouglasPeuckerSimplifier.DPTransformer = DPTransformer;\nDouglasPeuckerSimplifier.constructor_ = function () {\n\tthis._inputGeom = null;\n\tthis._distanceTolerance = null;\n\tthis._isEnsureValidTopology = true;\n\tlet inputGeom = arguments[0];\n\tthis._inputGeom = inputGeom;\n};\n","import LineSegment from '../geom/LineSegment';\nexport default class TaggedLineSegment extends LineSegment {\n\tconstructor() {\n\t\tsuper();\n\t\tTaggedLineSegment.constructor_.apply(this, arguments);\n\t}\n\tgetIndex() {\n\t\treturn this._index;\n\t}\n\tgetParent() {\n\t\treturn this._parent;\n\t}\n\tgetClass() {\n\t\treturn TaggedLineSegment;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nTaggedLineSegment.constructor_ = function () {\n\tthis._parent = null;\n\tthis._index = null;\n\tif (arguments.length === 2) {\n\t\tlet p0 = arguments[0], p1 = arguments[1];\n\t\tTaggedLineSegment.constructor_.call(this, p0, p1, null, -1);\n\t} else if (arguments.length === 4) {\n\t\tlet p0 = arguments[0], p1 = arguments[1], parent = arguments[2], index = arguments[3];\n\t\tLineSegment.constructor_.call(this, p0, p1);\n\t\tthis._parent = parent;\n\t\tthis._index = index;\n\t}\n};\n","import TaggedLineSegment from './TaggedLineSegment';\nimport ArrayList from '../../../../java/util/ArrayList';\nexport default class TaggedLineString {\n\tconstructor() {\n\t\tTaggedLineString.constructor_.apply(this, arguments);\n\t}\n\tstatic extractCoordinates(segs) {\n\t\tvar pts = new Array(segs.size() + 1).fill(null);\n\t\tvar seg = null;\n\t\tfor (var i = 0; i < segs.size(); i++) {\n\t\t\tseg = segs.get(i);\n\t\t\tpts[i] = seg.p0;\n\t\t}\n\t\tpts[pts.length - 1] = seg.p1;\n\t\treturn pts;\n\t}\n\taddToResult(seg) {\n\t\tthis._resultSegs.add(seg);\n\t}\n\tasLineString() {\n\t\treturn this._parentLine.getFactory().createLineString(TaggedLineString.extractCoordinates(this._resultSegs));\n\t}\n\tgetResultSize() {\n\t\tvar resultSegsSize = this._resultSegs.size();\n\t\treturn resultSegsSize === 0 ? 0 : resultSegsSize + 1;\n\t}\n\tgetParent() {\n\t\treturn this._parentLine;\n\t}\n\tgetSegment(i) {\n\t\treturn this._segs[i];\n\t}\n\tgetParentCoordinates() {\n\t\treturn this._parentLine.getCoordinates();\n\t}\n\tgetMinimumSize() {\n\t\treturn this._minimumSize;\n\t}\n\tasLinearRing() {\n\t\treturn this._parentLine.getFactory().createLinearRing(TaggedLineString.extractCoordinates(this._resultSegs));\n\t}\n\tgetSegments() {\n\t\treturn this._segs;\n\t}\n\tinit() {\n\t\tvar pts = this._parentLine.getCoordinates();\n\t\tthis._segs = new Array(pts.length - 1).fill(null);\n\t\tfor (var i = 0; i < pts.length - 1; i++) {\n\t\t\tvar seg = new TaggedLineSegment(pts[i], pts[i + 1], this._parentLine, i);\n\t\t\tthis._segs[i] = seg;\n\t\t}\n\t}\n\tgetResultCoordinates() {\n\t\treturn TaggedLineString.extractCoordinates(this._resultSegs);\n\t}\n\tgetClass() {\n\t\treturn TaggedLineString;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nTaggedLineString.constructor_ = function () {\n\tthis._parentLine = null;\n\tthis._segs = null;\n\tthis._resultSegs = new ArrayList();\n\tthis._minimumSize = null;\n\tif (arguments.length === 1) {\n\t\tlet parentLine = arguments[0];\n\t\tTaggedLineString.constructor_.call(this, parentLine, 2);\n\t} else if (arguments.length === 2) {\n\t\tlet parentLine = arguments[0], minimumSize = arguments[1];\n\t\tthis._parentLine = parentLine;\n\t\tthis._minimumSize = minimumSize;\n\t\tthis.init();\n\t}\n};\n","import Quadtree from '../index/quadtree/Quadtree';\nimport ItemVisitor from '../index/ItemVisitor';\nimport LineSegment from '../geom/LineSegment';\nimport ArrayList from '../../../../java/util/ArrayList';\nimport Envelope from '../geom/Envelope';\nimport TaggedLineString from './TaggedLineString';\nexport default class LineSegmentIndex {\n\tconstructor() {\n\t\tLineSegmentIndex.constructor_.apply(this, arguments);\n\t}\n\tremove(seg) {\n\t\tthis._index.remove(new Envelope(seg.p0, seg.p1), seg);\n\t}\n\tadd() {\n\t\tif (arguments[0] instanceof TaggedLineString) {\n\t\t\tlet line = arguments[0];\n\t\t\tvar segs = line.getSegments();\n\t\t\tfor (var i = 0; i < segs.length; i++) {\n\t\t\t\tvar seg = segs[i];\n\t\t\t\tthis.add(seg);\n\t\t\t}\n\t\t} else if (arguments[0] instanceof LineSegment) {\n\t\t\tlet seg = arguments[0];\n\t\t\tthis._index.insert(new Envelope(seg.p0, seg.p1), seg);\n\t\t}\n\t}\n\tquery(querySeg) {\n\t\tvar env = new Envelope(querySeg.p0, querySeg.p1);\n\t\tvar visitor = new LineSegmentVisitor(querySeg);\n\t\tthis._index.query(env, visitor);\n\t\tvar itemsFound = visitor.getItems();\n\t\treturn itemsFound;\n\t}\n\tgetClass() {\n\t\treturn LineSegmentIndex;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nLineSegmentIndex.constructor_ = function () {\n\tthis._index = new Quadtree();\n};\nclass LineSegmentVisitor {\n\tconstructor() {\n\t\tLineSegmentVisitor.constructor_.apply(this, arguments);\n\t}\n\tvisitItem(item) {\n\t\tvar seg = item;\n\t\tif (Envelope.intersects(seg.p0, seg.p1, this._querySeg.p0, this._querySeg.p1)) this._items.add(item);\n\t}\n\tgetItems() {\n\t\treturn this._items;\n\t}\n\tgetClass() {\n\t\treturn LineSegmentVisitor;\n\t}\n\tget interfaces_() {\n\t\treturn [ItemVisitor];\n\t}\n}\nLineSegmentVisitor.constructor_ = function () {\n\tthis._querySeg = null;\n\tthis._items = new ArrayList();\n\tlet querySeg = arguments[0];\n\tthis._querySeg = querySeg;\n};\n","import LineSegment from '../geom/LineSegment';\nimport LineSegmentIndex from './LineSegmentIndex';\nimport RobustLineIntersector from '../algorithm/RobustLineIntersector';\nexport default class TaggedLineStringSimplifier {\n\tconstructor() {\n\t\tTaggedLineStringSimplifier.constructor_.apply(this, arguments);\n\t}\n\tstatic isInLineSection(line, sectionIndex, seg) {\n\t\tif (seg.getParent() !== line.getParent()) return false;\n\t\tvar segIndex = seg.getIndex();\n\t\tif (segIndex >= sectionIndex[0] && segIndex < sectionIndex[1]) return true;\n\t\treturn false;\n\t}\n\tflatten(start, end) {\n\t\tvar p0 = this._linePts[start];\n\t\tvar p1 = this._linePts[end];\n\t\tvar newSeg = new LineSegment(p0, p1);\n\t\tthis.remove(this._line, start, end);\n\t\tthis._outputIndex.add(newSeg);\n\t\treturn newSeg;\n\t}\n\thasBadIntersection(parentLine, sectionIndex, candidateSeg) {\n\t\tif (this.hasBadOutputIntersection(candidateSeg)) return true;\n\t\tif (this.hasBadInputIntersection(parentLine, sectionIndex, candidateSeg)) return true;\n\t\treturn false;\n\t}\n\tsetDistanceTolerance(distanceTolerance) {\n\t\tthis._distanceTolerance = distanceTolerance;\n\t}\n\tsimplifySection(i, j, depth) {\n\t\tdepth += 1;\n\t\tvar sectionIndex = new Array(2).fill(null);\n\t\tif (i + 1 === j) {\n\t\t\tvar newSeg = this._line.getSegment(i);\n\t\t\tthis._line.addToResult(newSeg);\n\t\t\treturn null;\n\t\t}\n\t\tvar isValidToSimplify = true;\n\t\tif (this._line.getResultSize() < this._line.getMinimumSize()) {\n\t\t\tvar worstCaseSize = depth + 1;\n\t\t\tif (worstCaseSize < this._line.getMinimumSize()) isValidToSimplify = false;\n\t\t}\n\t\tvar distance = new Array(1).fill(null);\n\t\tvar furthestPtIndex = this.findFurthestPoint(this._linePts, i, j, distance);\n\t\tif (distance[0] > this._distanceTolerance) isValidToSimplify = false;\n\t\tvar candidateSeg = new LineSegment();\n\t\tcandidateSeg.p0 = this._linePts[i];\n\t\tcandidateSeg.p1 = this._linePts[j];\n\t\tsectionIndex[0] = i;\n\t\tsectionIndex[1] = j;\n\t\tif (this.hasBadIntersection(this._line, sectionIndex, candidateSeg)) isValidToSimplify = false;\n\t\tif (isValidToSimplify) {\n\t\t\tvar newSeg = this.flatten(i, j);\n\t\t\tthis._line.addToResult(newSeg);\n\t\t\treturn null;\n\t\t}\n\t\tthis.simplifySection(i, furthestPtIndex, depth);\n\t\tthis.simplifySection(furthestPtIndex, j, depth);\n\t}\n\thasBadOutputIntersection(candidateSeg) {\n\t\tvar querySegs = this._outputIndex.query(candidateSeg);\n\t\tfor (var i = querySegs.iterator(); i.hasNext(); ) {\n\t\t\tvar querySeg = i.next();\n\t\t\tif (this.hasInteriorIntersection(querySeg, candidateSeg)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\tfindFurthestPoint(pts, i, j, maxDistance) {\n\t\tvar seg = new LineSegment();\n\t\tseg.p0 = pts[i];\n\t\tseg.p1 = pts[j];\n\t\tvar maxDist = -1.0;\n\t\tvar maxIndex = i;\n\t\tfor (var k = i + 1; k < j; k++) {\n\t\t\tvar midPt = pts[k];\n\t\t\tvar distance = seg.distance(midPt);\n\t\t\tif (distance > maxDist) {\n\t\t\t\tmaxDist = distance;\n\t\t\t\tmaxIndex = k;\n\t\t\t}\n\t\t}\n\t\tmaxDistance[0] = maxDist;\n\t\treturn maxIndex;\n\t}\n\tsimplify(line) {\n\t\tthis._line = line;\n\t\tthis._linePts = line.getParentCoordinates();\n\t\tthis.simplifySection(0, this._linePts.length - 1, 0);\n\t}\n\tremove(line, start, end) {\n\t\tfor (var i = start; i < end; i++) {\n\t\t\tvar seg = line.getSegment(i);\n\t\t\tthis._inputIndex.remove(seg);\n\t\t}\n\t}\n\thasInteriorIntersection(seg0, seg1) {\n\t\tthis._li.computeIntersection(seg0.p0, seg0.p1, seg1.p0, seg1.p1);\n\t\treturn this._li.isInteriorIntersection();\n\t}\n\thasBadInputIntersection(parentLine, sectionIndex, candidateSeg) {\n\t\tvar querySegs = this._inputIndex.query(candidateSeg);\n\t\tfor (var i = querySegs.iterator(); i.hasNext(); ) {\n\t\t\tvar querySeg = i.next();\n\t\t\tif (this.hasInteriorIntersection(querySeg, candidateSeg)) {\n\t\t\t\tif (TaggedLineStringSimplifier.isInLineSection(parentLine, sectionIndex, querySeg)) continue;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\tgetClass() {\n\t\treturn TaggedLineStringSimplifier;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nTaggedLineStringSimplifier.constructor_ = function () {\n\tthis._li = new RobustLineIntersector();\n\tthis._inputIndex = new LineSegmentIndex();\n\tthis._outputIndex = new LineSegmentIndex();\n\tthis._line = null;\n\tthis._linePts = null;\n\tthis._distanceTolerance = 0.0;\n\tlet inputIndex = arguments[0], outputIndex = arguments[1];\n\tthis._inputIndex = inputIndex;\n\tthis._outputIndex = outputIndex;\n};\n","import TaggedLineStringSimplifier from './TaggedLineStringSimplifier';\nimport LineSegmentIndex from './LineSegmentIndex';\nexport default class TaggedLinesSimplifier {\n\tconstructor() {\n\t\tTaggedLinesSimplifier.constructor_.apply(this, arguments);\n\t}\n\tsetDistanceTolerance(distanceTolerance) {\n\t\tthis._distanceTolerance = distanceTolerance;\n\t}\n\tsimplify(taggedLines) {\n\t\tfor (var i = taggedLines.iterator(); i.hasNext(); ) {\n\t\t\tthis._inputIndex.add(i.next());\n\t\t}\n\t\tfor (var i = taggedLines.iterator(); i.hasNext(); ) {\n\t\t\tvar tlss = new TaggedLineStringSimplifier(this._inputIndex, this._outputIndex);\n\t\t\ttlss.setDistanceTolerance(this._distanceTolerance);\n\t\t\ttlss.simplify(i.next());\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn TaggedLinesSimplifier;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nTaggedLinesSimplifier.constructor_ = function () {\n\tthis._inputIndex = new LineSegmentIndex();\n\tthis._outputIndex = new LineSegmentIndex();\n\tthis._distanceTolerance = 0.0;\n};\n","import LineString from '../geom/LineString';\nimport HashMap from '../../../../java/util/HashMap';\nimport GeometryTransformer from '../geom/util/GeometryTransformer';\nimport TaggedLinesSimplifier from './TaggedLinesSimplifier';\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException';\nimport GeometryComponentFilter from '../geom/GeometryComponentFilter';\nimport TaggedLineString from './TaggedLineString';\nexport default class TopologyPreservingSimplifier {\n\tconstructor() {\n\t\tTopologyPreservingSimplifier.constructor_.apply(this, arguments);\n\t}\n\tstatic simplify(geom, distanceTolerance) {\n\t\tvar tss = new TopologyPreservingSimplifier(geom);\n\t\ttss.setDistanceTolerance(distanceTolerance);\n\t\treturn tss.getResultGeometry();\n\t}\n\tgetResultGeometry() {\n\t\tif (this._inputGeom.isEmpty()) return this._inputGeom.copy();\n\t\tthis._linestringMap = new HashMap();\n\t\tthis._inputGeom.apply(new LineStringMapBuilderFilter(this));\n\t\tthis._lineSimplifier.simplify(this._linestringMap.values());\n\t\tvar result = new LineStringTransformer(this._linestringMap).transform(this._inputGeom);\n\t\treturn result;\n\t}\n\tsetDistanceTolerance(distanceTolerance) {\n\t\tif (distanceTolerance < 0.0) throw new IllegalArgumentException(\"Tolerance must be non-negative\");\n\t\tthis._lineSimplifier.setDistanceTolerance(distanceTolerance);\n\t}\n\tgetClass() {\n\t\treturn TopologyPreservingSimplifier;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nclass LineStringTransformer extends GeometryTransformer {\n\tconstructor() {\n\t\tsuper();\n\t\tLineStringTransformer.constructor_.apply(this, arguments);\n\t}\n\ttransformCoordinates(coords, parent) {\n\t\tif (coords.size() === 0) return null;\n\t\tif (parent instanceof LineString) {\n\t\t\tvar taggedLine = this._linestringMap.get(parent);\n\t\t\treturn this.createCoordinateSequence(taggedLine.getResultCoordinates());\n\t\t}\n\t\treturn super.transformCoordinates.call(this, coords, parent);\n\t}\n\tgetClass() {\n\t\treturn LineStringTransformer;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nLineStringTransformer.constructor_ = function () {\n\tthis._linestringMap = null;\n\tlet linestringMap = arguments[0];\n\tthis._linestringMap = linestringMap;\n};\nclass LineStringMapBuilderFilter {\n\tconstructor() {\n\t\tLineStringMapBuilderFilter.constructor_.apply(this, arguments);\n\t}\n\tfilter(geom) {\n\t\tif (geom instanceof LineString) {\n\t\t\tvar line = geom;\n\t\t\tif (line.isEmpty()) return null;\n\t\t\tvar minSize = line.isClosed() ? 4 : 2;\n\t\t\tvar taggedLine = new TaggedLineString(line, minSize);\n\t\t\tthis.tps._linestringMap.put(line, taggedLine);\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn LineStringMapBuilderFilter;\n\t}\n\tget interfaces_() {\n\t\treturn [GeometryComponentFilter];\n\t}\n}\nLineStringMapBuilderFilter.constructor_ = function () {\n\tthis.tps = null;\n\tlet tps = arguments[0];\n\tthis.tps = tps;\n};\nTopologyPreservingSimplifier.LineStringTransformer = LineStringTransformer;\nTopologyPreservingSimplifier.LineStringMapBuilderFilter = LineStringMapBuilderFilter;\nTopologyPreservingSimplifier.constructor_ = function () {\n\tthis._inputGeom = null;\n\tthis._lineSimplifier = new TaggedLinesSimplifier();\n\tthis._linestringMap = null;\n\tlet inputGeom = arguments[0];\n\tthis._inputGeom = inputGeom;\n};\n","import Coordinate from '../geom/Coordinate';\nexport default class SplitSegment {\n\tconstructor() {\n\t\tSplitSegment.constructor_.apply(this, arguments);\n\t}\n\tstatic pointAlongReverse(seg, segmentLengthFraction) {\n\t\tvar coord = new Coordinate();\n\t\tcoord.x = seg.p1.x - segmentLengthFraction * (seg.p1.x - seg.p0.x);\n\t\tcoord.y = seg.p1.y - segmentLengthFraction * (seg.p1.y - seg.p0.y);\n\t\treturn coord;\n\t}\n\tsplitAt() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet pt = arguments[0];\n\t\t\tvar minFrac = this._minimumLen / this._segLen;\n\t\t\tif (pt.distance(this._seg.p0) < this._minimumLen) {\n\t\t\t\tthis._splitPt = this._seg.pointAlong(minFrac);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (pt.distance(this._seg.p1) < this._minimumLen) {\n\t\t\t\tthis._splitPt = SplitSegment.pointAlongReverse(this._seg, minFrac);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tthis._splitPt = pt;\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet length = arguments[0], endPt = arguments[1];\n\t\t\tvar actualLen = this.getConstrainedLength(length);\n\t\t\tvar frac = actualLen / this._segLen;\n\t\t\tif (endPt.equals2D(this._seg.p0)) this._splitPt = this._seg.pointAlong(frac); else this._splitPt = SplitSegment.pointAlongReverse(this._seg, frac);\n\t\t}\n\t}\n\tsetMinimumLength(minLen) {\n\t\tthis._minimumLen = minLen;\n\t}\n\tgetConstrainedLength(len) {\n\t\tif (len < this._minimumLen) return this._minimumLen;\n\t\treturn len;\n\t}\n\tgetSplitPoint() {\n\t\treturn this._splitPt;\n\t}\n\tgetClass() {\n\t\treturn SplitSegment;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nSplitSegment.constructor_ = function () {\n\tthis._seg = null;\n\tthis._segLen = null;\n\tthis._splitPt = null;\n\tthis._minimumLen = 0.0;\n\tlet seg = arguments[0];\n\tthis._seg = seg;\n\tthis._segLen = seg.getLength();\n};\n","export default class ConstraintSplitPointFinder {\n\tconstructor() {\n\t\tConstraintSplitPointFinder.constructor_.apply(this, arguments);\n\t}\n\tfindSplitPoint(seg, encroachPt) {}\n\tgetClass() {\n\t\treturn ConstraintSplitPointFinder;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nConstraintSplitPointFinder.constructor_ = function () {};\n","import SplitSegment from './SplitSegment';\nimport ConstraintSplitPointFinder from './ConstraintSplitPointFinder';\nexport default class NonEncroachingSplitPointFinder {\n\tconstructor() {\n\t\tNonEncroachingSplitPointFinder.constructor_.apply(this, arguments);\n\t}\n\tstatic projectedSplitPoint(seg, encroachPt) {\n\t\tvar lineSeg = seg.getLineSegment();\n\t\tvar projPt = lineSeg.project(encroachPt);\n\t\treturn projPt;\n\t}\n\tfindSplitPoint(seg, encroachPt) {\n\t\tvar lineSeg = seg.getLineSegment();\n\t\tvar segLen = lineSeg.getLength();\n\t\tvar midPtLen = segLen / 2;\n\t\tvar splitSeg = new SplitSegment(lineSeg);\n\t\tvar projPt = NonEncroachingSplitPointFinder.projectedSplitPoint(seg, encroachPt);\n\t\tvar nonEncroachDiam = projPt.distance(encroachPt) * 2 * 0.8;\n\t\tvar maxSplitLen = nonEncroachDiam;\n\t\tif (maxSplitLen > midPtLen) {\n\t\t\tmaxSplitLen = midPtLen;\n\t\t}\n\t\tsplitSeg.setMinimumLength(maxSplitLen);\n\t\tsplitSeg.splitAt(projPt);\n\t\treturn splitSeg.getSplitPoint();\n\t}\n\tgetClass() {\n\t\treturn NonEncroachingSplitPointFinder;\n\t}\n\tget interfaces_() {\n\t\treturn [ConstraintSplitPointFinder];\n\t}\n}\nNonEncroachingSplitPointFinder.constructor_ = function () {};\n","import WKTWriter from '../../io/WKTWriter';\nimport CoordinateArraySequence from '../../geom/impl/CoordinateArraySequence';\nimport DD from '../../math/DD';\nimport System from '../../../../../java/lang/System';\nimport Triangle from '../../geom/Triangle';\nexport default class TrianglePredicate {\n\tconstructor() {\n\t\tTrianglePredicate.constructor_.apply(this, arguments);\n\t}\n\tstatic triArea(a, b, c) {\n\t\treturn (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x);\n\t}\n\tstatic isInCircleDDNormalized(a, b, c, p) {\n\t\tvar adx = DD.valueOf(a.x).selfSubtract(p.x);\n\t\tvar ady = DD.valueOf(a.y).selfSubtract(p.y);\n\t\tvar bdx = DD.valueOf(b.x).selfSubtract(p.x);\n\t\tvar bdy = DD.valueOf(b.y).selfSubtract(p.y);\n\t\tvar cdx = DD.valueOf(c.x).selfSubtract(p.x);\n\t\tvar cdy = DD.valueOf(c.y).selfSubtract(p.y);\n\t\tvar abdet = adx.multiply(bdy).selfSubtract(bdx.multiply(ady));\n\t\tvar bcdet = bdx.multiply(cdy).selfSubtract(cdx.multiply(bdy));\n\t\tvar cadet = cdx.multiply(ady).selfSubtract(adx.multiply(cdy));\n\t\tvar alift = adx.multiply(adx).selfAdd(ady.multiply(ady));\n\t\tvar blift = bdx.multiply(bdx).selfAdd(bdy.multiply(bdy));\n\t\tvar clift = cdx.multiply(cdx).selfAdd(cdy.multiply(cdy));\n\t\tvar sum = alift.selfMultiply(bcdet).selfAdd(blift.selfMultiply(cadet)).selfAdd(clift.selfMultiply(abdet));\n\t\tvar isInCircle = sum.doubleValue() > 0;\n\t\treturn isInCircle;\n\t}\n\tstatic checkRobustInCircle(a, b, c, p) {\n\t\tvar nonRobustInCircle = TrianglePredicate.isInCircleNonRobust(a, b, c, p);\n\t\tvar isInCircleDD = TrianglePredicate.isInCircleDDSlow(a, b, c, p);\n\t\tvar isInCircleCC = TrianglePredicate.isInCircleCC(a, b, c, p);\n\t\tvar circumCentre = Triangle.circumcentre(a, b, c);\n\t\tSystem.out.println(\"p radius diff a = \" + Math.abs(p.distance(circumCentre) - a.distance(circumCentre)) / a.distance(circumCentre));\n\t\tif (nonRobustInCircle !== isInCircleDD || nonRobustInCircle !== isInCircleCC) {\n\t\t\tSystem.out.println(\"inCircle robustness failure (double result = \" + nonRobustInCircle + \", DD result = \" + isInCircleDD + \", CC result = \" + isInCircleCC + \")\");\n\t\t\tSystem.out.println(WKTWriter.toLineString(new CoordinateArraySequence([a, b, c, p])));\n\t\t\tSystem.out.println(\"Circumcentre = \" + WKTWriter.toPoint(circumCentre) + \" radius = \" + a.distance(circumCentre));\n\t\t\tSystem.out.println(\"p radius diff a = \" + Math.abs(p.distance(circumCentre) / a.distance(circumCentre) - 1));\n\t\t\tSystem.out.println(\"p radius diff b = \" + Math.abs(p.distance(circumCentre) / b.distance(circumCentre) - 1));\n\t\t\tSystem.out.println(\"p radius diff c = \" + Math.abs(p.distance(circumCentre) / c.distance(circumCentre) - 1));\n\t\t\tSystem.out.println();\n\t\t}\n\t}\n\tstatic isInCircleDDFast(a, b, c, p) {\n\t\tvar aTerm = DD.sqr(a.x).selfAdd(DD.sqr(a.y)).selfMultiply(TrianglePredicate.triAreaDDFast(b, c, p));\n\t\tvar bTerm = DD.sqr(b.x).selfAdd(DD.sqr(b.y)).selfMultiply(TrianglePredicate.triAreaDDFast(a, c, p));\n\t\tvar cTerm = DD.sqr(c.x).selfAdd(DD.sqr(c.y)).selfMultiply(TrianglePredicate.triAreaDDFast(a, b, p));\n\t\tvar pTerm = DD.sqr(p.x).selfAdd(DD.sqr(p.y)).selfMultiply(TrianglePredicate.triAreaDDFast(a, b, c));\n\t\tvar sum = aTerm.selfSubtract(bTerm).selfAdd(cTerm).selfSubtract(pTerm);\n\t\tvar isInCircle = sum.doubleValue() > 0;\n\t\treturn isInCircle;\n\t}\n\tstatic isInCircleCC(a, b, c, p) {\n\t\tvar cc = Triangle.circumcentre(a, b, c);\n\t\tvar ccRadius = a.distance(cc);\n\t\tvar pRadiusDiff = p.distance(cc) - ccRadius;\n\t\treturn pRadiusDiff <= 0;\n\t}\n\tstatic isInCircleNormalized(a, b, c, p) {\n\t\tvar adx = a.x - p.x;\n\t\tvar ady = a.y - p.y;\n\t\tvar bdx = b.x - p.x;\n\t\tvar bdy = b.y - p.y;\n\t\tvar cdx = c.x - p.x;\n\t\tvar cdy = c.y - p.y;\n\t\tvar abdet = adx * bdy - bdx * ady;\n\t\tvar bcdet = bdx * cdy - cdx * bdy;\n\t\tvar cadet = cdx * ady - adx * cdy;\n\t\tvar alift = adx * adx + ady * ady;\n\t\tvar blift = bdx * bdx + bdy * bdy;\n\t\tvar clift = cdx * cdx + cdy * cdy;\n\t\tvar disc = alift * bcdet + blift * cadet + clift * abdet;\n\t\treturn disc > 0;\n\t}\n\tstatic isInCircleDDSlow(a, b, c, p) {\n\t\tvar px = DD.valueOf(p.x);\n\t\tvar py = DD.valueOf(p.y);\n\t\tvar ax = DD.valueOf(a.x);\n\t\tvar ay = DD.valueOf(a.y);\n\t\tvar bx = DD.valueOf(b.x);\n\t\tvar by = DD.valueOf(b.y);\n\t\tvar cx = DD.valueOf(c.x);\n\t\tvar cy = DD.valueOf(c.y);\n\t\tvar aTerm = ax.multiply(ax).add(ay.multiply(ay)).multiply(TrianglePredicate.triAreaDDSlow(bx, by, cx, cy, px, py));\n\t\tvar bTerm = bx.multiply(bx).add(by.multiply(by)).multiply(TrianglePredicate.triAreaDDSlow(ax, ay, cx, cy, px, py));\n\t\tvar cTerm = cx.multiply(cx).add(cy.multiply(cy)).multiply(TrianglePredicate.triAreaDDSlow(ax, ay, bx, by, px, py));\n\t\tvar pTerm = px.multiply(px).add(py.multiply(py)).multiply(TrianglePredicate.triAreaDDSlow(ax, ay, bx, by, cx, cy));\n\t\tvar sum = aTerm.subtract(bTerm).add(cTerm).subtract(pTerm);\n\t\tvar isInCircle = sum.doubleValue() > 0;\n\t\treturn isInCircle;\n\t}\n\tstatic isInCircleNonRobust(a, b, c, p) {\n\t\tvar isInCircle = (a.x * a.x + a.y * a.y) * TrianglePredicate.triArea(b, c, p) - (b.x * b.x + b.y * b.y) * TrianglePredicate.triArea(a, c, p) + (c.x * c.x + c.y * c.y) * TrianglePredicate.triArea(a, b, p) - (p.x * p.x + p.y * p.y) * TrianglePredicate.triArea(a, b, c) > 0;\n\t\treturn isInCircle;\n\t}\n\tstatic isInCircleRobust(a, b, c, p) {\n\t\treturn TrianglePredicate.isInCircleNormalized(a, b, c, p);\n\t}\n\tstatic triAreaDDSlow(ax, ay, bx, by, cx, cy) {\n\t\treturn bx.subtract(ax).multiply(cy.subtract(ay)).subtract(by.subtract(ay).multiply(cx.subtract(ax)));\n\t}\n\tstatic triAreaDDFast(a, b, c) {\n\t\tvar t1 = DD.valueOf(b.x).selfSubtract(a.x).selfMultiply(DD.valueOf(c.y).selfSubtract(a.y));\n\t\tvar t2 = DD.valueOf(b.y).selfSubtract(a.y).selfMultiply(DD.valueOf(c.x).selfSubtract(a.x));\n\t\treturn t1.selfSubtract(t2);\n\t}\n\tgetClass() {\n\t\treturn TrianglePredicate;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nTrianglePredicate.constructor_ = function () {};\n","import NotRepresentableException from '../../algorithm/NotRepresentableException';\nimport Coordinate from '../../geom/Coordinate';\nimport TrianglePredicate from './TrianglePredicate';\nimport System from '../../../../../java/lang/System';\nimport HCoordinate from '../../algorithm/HCoordinate';\nexport default class Vertex {\n\tconstructor() {\n\t\tVertex.constructor_.apply(this, arguments);\n\t}\n\tstatic interpolateZ() {\n\t\tif (arguments.length === 3) {\n\t\t\tlet p = arguments[0], p0 = arguments[1], p1 = arguments[2];\n\t\t\tvar segLen = p0.distance(p1);\n\t\t\tvar ptLen = p.distance(p0);\n\t\t\tvar dz = p1.z - p0.z;\n\t\t\tvar pz = p0.z + dz * (ptLen / segLen);\n\t\t\treturn pz;\n\t\t} else if (arguments.length === 4) {\n\t\t\tlet p = arguments[0], v0 = arguments[1], v1 = arguments[2], v2 = arguments[3];\n\t\t\tvar x0 = v0.x;\n\t\t\tvar y0 = v0.y;\n\t\t\tvar a = v1.x - x0;\n\t\t\tvar b = v2.x - x0;\n\t\t\tvar c = v1.y - y0;\n\t\t\tvar d = v2.y - y0;\n\t\t\tvar det = a * d - b * c;\n\t\t\tvar dx = p.x - x0;\n\t\t\tvar dy = p.y - y0;\n\t\t\tvar t = (d * dx - b * dy) / det;\n\t\t\tvar u = (-c * dx + a * dy) / det;\n\t\t\tvar z = v0.z + t * (v1.z - v0.z) + u * (v2.z - v0.z);\n\t\t\treturn z;\n\t\t}\n\t}\n\tcircleCenter(b, c) {\n\t\tvar a = new Vertex(this.getX(), this.getY());\n\t\tvar cab = this.bisector(a, b);\n\t\tvar cbc = this.bisector(b, c);\n\t\tvar hcc = new HCoordinate(cab, cbc);\n\t\tvar cc = null;\n\t\ttry {\n\t\t\tcc = new Vertex(hcc.getX(), hcc.getY());\n\t\t} catch (nre) {\n\t\t\tif (nre instanceof NotRepresentableException) {\n\t\t\t\tSystem.err.println(\"a: \" + a + \" b: \" + b + \" c: \" + c);\n\t\t\t\tSystem.err.println(nre);\n\t\t\t} else throw nre;\n\t\t} finally {}\n\t\treturn cc;\n\t}\n\tdot(v) {\n\t\treturn this._p.x * v.getX() + this._p.y * v.getY();\n\t}\n\tmagn() {\n\t\treturn Math.sqrt(this._p.x * this._p.x + this._p.y * this._p.y);\n\t}\n\tgetZ() {\n\t\treturn this._p.z;\n\t}\n\tbisector(a, b) {\n\t\tvar dx = b.getX() - a.getX();\n\t\tvar dy = b.getY() - a.getY();\n\t\tvar l1 = new HCoordinate(a.getX() + dx / 2.0, a.getY() + dy / 2.0, 1.0);\n\t\tvar l2 = new HCoordinate(a.getX() - dy + dx / 2.0, a.getY() + dx + dy / 2.0, 1.0);\n\t\treturn new HCoordinate(l1, l2);\n\t}\n\tequals() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet _x = arguments[0];\n\t\t\tif (this._p.x === _x.getX() && this._p.y === _x.getY()) {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet _x = arguments[0], tolerance = arguments[1];\n\t\t\tif (this._p.distance(_x.getCoordinate()) < tolerance) {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\tgetCoordinate() {\n\t\treturn this._p;\n\t}\n\tisInCircle(a, b, c) {\n\t\treturn TrianglePredicate.isInCircleRobust(a._p, b._p, c._p, this._p);\n\t}\n\tinterpolateZValue(v0, v1, v2) {\n\t\tvar x0 = v0.getX();\n\t\tvar y0 = v0.getY();\n\t\tvar a = v1.getX() - x0;\n\t\tvar b = v2.getX() - x0;\n\t\tvar c = v1.getY() - y0;\n\t\tvar d = v2.getY() - y0;\n\t\tvar det = a * d - b * c;\n\t\tvar dx = this.getX() - x0;\n\t\tvar dy = this.getY() - y0;\n\t\tvar t = (d * dx - b * dy) / det;\n\t\tvar u = (-c * dx + a * dy) / det;\n\t\tvar z = v0.getZ() + t * (v1.getZ() - v0.getZ()) + u * (v2.getZ() - v0.getZ());\n\t\treturn z;\n\t}\n\tmidPoint(a) {\n\t\tvar xm = (this._p.x + a.getX()) / 2.0;\n\t\tvar ym = (this._p.y + a.getY()) / 2.0;\n\t\tvar zm = (this._p.z + a.getZ()) / 2.0;\n\t\treturn new Vertex(xm, ym, zm);\n\t}\n\trightOf(e) {\n\t\treturn this.isCCW(e.dest(), e.orig());\n\t}\n\tisCCW(b, c) {\n\t\treturn (b._p.x - this._p.x) * (c._p.y - this._p.y) - (b._p.y - this._p.y) * (c._p.x - this._p.x) > 0;\n\t}\n\tgetX() {\n\t\treturn this._p.x;\n\t}\n\tcrossProduct(v) {\n\t\treturn this._p.x * v.getY() - this._p.y * v.getX();\n\t}\n\tsetZ(_z) {\n\t\tthis._p.z = _z;\n\t}\n\ttimes(c) {\n\t\treturn new Vertex(c * this._p.x, c * this._p.y);\n\t}\n\tcross() {\n\t\treturn new Vertex(this._p.y, -this._p.x);\n\t}\n\tleftOf(e) {\n\t\treturn this.isCCW(e.orig(), e.dest());\n\t}\n\ttoString() {\n\t\treturn \"POINT (\" + this._p.x + \" \" + this._p.y + \")\";\n\t}\n\tsub(v) {\n\t\treturn new Vertex(this._p.x - v.getX(), this._p.y - v.getY());\n\t}\n\tgetY() {\n\t\treturn this._p.y;\n\t}\n\tclassify(p0, p1) {\n\t\tvar p2 = this;\n\t\tvar a = p1.sub(p0);\n\t\tvar b = p2.sub(p0);\n\t\tvar sa = a.crossProduct(b);\n\t\tif (sa > 0.0) return Vertex.LEFT;\n\t\tif (sa < 0.0) return Vertex.RIGHT;\n\t\tif (a.getX() * b.getX() < 0.0 || a.getY() * b.getY() < 0.0) return Vertex.BEHIND;\n\t\tif (a.magn() < b.magn()) return Vertex.BEYOND;\n\t\tif (p0.equals(p2)) return Vertex.ORIGIN;\n\t\tif (p1.equals(p2)) return Vertex.DESTINATION;\n\t\treturn Vertex.BETWEEN;\n\t}\n\tsum(v) {\n\t\treturn new Vertex(this._p.x + v.getX(), this._p.y + v.getY());\n\t}\n\tdistance(v1, v2) {\n\t\treturn Math.sqrt(Math.pow(v2.getX() - v1.getX(), 2.0) + Math.pow(v2.getY() - v1.getY(), 2.0));\n\t}\n\tcircumRadiusRatio(b, c) {\n\t\tvar x = this.circleCenter(b, c);\n\t\tvar radius = this.distance(x, b);\n\t\tvar edgeLength = this.distance(this, b);\n\t\tvar el = this.distance(b, c);\n\t\tif (el < edgeLength) {\n\t\t\tedgeLength = el;\n\t\t}\n\t\tel = this.distance(c, this);\n\t\tif (el < edgeLength) {\n\t\t\tedgeLength = el;\n\t\t}\n\t\treturn radius / edgeLength;\n\t}\n\tgetClass() {\n\t\treturn Vertex;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nVertex.constructor_ = function () {\n\tthis._p = null;\n\tif (arguments.length === 1) {\n\t\tlet _p = arguments[0];\n\t\tthis._p = new Coordinate(_p);\n\t} else if (arguments.length === 2) {\n\t\tlet _x = arguments[0], _y = arguments[1];\n\t\tthis._p = new Coordinate(_x, _y);\n\t} else if (arguments.length === 3) {\n\t\tlet _x = arguments[0], _y = arguments[1], _z = arguments[2];\n\t\tthis._p = new Coordinate(_x, _y, _z);\n\t}\n};\nVertex.LEFT = 0;\nVertex.RIGHT = 1;\nVertex.BEYOND = 2;\nVertex.BEHIND = 3;\nVertex.BETWEEN = 4;\nVertex.ORIGIN = 5;\nVertex.DESTINATION = 6;\n","import Vertex from './quadedge/Vertex';\nexport default class ConstraintVertex extends Vertex {\n\tconstructor() {\n\t\tsuper();\n\t\tConstraintVertex.constructor_.apply(this, arguments);\n\t}\n\tgetConstraint() {\n\t\treturn this._constraint;\n\t}\n\tsetOnConstraint(isOnConstraint) {\n\t\tthis._isOnConstraint = isOnConstraint;\n\t}\n\tmerge(other) {\n\t\tif (other._isOnConstraint) {\n\t\t\tthis._isOnConstraint = true;\n\t\t\tthis._constraint = other._constraint;\n\t\t}\n\t}\n\tisOnConstraint() {\n\t\treturn this._isOnConstraint;\n\t}\n\tsetConstraint(constraint) {\n\t\tthis._isOnConstraint = true;\n\t\tthis._constraint = constraint;\n\t}\n\tgetClass() {\n\t\treturn ConstraintVertex;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nConstraintVertex.constructor_ = function () {\n\tthis._isOnConstraint = null;\n\tthis._constraint = null;\n\tlet p = arguments[0];\n\tVertex.constructor_.call(this, p);\n};\n","import WKTWriter from '../../io/WKTWriter';\nimport LineSegment from '../../geom/LineSegment';\nexport default class QuadEdge {\n\tconstructor() {\n\t\tQuadEdge.constructor_.apply(this, arguments);\n\t}\n\tstatic makeEdge(o, d) {\n\t\tvar q0 = new QuadEdge();\n\t\tvar q1 = new QuadEdge();\n\t\tvar q2 = new QuadEdge();\n\t\tvar q3 = new QuadEdge();\n\t\tq0._rot = q1;\n\t\tq1._rot = q2;\n\t\tq2._rot = q3;\n\t\tq3._rot = q0;\n\t\tq0.setNext(q0);\n\t\tq1.setNext(q3);\n\t\tq2.setNext(q2);\n\t\tq3.setNext(q1);\n\t\tvar base = q0;\n\t\tbase.setOrig(o);\n\t\tbase.setDest(d);\n\t\treturn base;\n\t}\n\tstatic swap(e) {\n\t\tvar a = e.oPrev();\n\t\tvar b = e.sym().oPrev();\n\t\tQuadEdge.splice(e, a);\n\t\tQuadEdge.splice(e.sym(), b);\n\t\tQuadEdge.splice(e, a.lNext());\n\t\tQuadEdge.splice(e.sym(), b.lNext());\n\t\te.setOrig(a.dest());\n\t\te.setDest(b.dest());\n\t}\n\tstatic splice(a, b) {\n\t\tvar alpha = a.oNext().rot();\n\t\tvar beta = b.oNext().rot();\n\t\tvar t1 = b.oNext();\n\t\tvar t2 = a.oNext();\n\t\tvar t3 = beta.oNext();\n\t\tvar t4 = alpha.oNext();\n\t\ta.setNext(t1);\n\t\tb.setNext(t2);\n\t\talpha.setNext(t3);\n\t\tbeta.setNext(t4);\n\t}\n\tstatic connect(a, b) {\n\t\tvar e = QuadEdge.makeEdge(a.dest(), b.orig());\n\t\tQuadEdge.splice(e, a.lNext());\n\t\tQuadEdge.splice(e.sym(), b);\n\t\treturn e;\n\t}\n\tequalsNonOriented(qe) {\n\t\tif (this.equalsOriented(qe)) return true;\n\t\tif (this.equalsOriented(qe.sym())) return true;\n\t\treturn false;\n\t}\n\ttoLineSegment() {\n\t\treturn new LineSegment(this._vertex.getCoordinate(), this.dest().getCoordinate());\n\t}\n\tdest() {\n\t\treturn this.sym().orig();\n\t}\n\toNext() {\n\t\treturn this._next;\n\t}\n\tequalsOriented(qe) {\n\t\tif (this.orig().getCoordinate().equals2D(qe.orig().getCoordinate()) && this.dest().getCoordinate().equals2D(qe.dest().getCoordinate())) return true;\n\t\treturn false;\n\t}\n\tdNext() {\n\t\treturn this.sym().oNext().sym();\n\t}\n\tlPrev() {\n\t\treturn this._next.sym();\n\t}\n\trPrev() {\n\t\treturn this.sym().oNext();\n\t}\n\trot() {\n\t\treturn this._rot;\n\t}\n\toPrev() {\n\t\treturn this._rot._next._rot;\n\t}\n\tsym() {\n\t\treturn this._rot._rot;\n\t}\n\tsetOrig(o) {\n\t\tthis._vertex = o;\n\t}\n\tlNext() {\n\t\treturn this.invRot().oNext().rot();\n\t}\n\tgetLength() {\n\t\treturn this.orig().getCoordinate().distance(this.dest().getCoordinate());\n\t}\n\tinvRot() {\n\t\treturn this._rot.sym();\n\t}\n\tsetDest(d) {\n\t\tthis.sym().setOrig(d);\n\t}\n\tsetData(data) {\n\t\tthis._data = data;\n\t}\n\tgetData() {\n\t\treturn this._data;\n\t}\n\tdelete() {\n\t\tthis._rot = null;\n\t}\n\torig() {\n\t\treturn this._vertex;\n\t}\n\trNext() {\n\t\treturn this._rot._next.invRot();\n\t}\n\ttoString() {\n\t\tvar p0 = this._vertex.getCoordinate();\n\t\tvar p1 = this.dest().getCoordinate();\n\t\treturn WKTWriter.toLineString(p0, p1);\n\t}\n\tisLive() {\n\t\treturn this._rot !== null;\n\t}\n\tgetPrimary() {\n\t\tif (this.orig().getCoordinate().compareTo(this.dest().getCoordinate()) <= 0) return this; else return this.sym();\n\t}\n\tdPrev() {\n\t\treturn this.invRot().oNext().invRot();\n\t}\n\tsetNext(next) {\n\t\tthis._next = next;\n\t}\n\tgetClass() {\n\t\treturn QuadEdge;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nQuadEdge.constructor_ = function () {\n\tthis._rot = null;\n\tthis._vertex = null;\n\tthis._next = null;\n\tthis._data = null;\n};\n","import QuadEdge from './quadedge/QuadEdge';\nexport default class IncrementalDelaunayTriangulator {\n\tconstructor() {\n\t\tIncrementalDelaunayTriangulator.constructor_.apply(this, arguments);\n\t}\n\tinsertSite(v) {\n\t\tvar e = this._subdiv.locate(v);\n\t\tif (this._subdiv.isVertexOfEdge(e, v)) {\n\t\t\treturn e;\n\t\t} else if (this._subdiv.isOnEdge(e, v.getCoordinate())) {\n\t\t\te = e.oPrev();\n\t\t\tthis._subdiv.delete(e.oNext());\n\t\t}\n\t\tvar base = this._subdiv.makeEdge(e.orig(), v);\n\t\tQuadEdge.splice(base, e);\n\t\tvar startEdge = base;\n\t\tdo {\n\t\t\tbase = this._subdiv.connect(e, base.sym());\n\t\t\te = base.oPrev();\n\t\t} while (e.lNext() !== startEdge);\n\t\tdo {\n\t\t\tvar t = e.oPrev();\n\t\t\tif (t.dest().rightOf(e) && v.isInCircle(e.orig(), t.dest(), e.dest())) {\n\t\t\t\tQuadEdge.swap(e);\n\t\t\t\te = e.oPrev();\n\t\t\t} else if (e.oNext() === startEdge) {\n\t\t\t\treturn base;\n\t\t\t} else {\n\t\t\t\te = e.oNext().lPrev();\n\t\t\t}\n\t\t} while (true);\n\t}\n\tinsertSites(vertices) {\n\t\tfor (var i = vertices.iterator(); i.hasNext(); ) {\n\t\t\tvar v = i.next();\n\t\t\tthis.insertSite(v);\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn IncrementalDelaunayTriangulator;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nIncrementalDelaunayTriangulator.constructor_ = function () {\n\tthis._subdiv = null;\n\tthis._isUsingTolerance = false;\n\tlet subdiv = arguments[0];\n\tthis._subdiv = subdiv;\n\tthis._isUsingTolerance = subdiv.getTolerance() > 0.0;\n};\n","export default class QuadEdgeLocator {\n\tconstructor() {\n\t\tQuadEdgeLocator.constructor_.apply(this, arguments);\n\t}\n\tlocate(v) {}\n\tgetClass() {\n\t\treturn QuadEdgeLocator;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nQuadEdgeLocator.constructor_ = function () {};\n","import QuadEdgeLocator from './QuadEdgeLocator';\nexport default class LastFoundQuadEdgeLocator {\n\tconstructor() {\n\t\tLastFoundQuadEdgeLocator.constructor_.apply(this, arguments);\n\t}\n\tinit() {\n\t\tthis._lastEdge = this.findEdge();\n\t}\n\tlocate(v) {\n\t\tif (!this._lastEdge.isLive()) {\n\t\t\tthis.init();\n\t\t}\n\t\tvar e = this._subdiv.locateFromEdge(v, this._lastEdge);\n\t\tthis._lastEdge = e;\n\t\treturn e;\n\t}\n\tfindEdge() {\n\t\tvar edges = this._subdiv.getEdges();\n\t\treturn edges.iterator().next();\n\t}\n\tgetClass() {\n\t\treturn LastFoundQuadEdgeLocator;\n\t}\n\tget interfaces_() {\n\t\treturn [QuadEdgeLocator];\n\t}\n}\nLastFoundQuadEdgeLocator.constructor_ = function () {\n\tthis._subdiv = null;\n\tthis._lastEdge = null;\n\tlet subdiv = arguments[0];\n\tthis._subdiv = subdiv;\n\tthis.init();\n};\n","import LineSegment from '../../geom/LineSegment';\nimport RuntimeException from '../../../../../java/lang/RuntimeException';\nexport default class LocateFailureException extends RuntimeException {\n\tconstructor() {\n\t\tsuper();\n\t\tLocateFailureException.constructor_.apply(this, arguments);\n\t}\n\tstatic msgWithSpatial(msg, seg) {\n\t\tif (seg !== null) return msg + \" [ \" + seg + \" ]\";\n\t\treturn msg;\n\t}\n\tgetSegment() {\n\t\treturn this._seg;\n\t}\n\tgetClass() {\n\t\treturn LocateFailureException;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nLocateFailureException.constructor_ = function () {\n\tthis._seg = null;\n\tif (arguments.length === 1) {\n\t\tif (typeof arguments[0] === \"string\") {\n\t\t\tlet msg = arguments[0];\n\t\t\tRuntimeException.constructor_.call(this, msg);\n\t\t} else if (arguments[0] instanceof LineSegment) {\n\t\t\tlet seg = arguments[0];\n\t\t\tRuntimeException.constructor_.call(this, \"Locate failed to converge (at edge: \" + seg + \"). Possible causes include invalid Subdivision topology or very close sites\");\n\t\t\tthis._seg = new LineSegment(seg);\n\t\t}\n\t} else if (arguments.length === 2) {\n\t\tlet msg = arguments[0], seg = arguments[1];\n\t\tRuntimeException.constructor_.call(this, LocateFailureException.msgWithSpatial(msg, seg));\n\t\tthis._seg = new LineSegment(seg);\n\t}\n};\n","export default class TriangleVisitor {\n\tconstructor() {\n\t\tTriangleVisitor.constructor_.apply(this, arguments);\n\t}\n\tvisit(triEdges) {}\n\tgetClass() {\n\t\treturn TriangleVisitor;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nTriangleVisitor.constructor_ = function () {};\n","import QuadEdge from './QuadEdge';\nimport CoordinateList from '../../geom/CoordinateList';\nimport HashSet from '../../../../../java/util/HashSet';\nimport WKTWriter from '../../io/WKTWriter';\nimport GeometryFactory from '../../geom/GeometryFactory';\nimport Coordinate from '../../geom/Coordinate';\nimport IllegalArgumentException from '../../../../../java/lang/IllegalArgumentException';\nimport Stack from '../../../../../java/util/Stack';\nimport LastFoundQuadEdgeLocator from './LastFoundQuadEdgeLocator';\nimport LocateFailureException from './LocateFailureException';\nimport Vertex from './Vertex';\nimport System from '../../../../../java/lang/System';\nimport LineSegment from '../../geom/LineSegment';\nimport ArrayList from '../../../../../java/util/ArrayList';\nimport Envelope from '../../geom/Envelope';\nimport Triangle from '../../geom/Triangle';\nimport TriangleVisitor from './TriangleVisitor';\nexport default class QuadEdgeSubdivision {\n\tconstructor() {\n\t\tQuadEdgeSubdivision.constructor_.apply(this, arguments);\n\t}\n\tstatic getTriangleEdges(startQE, triEdge) {\n\t\ttriEdge[0] = startQE;\n\t\ttriEdge[1] = triEdge[0].lNext();\n\t\ttriEdge[2] = triEdge[1].lNext();\n\t\tif (triEdge[2].lNext() !== triEdge[0]) throw new IllegalArgumentException(\"Edges do not form a triangle\");\n\t}\n\tgetTriangleVertices(includeFrame) {\n\t\tvar visitor = new TriangleVertexListVisitor();\n\t\tthis.visitTriangles(visitor, includeFrame);\n\t\treturn visitor.getTriangleVertices();\n\t}\n\tisFrameVertex(v) {\n\t\tif (v.equals(this._frameVertex[0])) return true;\n\t\tif (v.equals(this._frameVertex[1])) return true;\n\t\tif (v.equals(this._frameVertex[2])) return true;\n\t\treturn false;\n\t}\n\tisVertexOfEdge(e, v) {\n\t\tif (v.equals(e.orig(), this._tolerance) || v.equals(e.dest(), this._tolerance)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tconnect(a, b) {\n\t\tvar q = QuadEdge.connect(a, b);\n\t\tthis._quadEdges.add(q);\n\t\treturn q;\n\t}\n\tgetVoronoiCellPolygon(qe, geomFact) {\n\t\tvar cellPts = new ArrayList();\n\t\tvar startQE = qe;\n\t\tdo {\n\t\t\tvar cc = qe.rot().orig().getCoordinate();\n\t\t\tcellPts.add(cc);\n\t\t\tqe = qe.oPrev();\n\t\t} while (qe !== startQE);\n\t\tvar coordList = new CoordinateList();\n\t\tcoordList.addAll(cellPts, false);\n\t\tcoordList.closeRing();\n\t\tif (coordList.size() < 4) {\n\t\t\tSystem.out.println(coordList);\n\t\t\tcoordList.add(coordList.get(coordList.size() - 1), true);\n\t\t}\n\t\tvar pts = coordList.toCoordinateArray();\n\t\tvar cellPoly = geomFact.createPolygon(geomFact.createLinearRing(pts));\n\t\tvar v = startQE.orig();\n\t\tcellPoly.setUserData(v.getCoordinate());\n\t\treturn cellPoly;\n\t}\n\tsetLocator(locator) {\n\t\tthis._locator = locator;\n\t}\n\tinitSubdiv() {\n\t\tvar ea = this.makeEdge(this._frameVertex[0], this._frameVertex[1]);\n\t\tvar eb = this.makeEdge(this._frameVertex[1], this._frameVertex[2]);\n\t\tQuadEdge.splice(ea.sym(), eb);\n\t\tvar ec = this.makeEdge(this._frameVertex[2], this._frameVertex[0]);\n\t\tQuadEdge.splice(eb.sym(), ec);\n\t\tQuadEdge.splice(ec.sym(), ea);\n\t\treturn ea;\n\t}\n\tisFrameBorderEdge(e) {\n\t\tvar leftTri = new Array(3).fill(null);\n\t\tQuadEdgeSubdivision.getTriangleEdges(e, leftTri);\n\t\tvar rightTri = new Array(3).fill(null);\n\t\tQuadEdgeSubdivision.getTriangleEdges(e.sym(), rightTri);\n\t\tvar vLeftTriOther = e.lNext().dest();\n\t\tif (this.isFrameVertex(vLeftTriOther)) return true;\n\t\tvar vRightTriOther = e.sym().lNext().dest();\n\t\tif (this.isFrameVertex(vRightTriOther)) return true;\n\t\treturn false;\n\t}\n\tmakeEdge(o, d) {\n\t\tvar q = QuadEdge.makeEdge(o, d);\n\t\tthis._quadEdges.add(q);\n\t\treturn q;\n\t}\n\tvisitTriangles(triVisitor, includeFrame) {\n\t\tthis._visitedKey++;\n\t\tvar edgeStack = new Stack();\n\t\tedgeStack.push(this._startingEdge);\n\t\tvar visitedEdges = new HashSet();\n\t\twhile (!edgeStack.empty()) {\n\t\t\tvar edge = edgeStack.pop();\n\t\t\tif (!visitedEdges.contains(edge)) {\n\t\t\t\tvar triEdges = this.fetchTriangleToVisit(edge, edgeStack, includeFrame, visitedEdges);\n\t\t\t\tif (triEdges !== null) triVisitor.visit(triEdges);\n\t\t\t}\n\t\t}\n\t}\n\tisFrameEdge(e) {\n\t\tif (this.isFrameVertex(e.orig()) || this.isFrameVertex(e.dest())) return true;\n\t\treturn false;\n\t}\n\tisOnEdge(e, p) {\n\t\tthis._seg.setCoordinates(e.orig().getCoordinate(), e.dest().getCoordinate());\n\t\tvar dist = this._seg.distance(p);\n\t\treturn dist < this._edgeCoincidenceTolerance;\n\t}\n\tgetEnvelope() {\n\t\treturn new Envelope(this._frameEnv);\n\t}\n\tcreateFrame(env) {\n\t\tvar deltaX = env.getWidth();\n\t\tvar deltaY = env.getHeight();\n\t\tvar offset = 0.0;\n\t\tif (deltaX > deltaY) {\n\t\t\toffset = deltaX * 10.0;\n\t\t} else {\n\t\t\toffset = deltaY * 10.0;\n\t\t}\n\t\tthis._frameVertex[0] = new Vertex((env.getMaxX() + env.getMinX()) / 2.0, env.getMaxY() + offset);\n\t\tthis._frameVertex[1] = new Vertex(env.getMinX() - offset, env.getMinY() - offset);\n\t\tthis._frameVertex[2] = new Vertex(env.getMaxX() + offset, env.getMinY() - offset);\n\t\tthis._frameEnv = new Envelope(this._frameVertex[0].getCoordinate(), this._frameVertex[1].getCoordinate());\n\t\tthis._frameEnv.expandToInclude(this._frameVertex[2].getCoordinate());\n\t}\n\tgetTriangleCoordinates(includeFrame) {\n\t\tvar visitor = new TriangleCoordinatesVisitor();\n\t\tthis.visitTriangles(visitor, includeFrame);\n\t\treturn visitor.getTriangles();\n\t}\n\tgetVertices(includeFrame) {\n\t\tvar vertices = new HashSet();\n\t\tfor (var i = this._quadEdges.iterator(); i.hasNext(); ) {\n\t\t\tvar qe = i.next();\n\t\t\tvar v = qe.orig();\n\t\t\tif (includeFrame || !this.isFrameVertex(v)) vertices.add(v);\n\t\t\tvar vd = qe.dest();\n\t\t\tif (includeFrame || !this.isFrameVertex(vd)) vertices.add(vd);\n\t\t}\n\t\treturn vertices;\n\t}\n\tfetchTriangleToVisit(edge, edgeStack, includeFrame, visitedEdges) {\n\t\tvar curr = edge;\n\t\tvar edgeCount = 0;\n\t\tvar isFrame = false;\n\t\tdo {\n\t\t\tthis._triEdges[edgeCount] = curr;\n\t\t\tif (this.isFrameEdge(curr)) isFrame = true;\n\t\t\tvar sym = curr.sym();\n\t\t\tif (!visitedEdges.contains(sym)) edgeStack.push(sym);\n\t\t\tvisitedEdges.add(curr);\n\t\t\tedgeCount++;\n\t\t\tcurr = curr.lNext();\n\t\t} while (curr !== edge);\n\t\tif (isFrame && !includeFrame) return null;\n\t\treturn this._triEdges;\n\t}\n\tgetEdges() {\n\t\tif (arguments.length === 0) {\n\t\t\treturn this._quadEdges;\n\t\t} else if (arguments.length === 1) {\n\t\t\tlet geomFact = arguments[0];\n\t\t\tvar quadEdges = this.getPrimaryEdges(false);\n\t\t\tvar edges = new Array(quadEdges.size()).fill(null);\n\t\t\tvar i = 0;\n\t\t\tfor (var it = quadEdges.iterator(); it.hasNext(); ) {\n\t\t\t\tvar qe = it.next();\n\t\t\t\tedges[i++] = geomFact.createLineString([qe.orig().getCoordinate(), qe.dest().getCoordinate()]);\n\t\t\t}\n\t\t\treturn geomFact.createMultiLineString(edges);\n\t\t}\n\t}\n\tgetVertexUniqueEdges(includeFrame) {\n\t\tvar edges = new ArrayList();\n\t\tvar visitedVertices = new HashSet();\n\t\tfor (var i = this._quadEdges.iterator(); i.hasNext(); ) {\n\t\t\tvar qe = i.next();\n\t\t\tvar v = qe.orig();\n\t\t\tif (!visitedVertices.contains(v)) {\n\t\t\t\tvisitedVertices.add(v);\n\t\t\t\tif (includeFrame || !this.isFrameVertex(v)) {\n\t\t\t\t\tedges.add(qe);\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar qd = qe.sym();\n\t\t\tvar vd = qd.orig();\n\t\t\tif (!visitedVertices.contains(vd)) {\n\t\t\t\tvisitedVertices.add(vd);\n\t\t\t\tif (includeFrame || !this.isFrameVertex(vd)) {\n\t\t\t\t\tedges.add(qd);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn edges;\n\t}\n\tgetTriangleEdges(includeFrame) {\n\t\tvar visitor = new TriangleEdgesListVisitor();\n\t\tthis.visitTriangles(visitor, includeFrame);\n\t\treturn visitor.getTriangleEdges();\n\t}\n\tgetPrimaryEdges(includeFrame) {\n\t\tthis._visitedKey++;\n\t\tvar edges = new ArrayList();\n\t\tvar edgeStack = new Stack();\n\t\tedgeStack.push(this._startingEdge);\n\t\tvar visitedEdges = new HashSet();\n\t\twhile (!edgeStack.empty()) {\n\t\t\tvar edge = edgeStack.pop();\n\t\t\tif (!visitedEdges.contains(edge)) {\n\t\t\t\tvar priQE = edge.getPrimary();\n\t\t\t\tif (includeFrame || !this.isFrameEdge(priQE)) edges.add(priQE);\n\t\t\t\tedgeStack.push(edge.oNext());\n\t\t\t\tedgeStack.push(edge.sym().oNext());\n\t\t\t\tvisitedEdges.add(edge);\n\t\t\t\tvisitedEdges.add(edge.sym());\n\t\t\t}\n\t\t}\n\t\treturn edges;\n\t}\n\tdelete(e) {\n\t\tQuadEdge.splice(e, e.oPrev());\n\t\tQuadEdge.splice(e.sym(), e.sym().oPrev());\n\t\tvar eSym = e.sym();\n\t\tvar eRot = e.rot();\n\t\tvar eRotSym = e.rot().sym();\n\t\tthis._quadEdges.remove(e);\n\t\tthis._quadEdges.remove(eSym);\n\t\tthis._quadEdges.remove(eRot);\n\t\tthis._quadEdges.remove(eRotSym);\n\t\te.delete();\n\t\teSym.delete();\n\t\teRot.delete();\n\t\teRotSym.delete();\n\t}\n\tlocateFromEdge(v, startEdge) {\n\t\tvar iter = 0;\n\t\tvar maxIter = this._quadEdges.size();\n\t\tvar e = startEdge;\n\t\twhile (true) {\n\t\t\titer++;\n\t\t\tif (iter > maxIter) {\n\t\t\t\tthrow new LocateFailureException(e.toLineSegment());\n\t\t\t}\n\t\t\tif (v.equals(e.orig()) || v.equals(e.dest())) {\n\t\t\t\tbreak;\n\t\t\t} else if (v.rightOf(e)) {\n\t\t\t\te = e.sym();\n\t\t\t} else if (!v.rightOf(e.oNext())) {\n\t\t\t\te = e.oNext();\n\t\t\t} else if (!v.rightOf(e.dPrev())) {\n\t\t\t\te = e.dPrev();\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn e;\n\t}\n\tgetTolerance() {\n\t\treturn this._tolerance;\n\t}\n\tgetVoronoiCellPolygons(geomFact) {\n\t\tthis.visitTriangles(new TriangleCircumcentreVisitor(), true);\n\t\tvar cells = new ArrayList();\n\t\tvar edges = this.getVertexUniqueEdges(false);\n\t\tfor (var i = edges.iterator(); i.hasNext(); ) {\n\t\t\tvar qe = i.next();\n\t\t\tcells.add(this.getVoronoiCellPolygon(qe, geomFact));\n\t\t}\n\t\treturn cells;\n\t}\n\tgetVoronoiDiagram(geomFact) {\n\t\tvar vorCells = this.getVoronoiCellPolygons(geomFact);\n\t\treturn geomFact.createGeometryCollection(GeometryFactory.toGeometryArray(vorCells));\n\t}\n\tgetTriangles(geomFact) {\n\t\tvar triPtsList = this.getTriangleCoordinates(false);\n\t\tvar tris = new Array(triPtsList.size()).fill(null);\n\t\tvar i = 0;\n\t\tfor (var it = triPtsList.iterator(); it.hasNext(); ) {\n\t\t\tvar triPt = it.next();\n\t\t\ttris[i++] = geomFact.createPolygon(geomFact.createLinearRing(triPt));\n\t\t}\n\t\treturn geomFact.createGeometryCollection(tris);\n\t}\n\tinsertSite(v) {\n\t\tvar e = this.locate(v);\n\t\tif (v.equals(e.orig(), this._tolerance) || v.equals(e.dest(), this._tolerance)) {\n\t\t\treturn e;\n\t\t}\n\t\tvar base = this.makeEdge(e.orig(), v);\n\t\tQuadEdge.splice(base, e);\n\t\tvar startEdge = base;\n\t\tdo {\n\t\t\tbase = this.connect(e, base.sym());\n\t\t\te = base.oPrev();\n\t\t} while (e.lNext() !== startEdge);\n\t\treturn startEdge;\n\t}\n\tlocate() {\n\t\tif (arguments.length === 1) {\n\t\t\tif (arguments[0] instanceof Vertex) {\n\t\t\t\tlet v = arguments[0];\n\t\t\t\treturn this._locator.locate(v);\n\t\t\t} else if (arguments[0] instanceof Coordinate) {\n\t\t\t\tlet p = arguments[0];\n\t\t\t\treturn this._locator.locate(new Vertex(p));\n\t\t\t}\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet p0 = arguments[0], p1 = arguments[1];\n\t\t\tvar e = this._locator.locate(new Vertex(p0));\n\t\t\tif (e === null) return null;\n\t\t\tvar base = e;\n\t\t\tif (e.dest().getCoordinate().equals2D(p0)) base = e.sym();\n\t\t\tvar locEdge = base;\n\t\t\tdo {\n\t\t\t\tif (locEdge.dest().getCoordinate().equals2D(p1)) return locEdge;\n\t\t\t\tlocEdge = locEdge.oNext();\n\t\t\t} while (locEdge !== base);\n\t\t\treturn null;\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn QuadEdgeSubdivision;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nclass TriangleCircumcentreVisitor {\n\tconstructor() {\n\t\tTriangleCircumcentreVisitor.constructor_.apply(this, arguments);\n\t}\n\tvisit(triEdges) {\n\t\tvar a = triEdges[0].orig().getCoordinate();\n\t\tvar b = triEdges[1].orig().getCoordinate();\n\t\tvar c = triEdges[2].orig().getCoordinate();\n\t\tvar cc = Triangle.circumcentre(a, b, c);\n\t\tvar ccVertex = new Vertex(cc);\n\t\tfor (var i = 0; i < 3; i++) {\n\t\t\ttriEdges[i].rot().setOrig(ccVertex);\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn TriangleCircumcentreVisitor;\n\t}\n\tget interfaces_() {\n\t\treturn [TriangleVisitor];\n\t}\n}\nTriangleCircumcentreVisitor.constructor_ = function () {};\nclass TriangleEdgesListVisitor {\n\tconstructor() {\n\t\tTriangleEdgesListVisitor.constructor_.apply(this, arguments);\n\t}\n\tgetTriangleEdges() {\n\t\treturn this._triList;\n\t}\n\tvisit(triEdges) {\n\t\tthis._triList.add(triEdges);\n\t}\n\tgetClass() {\n\t\treturn TriangleEdgesListVisitor;\n\t}\n\tget interfaces_() {\n\t\treturn [TriangleVisitor];\n\t}\n}\nTriangleEdgesListVisitor.constructor_ = function () {\n\tthis._triList = new ArrayList();\n};\nclass TriangleVertexListVisitor {\n\tconstructor() {\n\t\tTriangleVertexListVisitor.constructor_.apply(this, arguments);\n\t}\n\tvisit(triEdges) {\n\t\tthis._triList.add([triEdges[0].orig(), triEdges[1].orig(), triEdges[2].orig()]);\n\t}\n\tgetTriangleVertices() {\n\t\treturn this._triList;\n\t}\n\tgetClass() {\n\t\treturn TriangleVertexListVisitor;\n\t}\n\tget interfaces_() {\n\t\treturn [TriangleVisitor];\n\t}\n}\nTriangleVertexListVisitor.constructor_ = function () {\n\tthis._triList = new ArrayList();\n};\nclass TriangleCoordinatesVisitor {\n\tconstructor() {\n\t\tTriangleCoordinatesVisitor.constructor_.apply(this, arguments);\n\t}\n\tcheckTriangleSize(pts) {\n\t\tvar loc = \"\";\n\t\tif (pts.length >= 2) loc = WKTWriter.toLineString(pts[0], pts[1]); else {\n\t\t\tif (pts.length >= 1) loc = WKTWriter.toPoint(pts[0]);\n\t\t}\n\t}\n\tvisit(triEdges) {\n\t\tthis._coordList.clear();\n\t\tfor (var i = 0; i < 3; i++) {\n\t\t\tvar v = triEdges[i].orig();\n\t\t\tthis._coordList.add(v.getCoordinate());\n\t\t}\n\t\tif (this._coordList.size() > 0) {\n\t\t\tthis._coordList.closeRing();\n\t\t\tvar pts = this._coordList.toCoordinateArray();\n\t\t\tif (pts.length !== 4) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tthis._triCoords.add(pts);\n\t\t}\n\t}\n\tgetTriangles() {\n\t\treturn this._triCoords;\n\t}\n\tgetClass() {\n\t\treturn TriangleCoordinatesVisitor;\n\t}\n\tget interfaces_() {\n\t\treturn [TriangleVisitor];\n\t}\n}\nTriangleCoordinatesVisitor.constructor_ = function () {\n\tthis._coordList = new CoordinateList();\n\tthis._triCoords = new ArrayList();\n};\nQuadEdgeSubdivision.TriangleCircumcentreVisitor = TriangleCircumcentreVisitor;\nQuadEdgeSubdivision.TriangleEdgesListVisitor = TriangleEdgesListVisitor;\nQuadEdgeSubdivision.TriangleVertexListVisitor = TriangleVertexListVisitor;\nQuadEdgeSubdivision.TriangleCoordinatesVisitor = TriangleCoordinatesVisitor;\nQuadEdgeSubdivision.constructor_ = function () {\n\tthis._visitedKey = 0;\n\tthis._quadEdges = new ArrayList();\n\tthis._startingEdge = null;\n\tthis._tolerance = null;\n\tthis._edgeCoincidenceTolerance = null;\n\tthis._frameVertex = new Array(3).fill(null);\n\tthis._frameEnv = null;\n\tthis._locator = null;\n\tthis._seg = new LineSegment();\n\tthis._triEdges = new Array(3).fill(null);\n\tlet env = arguments[0], tolerance = arguments[1];\n\tthis._tolerance = tolerance;\n\tthis._edgeCoincidenceTolerance = tolerance / QuadEdgeSubdivision.EDGE_COINCIDENCE_TOL_FACTOR;\n\tthis.createFrame(env);\n\tthis._startingEdge = this.initSubdiv();\n\tthis._locator = new LastFoundQuadEdgeLocator(this);\n};\nQuadEdgeSubdivision.EDGE_COINCIDENCE_TOL_FACTOR = 1000;\n","import Coordinate from '../geom/Coordinate';\nimport LineSegment from '../geom/LineSegment';\nexport default class Segment {\n\tconstructor() {\n\t\tSegment.constructor_.apply(this, arguments);\n\t}\n\tgetLineSegment() {\n\t\treturn this._ls;\n\t}\n\tgetEndZ() {\n\t\tvar p = this._ls.getCoordinate(1);\n\t\treturn p.z;\n\t}\n\tgetStartZ() {\n\t\tvar p = this._ls.getCoordinate(0);\n\t\treturn p.z;\n\t}\n\tintersection(s) {\n\t\treturn this._ls.intersection(s.getLineSegment());\n\t}\n\tgetStart() {\n\t\treturn this._ls.getCoordinate(0);\n\t}\n\tgetEnd() {\n\t\treturn this._ls.getCoordinate(1);\n\t}\n\tgetEndY() {\n\t\tvar p = this._ls.getCoordinate(1);\n\t\treturn p.y;\n\t}\n\tgetStartX() {\n\t\tvar p = this._ls.getCoordinate(0);\n\t\treturn p.x;\n\t}\n\tequalsTopo(s) {\n\t\treturn this._ls.equalsTopo(s.getLineSegment());\n\t}\n\tgetStartY() {\n\t\tvar p = this._ls.getCoordinate(0);\n\t\treturn p.y;\n\t}\n\tsetData(data) {\n\t\tthis._data = data;\n\t}\n\tgetData() {\n\t\treturn this._data;\n\t}\n\tgetEndX() {\n\t\tvar p = this._ls.getCoordinate(1);\n\t\treturn p.x;\n\t}\n\ttoString() {\n\t\treturn this._ls.toString();\n\t}\n\tgetClass() {\n\t\treturn Segment;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nSegment.constructor_ = function () {\n\tthis._ls = null;\n\tthis._data = null;\n\tif (arguments.length === 2) {\n\t\tlet p0 = arguments[0], p1 = arguments[1];\n\t\tthis._ls = new LineSegment(p0, p1);\n\t} else if (arguments.length === 3) {\n\t\tlet p0 = arguments[0], p1 = arguments[1], data = arguments[2];\n\t\tthis._ls = new LineSegment(p0, p1);\n\t\tthis._data = data;\n\t} else if (arguments.length === 6) {\n\t\tlet x1 = arguments[0], y1 = arguments[1], z1 = arguments[2], x2 = arguments[3], y2 = arguments[4], z2 = arguments[5];\n\t\tSegment.constructor_.call(this, new Coordinate(x1, y1, z1), new Coordinate(x2, y2, z2));\n\t} else if (arguments.length === 7) {\n\t\tlet x1 = arguments[0], y1 = arguments[1], z1 = arguments[2], x2 = arguments[3], y2 = arguments[4], z2 = arguments[5], data = arguments[6];\n\t\tSegment.constructor_.call(this, new Coordinate(x1, y1, z1), new Coordinate(x2, y2, z2), data);\n\t}\n};\n","import GeometryFactory from '../geom/GeometryFactory';\nimport NonEncroachingSplitPointFinder from './NonEncroachingSplitPointFinder';\nimport ConstraintVertex from './ConstraintVertex';\nimport Coordinate from '../geom/Coordinate';\nimport IncrementalDelaunayTriangulator from './IncrementalDelaunayTriangulator';\nimport QuadEdgeSubdivision from './quadedge/QuadEdgeSubdivision';\nimport Double from '../../../../java/lang/Double';\nimport LastFoundQuadEdgeLocator from './quadedge/LastFoundQuadEdgeLocator';\nimport Segment from './Segment';\nimport ConvexHull from '../algorithm/ConvexHull';\nimport KdTree from '../index/kdtree/KdTree';\nimport ArrayList from '../../../../java/util/ArrayList';\nimport Envelope from '../geom/Envelope';\nexport default class ConformingDelaunayTriangulator {\n\tconstructor() {\n\t\tConformingDelaunayTriangulator.constructor_.apply(this, arguments);\n\t}\n\tstatic computeVertexEnvelope(vertices) {\n\t\tvar env = new Envelope();\n\t\tfor (var i = vertices.iterator(); i.hasNext(); ) {\n\t\t\tvar v = i.next();\n\t\t\tenv.expandToInclude(v.getCoordinate());\n\t\t}\n\t\treturn env;\n\t}\n\tgetInitialVertices() {\n\t\treturn this._initialVertices;\n\t}\n\tgetKDT() {\n\t\treturn this._kdt;\n\t}\n\tenforceConstraints() {\n\t\tthis.addConstraintVertices();\n\t\tvar count = 0;\n\t\tvar splits = 0;\n\t\tdo {\n\t\t\tsplits = this.enforceGabriel(this._segments);\n\t\t\tcount++;\n\t\t} while (splits > 0 && count < ConformingDelaunayTriangulator.MAX_SPLIT_ITER);\n\t}\n\tinsertSites(vertices) {\n\t\tfor (var i = vertices.iterator(); i.hasNext(); ) {\n\t\t\tvar v = i.next();\n\t\t\tthis.insertSite(v);\n\t\t}\n\t}\n\tgetVertexFactory() {\n\t\treturn this._vertexFactory;\n\t}\n\tgetPointArray() {\n\t\tvar pts = new Array(this._initialVertices.size() + this._segVertices.size()).fill(null);\n\t\tvar index = 0;\n\t\tfor (var i = this._initialVertices.iterator(); i.hasNext(); ) {\n\t\t\tvar v = i.next();\n\t\t\tpts[index++] = v.getCoordinate();\n\t\t}\n\t\tfor (var i2 = this._segVertices.iterator(); i2.hasNext(); ) {\n\t\t\tvar v = i2.next();\n\t\t\tpts[index++] = v.getCoordinate();\n\t\t}\n\t\treturn pts;\n\t}\n\tsetConstraints(segments, segVertices) {\n\t\tthis._segments = segments;\n\t\tthis._segVertices = segVertices;\n\t}\n\tcomputeConvexHull() {\n\t\tvar fact = new GeometryFactory();\n\t\tvar coords = this.getPointArray();\n\t\tvar hull = new ConvexHull(coords, fact);\n\t\tthis._convexHull = hull.getConvexHull();\n\t}\n\taddConstraintVertices() {\n\t\tthis.computeConvexHull();\n\t\tthis.insertSites(this._segVertices);\n\t}\n\tfindNonGabrielPoint(seg) {\n\t\tvar p = seg.getStart();\n\t\tvar q = seg.getEnd();\n\t\tvar midPt = new Coordinate((p.x + q.x) / 2.0, (p.y + q.y) / 2.0);\n\t\tvar segRadius = p.distance(midPt);\n\t\tvar env = new Envelope(midPt);\n\t\tenv.expandBy(segRadius);\n\t\tvar result = this._kdt.query(env);\n\t\tvar closestNonGabriel = null;\n\t\tvar minDist = Double.MAX_VALUE;\n\t\tfor (var i = result.iterator(); i.hasNext(); ) {\n\t\t\tvar nextNode = i.next();\n\t\t\tvar testPt = nextNode.getCoordinate();\n\t\t\tif (testPt.equals2D(p) || testPt.equals2D(q)) continue;\n\t\t\tvar testRadius = midPt.distance(testPt);\n\t\t\tif (testRadius < segRadius) {\n\t\t\t\tvar testDist = testRadius;\n\t\t\t\tif (closestNonGabriel === null || testDist < minDist) {\n\t\t\t\t\tclosestNonGabriel = testPt;\n\t\t\t\t\tminDist = testDist;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn closestNonGabriel;\n\t}\n\tgetConstraintSegments() {\n\t\treturn this._segments;\n\t}\n\tsetSplitPointFinder(splitFinder) {\n\t\tthis._splitFinder = splitFinder;\n\t}\n\tgetConvexHull() {\n\t\treturn this._convexHull;\n\t}\n\tgetTolerance() {\n\t\treturn this._tolerance;\n\t}\n\tenforceGabriel(segsToInsert) {\n\t\tvar newSegments = new ArrayList();\n\t\tvar splits = 0;\n\t\tvar segsToRemove = new ArrayList();\n\t\tfor (var i = segsToInsert.iterator(); i.hasNext(); ) {\n\t\t\tvar seg = i.next();\n\t\t\tvar encroachPt = this.findNonGabrielPoint(seg);\n\t\t\tif (encroachPt === null) continue;\n\t\t\tthis._splitPt = this._splitFinder.findSplitPoint(seg, encroachPt);\n\t\t\tvar splitVertex = this.createVertex(this._splitPt, seg);\n\t\t\tvar insertedVertex = this.insertSite(splitVertex);\n\t\t\tif (!insertedVertex.getCoordinate().equals2D(this._splitPt)) {}\n\t\t\tvar s1 = new Segment(seg.getStartX(), seg.getStartY(), seg.getStartZ(), splitVertex.getX(), splitVertex.getY(), splitVertex.getZ(), seg.getData());\n\t\t\tvar s2 = new Segment(splitVertex.getX(), splitVertex.getY(), splitVertex.getZ(), seg.getEndX(), seg.getEndY(), seg.getEndZ(), seg.getData());\n\t\t\tnewSegments.add(s1);\n\t\t\tnewSegments.add(s2);\n\t\t\tsegsToRemove.add(seg);\n\t\t\tsplits = splits + 1;\n\t\t}\n\t\tsegsToInsert.removeAll(segsToRemove);\n\t\tsegsToInsert.addAll(newSegments);\n\t\treturn splits;\n\t}\n\tcreateVertex() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet p = arguments[0];\n\t\t\tvar v = null;\n\t\t\tif (this._vertexFactory !== null) v = this._vertexFactory.createVertex(p, null); else v = new ConstraintVertex(p);\n\t\t\treturn v;\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet p = arguments[0], seg = arguments[1];\n\t\t\tvar v = null;\n\t\t\tif (this._vertexFactory !== null) v = this._vertexFactory.createVertex(p, seg); else v = new ConstraintVertex(p);\n\t\t\tv.setOnConstraint(true);\n\t\t\treturn v;\n\t\t}\n\t}\n\tgetSubdivision() {\n\t\treturn this._subdiv;\n\t}\n\tcomputeBoundingBox() {\n\t\tvar vertexEnv = ConformingDelaunayTriangulator.computeVertexEnvelope(this._initialVertices);\n\t\tvar segEnv = ConformingDelaunayTriangulator.computeVertexEnvelope(this._segVertices);\n\t\tvar allPointsEnv = new Envelope(vertexEnv);\n\t\tallPointsEnv.expandToInclude(segEnv);\n\t\tvar deltaX = allPointsEnv.getWidth() * 0.2;\n\t\tvar deltaY = allPointsEnv.getHeight() * 0.2;\n\t\tvar delta = Math.max(deltaX, deltaY);\n\t\tthis._computeAreaEnv = new Envelope(allPointsEnv);\n\t\tthis._computeAreaEnv.expandBy(delta);\n\t}\n\tsetVertexFactory(vertexFactory) {\n\t\tthis._vertexFactory = vertexFactory;\n\t}\n\tformInitialDelaunay() {\n\t\tthis.computeBoundingBox();\n\t\tthis._subdiv = new QuadEdgeSubdivision(this._computeAreaEnv, this._tolerance);\n\t\tthis._subdiv.setLocator(new LastFoundQuadEdgeLocator(this._subdiv));\n\t\tthis._incDel = new IncrementalDelaunayTriangulator(this._subdiv);\n\t\tthis.insertSites(this._initialVertices);\n\t}\n\tinsertSite() {\n\t\tif (arguments[0] instanceof ConstraintVertex) {\n\t\t\tlet v = arguments[0];\n\t\t\tvar kdnode = this._kdt.insert(v.getCoordinate(), v);\n\t\t\tif (!kdnode.isRepeated()) {\n\t\t\t\tthis._incDel.insertSite(v);\n\t\t\t} else {\n\t\t\t\tvar snappedV = kdnode.getData();\n\t\t\t\tsnappedV.merge(v);\n\t\t\t\treturn snappedV;\n\t\t\t}\n\t\t\treturn v;\n\t\t} else if (arguments[0] instanceof Coordinate) {\n\t\t\tlet p = arguments[0];\n\t\t\tthis.insertSite(this.createVertex(p));\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn ConformingDelaunayTriangulator;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nConformingDelaunayTriangulator.constructor_ = function () {\n\tthis._initialVertices = null;\n\tthis._segVertices = null;\n\tthis._segments = new ArrayList();\n\tthis._subdiv = null;\n\tthis._incDel = null;\n\tthis._convexHull = null;\n\tthis._splitFinder = new NonEncroachingSplitPointFinder();\n\tthis._kdt = null;\n\tthis._vertexFactory = null;\n\tthis._computeAreaEnv = null;\n\tthis._splitPt = null;\n\tthis._tolerance = null;\n\tlet initialVertices = arguments[0], tolerance = arguments[1];\n\tthis._initialVertices = new ArrayList(initialVertices);\n\tthis._tolerance = tolerance;\n\tthis._kdt = new KdTree(tolerance);\n};\nConformingDelaunayTriangulator.MAX_SPLIT_ITER = 99;\n","import CoordinateList from '../geom/CoordinateList';\nimport Geometry from '../geom/Geometry';\nimport Arrays from '../../../../java/util/Arrays';\nimport hasInterface from '../../../../hasInterface';\nimport Collection from '../../../../java/util/Collection';\nimport IncrementalDelaunayTriangulator from './IncrementalDelaunayTriangulator';\nimport QuadEdgeSubdivision from './quadedge/QuadEdgeSubdivision';\nimport Vertex from './quadedge/Vertex';\nimport CoordinateArrays from '../geom/CoordinateArrays';\nimport ArrayList from '../../../../java/util/ArrayList';\nimport Envelope from '../geom/Envelope';\nexport default class DelaunayTriangulationBuilder {\n\tconstructor() {\n\t\tDelaunayTriangulationBuilder.constructor_.apply(this, arguments);\n\t}\n\tstatic extractUniqueCoordinates(geom) {\n\t\tif (geom === null) return new CoordinateList();\n\t\tvar coords = geom.getCoordinates();\n\t\treturn DelaunayTriangulationBuilder.unique(coords);\n\t}\n\tstatic envelope(coords) {\n\t\tvar env = new Envelope();\n\t\tfor (var i = coords.iterator(); i.hasNext(); ) {\n\t\t\tvar coord = i.next();\n\t\t\tenv.expandToInclude(coord);\n\t\t}\n\t\treturn env;\n\t}\n\tstatic unique(coords) {\n\t\tvar coordsCopy = CoordinateArrays.copyDeep(coords);\n\t\tArrays.sort(coordsCopy);\n\t\tvar coordList = new CoordinateList(coordsCopy, false);\n\t\treturn coordList;\n\t}\n\tstatic toVertices(coords) {\n\t\tvar verts = new ArrayList();\n\t\tfor (var i = coords.iterator(); i.hasNext(); ) {\n\t\t\tvar coord = i.next();\n\t\t\tverts.add(new Vertex(coord));\n\t\t}\n\t\treturn verts;\n\t}\n\tcreate() {\n\t\tif (this._subdiv !== null) return null;\n\t\tvar siteEnv = DelaunayTriangulationBuilder.envelope(this._siteCoords);\n\t\tvar vertices = DelaunayTriangulationBuilder.toVertices(this._siteCoords);\n\t\tthis._subdiv = new QuadEdgeSubdivision(siteEnv, this._tolerance);\n\t\tvar triangulator = new IncrementalDelaunayTriangulator(this._subdiv);\n\t\ttriangulator.insertSites(vertices);\n\t}\n\tsetTolerance(tolerance) {\n\t\tthis._tolerance = tolerance;\n\t}\n\tsetSites() {\n\t\tif (arguments[0] instanceof Geometry) {\n\t\t\tlet geom = arguments[0];\n\t\t\tthis._siteCoords = DelaunayTriangulationBuilder.extractUniqueCoordinates(geom);\n\t\t} else if (hasInterface(arguments[0], Collection)) {\n\t\t\tlet coords = arguments[0];\n\t\t\tthis._siteCoords = DelaunayTriangulationBuilder.unique(CoordinateArrays.toCoordinateArray(coords));\n\t\t}\n\t}\n\tgetEdges(geomFact) {\n\t\tthis.create();\n\t\treturn this._subdiv.getEdges(geomFact);\n\t}\n\tgetSubdivision() {\n\t\tthis.create();\n\t\treturn this._subdiv;\n\t}\n\tgetTriangles(geomFact) {\n\t\tthis.create();\n\t\treturn this._subdiv.getTriangles(geomFact);\n\t}\n\tgetClass() {\n\t\treturn DelaunayTriangulationBuilder;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nDelaunayTriangulationBuilder.constructor_ = function () {\n\tthis._siteCoords = null;\n\tthis._tolerance = 0.0;\n\tthis._subdiv = null;\n};\n","import ConformingDelaunayTriangulator from './ConformingDelaunayTriangulator';\nimport ConstraintVertex from './ConstraintVertex';\nimport DelaunayTriangulationBuilder from './DelaunayTriangulationBuilder';\nimport Segment from './Segment';\nimport ArrayList from '../../../../java/util/ArrayList';\nimport LinearComponentExtracter from '../geom/util/LinearComponentExtracter';\nimport TreeMap from '../../../../java/util/TreeMap';\nexport default class ConformingDelaunayTriangulationBuilder {\n\tconstructor() {\n\t\tConformingDelaunayTriangulationBuilder.constructor_.apply(this, arguments);\n\t}\n\tstatic createConstraintSegments() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet geom = arguments[0];\n\t\t\tvar lines = LinearComponentExtracter.getLines(geom);\n\t\t\tvar constraintSegs = new ArrayList();\n\t\t\tfor (var i = lines.iterator(); i.hasNext(); ) {\n\t\t\t\tvar line = i.next();\n\t\t\t\tConformingDelaunayTriangulationBuilder.createConstraintSegments(line, constraintSegs);\n\t\t\t}\n\t\t\treturn constraintSegs;\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet line = arguments[0], constraintSegs = arguments[1];\n\t\t\tvar coords = line.getCoordinates();\n\t\t\tfor (var i = 1; i < coords.length; i++) {\n\t\t\t\tconstraintSegs.add(new Segment(coords[i - 1], coords[i]));\n\t\t\t}\n\t\t}\n\t}\n\tcreateSiteVertices(coords) {\n\t\tvar verts = new ArrayList();\n\t\tfor (var i = coords.iterator(); i.hasNext(); ) {\n\t\t\tvar coord = i.next();\n\t\t\tif (this._constraintVertexMap.containsKey(coord)) continue;\n\t\t\tverts.add(new ConstraintVertex(coord));\n\t\t}\n\t\treturn verts;\n\t}\n\tcreate() {\n\t\tif (this._subdiv !== null) return null;\n\t\tvar siteEnv = DelaunayTriangulationBuilder.envelope(this._siteCoords);\n\t\tvar segments = new ArrayList();\n\t\tif (this._constraintLines !== null) {\n\t\t\tsiteEnv.expandToInclude(this._constraintLines.getEnvelopeInternal());\n\t\t\tthis.createVertices(this._constraintLines);\n\t\t\tsegments = ConformingDelaunayTriangulationBuilder.createConstraintSegments(this._constraintLines);\n\t\t}\n\t\tvar sites = this.createSiteVertices(this._siteCoords);\n\t\tvar cdt = new ConformingDelaunayTriangulator(sites, this._tolerance);\n\t\tcdt.setConstraints(segments, new ArrayList(this._constraintVertexMap.values()));\n\t\tcdt.formInitialDelaunay();\n\t\tcdt.enforceConstraints();\n\t\tthis._subdiv = cdt.getSubdivision();\n\t}\n\tsetTolerance(tolerance) {\n\t\tthis._tolerance = tolerance;\n\t}\n\tsetConstraints(constraintLines) {\n\t\tthis._constraintLines = constraintLines;\n\t}\n\tsetSites(geom) {\n\t\tthis._siteCoords = DelaunayTriangulationBuilder.extractUniqueCoordinates(geom);\n\t}\n\tgetEdges(geomFact) {\n\t\tthis.create();\n\t\treturn this._subdiv.getEdges(geomFact);\n\t}\n\tgetSubdivision() {\n\t\tthis.create();\n\t\treturn this._subdiv;\n\t}\n\tgetTriangles(geomFact) {\n\t\tthis.create();\n\t\treturn this._subdiv.getTriangles(geomFact);\n\t}\n\tcreateVertices(geom) {\n\t\tvar coords = geom.getCoordinates();\n\t\tfor (var i = 0; i < coords.length; i++) {\n\t\t\tvar v = new ConstraintVertex(coords[i]);\n\t\t\tthis._constraintVertexMap.put(coords[i], v);\n\t\t}\n\t}\n\tgetClass() {\n\t\treturn ConformingDelaunayTriangulationBuilder;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nConformingDelaunayTriangulationBuilder.constructor_ = function () {\n\tthis._siteCoords = null;\n\tthis._constraintLines = null;\n\tthis._tolerance = 0.0;\n\tthis._subdiv = null;\n\tthis._constraintVertexMap = new TreeMap();\n};\n","import Geometry from '../geom/Geometry';\nimport hasInterface from '../../../../hasInterface';\nimport GeometryFactory from '../geom/GeometryFactory';\nimport Collection from '../../../../java/util/Collection';\nimport IncrementalDelaunayTriangulator from './IncrementalDelaunayTriangulator';\nimport QuadEdgeSubdivision from './quadedge/QuadEdgeSubdivision';\nimport DelaunayTriangulationBuilder from './DelaunayTriangulationBuilder';\nimport CoordinateArrays from '../geom/CoordinateArrays';\nimport ArrayList from '../../../../java/util/ArrayList';\nexport default class VoronoiDiagramBuilder {\n\tconstructor() {\n\t\tVoronoiDiagramBuilder.constructor_.apply(this, arguments);\n\t}\n\tstatic clipGeometryCollection(geom, clipEnv) {\n\t\tvar clipPoly = geom.getFactory().toGeometry(clipEnv);\n\t\tvar clipped = new ArrayList();\n\t\tfor (var i = 0; i < geom.getNumGeometries(); i++) {\n\t\t\tvar g = geom.getGeometryN(i);\n\t\t\tvar result = null;\n\t\t\tif (clipEnv.contains(g.getEnvelopeInternal())) result = g; else if (clipEnv.intersects(g.getEnvelopeInternal())) {\n\t\t\t\tresult = clipPoly.intersection(g);\n\t\t\t\tresult.setUserData(g.getUserData());\n\t\t\t}\n\t\t\tif (result !== null && !result.isEmpty()) {\n\t\t\t\tclipped.add(result);\n\t\t\t}\n\t\t}\n\t\treturn geom.getFactory().createGeometryCollection(GeometryFactory.toGeometryArray(clipped));\n\t}\n\tcreate() {\n\t\tif (this._subdiv !== null) return null;\n\t\tvar siteEnv = DelaunayTriangulationBuilder.envelope(this._siteCoords);\n\t\tthis._diagramEnv = siteEnv;\n\t\tvar expandBy = Math.max(this._diagramEnv.getWidth(), this._diagramEnv.getHeight());\n\t\tthis._diagramEnv.expandBy(expandBy);\n\t\tif (this._clipEnv !== null) this._diagramEnv.expandToInclude(this._clipEnv);\n\t\tvar vertices = DelaunayTriangulationBuilder.toVertices(this._siteCoords);\n\t\tthis._subdiv = new QuadEdgeSubdivision(siteEnv, this._tolerance);\n\t\tvar triangulator = new IncrementalDelaunayTriangulator(this._subdiv);\n\t\ttriangulator.insertSites(vertices);\n\t}\n\tgetDiagram(geomFact) {\n\t\tthis.create();\n\t\tvar polys = this._subdiv.getVoronoiDiagram(geomFact);\n\t\treturn VoronoiDiagramBuilder.clipGeometryCollection(polys, this._diagramEnv);\n\t}\n\tsetTolerance(tolerance) {\n\t\tthis._tolerance = tolerance;\n\t}\n\tsetSites() {\n\t\tif (arguments[0] instanceof Geometry) {\n\t\t\tlet geom = arguments[0];\n\t\t\tthis._siteCoords = DelaunayTriangulationBuilder.extractUniqueCoordinates(geom);\n\t\t} else if (hasInterface(arguments[0], Collection)) {\n\t\t\tlet coords = arguments[0];\n\t\t\tthis._siteCoords = DelaunayTriangulationBuilder.unique(CoordinateArrays.toCoordinateArray(coords));\n\t\t}\n\t}\n\tsetClipEnvelope(clipEnv) {\n\t\tthis._clipEnv = clipEnv;\n\t}\n\tgetSubdivision() {\n\t\tthis.create();\n\t\treturn this._subdiv;\n\t}\n\tgetClass() {\n\t\treturn VoronoiDiagramBuilder;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nVoronoiDiagramBuilder.constructor_ = function () {\n\tthis._siteCoords = null;\n\tthis._tolerance = 0.0;\n\tthis._subdiv = null;\n\tthis._clipEnv = null;\n\tthis._diagramEnv = null;\n};\n","import Coordinate from '../geom/Coordinate';\nimport LineSegment from '../geom/LineSegment';\nimport Comparable from '../../../../java/lang/Comparable';\nexport default class LinearLocation {\n\tconstructor() {\n\t\tLinearLocation.constructor_.apply(this, arguments);\n\t}\n\tstatic getEndLocation(linear) {\n\t\tvar loc = new LinearLocation();\n\t\tloc.setToEnd(linear);\n\t\treturn loc;\n\t}\n\tstatic pointAlongSegmentByFraction(p0, p1, frac) {\n\t\tif (frac <= 0.0) return p0;\n\t\tif (frac >= 1.0) return p1;\n\t\tvar x = (p1.x - p0.x) * frac + p0.x;\n\t\tvar y = (p1.y - p0.y) * frac + p0.y;\n\t\tvar z = (p1.z - p0.z) * frac + p0.z;\n\t\treturn new Coordinate(x, y, z);\n\t}\n\tstatic compareLocationValues(componentIndex0, segmentIndex0, segmentFraction0, componentIndex1, segmentIndex1, segmentFraction1) {\n\t\tif (componentIndex0 < componentIndex1) return -1;\n\t\tif (componentIndex0 > componentIndex1) return 1;\n\t\tif (segmentIndex0 < segmentIndex1) return -1;\n\t\tif (segmentIndex0 > segmentIndex1) return 1;\n\t\tif (segmentFraction0 < segmentFraction1) return -1;\n\t\tif (segmentFraction0 > segmentFraction1) return 1;\n\t\treturn 0;\n\t}\n\tgetSegmentIndex() {\n\t\treturn this._segmentIndex;\n\t}\n\tgetComponentIndex() {\n\t\treturn this._componentIndex;\n\t}\n\tisEndpoint(linearGeom) {\n\t\tvar lineComp = linearGeom.getGeometryN(this._componentIndex);\n\t\tvar nseg = lineComp.getNumPoints() - 1;\n\t\treturn this._segmentIndex >= nseg || this._segmentIndex === nseg && this._segmentFraction >= 1.0;\n\t}\n\tisValid(linearGeom) {\n\t\tif (this._componentIndex < 0 || this._componentIndex >= linearGeom.getNumGeometries()) return false;\n\t\tvar lineComp = linearGeom.getGeometryN(this._componentIndex);\n\t\tif (this._segmentIndex < 0 || this._segmentIndex > lineComp.getNumPoints()) return false;\n\t\tif (this._segmentIndex === lineComp.getNumPoints() && this._segmentFraction !== 0.0) return false;\n\t\tif (this._segmentFraction < 0.0 || this._segmentFraction > 1.0) return false;\n\t\treturn true;\n\t}\n\tnormalize() {\n\t\tif (this._segmentFraction < 0.0) {\n\t\t\tthis._segmentFraction = 0.0;\n\t\t}\n\t\tif (this._segmentFraction > 1.0) {\n\t\t\tthis._segmentFraction = 1.0;\n\t\t}\n\t\tif (this._componentIndex < 0) {\n\t\t\tthis._componentIndex = 0;\n\t\t\tthis._segmentIndex = 0;\n\t\t\tthis._segmentFraction = 0.0;\n\t\t}\n\t\tif (this._segmentIndex < 0) {\n\t\t\tthis._segmentIndex = 0;\n\t\t\tthis._segmentFraction = 0.0;\n\t\t}\n\t\tif (this._segmentFraction === 1.0) {\n\t\t\tthis._segmentFraction = 0.0;\n\t\t\tthis._segmentIndex += 1;\n\t\t}\n\t}\n\ttoLowest(linearGeom) {\n\t\tvar lineComp = linearGeom.getGeometryN(this._componentIndex);\n\t\tvar nseg = lineComp.getNumPoints() - 1;\n\t\tif (this._segmentIndex < nseg) return this;\n\t\treturn new LinearLocation(this._componentIndex, nseg, 1.0, false);\n\t}\n\tgetCoordinate(linearGeom) {\n\t\tvar lineComp = linearGeom.getGeometryN(this._componentIndex);\n\t\tvar p0 = lineComp.getCoordinateN(this._segmentIndex);\n\t\tif (this._segmentIndex >= lineComp.getNumPoints() - 1) return p0;\n\t\tvar p1 = lineComp.getCoordinateN(this._segmentIndex + 1);\n\t\treturn LinearLocation.pointAlongSegmentByFraction(p0, p1, this._segmentFraction);\n\t}\n\tgetSegmentFraction() {\n\t\treturn this._segmentFraction;\n\t}\n\tgetSegment(linearGeom) {\n\t\tvar lineComp = linearGeom.getGeometryN(this._componentIndex);\n\t\tvar p0 = lineComp.getCoordinateN(this._segmentIndex);\n\t\tif (this._segmentIndex >= lineComp.getNumPoints() - 1) {\n\t\t\tvar prev = lineComp.getCoordinateN(lineComp.getNumPoints() - 2);\n\t\t\treturn new LineSegment(prev, p0);\n\t\t}\n\t\tvar p1 = lineComp.getCoordinateN(this._segmentIndex + 1);\n\t\treturn new LineSegment(p0, p1);\n\t}\n\tclamp(linear) {\n\t\tif (this._componentIndex >= linear.getNumGeometries()) {\n\t\t\tthis.setToEnd(linear);\n\t\t\treturn null;\n\t\t}\n\t\tif (this._segmentIndex >= linear.getNumPoints()) {\n\t\t\tvar line = linear.getGeometryN(this._componentIndex);\n\t\t\tthis._segmentIndex = line.getNumPoints() - 1;\n\t\t\tthis._segmentFraction = 1.0;\n\t\t}\n\t}\n\tsetToEnd(linear) {\n\t\tthis._componentIndex = linear.getNumGeometries() - 1;\n\t\tvar lastLine = linear.getGeometryN(this._componentIndex);\n\t\tthis._segmentIndex = lastLine.getNumPoints() - 1;\n\t\tthis._segmentFraction = 1.0;\n\t}\n\tcompareTo(o) {\n\t\tvar other = o;\n\t\tif (this._componentIndex < other._componentIndex) return -1;\n\t\tif (this._componentIndex > other._componentIndex) return 1;\n\t\tif (this._segmentIndex < other._segmentIndex) return -1;\n\t\tif (this._segmentIndex > other._segmentIndex) return 1;\n\t\tif (this._segmentFraction < other._segmentFraction) return -1;\n\t\tif (this._segmentFraction > other._segmentFraction) return 1;\n\t\treturn 0;\n\t}\n\tcopy() {\n\t\treturn new LinearLocation(this._componentIndex, this._segmentIndex, this._segmentFraction);\n\t}\n\ttoString() {\n\t\treturn \"LinearLoc[\" + this._componentIndex + \", \" + this._segmentIndex + \", \" + this._segmentFraction + \"]\";\n\t}\n\tisOnSameSegment(loc) {\n\t\tif (this._componentIndex !== loc._componentIndex) return false;\n\t\tif (this._segmentIndex === loc._segmentIndex) return true;\n\t\tif (loc._segmentIndex - this._segmentIndex === 1 && loc._segmentFraction === 0.0) return true;\n\t\tif (this._segmentIndex - loc._segmentIndex === 1 && this._segmentFraction === 0.0) return true;\n\t\treturn false;\n\t}\n\tsnapToVertex(linearGeom, minDistance) {\n\t\tif (this._segmentFraction <= 0.0 || this._segmentFraction >= 1.0) return null;\n\t\tvar segLen = this.getSegmentLength(linearGeom);\n\t\tvar lenToStart = this._segmentFraction * segLen;\n\t\tvar lenToEnd = segLen - lenToStart;\n\t\tif (lenToStart <= lenToEnd && lenToStart < minDistance) {\n\t\t\tthis._segmentFraction = 0.0;\n\t\t} else if (lenToEnd <= lenToStart && lenToEnd < minDistance) {\n\t\t\tthis._segmentFraction = 1.0;\n\t\t}\n\t}\n\tcompareLocationValues(componentIndex1, segmentIndex1, segmentFraction1) {\n\t\tif (this._componentIndex < componentIndex1) return -1;\n\t\tif (this._componentIndex > componentIndex1) return 1;\n\t\tif (this._segmentIndex < segmentIndex1) return -1;\n\t\tif (this._segmentIndex > segmentIndex1) return 1;\n\t\tif (this._segmentFraction < segmentFraction1) return -1;\n\t\tif (this._segmentFraction > segmentFraction1) return 1;\n\t\treturn 0;\n\t}\n\tgetSegmentLength(linearGeom) {\n\t\tvar lineComp = linearGeom.getGeometryN(this._componentIndex);\n\t\tvar segIndex = this._segmentIndex;\n\t\tif (this._segmentIndex >= lineComp.getNumPoints() - 1) segIndex = lineComp.getNumPoints() - 2;\n\t\tvar p0 = lineComp.getCoordinateN(segIndex);\n\t\tvar p1 = lineComp.getCoordinateN(segIndex + 1);\n\t\treturn p0.distance(p1);\n\t}\n\tisVertex() {\n\t\treturn this._segmentFraction <= 0.0 || this._segmentFraction >= 1.0;\n\t}\n\tgetClass() {\n\t\treturn LinearLocation;\n\t}\n\tget interfaces_() {\n\t\treturn [Comparable];\n\t}\n}\nLinearLocation.constructor_ = function () {\n\tthis._componentIndex = 0;\n\tthis._segmentIndex = 0;\n\tthis._segmentFraction = 0.0;\n\tif (arguments.length === 0) {} else if (arguments.length === 1) {\n\t\tlet loc = arguments[0];\n\t\tthis._componentIndex = loc._componentIndex;\n\t\tthis._segmentIndex = loc._segmentIndex;\n\t\tthis._segmentFraction = loc._segmentFraction;\n\t} else if (arguments.length === 2) {\n\t\tlet segmentIndex = arguments[0], segmentFraction = arguments[1];\n\t\tLinearLocation.constructor_.call(this, 0, segmentIndex, segmentFraction);\n\t} else if (arguments.length === 3) {\n\t\tlet componentIndex = arguments[0], segmentIndex = arguments[1], segmentFraction = arguments[2];\n\t\tthis._componentIndex = componentIndex;\n\t\tthis._segmentIndex = segmentIndex;\n\t\tthis._segmentFraction = segmentFraction;\n\t\tthis.normalize();\n\t} else if (arguments.length === 4) {\n\t\tlet componentIndex = arguments[0], segmentIndex = arguments[1], segmentFraction = arguments[2], doNormalize = arguments[3];\n\t\tthis._componentIndex = componentIndex;\n\t\tthis._segmentIndex = segmentIndex;\n\t\tthis._segmentFraction = segmentFraction;\n\t\tif (doNormalize) this.normalize();\n\t}\n};\n","import hasInterface from '../../../../hasInterface';\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException';\nimport Lineal from '../geom/Lineal';\nexport default class LinearIterator {\n\tconstructor() {\n\t\tLinearIterator.constructor_.apply(this, arguments);\n\t}\n\tstatic segmentEndVertexIndex(loc) {\n\t\tif (loc.getSegmentFraction() > 0.0) return loc.getSegmentIndex() + 1;\n\t\treturn loc.getSegmentIndex();\n\t}\n\tgetComponentIndex() {\n\t\treturn this._componentIndex;\n\t}\n\tgetLine() {\n\t\treturn this._currentLine;\n\t}\n\tgetVertexIndex() {\n\t\treturn this._vertexIndex;\n\t}\n\tgetSegmentEnd() {\n\t\tif (this._vertexIndex < this.getLine().getNumPoints() - 1) return this._currentLine.getCoordinateN(this._vertexIndex + 1);\n\t\treturn null;\n\t}\n\tnext() {\n\t\tif (!this.hasNext()) return null;\n\t\tthis._vertexIndex++;\n\t\tif (this._vertexIndex >= this._currentLine.getNumPoints()) {\n\t\t\tthis._componentIndex++;\n\t\t\tthis.loadCurrentLine();\n\t\t\tthis._vertexIndex = 0;\n\t\t}\n\t}\n\tloadCurrentLine() {\n\t\tif (this._componentIndex >= this._numLines) {\n\t\t\tthis._currentLine = null;\n\t\t\treturn null;\n\t\t}\n\t\tthis._currentLine = this._linearGeom.getGeometryN(this._componentIndex);\n\t}\n\tgetSegmentStart() {\n\t\treturn this._currentLine.getCoordinateN(this._vertexIndex);\n\t}\n\tisEndOfLine() {\n\t\tif (this._componentIndex >= this._numLines) return false;\n\t\tif (this._vertexIndex < this._currentLine.getNumPoints() - 1) return false;\n\t\treturn true;\n\t}\n\thasNext() {\n\t\tif (this._componentIndex >= this._numLines) return false;\n\t\tif (this._componentIndex === this._numLines - 1 && this._vertexIndex >= this._currentLine.getNumPoints()) return false;\n\t\treturn true;\n\t}\n\tgetClass() {\n\t\treturn LinearIterator;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nLinearIterator.constructor_ = function () {\n\tthis._linearGeom = null;\n\tthis._numLines = null;\n\tthis._currentLine = null;\n\tthis._componentIndex = 0;\n\tthis._vertexIndex = 0;\n\tif (arguments.length === 1) {\n\t\tlet linear = arguments[0];\n\t\tLinearIterator.constructor_.call(this, linear, 0, 0);\n\t} else if (arguments.length === 2) {\n\t\tlet linear = arguments[0], start = arguments[1];\n\t\tLinearIterator.constructor_.call(this, linear, start.getComponentIndex(), LinearIterator.segmentEndVertexIndex(start));\n\t} else if (arguments.length === 3) {\n\t\tlet linearGeom = arguments[0], componentIndex = arguments[1], vertexIndex = arguments[2];\n\t\tif (!hasInterface(linearGeom, Lineal)) throw new IllegalArgumentException(\"Lineal geometry is required\");\n\t\tthis._linearGeom = linearGeom;\n\t\tthis._numLines = linearGeom.getNumGeometries();\n\t\tthis._componentIndex = componentIndex;\n\t\tthis._vertexIndex = vertexIndex;\n\t\tthis.loadCurrentLine();\n\t}\n};\n","import LinearIterator from './LinearIterator';\nimport LinearLocation from './LinearLocation';\nimport Double from '../../../../java/lang/Double';\nimport LineSegment from '../geom/LineSegment';\nimport Assert from '../util/Assert';\nexport default class LocationIndexOfPoint {\n\tconstructor() {\n\t\tLocationIndexOfPoint.constructor_.apply(this, arguments);\n\t}\n\tstatic indexOf(linearGeom, inputPt) {\n\t\tvar locater = new LocationIndexOfPoint(linearGeom);\n\t\treturn locater.indexOf(inputPt);\n\t}\n\tstatic indexOfAfter(linearGeom, inputPt, minIndex) {\n\t\tvar locater = new LocationIndexOfPoint(linearGeom);\n\t\treturn locater.indexOfAfter(inputPt, minIndex);\n\t}\n\tindexOf(inputPt) {\n\t\treturn this.indexOfFromStart(inputPt, null);\n\t}\n\tindexOfFromStart(inputPt, minIndex) {\n\t\tvar minDistance = Double.MAX_VALUE;\n\t\tvar minComponentIndex = 0;\n\t\tvar minSegmentIndex = 0;\n\t\tvar minFrac = -1.0;\n\t\tvar seg = new LineSegment();\n\t\tfor (var it = new LinearIterator(this._linearGeom); it.hasNext(); it.next()) {\n\t\t\tif (!it.isEndOfLine()) {\n\t\t\t\tseg.p0 = it.getSegmentStart();\n\t\t\t\tseg.p1 = it.getSegmentEnd();\n\t\t\t\tvar segDistance = seg.distance(inputPt);\n\t\t\t\tvar segFrac = seg.segmentFraction(inputPt);\n\t\t\t\tvar candidateComponentIndex = it.getComponentIndex();\n\t\t\t\tvar candidateSegmentIndex = it.getVertexIndex();\n\t\t\t\tif (segDistance < minDistance) {\n\t\t\t\t\tif (minIndex === null || minIndex.compareLocationValues(candidateComponentIndex, candidateSegmentIndex, segFrac) < 0) {\n\t\t\t\t\t\tminComponentIndex = candidateComponentIndex;\n\t\t\t\t\t\tminSegmentIndex = candidateSegmentIndex;\n\t\t\t\t\t\tminFrac = segFrac;\n\t\t\t\t\t\tminDistance = segDistance;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (minDistance === Double.MAX_VALUE) {\n\t\t\treturn new LinearLocation(minIndex);\n\t\t}\n\t\tvar loc = new LinearLocation(minComponentIndex, minSegmentIndex, minFrac);\n\t\treturn loc;\n\t}\n\tindexOfAfter(inputPt, minIndex) {\n\t\tif (minIndex === null) return this.indexOf(inputPt);\n\t\tvar endLoc = LinearLocation.getEndLocation(this._linearGeom);\n\t\tif (endLoc.compareTo(minIndex) <= 0) return endLoc;\n\t\tvar closestAfter = this.indexOfFromStart(inputPt, minIndex);\n\t\tAssert.isTrue(closestAfter.compareTo(minIndex) >= 0, \"computed location is before specified minimum location\");\n\t\treturn closestAfter;\n\t}\n\tgetClass() {\n\t\treturn LocationIndexOfPoint;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nLocationIndexOfPoint.constructor_ = function () {\n\tthis._linearGeom = null;\n\tlet linearGeom = arguments[0];\n\tthis._linearGeom = linearGeom;\n};\n","import LocationIndexOfPoint from './LocationIndexOfPoint';\nexport default class LocationIndexOfLine {\n\tconstructor() {\n\t\tLocationIndexOfLine.constructor_.apply(this, arguments);\n\t}\n\tstatic indicesOf(linearGeom, subLine) {\n\t\tvar locater = new LocationIndexOfLine(linearGeom);\n\t\treturn locater.indicesOf(subLine);\n\t}\n\tindicesOf(subLine) {\n\t\tvar startPt = subLine.getGeometryN(0).getCoordinateN(0);\n\t\tvar lastLine = subLine.getGeometryN(subLine.getNumGeometries() - 1);\n\t\tvar endPt = lastLine.getCoordinateN(lastLine.getNumPoints() - 1);\n\t\tvar locPt = new LocationIndexOfPoint(this._linearGeom);\n\t\tvar subLineLoc = new Array(2).fill(null);\n\t\tsubLineLoc[0] = locPt.indexOf(startPt);\n\t\tif (subLine.getLength() === 0.0) {\n\t\t\tsubLineLoc[1] = subLineLoc[0].copy();\n\t\t} else {\n\t\t\tsubLineLoc[1] = locPt.indexOfAfter(endPt, subLineLoc[0]);\n\t\t}\n\t\treturn subLineLoc;\n\t}\n\tgetClass() {\n\t\treturn LocationIndexOfLine;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nLocationIndexOfLine.constructor_ = function () {\n\tthis._linearGeom = null;\n\tlet linearGeom = arguments[0];\n\tthis._linearGeom = linearGeom;\n};\n","import CoordinateList from '../geom/CoordinateList';\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException';\nimport ArrayList from '../../../../java/util/ArrayList';\nexport default class LinearGeometryBuilder {\n\tconstructor() {\n\t\tLinearGeometryBuilder.constructor_.apply(this, arguments);\n\t}\n\tgetGeometry() {\n\t\tthis.endLine();\n\t\treturn this._geomFact.buildGeometry(this._lines);\n\t}\n\tgetLastCoordinate() {\n\t\treturn this._lastPt;\n\t}\n\tendLine() {\n\t\tif (this._coordList === null) {\n\t\t\treturn null;\n\t\t}\n\t\tif (this._ignoreInvalidLines && this._coordList.size() < 2) {\n\t\t\tthis._coordList = null;\n\t\t\treturn null;\n\t\t}\n\t\tvar rawPts = this._coordList.toCoordinateArray();\n\t\tvar pts = rawPts;\n\t\tif (this._fixInvalidLines) pts = this.validCoordinateSequence(rawPts);\n\t\tthis._coordList = null;\n\t\tvar line = null;\n\t\ttry {\n\t\t\tline = this._geomFact.createLineString(pts);\n\t\t} catch (ex) {\n\t\t\tif (ex instanceof IllegalArgumentException) {\n\t\t\t\tif (!this._ignoreInvalidLines) throw ex;\n\t\t\t} else throw ex;\n\t\t} finally {}\n\t\tif (line !== null) this._lines.add(line);\n\t}\n\tsetFixInvalidLines(fixInvalidLines) {\n\t\tthis._fixInvalidLines = fixInvalidLines;\n\t}\n\tadd() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet pt = arguments[0];\n\t\t\tthis.add(pt, true);\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet pt = arguments[0], allowRepeatedPoints = arguments[1];\n\t\t\tif (this._coordList === null) this._coordList = new CoordinateList();\n\t\t\tthis._coordList.add(pt, allowRepeatedPoints);\n\t\t\tthis._lastPt = pt;\n\t\t}\n\t}\n\tsetIgnoreInvalidLines(ignoreInvalidLines) {\n\t\tthis._ignoreInvalidLines = ignoreInvalidLines;\n\t}\n\tvalidCoordinateSequence(pts) {\n\t\tif (pts.length >= 2) return pts;\n\t\tvar validPts = [pts[0], pts[0]];\n\t\treturn validPts;\n\t}\n\tgetClass() {\n\t\treturn LinearGeometryBuilder;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nLinearGeometryBuilder.constructor_ = function () {\n\tthis._geomFact = null;\n\tthis._lines = new ArrayList();\n\tthis._coordList = null;\n\tthis._ignoreInvalidLines = false;\n\tthis._fixInvalidLines = false;\n\tthis._lastPt = null;\n\tlet geomFact = arguments[0];\n\tthis._geomFact = geomFact;\n};\n","import LineString from '../geom/LineString';\nimport CoordinateList from '../geom/CoordinateList';\nimport LinearIterator from './LinearIterator';\nimport Assert from '../util/Assert';\nimport LinearGeometryBuilder from './LinearGeometryBuilder';\nimport MultiLineString from '../geom/MultiLineString';\nexport default class ExtractLineByLocation {\n\tconstructor() {\n\t\tExtractLineByLocation.constructor_.apply(this, arguments);\n\t}\n\tstatic extract(line, start, end) {\n\t\tvar ls = new ExtractLineByLocation(line);\n\t\treturn ls.extract(start, end);\n\t}\n\tcomputeLinear(start, end) {\n\t\tvar builder = new LinearGeometryBuilder(this._line.getFactory());\n\t\tbuilder.setFixInvalidLines(true);\n\t\tif (!start.isVertex()) builder.add(start.getCoordinate(this._line));\n\t\tfor (var it = new LinearIterator(this._line, start); it.hasNext(); it.next()) {\n\t\t\tif (end.compareLocationValues(it.getComponentIndex(), it.getVertexIndex(), 0.0) < 0) break;\n\t\t\tvar pt = it.getSegmentStart();\n\t\t\tbuilder.add(pt);\n\t\t\tif (it.isEndOfLine()) builder.endLine();\n\t\t}\n\t\tif (!end.isVertex()) builder.add(end.getCoordinate(this._line));\n\t\treturn builder.getGeometry();\n\t}\n\tcomputeLine(start, end) {\n\t\tvar coordinates = this._line.getCoordinates();\n\t\tvar newCoordinates = new CoordinateList();\n\t\tvar startSegmentIndex = start.getSegmentIndex();\n\t\tif (start.getSegmentFraction() > 0.0) startSegmentIndex += 1;\n\t\tvar lastSegmentIndex = end.getSegmentIndex();\n\t\tif (end.getSegmentFraction() === 1.0) lastSegmentIndex += 1;\n\t\tif (lastSegmentIndex >= coordinates.length) lastSegmentIndex = coordinates.length - 1;\n\t\tif (!start.isVertex()) newCoordinates.add(start.getCoordinate(this._line));\n\t\tfor (var i = startSegmentIndex; i <= lastSegmentIndex; i++) {\n\t\t\tnewCoordinates.add(coordinates[i]);\n\t\t}\n\t\tif (!end.isVertex()) newCoordinates.add(end.getCoordinate(this._line));\n\t\tif (newCoordinates.size() <= 0) newCoordinates.add(start.getCoordinate(this._line));\n\t\tvar newCoordinateArray = newCoordinates.toCoordinateArray();\n\t\tif (newCoordinateArray.length <= 1) {\n\t\t\tnewCoordinateArray = [newCoordinateArray[0], newCoordinateArray[0]];\n\t\t}\n\t\treturn this._line.getFactory().createLineString(newCoordinateArray);\n\t}\n\textract(start, end) {\n\t\tif (end.compareTo(start) < 0) {\n\t\t\treturn this.reverse(this.computeLinear(end, start));\n\t\t}\n\t\treturn this.computeLinear(start, end);\n\t}\n\treverse(linear) {\n\t\tif (linear instanceof LineString) return linear.reverse();\n\t\tif (linear instanceof MultiLineString) return linear.reverse();\n\t\tAssert.shouldNeverReachHere(\"non-linear geometry encountered\");\n\t\treturn null;\n\t}\n\tgetClass() {\n\t\treturn ExtractLineByLocation;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nExtractLineByLocation.constructor_ = function () {\n\tthis._line = null;\n\tlet line = arguments[0];\n\tthis._line = line;\n};\n","import LineString from '../geom/LineString';\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException';\nimport LinearLocation from './LinearLocation';\nimport LocationIndexOfPoint from './LocationIndexOfPoint';\nimport LocationIndexOfLine from './LocationIndexOfLine';\nimport ExtractLineByLocation from './ExtractLineByLocation';\nimport MultiLineString from '../geom/MultiLineString';\nexport default class LocationIndexedLine {\n\tconstructor() {\n\t\tLocationIndexedLine.constructor_.apply(this, arguments);\n\t}\n\tclampIndex(index) {\n\t\tvar loc = index.copy();\n\t\tloc.clamp(this._linearGeom);\n\t\treturn loc;\n\t}\n\tproject(pt) {\n\t\treturn LocationIndexOfPoint.indexOf(this._linearGeom, pt);\n\t}\n\tcheckGeometryType() {\n\t\tif (!(this._linearGeom instanceof LineString || this._linearGeom instanceof MultiLineString)) throw new IllegalArgumentException(\"Input geometry must be linear\");\n\t}\n\textractPoint() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet index = arguments[0];\n\t\t\treturn index.getCoordinate(this._linearGeom);\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet index = arguments[0], offsetDistance = arguments[1];\n\t\t\tvar indexLow = index.toLowest(this._linearGeom);\n\t\t\treturn indexLow.getSegment(this._linearGeom).pointAlongOffset(indexLow.getSegmentFraction(), offsetDistance);\n\t\t}\n\t}\n\tisValidIndex(index) {\n\t\treturn index.isValid(this._linearGeom);\n\t}\n\tgetEndIndex() {\n\t\treturn LinearLocation.getEndLocation(this._linearGeom);\n\t}\n\tgetStartIndex() {\n\t\treturn new LinearLocation();\n\t}\n\tindexOfAfter(pt, minIndex) {\n\t\treturn LocationIndexOfPoint.indexOfAfter(this._linearGeom, pt, minIndex);\n\t}\n\textractLine(startIndex, endIndex) {\n\t\treturn ExtractLineByLocation.extract(this._linearGeom, startIndex, endIndex);\n\t}\n\tindexOf(pt) {\n\t\treturn LocationIndexOfPoint.indexOf(this._linearGeom, pt);\n\t}\n\tindicesOf(subLine) {\n\t\treturn LocationIndexOfLine.indicesOf(this._linearGeom, subLine);\n\t}\n\tgetClass() {\n\t\treturn LocationIndexedLine;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nLocationIndexedLine.constructor_ = function () {\n\tthis._linearGeom = null;\n\tlet linearGeom = arguments[0];\n\tthis._linearGeom = linearGeom;\n\tthis.checkGeometryType();\n};\n","import LinearIterator from './LinearIterator';\nimport Double from '../../../../java/lang/Double';\nimport LineSegment from '../geom/LineSegment';\nimport Assert from '../util/Assert';\nexport default class LengthIndexOfPoint {\n\tconstructor() {\n\t\tLengthIndexOfPoint.constructor_.apply(this, arguments);\n\t}\n\tstatic indexOf(linearGeom, inputPt) {\n\t\tvar locater = new LengthIndexOfPoint(linearGeom);\n\t\treturn locater.indexOf(inputPt);\n\t}\n\tstatic indexOfAfter(linearGeom, inputPt, minIndex) {\n\t\tvar locater = new LengthIndexOfPoint(linearGeom);\n\t\treturn locater.indexOfAfter(inputPt, minIndex);\n\t}\n\tindexOf(inputPt) {\n\t\treturn this.indexOfFromStart(inputPt, -1.0);\n\t}\n\tindexOfFromStart(inputPt, minIndex) {\n\t\tvar minDistance = Double.MAX_VALUE;\n\t\tvar ptMeasure = minIndex;\n\t\tvar segmentStartMeasure = 0.0;\n\t\tvar seg = new LineSegment();\n\t\tvar it = new LinearIterator(this._linearGeom);\n\t\twhile (it.hasNext()) {\n\t\t\tif (!it.isEndOfLine()) {\n\t\t\t\tseg.p0 = it.getSegmentStart();\n\t\t\t\tseg.p1 = it.getSegmentEnd();\n\t\t\t\tvar segDistance = seg.distance(inputPt);\n\t\t\t\tvar segMeasureToPt = this.segmentNearestMeasure(seg, inputPt, segmentStartMeasure);\n\t\t\t\tif (segDistance < minDistance && segMeasureToPt > minIndex) {\n\t\t\t\t\tptMeasure = segMeasureToPt;\n\t\t\t\t\tminDistance = segDistance;\n\t\t\t\t}\n\t\t\t\tsegmentStartMeasure += seg.getLength();\n\t\t\t}\n\t\t\tit.next();\n\t\t}\n\t\treturn ptMeasure;\n\t}\n\tindexOfAfter(inputPt, minIndex) {\n\t\tif (minIndex < 0.0) return this.indexOf(inputPt);\n\t\tvar endIndex = this._linearGeom.getLength();\n\t\tif (endIndex < minIndex) return endIndex;\n\t\tvar closestAfter = this.indexOfFromStart(inputPt, minIndex);\n\t\tAssert.isTrue(closestAfter >= minIndex, \"computed index is before specified minimum index\");\n\t\treturn closestAfter;\n\t}\n\tsegmentNearestMeasure(seg, inputPt, segmentStartMeasure) {\n\t\tvar projFactor = seg.projectionFactor(inputPt);\n\t\tif (projFactor <= 0.0) return segmentStartMeasure;\n\t\tif (projFactor <= 1.0) return segmentStartMeasure + projFactor * seg.getLength();\n\t\treturn segmentStartMeasure + seg.getLength();\n\t}\n\tgetClass() {\n\t\treturn LengthIndexOfPoint;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nLengthIndexOfPoint.constructor_ = function () {\n\tthis._linearGeom = null;\n\tlet linearGeom = arguments[0];\n\tthis._linearGeom = linearGeom;\n};\n","import LinearIterator from './LinearIterator';\nimport LinearLocation from './LinearLocation';\nexport default class LengthLocationMap {\n\tconstructor() {\n\t\tLengthLocationMap.constructor_.apply(this, arguments);\n\t}\n\tstatic getLength(linearGeom, loc) {\n\t\tvar locater = new LengthLocationMap(linearGeom);\n\t\treturn locater.getLength(loc);\n\t}\n\tstatic getLocation() {\n\t\tif (arguments.length === 2) {\n\t\t\tlet linearGeom = arguments[0], length = arguments[1];\n\t\t\tvar locater = new LengthLocationMap(linearGeom);\n\t\t\treturn locater.getLocation(length);\n\t\t} else if (arguments.length === 3) {\n\t\t\tlet linearGeom = arguments[0], length = arguments[1], resolveLower = arguments[2];\n\t\t\tvar locater = new LengthLocationMap(linearGeom);\n\t\t\treturn locater.getLocation(length, resolveLower);\n\t\t}\n\t}\n\tgetLength(loc) {\n\t\tvar totalLength = 0.0;\n\t\tvar it = new LinearIterator(this._linearGeom);\n\t\twhile (it.hasNext()) {\n\t\t\tif (!it.isEndOfLine()) {\n\t\t\t\tvar p0 = it.getSegmentStart();\n\t\t\t\tvar p1 = it.getSegmentEnd();\n\t\t\t\tvar segLen = p1.distance(p0);\n\t\t\t\tif (loc.getComponentIndex() === it.getComponentIndex() && loc.getSegmentIndex() === it.getVertexIndex()) {\n\t\t\t\t\treturn totalLength + segLen * loc.getSegmentFraction();\n\t\t\t\t}\n\t\t\t\ttotalLength += segLen;\n\t\t\t}\n\t\t\tit.next();\n\t\t}\n\t\treturn totalLength;\n\t}\n\tresolveHigher(loc) {\n\t\tif (!loc.isEndpoint(this._linearGeom)) return loc;\n\t\tvar compIndex = loc.getComponentIndex();\n\t\tif (compIndex >= this._linearGeom.getNumGeometries() - 1) return loc;\n\t\tdo {\n\t\t\tcompIndex++;\n\t\t} while (compIndex < this._linearGeom.getNumGeometries() - 1 && this._linearGeom.getGeometryN(compIndex).getLength() === 0);\n\t\treturn new LinearLocation(compIndex, 0, 0.0);\n\t}\n\tgetLocation() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet length = arguments[0];\n\t\t\treturn this.getLocation(length, true);\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet length = arguments[0], resolveLower = arguments[1];\n\t\t\tvar forwardLength = length;\n\t\t\tif (length < 0.0) {\n\t\t\t\tvar lineLen = this._linearGeom.getLength();\n\t\t\t\tforwardLength = lineLen + length;\n\t\t\t}\n\t\t\tvar loc = this.getLocationForward(forwardLength);\n\t\t\tif (resolveLower) {\n\t\t\t\treturn loc;\n\t\t\t}\n\t\t\treturn this.resolveHigher(loc);\n\t\t}\n\t}\n\tgetLocationForward(length) {\n\t\tif (length <= 0.0) return new LinearLocation();\n\t\tvar totalLength = 0.0;\n\t\tvar it = new LinearIterator(this._linearGeom);\n\t\twhile (it.hasNext()) {\n\t\t\tif (it.isEndOfLine()) {\n\t\t\t\tif (totalLength === length) {\n\t\t\t\t\tvar compIndex = it.getComponentIndex();\n\t\t\t\t\tvar segIndex = it.getVertexIndex();\n\t\t\t\t\treturn new LinearLocation(compIndex, segIndex, 0.0);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar p0 = it.getSegmentStart();\n\t\t\t\tvar p1 = it.getSegmentEnd();\n\t\t\t\tvar segLen = p1.distance(p0);\n\t\t\t\tif (totalLength + segLen > length) {\n\t\t\t\t\tvar frac = (length - totalLength) / segLen;\n\t\t\t\t\tvar compIndex = it.getComponentIndex();\n\t\t\t\t\tvar segIndex = it.getVertexIndex();\n\t\t\t\t\treturn new LinearLocation(compIndex, segIndex, frac);\n\t\t\t\t}\n\t\t\t\ttotalLength += segLen;\n\t\t\t}\n\t\t\tit.next();\n\t\t}\n\t\treturn LinearLocation.getEndLocation(this._linearGeom);\n\t}\n\tgetClass() {\n\t\treturn LengthLocationMap;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nLengthLocationMap.constructor_ = function () {\n\tthis._linearGeom = null;\n\tlet linearGeom = arguments[0];\n\tthis._linearGeom = linearGeom;\n};\n","import LocationIndexedLine from './LocationIndexedLine';\nimport LengthIndexOfPoint from './LengthIndexOfPoint';\nimport LocationIndexOfLine from './LocationIndexOfLine';\nimport LengthLocationMap from './LengthLocationMap';\nimport ExtractLineByLocation from './ExtractLineByLocation';\nexport default class LengthIndexedLine {\n\tconstructor() {\n\t\tLengthIndexedLine.constructor_.apply(this, arguments);\n\t}\n\tclampIndex(index) {\n\t\tvar posIndex = this.positiveIndex(index);\n\t\tvar startIndex = this.getStartIndex();\n\t\tif (posIndex < startIndex) return startIndex;\n\t\tvar endIndex = this.getEndIndex();\n\t\tif (posIndex > endIndex) return endIndex;\n\t\treturn posIndex;\n\t}\n\tlocationOf() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet index = arguments[0];\n\t\t\treturn LengthLocationMap.getLocation(this._linearGeom, index);\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet index = arguments[0], resolveLower = arguments[1];\n\t\t\treturn LengthLocationMap.getLocation(this._linearGeom, index, resolveLower);\n\t\t}\n\t}\n\tproject(pt) {\n\t\treturn LengthIndexOfPoint.indexOf(this._linearGeom, pt);\n\t}\n\tpositiveIndex(index) {\n\t\tif (index >= 0.0) return index;\n\t\treturn this._linearGeom.getLength() + index;\n\t}\n\textractPoint() {\n\t\tif (arguments.length === 1) {\n\t\t\tlet index = arguments[0];\n\t\t\tvar loc = LengthLocationMap.getLocation(this._linearGeom, index);\n\t\t\treturn loc.getCoordinate(this._linearGeom);\n\t\t} else if (arguments.length === 2) {\n\t\t\tlet index = arguments[0], offsetDistance = arguments[1];\n\t\t\tvar loc = LengthLocationMap.getLocation(this._linearGeom, index);\n\t\t\tvar locLow = loc.toLowest(this._linearGeom);\n\t\t\treturn locLow.getSegment(this._linearGeom).pointAlongOffset(locLow.getSegmentFraction(), offsetDistance);\n\t\t}\n\t}\n\tisValidIndex(index) {\n\t\treturn index >= this.getStartIndex() && index <= this.getEndIndex();\n\t}\n\tgetEndIndex() {\n\t\treturn this._linearGeom.getLength();\n\t}\n\tgetStartIndex() {\n\t\treturn 0.0;\n\t}\n\tindexOfAfter(pt, minIndex) {\n\t\treturn LengthIndexOfPoint.indexOfAfter(this._linearGeom, pt, minIndex);\n\t}\n\textractLine(startIndex, endIndex) {\n\t\tvar lil = new LocationIndexedLine(this._linearGeom);\n\t\tvar startIndex2 = this.clampIndex(startIndex);\n\t\tvar endIndex2 = this.clampIndex(endIndex);\n\t\tvar resolveStartLower = startIndex2 === endIndex2;\n\t\tvar startLoc = this.locationOf(startIndex2, resolveStartLower);\n\t\tvar endLoc = this.locationOf(endIndex2);\n\t\treturn ExtractLineByLocation.extract(this._linearGeom, startLoc, endLoc);\n\t}\n\tindexOf(pt) {\n\t\treturn LengthIndexOfPoint.indexOf(this._linearGeom, pt);\n\t}\n\tindicesOf(subLine) {\n\t\tvar locIndex = LocationIndexOfLine.indicesOf(this._linearGeom, subLine);\n\t\tvar index = [LengthLocationMap.getLength(this._linearGeom, locIndex[0]), LengthLocationMap.getLength(this._linearGeom, locIndex[1])];\n\t\treturn index;\n\t}\n\tgetClass() {\n\t\treturn LengthIndexedLine;\n\t}\n\tget interfaces_() {\n\t\treturn [];\n\t}\n}\nLengthIndexedLine.constructor_ = function () {\n\tthis._linearGeom = null;\n\tlet linearGeom = arguments[0];\n\tthis._linearGeom = linearGeom;\n};\n","import SnapIfNeededOverlayOp from '../overlay/snap/SnapIfNeededOverlayOp';\nimport OverlayOp from '../overlay/OverlayOp';\nexport default class UnionOp {\n\tget interfaces_() {\n\t\treturn [];\n\t}\n\tgetClass() {\n\t\treturn UnionOp;\n\t}\n\tstatic union(g, other) {\n\t\tif (g.isEmpty() || other.isEmpty()) {\n\t\t\tif (g.isEmpty() && other.isEmpty()) return OverlayOp.createEmptyResult(OverlayOp.UNION, g, other, g.getFactory());\n\t\t\tif (g.isEmpty()) return other.copy();\n\t\t\tif (other.isEmpty()) return g.copy();\n\t\t}\n\t\tg.checkNotGeometryCollection(g);\n\t\tg.checkNotGeometryCollection(other);\n\t\treturn SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.UNION);\n\t}\n}","import WKTWriter from './io/WKTWriter';\nimport GeometryCollectionMapper from './geom/util/GeometryCollectionMapper';\nimport IsValidOp from './operation/valid/IsValidOp';\nimport InteriorPointArea from './algorithm/InteriorPointArea';\nimport UnaryUnionOp from './operation/union/UnaryUnionOp';\nimport UnionOp from './operation/union/UnionOp';\nimport SnapIfNeededOverlayOp from './operation/overlay/snap/SnapIfNeededOverlayOp';\nimport InteriorPointLine from './algorithm/InteriorPointLine';\nimport IsSimpleOp from './operation/IsSimpleOp';\nimport BufferOp from './operation/buffer/BufferOp';\nimport ConvexHull from './algorithm/ConvexHull';\nimport Centroid from './algorithm/Centroid';\nimport RelateOp from './operation/relate/RelateOp';\nimport InteriorPointPoint from './algorithm/InteriorPointPoint';\nimport DistanceOp from './operation/distance/DistanceOp';\nimport OverlayOp from './operation/overlay/OverlayOp';\nimport Geometry from './geom/Geometry';\n\nGeometry.prototype.equalsTopo = function (g) {\n\tif (!this.getEnvelopeInternal().equals(g.getEnvelopeInternal())) return false;\n\treturn RelateOp.relate(this, g).isEquals(this.getDimension(), g.getDimension());\n}\nGeometry.prototype.union = function() {\n\tif (arguments.length === 0) {\n\t\treturn UnaryUnionOp.union(this);\n\t} else if (arguments.length === 1) {\n\t\tlet other = arguments[0];\n\t\treturn UnionOp.union(this, other);\n\t}\n}\nGeometry.prototype.isValid = function() {\n\treturn IsValidOp.isValid(this);\n}\nGeometry.prototype.intersection = function(other) {\n\tif (this.isEmpty() || other.isEmpty()) return OverlayOp.createEmptyResult(OverlayOp.INTERSECTION, this, other, this._factory);\n\tif (this.isGeometryCollection()) {\n\t\tvar g2 = other;\n\t\treturn GeometryCollectionMapper.map(this, {\n\t\t\tinterfaces_: [MapOp],\n\t\t\tmap: function(g) {\n\t\t\t\treturn g.intersection(g2);\n\t\t\t}\n\t\t});\n\t}\n\tthis.checkNotGeometryCollection(this);\n\tthis.checkNotGeometryCollection(other);\n\treturn SnapIfNeededOverlayOp.overlayOp(this, other, OverlayOp.INTERSECTION);\n}\nGeometry.prototype.covers = function(g) {\n\treturn RelateOp.covers(this, g);\n}\nGeometry.prototype.coveredBy = function(g) {\n\treturn RelateOp.covers(g, this);\n}\nGeometry.prototype.touches = function(g) {\n\treturn RelateOp.touches(this, g);\n}\nGeometry.prototype.intersects = function(g) {\n\treturn RelateOp.intersects(this, g);\n}\nGeometry.prototype.within = function(g) {\n\treturn RelateOp.contains(g, this);\n}\nGeometry.prototype.overlaps = function(g) {\n\treturn RelateOp.overlaps(this, g);\n}\nGeometry.prototype.disjoint = function(g) {\n\treturn RelateOp.disjoint(this, g);\n}\nGeometry.prototype.crosses = function(g) {\n\treturn RelateOp.crosses(this, g);\n}\nGeometry.prototype.buffer = function() {\n\tif (arguments.length === 1) {\n\t\tlet distance = arguments[0];\n\t\treturn BufferOp.bufferOp(this, distance);\n\t} else if (arguments.length === 2) {\n\t\tlet distance = arguments[0], quadrantSegments = arguments[1];\n\t\treturn BufferOp.bufferOp(this, distance, quadrantSegments);\n\t} else if (arguments.length === 3) {\n\t\tlet distance = arguments[0], quadrantSegments = arguments[1], endCapStyle = arguments[2];\n\t\treturn BufferOp.bufferOp(this, distance, quadrantSegments, endCapStyle);\n\t}\n}\nGeometry.prototype.convexHull = function() {\n\treturn new ConvexHull(this).getConvexHull();\n}\nGeometry.prototype.relate = function(...args) {\n\tif (arguments.length === 1) {\n\t\tlet geometry = arguments[0];\n\t\treturn RelateOp.relate(this, geometry);\n\t} else if (arguments.length === 2) {\n\t\tlet geometry = arguments[0], intersectionPattern = arguments[1];\n\t\treturn RelateOp.relate(this, geometry).matches(intersectionPattern);\n\t}\n}\nGeometry.prototype.getCentroid = function() {\n\tif (this.isEmpty()) return this._factory.createPoint();\n\tvar centPt = Centroid.getCentroid(this);\n\treturn this.createPointFromInternalCoord(centPt, this);\n}\nGeometry.prototype.getInteriorPoint = function() {\n\tif (this.isEmpty()) return this._factory.createPoint();\n\tvar interiorPt = null;\n\tvar dim = this.getDimension();\n\tif (dim === 0) {\n\t\tvar intPt = new InteriorPointPoint(this);\n\t\tinteriorPt = intPt.getInteriorPoint();\n\t} else if (dim === 1) {\n\t\tvar intPt = new InteriorPointLine(this);\n\t\tinteriorPt = intPt.getInteriorPoint();\n\t} else {\n\t\tvar intPt = new InteriorPointArea(this);\n\t\tinteriorPt = intPt.getInteriorPoint();\n\t}\n\treturn this.createPointFromInternalCoord(interiorPt, this);\n}\nGeometry.prototype.symDifference = function(other) {\n\tif (this.isEmpty() || other.isEmpty()) {\n\t\tif (this.isEmpty() && other.isEmpty()) return OverlayOp.createEmptyResult(OverlayOp.SYMDIFFERENCE, this, other, this._factory);\n\t\tif (this.isEmpty()) return other.copy();\n\t\tif (other.isEmpty()) return this.copy();\n\t}\n\tthis.checkNotGeometryCollection(this);\n\tthis.checkNotGeometryCollection(other);\n\treturn SnapIfNeededOverlayOp.overlayOp(this, other, OverlayOp.SYMDIFFERENCE);\n}\nGeometry.prototype.createPointFromInternalCoord = function(coord, exemplar) {\n\texemplar.getPrecisionModel().makePrecise(coord);\n\treturn exemplar.getFactory().createPoint(coord);\n}\nGeometry.prototype.toText = function() {\n\tvar writer = new WKTWriter();\n\treturn writer.write(this);\n}\nGeometry.prototype.toString = function() {\n\tthis.toText();\n}\nGeometry.prototype.contains = function(g) {\n\treturn RelateOp.contains(this, g);\n}\nGeometry.prototype.difference = function(other) {\n\tif (this.isEmpty()) return OverlayOp.createEmptyResult(OverlayOp.DIFFERENCE, this, other, this._factory);\n\tif (other.isEmpty()) return this.copy();\n\tthis.checkNotGeometryCollection(this);\n\tthis.checkNotGeometryCollection(other);\n\treturn SnapIfNeededOverlayOp.overlayOp(this, other, OverlayOp.DIFFERENCE);\n}\nGeometry.prototype.isSimple = function() {\n\tvar op = new IsSimpleOp(this);\n\treturn op.isSimple();\n}\nGeometry.prototype.isWithinDistance = function(geom, distance) {\n\tvar envDist = this.getEnvelopeInternal().distance(geom.getEnvelopeInternal());\n\tif (envDist > distance) return false;\n\treturn DistanceOp.isWithinDistance(this, geom, distance);\n}\nGeometry.prototype.distance = function(g) {\n\treturn DistanceOp.distance(this, g);\n}\nGeometry.prototype.isEquivalentClass = function(other) {\n\treturn this.getClass() === other.getClass();\n}\n\n","import './Array'\nimport './Number'\nimport './Math'\n\nimport * as geom from './org/locationtech/jts/geom'\nimport * as algorithm from './org/locationtech/jts/algorithm'\nimport * as densify from './org/locationtech/jts/densify'\nimport * as dissolve from './org/locationtech/jts/dissolve'\nimport * as geomgraph from './org/locationtech/jts/geomgraph'\nimport * as index from './org/locationtech/jts/index'\nimport * as io from './org/locationtech/jts/io'\nimport * as noding from './org/locationtech/jts/noding'\nimport * as operation from './org/locationtech/jts/operation'\nimport * as precision from './org/locationtech/jts/precision'\nimport * as simplify from './org/locationtech/jts/simplify'\nimport * as triangulate from './org/locationtech/jts/triangulate'\nimport * as linearref from './org/locationtech/jts/linearref'\n\nimport './org/locationtech/jts/monkey'\n\nconst version = 'npm_package_version (git_hash)'\nexport {\n version,\n algorithm,\n densify,\n dissolve,\n geom,\n geomgraph,\n index,\n io,\n noding,\n operation,\n precision,\n simplify,\n triangulate,\n linearref\n}\n"]}