{"version":3,"sources":["../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/Collection.js","../src/java/lang/IndexOutOfBoundsException.js","../src/java/util/List.js","../src/java/util/NoSuchElementException.js","../src/java/util/ArrayList.js","../src/org/locationtech/jts/geom/CoordinateList.js","../src/org/locationtech/jts/geom/CoordinateSequenceFilter.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/lang/UnsupportedOperationException.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/java/util/Arrays.js","../src/org/locationtech/jts/geom/Dimension.js","../src/org/locationtech/jts/geom/GeometryFilter.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/geom/util/NoninvertibleTransformationException.js","../src/org/locationtech/jts/geom/util/AffineTransformation.js","../src/org/locationtech/jts/math/Matrix.js","../src/org/locationtech/jts/geom/util/AffineTransformationBuilder.js","../src/org/locationtech/jts/geom/util/AffineTransformationFactory.js","../src/org/locationtech/jts/geom/util/ComponentCoordinateExtracter.js","../src/org/locationtech/jts/geom/util/GeometryCollectionMapper.js","../src/org/locationtech/jts/geom/util/GeometryCombiner.js","../src/org/locationtech/jts/geom/util/GeometryExtracter.js","../src/org/locationtech/jts/geom/util/MapOp.js","../src/org/locationtech/jts/geom/util/GeometryMapper.js","../src/org/locationtech/jts/geom/util/GeometryTransformer.js","../src/org/locationtech/jts/geom/util/LineStringExtracter.js","../src/org/locationtech/jts/geom/util/LinearComponentExtracter.js","../src/java/util/Collections.js","../src/org/locationtech/jts/geom/util/PointExtracter.js","../src/org/locationtech/jts/geom/util/PolygonExtracter.js","../src/org/locationtech/jts/geom/util/ShortCircuitedGeometryVisitor.js","../src/org/locationtech/jts/util/GeometricShapeFactory.js","../src/org/locationtech/jts/geom/util/SineStarFactory.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/org/locationtech/jts/index/intervalrtree/IntervalRTreeBranchNode.js","../src/org/locationtech/jts/index/intervalrtree/SortedPackedIntervalRTree.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/java/util/Iterator.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/PointLocator.js","../src/org/locationtech/jts/noding/Octant.js","../src/org/locationtech/jts/noding/SegmentString.js","../src/org/locationtech/jts/noding/BasicSegmentString.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/SpatialIndex.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/noding/SegmentPointComparator.js","../src/org/locationtech/jts/noding/SegmentNode.js","../src/org/locationtech/jts/noding/SegmentNodeList.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/geomgraph/Quadrant.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/geom/TopologyException.js","../src/org/locationtech/jts/noding/SegmentIntersector.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/geomgraph/Position.js","../src/org/locationtech/jts/geomgraph/TopologyLocation.js","../src/org/locationtech/jts/geomgraph/Label.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/geomgraph/GraphComponent.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/geomgraph/DirectedEdge.js","../src/org/locationtech/jts/geomgraph/NodeFactory.js","../src/org/locationtech/jts/geomgraph/PlanarGraph.js","../src/org/locationtech/jts/operation/overlay/PolygonBuilder.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/geomgraph/EdgeEndStar.js","../src/org/locationtech/jts/geomgraph/DirectedEdgeStar.js","../src/org/locationtech/jts/operation/overlay/OverlayNodeFactory.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/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/Edge.js","../src/org/locationtech/jts/geomgraph/GeometryGraph.js","../src/org/locationtech/jts/operation/GeometryGraphOperation.js","../src/org/locationtech/jts/noding/OrientedCoordinateArray.js","../src/org/locationtech/jts/geomgraph/EdgeList.js","../src/org/locationtech/jts/operation/overlay/OverlayOp.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/densify/Densifier.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/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/quadtree/Quadtree.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/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/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/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/operation/distance/GeometryLocation.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/planargraph/Subgraph.js","../src/org/locationtech/jts/planargraph/algorithm/ConnectedSubgraphFinder.js","../src/org/locationtech/jts/operation/linemerge/LineSequencer.js","../src/org/locationtech/jts/operation/polygonize/PolygonizeDirectedEdge.js","../src/org/locationtech/jts/operation/polygonize/PolygonizeEdge.js","../src/org/locationtech/jts/operation/valid/ConnectedInteriorTester.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/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/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/RelateComputer.js","../src/org/locationtech/jts/operation/predicate/RectangleContains.js","../src/org/locationtech/jts/algorithm/RectangleLineIntersector.js","../src/org/locationtech/jts/operation/predicate/RectangleIntersects.js","../src/org/locationtech/jts/operation/relate/RelateOp.js","../src/org/locationtech/jts/operation/union/PointGeometryUnion.js","../src/org/locationtech/jts/operation/union/CascadedPolygonUnion.js","../src/org/locationtech/jts/operation/union/UnaryUnionOp.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/simplify/VWLineSimplifier.js","../src/org/locationtech/jts/simplify/VWSimplifier.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/util/CollectionUtil.js","../src/org/locationtech/jts/util/CoordinateArrayFilter.js","../src/org/locationtech/jts/util/CoordinateCountFilter.js","../src/org/locationtech/jts/util/ObjectCounter.js","../src/org/locationtech/jts/operation/union/UnionOp.js","../src/org/locationtech/jts/monkey.js","../src/jsts.js"],"names":["NumberUtil","constructor","constructor_","apply","this","arguments","[object Object]","x1","x2","tolerance","Math","abs","getClass","interfaces_","IllegalArgumentException","message","Long","high","low","Double","Comparable","Clonable","Comparator","Serializable","RuntimeException","name","stack","Error","call","toBinaryString","i","mask","result","isNaN","n","Number","isInfinite","isFinite","MAX_VALUE","Float64Array","Int32Array","f64buf","i32buf","buffer","doubleToLongBits","value","longBitsToDouble","bits","log2","floor","pow","MAX_REL_BITS_INTEGER","x","y","f","skip","sign","exp","NEGATIVE_INFINITY","Infinity","fract","BIAS","NaN","prototype","Object","create","AssertionFailedException","super","length","Assert","shouldNeverReachHere","assertion","isTrue","expectedValue","actualValue","equals","Coordinate","trunc","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","Collection","IndexOutOfBoundsException","List","NoSuchElementException","ArrayList","array_","addAll","dimensionsToTest","NULL_ORDINATE","serialVersionUID","add","isEmpty","iterator","size","toArray","remove","get","set","ensureCapacity","push","splice","clear","hasNext","next","index","element","oldElement","Iterator_","array","len","found","removeAll","arrayList","arrayList_","position_","CoordinateList","getCoordinate","coll","allowRepeated","isChanged","toCoordinateArray","coordArrayType","coord","Array","obj","isInteger","start","end","inc","closeRing","fill","CoordinateSequenceFilter","filter","seq","isDone","isGeometryChanged","Envelope","p1","p2","q","q1","q2","minq","min","maxq","max","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","val","numDigits","numBeforeDec","ch","isDigit","d","TEN","selfAdd","expStr","substring","parseInt","ex","NumberFormatException","val2","numDecPlaces","scale","divide","multiply","negate","dd","xAbs","xLog10","log","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","hc","tc","hy","ty","C","U","u","SPLIT","dump","createNaN","ge","r","s","reciprocal","ceil","fhi","flo","rint","setValue","ax","axdd","d2","H","S","T","t","zhi","zlo","hx","tx","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","isCCW","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","geom","Geometry","isGeometryCollection","getTypeCode","TYPECODE_GEOMETRYCOLLECTION","getFactory","_factory","getGeometryN","isRectangle","equalsExact","geometryChanged","geometryChangedFilter","geometryChangedAction","_envelope","equalsNorm","g","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","isEquivalentClass","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","UnsupportedOperationException","Set","HashSet","put","values","entrySet","hashSet","hashSet_","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","GeometryCollection","envelope","_geometries","getCoordinates","getNumPoints","k","childCoordinates","area","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","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","HashMap","map_","MapInterface","done","entries","forEach","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","CloneOp","_precisionModel","ptSeq","coordinateSequenceFactory","precisionModel","getDefaultCoordinateSequenceFactory","regExes","typeStr","emptyTypeStr","spaces","parenComma","doubleParenComma","trimParens","WKTParser","geometryFactory","read","wkt","type","replace","matches","exec","search","undefined","toLowerCase","write","extractGeometry","extract","wktType","multipoint","join","linestring","linearring","multilinestring","multipolygon","geometrycollection","coords","trim","split","parseFloat","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","equalsTopo","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","NoninvertibleTransformationException","msg","AffineTransformation","trans","setToTranslation","xShear","yShear","setToShear","setToReflection","theta","rotationInstance","cos","sinTheta","cosTheta","setToRotation","xScale","yScale","setToScale","setToReflectionBasic","c2s2","_m00","_m01","_m02","_m10","_m11","_m12","getInverse","getDeterminant","im00","im10","im01","im11","im02","im12","compose","mp00","mp01","mp02","mp10","mp11","mp12","isIdentity","scaleInstance","setToIdentity","setTransformation","m02","m12","getMatrixEntries","transform","rotate","composeBefore","translationInstance","shear","shearInstance","g2","xp","yp","reflect","reflectionInstance","matrix","Matrix","maxElementRow","swapRows","rowFactor","solution","m","AffineTransformationBuilder","solve","_src0","_src1","_src2","compute","_dest0","_dest1","_dest2","row0","row1","getTransformation","src0","src1","src2","dest0","dest1","dest2","AffineTransformationFactory","rotPt","ang","angleBetweenOriented","srcDist","destDist","createFromControlVectors","ComponentCoordinateExtracter","_coords","GeometryCollectionMapper","op","mapped","_mapOp","mapOp","GeometryCombiner","geoms","combine","g0","g1","createList","obj0","obj1","list","obj2","extractElements","elems","elemGeom","_skipEmpty","_inputGeoms","_geomFactory","extractFactory","GeometryExtracter","geometryType","Class","clz","toGeometryType","_geometryType","isOfType","_comps","comps","MapOp","GeometryMapper","gr","GeometryTransformer","transformPoint","transformCoordinates","transformPolygon","isAllValidLinearRings","transformLinearRing","createCoordinateSequence","getInputGeometry","_inputGeom","transformMultiLineString","transGeomList","transformGeom","transformLineString","transformMultiPoint","transformMultiPolygon","transformGeometryCollection","_pruneEmptyGeometry","_preserveGeometryCollectionType","inputGeom","seqSize","_preserveType","_preserveCollections","LineStringExtracter","getLines","LinearComponentExtracter","forceToLineString","_isForcedToLineString","_lines","setForceToLineString","isForcedToLineString","Collections","reverseOrder","alen","singletonList","PointExtracter","getPoints","_pts","PolygonExtracter","getPolygons","ShortCircuitedGeometryVisitor","applyTo","_isDone","visit","GeometricShapeFactory","createSupercircle","power","recipPow","radius","_dim","getMinSize","getCentre","r4","xyInt","nSegsInOct","_nPts","xInc","coordTrans","setNumPoints","setBase","base","setRotation","_rotationAngle","setWidth","width","createEllipse","xRadius","yRadius","centreX","centreY","iPt","createSquircle","setEnvelope","setCentre","createArc","startAng","angExtent","angSize","angInc","_precModel","createArcPolygon","createRectangle","ipt","nSide","XsegLen","YsegLen","createCircle","setHeight","height","setSize","Dimensions","getBase","geomFact","SineStarFactory","setNumArms","numArms","_numArms","setArmLengthRatio","armLengthRatio","_armLengthRatio","createSineStar","armRatio","armMaxLen","insideRadius","ptArcFrac","armAngFrac","armAng","curveRadius","PointPairDistance","_pt","setMinimum","ptDist","_isNull","initialize","_distance","getDistance","setMaximum","DistanceToPoint","tempSegment","computeDistance","segment","DiscreteHausdorffDistance","densifyFrac","setDensifyFraction","_ptDist","_densifyFrac","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","IntervalRTreeBranchNode","buildExtent","_node1","_node2","SortedPackedIntervalRTree","buildTree","_leaves","buildLevel","insert","_root","buildRoot","printNode","node","_level","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","Iterator","GeometryCollectionIterator","_atStart","isAtomic","_parent","_subcollectionIterator","SimplePointInAreaLocator","shellLoc","holeLoc","locatePointInPolygon","geomi","loc","locateInGeometry","SimilarityMeasure","measure","AreaSimilarityMeasure","union","HausdorffSimilarityMeasure","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","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","oq","polarCompare","_origin","origin","extractCoordinates","filterCoordinates","PointLocator","locateInPolygonRing","updateLocationInfo","_isIn","_numBoundaries","computeLocation","locateOnPoint","locateOnLineString","locateInPolygon","ml","mpoly","isOnLine","_boundaryRule","boundaryRule","Octant","adx","ady","octant","SegmentString","setData","data","getData","BasicSegmentString","getSegmentOctant","_data","Boundable","getBounds","ItemBoundable","getItem","_bounds","bounds","PriorityQueue","poll","minItem","_size","reorder","child","SpatialIndex","itemEnv","AbstractNode","getLevel","_childBoundables","getChildBoundables","addChildBoundable","childBoundable","computeBounds","level","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","nodes","build","removeItem","childToRemove","itemsTree","valuesTree","valuesTreeForNode","valuesTreeForChild","_built","_itemBoundables","boundablesAtLevel","boundables","top","boundable","createNode","createHigherLevels","getRoot","childToPrune","boundablesOfALevel","parentBoundables","createParentBoundables","maxChildDepth","childDepth","newLevel","sortedChildBoundables","getComparator","IntersectsOp","DEFAULT_NODE_CAPACITY","nodeCapacity","ItemDistance","item1","item2","STRtree","avg","kNearestNeighbors","items","createParentBoundablesFromVerticalSlices","verticalSlices","createParentBoundablesFromVerticalSlice","STRtreeNode","intersectsOp","sliceCount","sliceCapacity","slices","boundablesAddedToSlice","searchEnv","yComparator","minLeafCount","xComparator","nearestNeighbour","itemDist","initBndPair","tree","distanceLowerBound","minPair","bndPair","currentDistance","bnd","maxDistance","compareDoubles","aBounds","bBounds","SegmentPointComparator","xSign","relativeSign","ySign","compareValue","compareSign0","compareSign1","SegmentNode","print","_segmentOctant","maxSegmentIndex","_isInterior","isInterior","_segString","segString","segmentOctant","SegmentNodeList","getSplitCoordinates","addEndpoints","eiPrev","ei","addEdgeCoordinates","addCollapsedNodes","collapsedVertexIndexes","findCollapsesFromInsertedNodes","findCollapsesFromExistingVertices","vertexIndex","_edge","ei0","ei1","lastSegStartPt","useIntPt1","_nodeMap","addSplitEdges","edgeList","newEdge","createSplitEdge","findCollapseIndex","collapsedVertexIndex","numVerticesBetween","getEdge","maxSegIndex","NodedSegmentString","eiNew","checkSplitEdgesCorrectness","splitEdges","edgePts","pt0","splitnPts","ptn","edge","NodableSegmentString","addIntersection","segStrings","resultEdgelist","getNodedSubstrings","getNodeList","safeOctant","addIntersectionNode","_nodeList","normalizedSegmentIndex","nextSegIndex","nextPt","addIntersections","geomIndex","MonotoneChainOverlapAction","overlap","mc1","start1","mc2","start2","getLineSegment","_overlapSeg1","_overlapSeg2","MonotoneChain","computeSelect","start0","end0","mcs","select","_end","_start","computeOverlaps","mc","mco","end1","overlaps","mid0","setId","id","_id","_env","getEndIndex","getStartIndex","getContext","_context","getId","context","Quadrant","quad","NE","NW","quad1","quad2","halfPlane","SE","SW","MonotoneChainBuilder","startIndexList","findChainEnd","toIntArray","safeStart","chainQuad","quadrant","getChains","mcList","startIndex","getChainStartIndices","Noder","computeNodes","SinglePassNoder","setSegmentIntersector","segInt","_segInt","MCIndexNoder","getMonotoneChains","_monoChains","_nodedSegStrings","getIndex","segStr","_idCounter","inputSegStrings","intersectChains","overlapAction","SegmentOverlapAction","queryChain","testChain","_nOverlaps","ss1","ss2","_si","processIntersections","si","TopologyException","msgWithCoord","SegmentIntersector","e0","segIndex0","e1","segIndex1","InteriorIntersectionFinder","finder","setFindAllIntersections","setKeepIntersections","getInteriorIntersection","_interiorIntersection","setCheckEndSegmentsOnly","isCheckEndSegmentsOnly","_isCheckEndSegmentsOnly","getIntersectionSegments","_intSegments","_intersectionCount","getIntersections","_intersections","findAllIntersections","_findAllIntersections","keepIntersections","_keepIntersections","isEndSegment","p00","p01","p10","p11","_li","FastNodingValidator","nv","execute","checkInteriorIntersections","_isValid","noder","_segStrings","checkValid","getErrorMessage","intSegs","EdgeNodingValidator","edges","_nv","toSegmentStrings","Position","position","ON","TopologyLocation","setAllLocations","locValue","location","setAllLocationsIfNull","isLine","merge","gl","newLoc","getLocations","flip","toLocationSymbol","setLocations","on","posIndex","isArea","isAnyNull","setLocation","locIndex","isEqualOnSide","allPositionsEqual","Label","label","lineLabel","getGeometryCount","elt","lbl","side","toLine","onLoc","leftLoc","rightLoc","EdgeRing","computeRing","_ring","_geometryFactory","_isHole","isIsolated","_label","computePoints","_startDe","de","isFirstEdge","getEdgeRing","_edges","getLabel","mergeLabel","addPoints","isForward","setEdgeRing","getNext","getLinearRing","computeMaxNodeDegree","_maxNodeDegree","degree","getNode","getEdges","getOutgoingDegree","isHole","setInResult","containsPoint","isShell","getMaxNodeDegree","getShell","deLabel","setShell","toPolygon","holeLR","MinimalEdgeRing","er","setMinEdgeRing","getNextMin","MaximalEdgeRing","buildMinimalRings","minEdgeRings","getMinEdgeRing","minEr","linkDirectedEdgesForMinimalEdgeRings","linkMinimalDirectedEdges","GraphComponent","setVisited","isVisited","_isVisited","isInResult","_isInResult","isCovered","_isCovered","isCoveredSet","_isCoveredSet","setLabel","setCovered","updateIM","computeIM","Node","isIncidentEdgeInResult","_coord","computeMergedLocation","label2","eltIndex","nLoc","argIndex","onLocation","setNode","setLabelBoundary","NodeMap","find","nodeMap","addNode","nodeFact","getBoundaryNodes","bdyNodes","EdgeEnd","compareDirection","_dx","_dy","_quadrant","_p0","_p1","getDy","_node","className","lastDotPos","lastIndexOf","getDirectedCoordinate","getDx","getQuadrant","computeLabel","boundaryNodeRule","DirectedEdge","currLocation","nextLocation","_nextMin","getDepth","_depth","computeDirectedLabel","_isForward","_next","setDepth","depthVal","isInteriorAreaEdge","setNextMin","nextMin","getDepthDelta","minEdgeRing","_minEdgeRing","isLineEdge","isExteriorIfArea0","isExteriorIfArea1","edgeRing","_edgeRing","depthDelta","getSym","_sym","printEdge","printReverse","setSym","setVisitedEdge","setEdgeDepths","directionFactor","oppositePos","opposite","oppositeDepth","setNext","NodeFactory","PlanarGraph","nodeit","linkResultDirectedEdges","printEdges","eiList","_nodes","getNodeIterator","debugPrintln","isBoundaryNode","linkAllDirectedEdges","matchInSameDirection","ep0","ep1","getEdgeEnds","_edgeEndList","debugPrint","getEdgeIterator","findEdgeInSameDirection","eCoord","insertEdge","findEdgeEnd","ee","addEdges","edgesToAdd","de1","de2","getNodes","findEdge","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","graph","LineBuilder","collectLines","opCode","_op","getGraph","collectLineEdge","_lineEdgesList","collectBoundaryTouchEdge","labelIsolatedLine","targetIndex","_ptLocator","getArgGeometry","findCoveredLineEdges","buildLines","_resultLineList","OverlayOp","isResultOfOp","isCoveredByA","labelIsolatedLines","edgesList","INTERSECTION","ptLocator","PointBuilder","filterCoveredNodeToPoint","isCoveredByLA","_resultPointList","extractNonCoveredResultNodes","getDegree","LineStringSnapper","snapVertices","srcCoords","snapPts","_isClosed","srcPt","snapVert","findSnapForVertex","_snapTolerance","snapTo","_srcPts","snapSegments","distinctPtCount","snapPt","findSegmentIndexToSnap","snapIndex","_seg","_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","newPts","_snapPts","isSelfSnap","CommonBits","_isFirst","_commonMantissaBitsCount","_commonBits","_commonSignExp","getCommon","numBits","signExpBits","numCommonMostSigMantissaBits","zeroLowerBits","padStr","bitStr","nBits","prop","num1","num2","getBit","CommonBitsRemover","addCommonBits","Translater","_commonCoord","removeCommonBits","invCoord","getCommonCoordinate","_ccFilter","CommonCoordinateFilter","_commonBitsX","_commonBitsY","SnapOverlayOp","getResultGeometry","overlayOp","UNION","SYMDIFFERENCE","DIFFERENCE","selfSnap","_cbr","remGeom","prepareResult","prepGeom","snap","SnapIfNeededOverlayOp","isSuccess","savedException","EdgeEndStar","getNextCW","_edgeList","iNextCW","propagateSideLabels","startLoc","currLoc","isAreaLabelsConsistent","geomGraph","computeEdgeEndLabels","getBoundaryNodeRule","checkAreaLabelsConsistent","lastEdgeIndex","findIndex","eSearch","_edgeMap","_ptInAreaLocation","getGeometry","computeLabelling","hasDimensionalCollapseEdge","insertEdgeEnd","DirectedEdgeStar","getResultAreaEdges","firstOut","incoming","state","_SCANNING_FOR_INCOMING","_resultAreaEdgeList","nextOut","nextIn","_LINKING_TO_OUTGOING","getRightmostEdge","de0","deLast","quad0","isNorthern","updateLabelling","nodeLabel","prevOut","firstIn","computeDepths","edgeIndex","startDepth","targetLastDepth","nextDepth","endIndex","currDepth","nextDe","mergeSymLabels","eLabel","eLoc","OverlayNodeFactory","computeIntersections","mce","computeIntersectsForChain","chainIndex","SweepLineEvent","isDelete","_eventType","DELETE","setDeleteEventIndex","deleteEventIndex","_deleteEventIndex","getObject","_obj","pe","_xValue","getInsertEvent","_insertEvent","isInsert","INSERT","isSameLabel","ev","getDeleteEventIndex","insertEvent","EdgeSetIntersector","isTrivialIntersection","isAdjacentSegments","getProperIntersectionPoint","_properIntersectionPoint","setIsDoneIfProperInt","isDoneWhenProperInt","_isDoneWhenProperInt","hasProperInteriorIntersection","_hasProperInterior","isBoundaryPointInternal","hasProperIntersection","_hasProper","_hasIntersection","isBoundaryPoint","setBoundaryNodes","bdyNodes0","bdyNodes1","_bdyNodes","numTests","_recordIsolated","setIsolated","_numIntersections","_includeProper","_isSelfIntersection","includeProper","recordIsolated","SimpleMCSweepLineIntersector","prepareEvents","events","nOverlaps","processOverlaps","edges0","edges1","addEdge","edgeSet","getMonotoneChainEdge","getStartIndexes","ev0","mc0","ev1","EdgeIntersection","getSegmentIndex","EdgeIntersectionList","Edge","MonotoneChainIndexer","MonotoneChainEdge","chainIndex0","chainIndex1","computeIntersects","mcb","Depth","NULL_VALUE","depthValue","minDepth","newValue","getDelta","depthAtLocation","getCollapsedEdge","toLineLabel","_isIsolated","setName","isEqualForward","isEqualReverse","iRev","_depthDelta","isCollapsed","getMaximumSegmentIndex","_mce","isPointwiseEqual","setDepthDelta","getEdgeIntersectionList","GeometryGraph","insertBoundaryPoint","determineBoundary","_boundaryNodeRule","computeSelfNodes","computeRingSelfNodes","isDoneIfProperInt","esi","createEdgeSetIntersector","isRings","_parentGeom","computeAllSegments","addSelfIntersectionNodes","_argIndex","computeSplitEdges","edgelist","computeEdgeIntersections","hasTooFewPoints","_hasTooFewPoints","insertPoint","addPolygon","addPolygonRing","addLineString","removeRepeatedPoints","_invalidPoint","_lineEdgeMap","getInvalidPoint","getBoundaryPoints","_boundaryNodes","addSelfIntersectionNode","_useBoundaryDeterminationRule","lr","cwLeft","cwRight","eiIt","addCollection","_areaPtLocator","parentGeom","GeometryGraphOperation","_arg","setComputationPrecision","_resultPrecisionModel","OrientedCoordinateArray","orientation1","orientation2","limit1","limit2","compPt","done1","done2","oca","compareOriented","_orientation","orientation","EdgeList","edgeColl","findEdgeIndex","findEqualEdge","_ocaMap","geom1","createEmptyResult","dim0","dim1","resultDimension","overlayOpCode","loc0","loc1","insertUniqueEdge","existingEdge","existingLabel","labelToMerge","_graph","cancelDuplicateResultEdges","sym","_resultPolyList","computeGeometry","resultPointList","resultLineList","opcode","replaceCollapsedEdges","newEdges","updateNodeLabelling","computeOverlay","_resultGeom","insertUniqueEdges","copyPoints","baseSplitEdges","computeLabelsFromDepths","labelIncompleteNodes","findResultAreaEdges","polyBuilder","lineBuilder","pointBuilder","labelIncompleteNode","graphNode","ni","InteriorPointArea","bisector","horizontalBisector","intersections","widestIntersection","widestGeometry","_interiorPoint","_maxWidth","getInteriorPoint","bisectY","SafeBisectorFinder","getBisectorY","updateInterval","_centreY","_loY","_hiY","process","_poly","InteriorPointLine","addInterior","_centroid","_minDistance","InteriorPointPoint","MinimumBoundingCircle","minSin","minAngPt","Q","minAng","angleBetween","getRadius","_radius","getDiameter","_extremalPts","_input","_centre","getExtremalPoints","computeCirclePoints","hullPts","copyDeep","lowestPoint","pointWitMinAngleWithX","R","pointWithMinAngleWithSegment","isObtuse","computeCentre","getFarthestPoints","getCircle","centrePoint","MinimumDiameter","getMinimumRectangle","getWidthCoordinate","computeMinimumDiameter","_minWidthPt","getSupportingSegment","_minBaseSeg","computeWidthConvex","convexGeom","_convexHullPts","_minWidth","computeConvexRingMinDiameter","currMaxIndex","findMaxPerpDistance","_isConvex","maxPerpDistance","nextPerpDistance","maxIndex","nextIndex","_minPtIndex","minPara","maxPara","minPerp","maxPerp","paraC","computeC","perpC","maxPerpLine","computeSegmentForLine","minPerpLine","maxParaLine","minParaLine","isConvex","Densifier","distanceTolerance","precModel","densifiedSegCount","densifiedSegLen","segFract","densifier","setDistanceTolerance","DensifyTransformer","_distanceTolerance","roughGeom","createValidArea","densifyPoints","roughAreaGeom","HalfEdge","oNext","_orig","insertAfter","ecmp","ePrev","orig","save","compareAngularDirection","quadrant2","prevNode","MarkHalfEdge","isMarked","setMark","mark","_isMarked","EdgeGraph","eAdj","_vertexMap","eAdjDest","createEdge","isValidEdge","eSame","getVertexEdges","DissolveHalfEdge","setStart","_isStart","isStart","DissolveEdgeGraph","LineDissolver","getResult","updateRingStartEdge","_ringStartEdge","computeResult","eNode","stackEdges","buildRing","eStartRing","eNext","buildLine","eStart","markBoth","_nodeEdgeStack","component","lineString","doneStart","KdNodeVisitor","KdNode","isRepeated","_count","getRight","_right","setLeft","_left","getCount","getLeft","increment","setRight","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","isSearchMatch","visitItems","maxSubDepth","sqd","DoubleBits","exponent","NumW","Qty","Sign","Expo","Mant","Bin","Inf","32","64","ExW","CVTFWD","powerOf2","Key","dMax","computeKey","computeQuadLevel","quadSize","getPoint","addEnv","expandEnv","largerNode","insertNode","getSubnodeIndex","_centrex","_centrey","getSubnode","createSubnode","miny","maxy","sqEnv","childNode","IntervalSize","scaledInterval","MIN_BINARY_EXPONENT","Root","createExpanded","insertContained","isZeroX","isZeroWidth","isZeroY","Quadtree","collectStats","insertEnv","ensureExtent","_minExtent","queryAll","foundItems","posEnv","delX","delY","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","multiLineString","getLineStrings","multiPolygon","getGeometries","convertToPoint","convertToLineString","convertToLinearRing","convertToPolygon","convertToMultiPoint","convertToMultiLineString","convertToMultiPolygon","convertToCollection","geometryCollection","ScaledNoder","rescale","ss","_scaleFactor","_offsetX","_offsetY","nodedSegmentStrings","roundPts","isIntegerPrecision","splitSS","_noder","_isScaled","intSegStrings","scaleFactor","IsSimpleOp","isSimpleMultiPoint","mp","_nonSimpleLocation","isSimplePolygonal","isSimpleLinearGeometry","hasClosedEndpointIntersection","endPoints","eiInfo","getNonSimpleLocation","hasNonEndpointIntersection","_isClosedEndpointsInInterior","EndpointInfo","computeSimple","isSimpleGeometryCollection","BufferParameters","quadSegs","alpha","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","usePrev","_orientedDe","findRightmostEdgeAtNode","star","dirEdgeList","LinkedList","addLast","removeFirst","shift","BufferSubgraph","clearVisitedEdges","_dirEdgeList","getRightmostCoordinate","_rightMostCoord","computeNodeDepth","startEdge","copySymDepths","computeDepth","outsideDepth","_finder","addReachable","findResultEdges","nodesVisited","nodeQueue","startNode","adjNode","edgeEnv","nodeStack","symNode","getDirectedEdges","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","last2Pt","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","startAngle","endAngle","addLastSegment","initSideSegments","s1","s2","ang0","angDiffHalf","midAng","mitreMidAng","mitreDist","bevelHalfLen","bevelMidX","bevelMidY","bevelMidPt","mitreMidLine","bevelEndLeft","bevelEndRight","totalAngle","nSegs","_filletAngleQuantum","initAngle","currAngleInc","currAngle","offset","sideSign","_hasNarrowConcaveAngle","INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR","_closingSegLengthFactor","_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","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","IntersectionAdder","getLineIntersector","numIntersections","numInteriorIntersections","_hasInterior","numProperIntersections","hasInteriorIntersection","BufferBuilder","lLoc","rLoc","setWorkingPrecisionModel","_workingPrecisionModel","mergeDelta","newDelta","buildSubgraphs","subgraphList","processedGraphs","subgraph","createSubgraphs","createEmptyResultGeometry","getNoder","_workingNoder","bufferSegStrList","computeNodedEdges","oldLabel","setNoder","NodingValidator","checkEndPtVertexIntersections","ss0","pts0","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","hotPixel","parentEdge","hotPixelVertexIndex","pixelEnv","hotPixelSnapAction","HotPixelSnapAction","isNodeAdded","_isNodeAdded","_parentEdge","_hotPixelVertexIndex","_hotPixel","InteriorIntersectionFinderAdder","_interiorIntersections","getInteriorIntersections","MCIndexSnapRounder","checkCorrectness","inputSegmentStrings","resultSegStrings","snapRound","findInteriorIntersections","computeIntersectionSnaps","computeVertexSnaps","intFinderAdder","edge0","_pointSnapper","_pm","BufferOp","bufOp","params","maxPrecisionDigits","bufEnvMax","minUnitLog10","bufferFixedPrecision","fixedPM","bufBuilder","_resultGeometry","_argGeom","bufferReducedPrecision","precDigits","MAX_PRECISION_DIGITS","_saveException","precisionDigits","sizeBasedScaleFactor","precisionScaleFactor","bufferOriginalPrecision","argPM","CAP_BUTT","GeometryLocation","isInsideArea","_segIndex","INSIDE_AREA","getGeometryComponent","_component","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","Subgraph","getParent","_parentGraph","parentGraph","ConnectedSubgraphFinder","findSubgraph","getConnectedSubgraphs","toNode","LineSequencer","wellOrientedDE","unvisitedDE","minDegree","minDegreeNode","mls","prevSubgraphNodes","currNodes","revPts","sequencer","getSequencedLineStrings","_lineCount","hasSequence","oddDegreeCount","computeSequence","_isRun","sequences","findSequences","_sequencedGeometry","buildSequencedGeometry","_isSequenceable","finalLineCount","findSequence","addReverseSubpath","lit","expectedClosed","unvisitedOutDE","findUnvisitedBestOrientedDE","startDESym","findLowestDegreeNode","listIterator","hasPrevious","previous","newSeq","addFirst","endEdge","flipSeq","hasObviousStartNode","lineToAdd","isSequenceable","PolygonizeDirectedEdge","setRing","getRing","PolygonizeEdge","ConnectedInteriorTester","visitInteriorRing","findDifferentPoint","intDe","visitLinkedDirectedEdges","visitShellInteriors","_disconnectedRingcoord","setInteriorEdgesInResult","startDe","buildEdgeRings","hasUnvisitedShellEdge","isInteriorsConnected","_geomGraph","EdgeEndBuilder","createEdgeEndForNext","eiCurr","eiNext","createEdgeEndForPrev","computeEdgeEnds","EdgeEndBundle","_edgeEnds","computeLabelOn","foundInterior","computeLabelSide","computeLabelSides","EdgeEndBundleStar","eb","RelateNode","updateIMFromEdges","RelateNodeFactory","RelateNodeGraph","insertEdgeEnds","copyNodesAndLabels","nodeIt","computeIntersectionNodes","eeList","edgeIt","ConsistentAreaTester","isNodeEdgeAreaLabelsConsistent","_nodeGraph","hasDuplicateRings","eeb","isNodeConsistentArea","intersector","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","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","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","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","RelateComputer","computeProperIntersectionIM","dimA","dimB","hasProper","hasProperInterior","labelIsolatedEdges","thisIndex","labelIsolatedEdge","_isolatedEdges","target","computeDisjointIM","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","RectangleIntersects","EnvelopeIntersectsVisitor","ecpVisitor","GeometryContainsPointVisitor","_rectangle","riVisitor","RectangleIntersectsSegmentVisitor","_intersects","elementEnv","_containsPoint","rectPt","_rectSeq","containsPointInPolygon","checkIntersectionWithLineStrings","testLine","checkIntersectionWithSegments","seq1","_rectIntersector","RelateOp","getIntersectionMatrix","relate","_relate","PointGeometryUnion","pointGeom","locater","exteriorCoords","_pointGeom","_otherGeom","ptComp","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","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","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","VWLineSimplifier","simplifyVertex","vwLine","curr","minArea","minVertex","isLive","VWVertex","first","v","setPrev","updateArea","_area","_prev","MAX_AREA","tmpPrev","tmpNext","_isLive","VWSimplifier","VWTransformer","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","setOrig","setDest","oPrev","lNext","rot","beta","t3","t4","makeEdge","equalsNonOriented","qe","equalsOriented","toLineSegment","_vertex","dNext","lPrev","rPrev","invRot","delete","rNext","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","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","testDist","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","CollectionUtil","func","Boolean","Function","CoordinateArrayFilter","CoordinateCountFilter","_n","ObjectCounter","_counts","UnionOp","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":["export default class NumberUtil {\n constructor () {\n NumberUtil.constructor_.apply(this, arguments)\n }\n\n static equalsWithTolerance (x1, x2, tolerance) {\n return Math.abs(x1 - x2) <= tolerance\n }\n\n getClass () {\n return NumberUtil\n }\n\n get interfaces_ () {\n return []\n }\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 let mask\n let result = ''\n for (mask = 0x80000000; mask > 0; mask >>>= 1) { result += (i.high & mask) === mask ? '1' : '0' }\n for (mask = 0x80000000; mask > 0; mask >>>= 1) { result += (i.low & mask) === mask ? '1' : '0' }\n return result\n}\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 typeof Int32Array === 'function') {\n // Simple and fast conversion between double and long bits\n // using TypedArrays and ArrayViewBuffers.\n (function () {\n const EXP_BIT_MASK = 0x7ff00000\n const SIGNIF_BIT_MASK = 0xFFFFF\n const f64buf = new Float64Array(1)\n const i32buf = new Int32Array(f64buf.buffer)\n Double.doubleToLongBits = function (value) {\n f64buf[0] = value\n let low = i32buf[0] | 0\n let high = i32buf[1] | 0\n // Check for NaN based on values of bit fields, maximum\n // exponent and nonzero significand.\n if (((high & EXP_BIT_MASK) === EXP_BIT_MASK) &&\n ((high & SIGNIF_BIT_MASK) !== 0) &&\n (low !== 0)) {\n low = 0 | 0\n high = 0x7ff80000 | 0\n }\n return new Long(high, low)\n }\n Double.longBitsToDouble = function (bits) {\n i32buf[0] = bits.low\n i32buf[1] = bits.high\n return f64buf[0]\n }\n })()\n} else {\n // More complex and slower fallback implementation using\n // math and the divide-by-two and multiply-by-two algorithms.\n (function () {\n const BIAS = 1023\n const log2 = Math.log2\n const floor = Math.floor\n const pow = Math.pow\n const MAX_REL_BITS_INTEGER = (function () {\n for (let i = 53; i > 0; i--) {\n const bits = pow(2, i) - 1\n if (floor(log2(bits)) + 1 === i) {\n return bits\n }\n }\n return 0\n })()\n Double.doubleToLongBits = function (value) {\n let x, y, f, bits, skip\n let sign, exp, high, low\n\n // Get the sign bit and absolute value.\n if (value < 0 || 1 / value === Number.NEGATIVE_INFINITY) {\n sign = (1 << 31)\n value = (-value)\n } else {\n sign = 0\n }\n\n // Handle some special values.\n if (value === 0) {\n // Handle zeros (+/-0).\n low = 0 | 0\n high = sign // exponent: 00..00, significand: 00..00\n return new Long(high, low)\n }\n\n if (value === Infinity) {\n // Handle infinity (only positive values for value possible).\n low = 0 | 0\n high = sign | 0x7ff00000 // exponent: 11..11, significand: 00..00\n return new Long(high, low)\n }\n\n if (value !== value) { // eslint-disable-line\n // Handle NaNs (boiled down to only one distinct NaN).\n low = 0 | 0\n high = 0x7ff80000 // exponent: 11..11, significand: 10..00\n return new Long(high, low)\n }\n\n // Preinitialize variables, that are not neccessarily set by\n // the algorithm.\n bits = 0\n low = 0 | 0\n\n // Get the (always positive) integer part of value.\n x = floor(value)\n\n // Process the integer part if it's greater than 1. Zero requires\n // no bits at all, 1 represents the implicit (hidden) leading bit,\n // which must not be written as well.\n if (x > 1) {\n // If we can reliably determine the number of bits required for\n // the integer part,\n if (x <= MAX_REL_BITS_INTEGER) {\n // get the number of bits required to represent it minus 1\n bits = floor(log2(x)) /* + 1 - 1 */\n // and simply copy/shift the integer bits into low and high.\n // That's much faster than the divide-by-two algorithm (saves\n // up to ~60%).\n // We always need to mask out the most significant bit, which\n // is the implicit (aka hidden) bit.\n if (bits <= 20) {\n // The simple case in which the integer fits into the\n // lower 20 bits of the high word is worth to be handled\n // separately (saves ~25%).\n low = 0 | 0\n high = (x << (20 - bits)) & 0xfffff\n } else {\n // Here, the integer part is split into low and high.\n // Since its value may require more than 32 bits, we\n // cannot use bitwise operators (which implicitly cast\n // to Int32), but use arithmetic operators % and / to\n // get low and high parts. The uppper 20 bits go to high,\n // the remaining bits (in f) to low.\n f = bits - 20\n // Like (1 << f) but safe with even more than 32 bits.\n y = pow(2, f)\n low = (x % y) << (32 - f)\n high = (x / y) & 0xfffff\n }\n } else {\n // For greater values, we must use the much slower divide-by-two\n // algorithm. Bits are generated from right to left, that is from\n // least to most significant bit. For each bit, we left-shift both\n // low and high by one and carry bit #0 from high to #31 in low.\n // The next bit is then copied into bit #19 in high, the leftmost\n // bit of the double's significand.\n\n // Preserve x for later user, so work with f.\n f = x\n low = 0 | 0\n while (true) {\n y = f / 2\n f = floor(y)\n if (f === 0) {\n // We just found the most signigicant (1-)bit, which\n // is the implicit bit and so, not stored in the double\n // value. So, it's time to leave the loop.\n break\n }\n // Count this bit, shift low and carry bit #0 from high.\n bits++\n low >>>= 1\n low |= (high & 0x1) << 31\n // Shift high.\n high >>>= 1\n if (y !== f) {\n // Copy the new bit into bit #19 in high (only required if 1).\n high |= 0x80000\n }\n }\n }\n }\n\n // Bias the exponent.\n exp = bits + BIAS\n\n // If the integer part is zero, we've not yet seen the implicit\n // leading bit. Variable skip is later used while processing the\n // fractional part (if any).\n skip = (x === 0)\n\n // Get fraction only into x.\n x = value - x\n\n // If some significand bits are still left to be filled and\n // the fractional part is not zero, convert the fraction using\n // the multiply-by-2 algorithm.\n if (bits < 52 && x !== 0) {\n // Initialize 'buffer' f, into which newly created bits get\n // shifted from right to left.\n f = 0\n\n while (true) {\n y = x * 2\n if (y >= 1) {\n // This is a new 1-bit. Add and count this bit, if not\n // prohibited by skip.\n x = y - 1\n if (!skip) {\n f <<= 1\n f |= 1\n bits++\n } else {\n // Otherwise, decrement the exponent and unset\n // skip, so that all following bits get written.\n exp--\n skip = false\n }\n } else {\n // This is a new 0-bit. Add and count this bit, if not\n // prohibited by skip.\n x = y\n if (!skip) {\n f <<= 1\n bits++\n } else if (--exp === 0) {\n // Otherwise we've just decremented the exponent. If the\n // biased exponent is zero now (-1023), we process a\n // subnormal number, which has no impled leading 1-bit.\n // So, count this 0-bit and unset skip to write out\n // all the following bits.\n bits++\n skip = false\n }\n }\n if (bits === 20) {\n // When 20 bits have been created in total, we're done with\n // the high word. Copy the bits from 'buffer' f into high\n // and reset 'buffer' f. Following bits will end up in the\n // low word.\n high |= f\n f = 0\n } else if (bits === 52) {\n // When 52 bits have been created in total, we're done with\n // low word as well. Copy the bits from 'buffer' f into low\n // and exit the loop.\n low |= f\n break\n }\n if (y === 1) {\n // When y is exactly 1, there is no remainder and the process\n // is complete (the number is finite). Copy the bits from\n // 'buffer' f into either low or high and exit the loop.\n if (bits < 20) {\n high |= (f << (20 - bits))\n } else if (bits < 52) {\n low |= (f << (52 - bits))\n }\n break\n }\n }\n }\n\n // Copy/shift the exponent and sign bits into the high word.\n high |= (exp << 20)\n high |= sign\n\n return new Long(high, low)\n }\n Double.longBitsToDouble = function (bits) {\n let i\n let x, sign, exp, fract\n const high = bits.high\n const low = bits.low\n\n // Extract the sign.\n sign = (high & (1 << 31)) ? -1 : 1\n\n // Extract the unbiased exponent.\n exp = ((high & 0x7ff00000) >> 20) - BIAS\n\n // Calculate the fraction from left to right. Start\n // off with the 20 lower bits from the high word.\n fract = 0\n x = (1 << 19)\n for (i = 1; i <= 20; i++) {\n if (high & x) {\n fract += pow(2, -i)\n }\n x >>>= 1\n }\n // Continue with all 32 bits from the low word.\n x = (1 << 31)\n for (i = 21; i <= 52; i++) {\n if (low & x) {\n fract += pow(2, -i)\n }\n x >>>= 1\n }\n\n // Handle special values.\n // Check for zero and subnormal values.\n if (exp === -BIAS) {\n if (fract === 0) {\n // +/-1.0 * 0.0 => +/-0.0\n return sign * 0\n }\n exp = -1022\n } else if (exp === BIAS + 1) { // Check for +/-Infinity or NaN.\n if (fract === 0) {\n // +/-1.0 / 0.0 => +/-Infinity\n return sign / 0\n }\n return NaN\n } else { // Nothing special? Seems to be a normal number.\n // Add the implicit leading bit (1*2^0).\n fract += 1\n }\n\n return sign * fract * pow(2, exp)\n }\n })()\n}\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 constructor () {\n super()\n AssertionFailedException.constructor_.apply(this, arguments)\n }\n\n getClass () {\n return AssertionFailedException\n }\n\n get interfaces_ () {\n return []\n }\n}\nAssertionFailedException.constructor_ = function () {\n if (arguments.length === 0) {\n RuntimeException.constructor_.call(this)\n } else if (arguments.length === 1) {\n const message = arguments[0]\n RuntimeException.constructor_.call(this, message)\n }\n}\n","import AssertionFailedException from './AssertionFailedException'\nexport default class Assert {\n constructor () {\n Assert.constructor_.apply(this, arguments)\n }\n\n static shouldNeverReachHere () {\n if (arguments.length === 0) {\n Assert.shouldNeverReachHere(null)\n } else if (arguments.length === 1) {\n const message = arguments[0]\n throw new AssertionFailedException('Should never reach here' + (message !== null ? ': ' + message : ''))\n }\n }\n\n static isTrue () {\n if (arguments.length === 1) {\n const assertion = arguments[0]\n Assert.isTrue(assertion, null)\n } else if (arguments.length === 2) {\n const assertion = arguments[0]; const message = arguments[1]\n if (!assertion) {\n if (message === null) {\n throw new AssertionFailedException()\n } else {\n throw new AssertionFailedException(message)\n }\n }\n }\n }\n\n static equals () {\n if (arguments.length === 2) {\n const expectedValue = arguments[0]; const actualValue = arguments[1]\n Assert.equals(expectedValue, actualValue, null)\n } else if (arguments.length === 3) {\n const expectedValue = arguments[0]; const actualValue = arguments[1]; const message = arguments[2]\n if (!actualValue.equals(expectedValue)) {\n throw new AssertionFailedException('Expected ' + expectedValue + ' but encountered ' + actualValue + (message !== null ? ': ' + message : ''))\n }\n }\n }\n\n getClass () {\n return Assert\n }\n\n get interfaces_ () {\n return []\n }\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 constructor () {\n Coordinate.constructor_.apply(this, arguments)\n }\n\n static hashCode () {\n if (arguments.length === 1 && typeof arguments[0] === 'number') {\n const x = arguments[0]\n const f = Double.doubleToLongBits(x)\n return Math.trunc(f ^ f >>> 32)\n }\n }\n\n setOrdinate (ordinateIndex, value) {\n switch (ordinateIndex) {\n case Coordinate.X:\n this.x = value\n break\n case Coordinate.Y:\n this.y = value\n break\n case Coordinate.Z:\n this.z = value\n break\n default:\n throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex)\n }\n }\n\n equals2D () {\n if (arguments.length === 1) {\n const other = arguments[0]\n if (this.x !== other.x) {\n return false\n }\n if (this.y !== other.y) {\n return false\n }\n return true\n } else if (arguments.length === 2) {\n const c = arguments[0]; const tolerance = arguments[1]\n if (!NumberUtil.equalsWithTolerance(this.x, c.x, tolerance)) {\n return false\n }\n if (!NumberUtil.equalsWithTolerance(this.y, c.y, tolerance)) {\n return false\n }\n return true\n }\n }\n\n getOrdinate (ordinateIndex) {\n switch (ordinateIndex) {\n case Coordinate.X:\n return this.x\n case Coordinate.Y:\n return this.y\n case Coordinate.Z:\n return this.z\n }\n throw new IllegalArgumentException('Invalid ordinate index: ' + ordinateIndex)\n }\n\n equals3D (other) {\n return this.x === other.x && this.y === other.y && (this.z === other.z || Double.isNaN(this.z) && Double.isNaN(other.z))\n }\n\n equals (other) {\n if (!(other instanceof Coordinate)) {\n return false\n }\n return this.equals2D(other)\n }\n\n equalInZ (c, tolerance) {\n return NumberUtil.equalsWithTolerance(this.z, c.z, tolerance)\n }\n\n compareTo (o) {\n const other = o\n if (this.x < other.x) return -1\n if (this.x > other.x) return 1\n if (this.y < other.y) return -1\n if (this.y > other.y) return 1\n return 0\n }\n\n clone () {\n try {\n const coord = null\n return coord\n } catch (e) {\n if (e instanceof CloneNotSupportedException) {\n Assert.shouldNeverReachHere(\"this shouldn't happen because this class is Cloneable\")\n return null\n } else throw e\n } finally {}\n }\n\n copy () {\n return new Coordinate(this)\n }\n\n toString () {\n return '(' + this.x + ', ' + this.y + ', ' + this.z + ')'\n }\n\n distance3D (c) {\n const dx = this.x - c.x\n const dy = this.y - c.y\n const dz = this.z - c.z\n return Math.sqrt(dx * dx + dy * dy + dz * dz)\n }\n\n distance (c) {\n const dx = this.x - c.x\n const dy = this.y - c.y\n return Math.sqrt(dx * dx + dy * dy)\n }\n\n hashCode () {\n let result = 17\n result = 37 * result + Coordinate.hashCode(this.x)\n result = 37 * result + Coordinate.hashCode(this.y)\n return result\n }\n\n setCoordinate (other) {\n this.x = other.x\n this.y = other.y\n this.z = other.z\n }\n\n getClass () {\n return Coordinate\n }\n\n get interfaces_ () {\n return [Comparable, Cloneable, Serializable]\n }\n}\nclass DimensionalComparator {\n constructor () {\n DimensionalComparator.constructor_.apply(this, arguments)\n }\n\n static compare (a, b) {\n if (a < b) return -1\n if (a > b) return 1\n if (Double.isNaN(a)) {\n if (Double.isNaN(b)) return 0\n return -1\n }\n if (Double.isNaN(b)) return 1\n return 0\n }\n\n compare (o1, o2) {\n const c1 = o1\n const c2 = o2\n const compX = DimensionalComparator.compare(c1.x, c2.x)\n if (compX !== 0) return compX\n const compY = DimensionalComparator.compare(c1.y, c2.y)\n if (compY !== 0) return compY\n if (this._dimensionsToTest <= 2) return 0\n const compZ = DimensionalComparator.compare(c1.z, c2.z)\n return compZ\n }\n\n getClass () {\n return DimensionalComparator\n }\n\n get interfaces_ () {\n return [Comparator]\n }\n}\nDimensionalComparator.constructor_ = function () {\n this._dimensionsToTest = 2\n if (arguments.length === 0) {\n DimensionalComparator.constructor_.call(this, 2)\n } else if (arguments.length === 1) {\n const dimensionsToTest = arguments[0]\n if (dimensionsToTest !== 2 && dimensionsToTest !== 3) throw new IllegalArgumentException('only 2 or 3 dimensions may be specified')\n this._dimensionsToTest = dimensionsToTest\n }\n}\nCoordinate.DimensionalComparator = DimensionalComparator\nCoordinate.constructor_ = function () {\n this.x = null\n this.y = null\n this.z = null\n if (arguments.length === 0) {\n Coordinate.constructor_.call(this, 0.0, 0.0)\n } else if (arguments.length === 1) {\n const c = arguments[0]\n Coordinate.constructor_.call(this, c.x, c.y, c.z)\n } else if (arguments.length === 2) {\n const x = arguments[0]; const y = arguments[1]\n Coordinate.constructor_.call(this, x, y, Coordinate.NULL_ORDINATE)\n } else if (arguments.length === 3) {\n const x = arguments[0]; const y = arguments[1]; const z = arguments[2]\n this.x = x\n this.y = y\n this.z = z\n }\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/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 * 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 * Returns true if this collection contains no elements.\n * @return {boolean}\n */\nCollection.prototype.isEmpty = function () {}\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 * Returns an iterator over the elements in this collection.\n * @return {number}\n */\nCollection.prototype.size = function () {}\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 * 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 * 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 * 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 * @type {string}\n */\nNoSuchElementException.prototype.name = 'NoSuchElementException'\n","import Collection from './Collection'\nimport IndexOutOfBoundsException from '../lang/IndexOutOfBoundsException'\nimport List from './List'\nimport NoSuchElementException from './NoSuchElementException'\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 (let i = c.iterator(); i.hasNext();) {\n this.add(i.next())\n }\n return true\n}\n\n/**\n * @override\n */\nArrayList.prototype.set = function (index, element) {\n const oldElement = this.array_[index]\n this.array_[index] = element\n return oldElement\n}\n\n/**\n * @override\n */\nArrayList.prototype.iterator = function () {\n return new Iterator_(this)\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 * @override\n */\nArrayList.prototype.isEmpty = function () {\n return this.array_.length === 0\n}\n\n/**\n * @override\n */\nArrayList.prototype.size = function () {\n return this.array_.length\n}\n\n/**\n * @override\n */\nArrayList.prototype.toArray = function () {\n const array = []\n\n for (let i = 0, len = this.array_.length; i < len; i++) {\n array.push(this.array_[i])\n }\n\n return array\n}\n\n/**\n * @override\n */\nArrayList.prototype.remove = function (o) {\n let found = false\n\n for (let 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\nArrayList.prototype.removeAll = function (c) {\n for (let i = c.iterator(); i.hasNext();) {\n this.remove(i.next())\n }\n return true\n}\n\n/**\n * @extends {Iterator}\n * @param {ArrayList} arrayList\n * @constructor\n * @private\n */\nconst 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 * @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 * @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 * @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 constructor () {\n super()\n CoordinateList.constructor_.apply(this, arguments)\n }\n\n getCoordinate (i) {\n return this.get(i)\n }\n\n addAll () {\n if (arguments.length === 2 && (typeof arguments[1] === 'boolean' && hasInterface(arguments[0], Collection))) {\n const coll = arguments[0]; const allowRepeated = arguments[1]\n let isChanged = false\n for (let i = coll.iterator(); i.hasNext();) {\n this.add(i.next(), allowRepeated)\n isChanged = true\n }\n return isChanged\n } else return super.addAll.apply(this, arguments)\n }\n\n clone () {\n const clone = super.clone.call(this)\n for (let i = 0; i < this.size(); i++) {\n clone.add(i, this.get(i).clone())\n }\n return clone\n }\n\n toCoordinateArray () {\n return this.toArray(CoordinateList.coordArrayType)\n }\n\n add () {\n if (arguments.length === 1) {\n const coord = arguments[0]\n super.add.call(this, coord)\n } else if (arguments.length === 2) {\n if (arguments[0] instanceof Array && typeof arguments[1] === 'boolean') {\n const coord = arguments[0]; const allowRepeated = arguments[1]\n this.add(coord, allowRepeated, true)\n return true\n } else if (arguments[0] instanceof Coordinate && typeof arguments[1] === 'boolean') {\n const coord = arguments[0]; const allowRepeated = arguments[1]\n if (!allowRepeated) {\n if (this.size() >= 1) {\n const last = this.get(this.size() - 1)\n if (last.equals2D(coord)) return null\n }\n }\n super.add.call(this, coord)\n } else if (arguments[0] instanceof Object && typeof arguments[1] === 'boolean') {\n const obj = arguments[0]; const allowRepeated = arguments[1]\n this.add(obj, allowRepeated)\n return true\n }\n } else if (arguments.length === 3) {\n if (typeof arguments[2] === 'boolean' && (arguments[0] instanceof Array && typeof arguments[1] === 'boolean')) {\n const coord = arguments[0]; const allowRepeated = arguments[1]; const direction = arguments[2]\n if (direction) {\n for (let i = 0; i < coord.length; i++) {\n this.add(coord[i], allowRepeated)\n }\n } else {\n for (let i = coord.length - 1; i >= 0; i--) {\n this.add(coord[i], allowRepeated)\n }\n }\n return true\n } else if (typeof arguments[2] === 'boolean' && (Number.isInteger(arguments[0]) && arguments[1] instanceof Coordinate)) {\n const i = arguments[0]; const coord = arguments[1]; const allowRepeated = arguments[2]\n if (!allowRepeated) {\n const size = this.size()\n if (size > 0) {\n if (i > 0) {\n const prev = this.get(i - 1)\n if (prev.equals2D(coord)) return null\n }\n if (i < size) {\n const next = this.get(i)\n if (next.equals2D(coord)) return null\n }\n }\n }\n super.add.call(this, i, coord)\n }\n } else if (arguments.length === 4) {\n const coord = arguments[0]; const allowRepeated = arguments[1]; const start = arguments[2]; const end = arguments[3]\n let inc = 1\n if (start > end) inc = -1\n for (let i = start; i !== end; i += inc) {\n this.add(coord[i], allowRepeated)\n }\n return true\n }\n }\n\n closeRing () {\n if (this.size() > 0) this.add(new Coordinate(this.get(0)), false)\n }\n\n getClass () {\n return CoordinateList\n }\n\n get interfaces_ () {\n return []\n }\n}\nCoordinateList.constructor_ = function () {\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n const coord = arguments[0]\n this.ensureCapacity(coord.length)\n this.add(coord, true)\n } else if (arguments.length === 2) {\n const coord = arguments[0]; const allowRepeated = arguments[1]\n this.ensureCapacity(coord.length)\n this.add(coord, allowRepeated)\n }\n}\nCoordinateList.coordArrayType = new Array(0).fill(null)\n","export default class CoordinateSequenceFilter {\n constructor () {\n CoordinateSequenceFilter.constructor_.apply(this, arguments)\n }\n\n filter (seq, i) {}\n isDone () {}\n isGeometryChanged () {}\n getClass () {\n return CoordinateSequenceFilter\n }\n\n get interfaces_ () {\n return []\n }\n}\nCoordinateSequenceFilter.constructor_ = function () {}\n","import Coordinate from './Coordinate'\nimport Comparable from '../../../../java/lang/Comparable'\nimport Serializable from '../../../../java/io/Serializable'\nexport default class Envelope {\n constructor () {\n Envelope.constructor_.apply(this, arguments)\n }\n\n static intersects () {\n if (arguments.length === 3) {\n const p1 = arguments[0]; const p2 = arguments[1]; const q = arguments[2]\n if (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 return true\n }\n return false\n } else if (arguments.length === 4) {\n const p1 = arguments[0]; const p2 = arguments[1]; const q1 = arguments[2]; const q2 = arguments[3]\n let minq = Math.min(q1.x, q2.x)\n let maxq = Math.max(q1.x, q2.x)\n let minp = Math.min(p1.x, p2.x)\n let maxp = Math.max(p1.x, p2.x)\n if (minp > maxq) return false\n if (maxp < minq) return false\n minq = Math.min(q1.y, q2.y)\n maxq = Math.max(q1.y, q2.y)\n minp = Math.min(p1.y, p2.y)\n maxp = Math.max(p1.y, p2.y)\n if (minp > maxq) return false\n if (maxp < minq) return false\n return true\n }\n }\n\n getArea () {\n return this.getWidth() * this.getHeight()\n }\n\n equals (other) {\n if (!(other instanceof Envelope)) {\n return false\n }\n const otherEnvelope = other\n if (this.isNull()) {\n return otherEnvelope.isNull()\n }\n return this._maxx === otherEnvelope.getMaxX() && this._maxy === otherEnvelope.getMaxY() && this._minx === otherEnvelope.getMinX() && this._miny === otherEnvelope.getMinY()\n }\n\n intersection (env) {\n if (this.isNull() || env.isNull() || !this.intersects(env)) return new Envelope()\n const intMinX = this._minx > env._minx ? this._minx : env._minx\n const intMinY = this._miny > env._miny ? this._miny : env._miny\n const intMaxX = this._maxx < env._maxx ? this._maxx : env._maxx\n const intMaxY = this._maxy < env._maxy ? this._maxy : env._maxy\n return new Envelope(intMinX, intMaxX, intMinY, intMaxY)\n }\n\n isNull () {\n return this._maxx < this._minx\n }\n\n getMaxX () {\n return this._maxx\n }\n\n covers () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof Coordinate) {\n const p = arguments[0]\n return this.covers(p.x, p.y)\n } else if (arguments[0] instanceof Envelope) {\n const other = arguments[0]\n if (this.isNull() || other.isNull()) {\n return false\n }\n return other.getMinX() >= this._minx && other.getMaxX() <= this._maxx && other.getMinY() >= this._miny && other.getMaxY() <= this._maxy\n }\n } else if (arguments.length === 2) {\n const x = arguments[0]; const y = arguments[1]\n if (this.isNull()) return false\n return x >= this._minx && x <= this._maxx && y >= this._miny && y <= this._maxy\n }\n }\n\n intersects () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof Envelope) {\n const other = arguments[0]\n if (this.isNull() || other.isNull()) {\n return false\n }\n return !(other._minx > this._maxx || other._maxx < this._minx || other._miny > this._maxy || other._maxy < this._miny)\n } else if (arguments[0] instanceof Coordinate) {\n const p = arguments[0]\n return this.intersects(p.x, p.y)\n }\n } else if (arguments.length === 2) {\n if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {\n const a = arguments[0]; const b = arguments[1]\n if (this.isNull()) {\n return false\n }\n const envminx = a.x < b.x ? a.x : b.x\n if (envminx > this._maxx) return false\n const envmaxx = a.x > b.x ? a.x : b.x\n if (envmaxx < this._minx) return false\n const envminy = a.y < b.y ? a.y : b.y\n if (envminy > this._maxy) return false\n const envmaxy = a.y > b.y ? a.y : b.y\n if (envmaxy < this._miny) return false\n return true\n } else if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {\n const x = arguments[0]; const y = arguments[1]\n if (this.isNull()) return false\n return !(x > this._maxx || x < this._minx || y > this._maxy || y < this._miny)\n }\n }\n }\n\n getMinY () {\n return this._miny\n }\n\n getMinX () {\n return this._minx\n }\n\n expandToInclude () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof Coordinate) {\n const p = arguments[0]\n this.expandToInclude(p.x, p.y)\n } else if (arguments[0] instanceof Envelope) {\n const other = arguments[0]\n if (other.isNull()) {\n return null\n }\n if (this.isNull()) {\n this._minx = other.getMinX()\n this._maxx = other.getMaxX()\n this._miny = other.getMinY()\n this._maxy = other.getMaxY()\n } else {\n if (other._minx < this._minx) {\n this._minx = other._minx\n }\n if (other._maxx > this._maxx) {\n this._maxx = other._maxx\n }\n if (other._miny < this._miny) {\n this._miny = other._miny\n }\n if (other._maxy > this._maxy) {\n this._maxy = other._maxy\n }\n }\n }\n } else if (arguments.length === 2) {\n const x = arguments[0]; const y = arguments[1]\n if (this.isNull()) {\n this._minx = x\n this._maxx = x\n this._miny = y\n this._maxy = y\n } else {\n if (x < this._minx) {\n this._minx = x\n }\n if (x > this._maxx) {\n this._maxx = x\n }\n if (y < this._miny) {\n this._miny = y\n }\n if (y > this._maxy) {\n this._maxy = y\n }\n }\n }\n }\n\n minExtent () {\n if (this.isNull()) return 0.0\n const w = this.getWidth()\n const h = this.getHeight()\n if (w < h) return w\n return h\n }\n\n getWidth () {\n if (this.isNull()) {\n return 0\n }\n return this._maxx - this._minx\n }\n\n compareTo (o) {\n const env = o\n if (this.isNull()) {\n if (env.isNull()) return 0\n return -1\n } else {\n if (env.isNull()) return 1\n }\n if (this._minx < env._minx) return -1\n if (this._minx > env._minx) return 1\n if (this._miny < env._miny) return -1\n if (this._miny > env._miny) return 1\n if (this._maxx < env._maxx) return -1\n if (this._maxx > env._maxx) return 1\n if (this._maxy < env._maxy) return -1\n if (this._maxy > env._maxy) return 1\n return 0\n }\n\n translate (transX, transY) {\n if (this.isNull()) {\n return null\n }\n this.init(this.getMinX() + transX, this.getMaxX() + transX, this.getMinY() + transY, this.getMaxY() + transY)\n }\n\n toString () {\n return 'Env[' + this._minx + ' : ' + this._maxx + ', ' + this._miny + ' : ' + this._maxy + ']'\n }\n\n setToNull () {\n this._minx = 0\n this._maxx = -1\n this._miny = 0\n this._maxy = -1\n }\n\n getHeight () {\n if (this.isNull()) {\n return 0\n }\n return this._maxy - this._miny\n }\n\n maxExtent () {\n if (this.isNull()) return 0.0\n const w = this.getWidth()\n const h = this.getHeight()\n if (w > h) return w\n return h\n }\n\n expandBy () {\n if (arguments.length === 1) {\n const distance = arguments[0]\n this.expandBy(distance, distance)\n } else if (arguments.length === 2) {\n const deltaX = arguments[0]; const deltaY = arguments[1]\n if (this.isNull()) return null\n this._minx -= deltaX\n this._maxx += deltaX\n this._miny -= deltaY\n this._maxy += deltaY\n if (this._minx > this._maxx || this._miny > this._maxy) this.setToNull()\n }\n }\n\n contains () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof Envelope) {\n const other = arguments[0]\n return this.covers(other)\n } else if (arguments[0] instanceof Coordinate) {\n const p = arguments[0]\n return this.covers(p)\n }\n } else if (arguments.length === 2) {\n const x = arguments[0]; const y = arguments[1]\n return this.covers(x, y)\n }\n }\n\n centre () {\n if (this.isNull()) return null\n return new Coordinate((this.getMinX() + this.getMaxX()) / 2.0, (this.getMinY() + this.getMaxY()) / 2.0)\n }\n\n init () {\n if (arguments.length === 0) {\n this.setToNull()\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof Coordinate) {\n const p = arguments[0]\n this.init(p.x, p.x, p.y, p.y)\n } else if (arguments[0] instanceof Envelope) {\n const env = arguments[0]\n this._minx = env._minx\n this._maxx = env._maxx\n this._miny = env._miny\n this._maxy = env._maxy\n }\n } else if (arguments.length === 2) {\n const p1 = arguments[0]; const p2 = arguments[1]\n this.init(p1.x, p2.x, p1.y, p2.y)\n } else if (arguments.length === 4) {\n const x1 = arguments[0]; const x2 = arguments[1]; const y1 = arguments[2]; const y2 = arguments[3]\n if (x1 < x2) {\n this._minx = x1\n this._maxx = x2\n } else {\n this._minx = x2\n this._maxx = x1\n }\n if (y1 < y2) {\n this._miny = y1\n this._maxy = y2\n } else {\n this._miny = y2\n this._maxy = y1\n }\n }\n }\n\n getMaxY () {\n return this._maxy\n }\n\n distance (env) {\n if (this.intersects(env)) return 0\n let dx = 0.0\n if (this._maxx < env._minx) dx = env._minx - this._maxx; else if (this._minx > env._maxx) dx = this._minx - env._maxx\n let dy = 0.0\n if (this._maxy < env._miny) dy = env._miny - this._maxy; else if (this._miny > env._maxy) dy = this._miny - env._maxy\n if (dx === 0.0) return dy\n if (dy === 0.0) return dx\n return Math.sqrt(dx * dx + dy * dy)\n }\n\n hashCode () {\n let result = 17\n result = 37 * result + Coordinate.hashCode(this._minx)\n result = 37 * result + Coordinate.hashCode(this._maxx)\n result = 37 * result + Coordinate.hashCode(this._miny)\n result = 37 * result + Coordinate.hashCode(this._maxy)\n return result\n }\n\n getClass () {\n return Envelope\n }\n\n get interfaces_ () {\n return [Comparable, Serializable]\n }\n}\nEnvelope.constructor_ = function () {\n this._minx = null\n this._maxx = null\n this._miny = null\n this._maxy = null\n if (arguments.length === 0) {\n this.init()\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof Coordinate) {\n const p = arguments[0]\n this.init(p.x, p.x, p.y, p.y)\n } else if (arguments[0] instanceof Envelope) {\n const env = arguments[0]\n this.init(env)\n }\n } else if (arguments.length === 2) {\n const p1 = arguments[0]; const p2 = arguments[1]\n this.init(p1.x, p2.x, p1.y, p2.y)\n } else if (arguments.length === 4) {\n const x1 = arguments[0]; const x2 = arguments[1]; const y1 = arguments[2]; const y2 = arguments[3]\n this.init(x1, x2, y1, y2)\n }\n}\nEnvelope.serialVersionUID = 5873921885273102420\n","export default function Exception () {}\n","import Exception from '../../../../java/lang/Exception'\nexport default class NotRepresentableException extends Exception {\n constructor () {\n super()\n NotRepresentableException.constructor_.apply(this, arguments)\n }\n\n getClass () {\n return NotRepresentableException\n }\n\n get interfaces_ () {\n return []\n }\n}\nNotRepresentableException.constructor_ = function () {\n Exception.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 constructor () {\n DD.constructor_.apply(this, arguments)\n }\n\n static sqr (x) {\n return DD.valueOf(x).selfMultiply(x)\n }\n\n static valueOf () {\n if (typeof arguments[0] === 'string') {\n const str = arguments[0]\n return DD.parse(str)\n } else if (typeof arguments[0] === 'number') {\n const x = arguments[0]\n return new DD(x)\n }\n }\n\n static sqrt (x) {\n return DD.valueOf(x).sqrt()\n }\n\n static parse (str) {\n let i = 0\n const strlen = str.length\n while (Character.isWhitespace(str.charAt(i))) i++\n let isNegative = false\n if (i < strlen) {\n const signCh = str.charAt(i)\n if (signCh === '-' || signCh === '+') {\n i++\n if (signCh === '-') isNegative = true\n }\n }\n const val = new DD()\n let numDigits = 0\n let numBeforeDec = 0\n let exp = 0\n while (true) {\n if (i >= strlen) break\n const ch = str.charAt(i)\n i++\n if (Character.isDigit(ch)) {\n const d = ch - '0'\n val.selfMultiply(DD.TEN)\n val.selfAdd(d)\n numDigits++\n continue\n }\n if (ch === '.') {\n numBeforeDec = numDigits\n continue\n }\n if (ch === 'e' || ch === 'E') {\n const expStr = str.substring(i)\n try {\n exp = Integer.parseInt(expStr)\n } catch (ex) {\n if (ex instanceof NumberFormatException) {\n throw new NumberFormatException('Invalid exponent ' + expStr + ' in string ' + str)\n } else throw ex\n } finally {}\n break\n }\n throw new NumberFormatException(\"Unexpected character '\" + ch + \"' at position \" + i + ' in string ' + str)\n }\n let val2 = val\n const numDecPlaces = numDigits - numBeforeDec - exp\n if (numDecPlaces === 0) {\n val2 = val\n } else if (numDecPlaces > 0) {\n const scale = DD.TEN.pow(numDecPlaces)\n val2 = val.divide(scale)\n } else if (numDecPlaces < 0) {\n const scale = DD.TEN.pow(-numDecPlaces)\n val2 = val.multiply(scale)\n }\n if (isNegative) {\n return val2.negate()\n }\n return val2\n }\n\n static createNaN () {\n return new DD(Double.NaN, Double.NaN)\n }\n\n static copy (dd) {\n return new DD(dd)\n }\n\n static magnitude (x) {\n const xAbs = Math.abs(x)\n const xLog10 = Math.log(xAbs) / Math.log(10)\n let xMag = Math.trunc(Math.floor(xLog10))\n const xApprox = Math.pow(10, xMag)\n if (xApprox * 10 <= xAbs) xMag += 1\n return xMag\n }\n\n static stringOfChar (ch, len) {\n const buf = new StringBuffer()\n for (let i = 0; i < len; i++) {\n buf.append(ch)\n }\n return buf.toString()\n }\n\n le (y) {\n return this._hi < y._hi || this._hi === y._hi && this._lo <= y._lo\n }\n\n extractSignificantDigits (insertDecimalPoint, magnitude) {\n let y = this.abs()\n let mag = DD.magnitude(y._hi)\n const scale = DD.TEN.pow(mag)\n y = y.divide(scale)\n if (y.gt(DD.TEN)) {\n y = y.divide(DD.TEN)\n mag += 1\n } else if (y.lt(DD.ONE)) {\n y = y.multiply(DD.TEN)\n mag -= 1\n }\n const decimalPointPos = mag + 1\n const buf = new StringBuffer()\n const numDigits = DD.MAX_PRINT_DIGITS - 1\n for (let i = 0; i <= numDigits; i++) {\n if (insertDecimalPoint && i === decimalPointPos) {\n buf.append('.')\n }\n const digit = Math.trunc(y._hi)\n if (digit < 0 || digit > 9) {}\n if (digit < 0) {\n break\n }\n let rebiasBy10 = false\n let digitChar = 0\n if (digit > 9) {\n rebiasBy10 = true\n digitChar = '9'\n } else {\n digitChar = '0' + digit\n }\n buf.append(digitChar)\n y = y.subtract(DD.valueOf(digit)).multiply(DD.TEN)\n if (rebiasBy10) y.selfAdd(DD.TEN)\n let continueExtractingDigits = true\n const remMag = DD.magnitude(y._hi)\n if (remMag < 0 && Math.abs(remMag) >= numDigits - i) continueExtractingDigits = false\n if (!continueExtractingDigits) break\n }\n magnitude[0] = mag\n return buf.toString()\n }\n\n sqr () {\n return this.multiply(this)\n }\n\n doubleValue () {\n return this._hi + this._lo\n }\n\n subtract () {\n if (arguments[0] instanceof DD) {\n const y = arguments[0]\n return this.add(y.negate())\n } else if (typeof arguments[0] === 'number') {\n const y = arguments[0]\n return this.add(-y)\n }\n }\n\n equals () {\n if (arguments.length === 1 && arguments[0] instanceof DD) {\n const y = arguments[0]\n return this._hi === y._hi && this._lo === y._lo\n }\n }\n\n isZero () {\n return this._hi === 0.0 && this._lo === 0.0\n }\n\n selfSubtract () {\n if (arguments[0] instanceof DD) {\n const y = arguments[0]\n if (this.isNaN()) return this\n return this.selfAdd(-y._hi, -y._lo)\n } else if (typeof arguments[0] === 'number') {\n const y = arguments[0]\n if (this.isNaN()) return this\n return this.selfAdd(-y, 0.0)\n }\n }\n\n getSpecialNumberString () {\n if (this.isZero()) return '0.0'\n if (this.isNaN()) return 'NaN '\n return null\n }\n\n min (x) {\n if (this.le(x)) {\n return this\n } else {\n return x\n }\n }\n\n selfDivide () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof DD) {\n const y = arguments[0]\n return this.selfDivide(y._hi, y._lo)\n } else if (typeof arguments[0] === 'number') {\n const y = arguments[0]\n return this.selfDivide(y, 0.0)\n }\n } else if (arguments.length === 2) {\n const yhi = arguments[0]; const ylo = arguments[1]\n let hc = null; let tc = null; let hy = null; let ty = null; let C = null; let c = null; let U = null; let u = null\n C = this._hi / yhi\n c = DD.SPLIT * C\n hc = c - C\n u = DD.SPLIT * yhi\n hc = c - hc\n tc = C - hc\n hy = u - yhi\n U = C * yhi\n hy = u - hy\n ty = yhi - hy\n u = hc * hy - U + hc * ty + tc * hy + tc * ty\n c = (this._hi - U - u + this._lo - C * ylo) / yhi\n u = C + c\n this._hi = u\n this._lo = C - u + c\n return this\n }\n }\n\n dump () {\n return 'DD<' + this._hi + ', ' + this._lo + '>'\n }\n\n divide () {\n if (arguments[0] instanceof DD) {\n const y = arguments[0]\n let hc = null; let tc = null; let hy = null; let ty = null; let C = null; let c = null; let U = null; let u = null\n C = this._hi / y._hi\n c = DD.SPLIT * C\n hc = c - C\n u = DD.SPLIT * y._hi\n hc = c - hc\n tc = C - hc\n hy = u - y._hi\n U = C * y._hi\n hy = u - hy\n ty = y._hi - hy\n u = hc * hy - U + hc * ty + tc * hy + tc * ty\n c = (this._hi - U - u + this._lo - C * y._lo) / y._hi\n u = C + c\n const zhi = u\n const zlo = C - u + c\n return new DD(zhi, zlo)\n } else if (typeof arguments[0] === 'number') {\n const y = arguments[0]\n if (Double.isNaN(y)) return DD.createNaN()\n return DD.copy(this).selfDivide(y, 0.0)\n }\n }\n\n ge (y) {\n return this._hi > y._hi || this._hi === y._hi && this._lo >= y._lo\n }\n\n pow (exp) {\n if (exp === 0.0) return DD.valueOf(1.0)\n let r = new DD(this)\n let s = DD.valueOf(1.0)\n let n = Math.abs(exp)\n if (n > 1) {\n while (n > 0) {\n if (n % 2 === 1) {\n s.selfMultiply(r)\n }\n n /= 2\n if (n > 0) r = r.sqr()\n }\n } else {\n s = r\n }\n if (exp < 0) return s.reciprocal()\n return s\n }\n\n ceil () {\n if (this.isNaN()) return DD.NaN\n const fhi = Math.ceil(this._hi)\n let flo = 0.0\n if (fhi === this._hi) {\n flo = Math.ceil(this._lo)\n }\n return new DD(fhi, flo)\n }\n\n compareTo (o) {\n const other = o\n if (this._hi < other._hi) return -1\n if (this._hi > other._hi) return 1\n if (this._lo < other._lo) return -1\n if (this._lo > other._lo) return 1\n return 0\n }\n\n rint () {\n if (this.isNaN()) return this\n const plus5 = this.add(0.5)\n return plus5.floor()\n }\n\n setValue () {\n if (arguments[0] instanceof DD) {\n const value = arguments[0]\n this.init(value)\n return this\n } else if (typeof arguments[0] === 'number') {\n const value = arguments[0]\n this.init(value)\n return this\n }\n }\n\n max (x) {\n if (this.ge(x)) {\n return this\n } else {\n return x\n }\n }\n\n sqrt () {\n if (this.isZero()) return DD.valueOf(0.0)\n if (this.isNegative()) {\n return DD.NaN\n }\n const x = 1.0 / Math.sqrt(this._hi)\n const ax = this._hi * x\n const axdd = DD.valueOf(ax)\n const diffSq = this.subtract(axdd.sqr())\n const d2 = diffSq._hi * (x * 0.5)\n return axdd.add(d2)\n }\n\n selfAdd () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof DD) {\n const y = arguments[0]\n return this.selfAdd(y._hi, y._lo)\n } else if (typeof arguments[0] === 'number') {\n const y = arguments[0]\n let H = null; let h = null; let S = null; let s = null; let e = null; let f = null\n S = this._hi + y\n e = S - this._hi\n s = S - e\n s = y - e + (this._hi - s)\n f = s + this._lo\n H = S + f\n h = f + (S - H)\n this._hi = H + h\n this._lo = h + (H - this._hi)\n return this\n }\n } else if (arguments.length === 2) {\n const yhi = arguments[0]; const ylo = arguments[1]\n let H = null; let h = null; let T = null; let t = null; let S = null; let s = null; let e = null; let f = null\n S = this._hi + yhi\n T = this._lo + ylo\n e = S - this._hi\n f = T - this._lo\n s = S - e\n t = T - f\n s = yhi - e + (this._hi - s)\n t = ylo - f + (this._lo - t)\n e = s + T\n H = S + e\n h = e + (S - H)\n e = t + h\n const zhi = H + e\n const zlo = e + (H - zhi)\n this._hi = zhi\n this._lo = zlo\n return this\n }\n }\n\n selfMultiply () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof DD) {\n const y = arguments[0]\n return this.selfMultiply(y._hi, y._lo)\n } else if (typeof arguments[0] === 'number') {\n const y = arguments[0]\n return this.selfMultiply(y, 0.0)\n }\n } else if (arguments.length === 2) {\n const yhi = arguments[0]; const ylo = arguments[1]\n let hx = null; let tx = null; let hy = null; let ty = null; let C = null; let c = null\n C = DD.SPLIT * this._hi\n hx = C - this._hi\n c = DD.SPLIT * yhi\n hx = C - hx\n tx = this._hi - hx\n hy = c - yhi\n C = this._hi * yhi\n hy = c - hy\n ty = yhi - hy\n c = hx * hy - C + hx * ty + tx * hy + tx * ty + (this._hi * ylo + this._lo * yhi)\n const zhi = C + c\n hx = C - zhi\n const zlo = c + hx\n this._hi = zhi\n this._lo = zlo\n return this\n }\n }\n\n selfSqr () {\n return this.selfMultiply(this)\n }\n\n floor () {\n if (this.isNaN()) return DD.NaN\n const fhi = Math.floor(this._hi)\n let flo = 0.0\n if (fhi === this._hi) {\n flo = Math.floor(this._lo)\n }\n return new DD(fhi, flo)\n }\n\n negate () {\n if (this.isNaN()) return this\n return new DD(-this._hi, -this._lo)\n }\n\n clone () {\n try {\n return null\n } catch (ex) {\n if (ex instanceof CloneNotSupportedException) {\n return null\n } else throw ex\n } finally {}\n }\n\n multiply () {\n if (arguments[0] instanceof DD) {\n const y = arguments[0]\n if (y.isNaN()) return DD.createNaN()\n return DD.copy(this).selfMultiply(y)\n } else if (typeof arguments[0] === 'number') {\n const y = arguments[0]\n if (Double.isNaN(y)) return DD.createNaN()\n return DD.copy(this).selfMultiply(y, 0.0)\n }\n }\n\n isNaN () {\n return Double.isNaN(this._hi)\n }\n\n intValue () {\n return Math.trunc(this._hi)\n }\n\n toString () {\n const mag = DD.magnitude(this._hi)\n if (mag >= -3 && mag <= 20) return this.toStandardNotation()\n return this.toSciNotation()\n }\n\n toStandardNotation () {\n const specialStr = this.getSpecialNumberString()\n if (specialStr !== null) return specialStr\n const magnitude = new Array(1).fill(null)\n const sigDigits = this.extractSignificantDigits(true, magnitude)\n const decimalPointPos = magnitude[0] + 1\n let num = sigDigits\n if (sigDigits.charAt(0) === '.') {\n num = '0' + sigDigits\n } else if (decimalPointPos < 0) {\n num = '0.' + DD.stringOfChar('0', -decimalPointPos) + sigDigits\n } else if (sigDigits.indexOf('.') === -1) {\n const numZeroes = decimalPointPos - sigDigits.length\n const zeroes = DD.stringOfChar('0', numZeroes)\n num = sigDigits + zeroes + '.0'\n }\n if (this.isNegative()) return '-' + num\n return num\n }\n\n reciprocal () {\n let hc = null; let tc = null; let hy = null; let ty = null; let C = null; let c = null; let U = null; let u = null\n C = 1.0 / this._hi\n c = DD.SPLIT * C\n hc = c - C\n u = DD.SPLIT * this._hi\n hc = c - hc\n tc = C - hc\n hy = u - this._hi\n U = C * this._hi\n hy = u - hy\n ty = this._hi - hy\n u = hc * hy - U + hc * ty + tc * hy + tc * ty\n c = (1.0 - U - u - C * this._lo) / this._hi\n const zhi = C + c\n const zlo = C - zhi + c\n return new DD(zhi, zlo)\n }\n\n toSciNotation () {\n if (this.isZero()) return DD.SCI_NOT_ZERO\n const specialStr = this.getSpecialNumberString()\n if (specialStr !== null) return specialStr\n const magnitude = new Array(1).fill(null)\n const digits = this.extractSignificantDigits(false, magnitude)\n const expStr = DD.SCI_NOT_EXPONENT_CHAR + magnitude[0]\n if (digits.charAt(0) === '0') {\n throw new IllegalStateException('Found leading zero: ' + digits)\n }\n let trailingDigits = ''\n if (digits.length > 1) trailingDigits = digits.substring(1)\n const digitsWithDecimal = digits.charAt(0) + '.' + trailingDigits\n if (this.isNegative()) return '-' + digitsWithDecimal + expStr\n return digitsWithDecimal + expStr\n }\n\n abs () {\n if (this.isNaN()) return DD.NaN\n if (this.isNegative()) return this.negate()\n return new DD(this)\n }\n\n isPositive () {\n return this._hi > 0.0 || this._hi === 0.0 && this._lo > 0.0\n }\n\n lt (y) {\n return this._hi < y._hi || this._hi === y._hi && this._lo < y._lo\n }\n\n add () {\n if (arguments[0] instanceof DD) {\n const y = arguments[0]\n return DD.copy(this).selfAdd(y)\n } else if (typeof arguments[0] === 'number') {\n const y = arguments[0]\n return DD.copy(this).selfAdd(y)\n }\n }\n\n init () {\n if (arguments.length === 1) {\n if (typeof arguments[0] === 'number') {\n const x = arguments[0]\n this._hi = x\n this._lo = 0.0\n } else if (arguments[0] instanceof DD) {\n const dd = arguments[0]\n this._hi = dd._hi\n this._lo = dd._lo\n }\n } else if (arguments.length === 2) {\n const hi = arguments[0]; const lo = arguments[1]\n this._hi = hi\n this._lo = lo\n }\n }\n\n gt (y) {\n return this._hi > y._hi || this._hi === y._hi && this._lo > y._lo\n }\n\n isNegative () {\n return this._hi < 0.0 || this._hi === 0.0 && this._lo < 0.0\n }\n\n trunc () {\n if (this.isNaN()) return DD.NaN\n if (this.isPositive()) return this.floor(); else return this.ceil()\n }\n\n signum () {\n if (this._hi > 0) return 1\n if (this._hi < 0) return -1\n if (this._lo > 0) return 1\n if (this._lo < 0) return -1\n return 0\n }\n\n getClass () {\n return DD\n }\n\n get interfaces_ () {\n return [Serializable, Comparable, Cloneable]\n }\n}\nDD.constructor_ = function () {\n this._hi = 0.0\n this._lo = 0.0\n if (arguments.length === 0) {\n this.init(0.0)\n } else if (arguments.length === 1) {\n if (typeof arguments[0] === 'number') {\n const x = arguments[0]\n this.init(x)\n } else if (arguments[0] instanceof DD) {\n const dd = arguments[0]\n this.init(dd)\n } else if (typeof arguments[0] === 'string') {\n const str = arguments[0]\n DD.constructor_.call(this, DD.parse(str))\n }\n } else if (arguments.length === 2) {\n const hi = arguments[0]; const lo = arguments[1]\n this.init(hi, lo)\n }\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 constructor () {\n CGAlgorithmsDD.constructor_.apply(this, arguments)\n }\n\n static orientationIndex (p1, p2, q) {\n const index = CGAlgorithmsDD.orientationIndexFilter(p1, p2, q)\n if (index <= 1) return index\n const dx1 = DD.valueOf(p2.x).selfAdd(-p1.x)\n const dy1 = DD.valueOf(p2.y).selfAdd(-p1.y)\n const dx2 = DD.valueOf(q.x).selfAdd(-p2.x)\n const dy2 = DD.valueOf(q.y).selfAdd(-p2.y)\n return dx1.selfMultiply(dy2).selfSubtract(dy1.selfMultiply(dx2)).signum()\n }\n\n static signOfDet2x2 () {\n if (arguments[3] instanceof DD && (arguments[2] instanceof DD && (arguments[0] instanceof DD && arguments[1] instanceof DD))) {\n const x1 = arguments[0]; const y1 = arguments[1]; const x2 = arguments[2]; const y2 = arguments[3]\n const det = x1.multiply(y2).selfSubtract(y1.multiply(x2))\n return det.signum()\n } else if (typeof arguments[3] === 'number' && (typeof arguments[2] === 'number' && (typeof arguments[0] === 'number' && typeof arguments[1] === 'number'))) {\n const dx1 = arguments[0]; const dy1 = arguments[1]; const dx2 = arguments[2]; const dy2 = arguments[3]\n const x1 = DD.valueOf(dx1)\n const y1 = DD.valueOf(dy1)\n const x2 = DD.valueOf(dx2)\n const y2 = DD.valueOf(dy2)\n const det = x1.multiply(y2).selfSubtract(y1.multiply(x2))\n return det.signum()\n }\n }\n\n static intersection (p1, p2, q1, q2) {\n const denom1 = DD.valueOf(q2.y).selfSubtract(q1.y).selfMultiply(DD.valueOf(p2.x).selfSubtract(p1.x))\n const denom2 = DD.valueOf(q2.x).selfSubtract(q1.x).selfMultiply(DD.valueOf(p2.y).selfSubtract(p1.y))\n const denom = denom1.subtract(denom2)\n const numx1 = DD.valueOf(q2.x).selfSubtract(q1.x).selfMultiply(DD.valueOf(p1.y).selfSubtract(q1.y))\n const numx2 = DD.valueOf(q2.y).selfSubtract(q1.y).selfMultiply(DD.valueOf(p1.x).selfSubtract(q1.x))\n const numx = numx1.subtract(numx2)\n const fracP = numx.selfDivide(denom).doubleValue()\n const x = DD.valueOf(p1.x).selfAdd(DD.valueOf(p2.x).selfSubtract(p1.x).selfMultiply(fracP)).doubleValue()\n const numy1 = DD.valueOf(p2.x).selfSubtract(p1.x).selfMultiply(DD.valueOf(p1.y).selfSubtract(q1.y))\n const numy2 = DD.valueOf(p2.y).selfSubtract(p1.y).selfMultiply(DD.valueOf(p1.x).selfSubtract(q1.x))\n const numy = numy1.subtract(numy2)\n const fracQ = numy.selfDivide(denom).doubleValue()\n const y = DD.valueOf(q1.y).selfAdd(DD.valueOf(q2.y).selfSubtract(q1.y).selfMultiply(fracQ)).doubleValue()\n return new Coordinate(x, y)\n }\n\n static orientationIndexFilter (pa, pb, pc) {\n let detsum = null\n const detleft = (pa.x - pc.x) * (pb.y - pc.y)\n const detright = (pa.y - pc.y) * (pb.x - pc.x)\n const det = detleft - detright\n if (detleft > 0.0) {\n if (detright <= 0.0) {\n return CGAlgorithmsDD.signum(det)\n } else {\n detsum = detleft + detright\n }\n } else if (detleft < 0.0) {\n if (detright >= 0.0) {\n return CGAlgorithmsDD.signum(det)\n } else {\n detsum = -detleft - detright\n }\n } else {\n return CGAlgorithmsDD.signum(det)\n }\n const errbound = CGAlgorithmsDD.DP_SAFE_EPSILON * detsum\n if (det >= errbound || -det >= errbound) {\n return CGAlgorithmsDD.signum(det)\n }\n return 2\n }\n\n static signum (x) {\n if (x > 0) return 1\n if (x < 0) return -1\n return 0\n }\n\n getClass () {\n return CGAlgorithmsDD\n }\n\n get interfaces_ () {\n return []\n }\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 constructor () {\n Orientation.constructor_.apply(this, arguments)\n }\n\n static index (p1, p2, q) {\n return CGAlgorithmsDD.orientationIndex(p1, p2, q)\n }\n\n static isCCW (ring) {\n const nPts = ring.length - 1\n if (nPts < 3) throw new IllegalArgumentException('Ring has fewer than 4 points, so orientation cannot be determined')\n let hiPt = ring[0]\n let hiIndex = 0\n for (let i = 1; i <= nPts; i++) {\n const p = ring[i]\n if (p.y > hiPt.y) {\n hiPt = p\n hiIndex = i\n }\n }\n let iPrev = hiIndex\n do {\n iPrev = iPrev - 1\n if (iPrev < 0) iPrev = nPts\n } while (ring[iPrev].equals2D(hiPt) && iPrev !== hiIndex)\n let iNext = hiIndex\n do {\n iNext = (iNext + 1) % nPts\n } while (ring[iNext].equals2D(hiPt) && iNext !== hiIndex)\n const prev = ring[iPrev]\n const next = ring[iNext]\n if (prev.equals2D(hiPt) || next.equals2D(hiPt) || prev.equals2D(next)) return false\n const disc = Orientation.index(prev, hiPt, next)\n let isCCW = null\n if (disc === 0) {\n isCCW = prev.x > next.x\n } else {\n isCCW = disc > 0\n }\n return isCCW\n }\n\n getClass () {\n return Orientation\n }\n\n get interfaces_ () {\n return []\n }\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 constructor () {\n HCoordinate.constructor_.apply(this, arguments)\n }\n\n static intersection (p1, p2, q1, q2) {\n const px = p1.y - p2.y\n const py = p2.x - p1.x\n const pw = p1.x * p2.y - p2.x * p1.y\n const qx = q1.y - q2.y\n const qy = q2.x - q1.x\n const qw = q1.x * q2.y - q2.x * q1.y\n const x = py * qw - qy * pw\n const y = qx * pw - px * qw\n const w = px * qy - qx * py\n const xInt = x / w\n const yInt = y / w\n if (Double.isNaN(xInt) || (Double.isInfinite(xInt) || Double.isNaN(yInt)) || Double.isInfinite(yInt)) {\n throw new NotRepresentableException()\n }\n return new Coordinate(xInt, yInt)\n }\n\n getY () {\n const a = this.y / this.w\n if (Double.isNaN(a) || Double.isInfinite(a)) {\n throw new NotRepresentableException()\n }\n return a\n }\n\n getX () {\n const a = this.x / this.w\n if (Double.isNaN(a) || Double.isInfinite(a)) {\n throw new NotRepresentableException()\n }\n return a\n }\n\n getCoordinate () {\n const p = new Coordinate()\n p.x = this.getX()\n p.y = this.getY()\n return p\n }\n\n getClass () {\n return HCoordinate\n }\n\n get interfaces_ () {\n return []\n }\n}\nHCoordinate.constructor_ = function () {\n this.x = null\n this.y = null\n this.w = null\n if (arguments.length === 0) {\n this.x = 0.0\n this.y = 0.0\n this.w = 1.0\n } else if (arguments.length === 1) {\n const p = arguments[0]\n this.x = p.x\n this.y = p.y\n this.w = 1.0\n } else if (arguments.length === 2) {\n if (typeof arguments[0] === 'number' && typeof arguments[1] === 'number') {\n const _x = arguments[0]; const _y = arguments[1]\n this.x = _x\n this.y = _y\n this.w = 1.0\n } else if (arguments[0] instanceof HCoordinate && arguments[1] instanceof HCoordinate) {\n const p1 = arguments[0]; const p2 = arguments[1]\n this.x = p1.y * p2.w - p2.y * p1.w\n this.y = p2.x * p1.w - p1.x * p2.w\n this.w = p1.x * p2.y - p2.x * p1.y\n } else if (arguments[0] instanceof Coordinate && arguments[1] instanceof Coordinate) {\n const p1 = arguments[0]; const p2 = arguments[1]\n this.x = p1.y - p2.y\n this.y = p2.x - p1.x\n this.w = p1.x * p2.y - p2.x * p1.y\n }\n } else if (arguments.length === 3) {\n const _x = arguments[0]; const _y = arguments[1]; const _w = arguments[2]\n this.x = _x\n this.y = _y\n this.w = _w\n } else if (arguments.length === 4) {\n const p1 = arguments[0]; const p2 = arguments[1]; const q1 = arguments[2]; const q2 = arguments[3]\n const px = p1.y - p2.y\n const py = p2.x - p1.x\n const pw = p1.x * p2.y - p2.x * p1.y\n const qx = q1.y - q2.y\n const qy = q2.x - q1.x\n const qw = q1.x * q2.y - q2.x * q1.y\n this.x = py * qw - qy * pw\n this.y = qx * pw - px * qw\n this.w = px * qy - qx * py\n }\n}\n","import Double from '../../../../java/lang/Double'\nexport default class MathUtil {\n constructor () {\n MathUtil.constructor_.apply(this, arguments)\n }\n\n static log10 (x) {\n const ln = Math.log(x)\n if (Double.isInfinite(ln)) return ln\n if (Double.isNaN(ln)) return ln\n return ln / MathUtil.LOG_10\n }\n\n static min (v1, v2, v3, v4) {\n let min = v1\n if (v2 < min) min = v2\n if (v3 < min) min = v3\n if (v4 < min) min = v4\n return min\n }\n\n static clamp () {\n if (typeof arguments[2] === 'number' && (typeof arguments[0] === 'number' && typeof arguments[1] === 'number')) {\n const x = arguments[0]; const min = arguments[1]; const max = arguments[2]\n if (x < min) return min\n if (x > max) return max\n return x\n } else if (Number.isInteger(arguments[2]) && (Number.isInteger(arguments[0]) && Number.isInteger(arguments[1]))) {\n const x = arguments[0]; const min = arguments[1]; const max = arguments[2]\n if (x < min) return min\n if (x > max) return max\n return x\n }\n }\n\n static wrap (index, max) {\n if (index < 0) {\n return max - -index % max\n }\n return index % max\n }\n\n static max () {\n if (arguments.length === 3) {\n const v1 = arguments[0]; const v2 = arguments[1]; const v3 = arguments[2]\n let max = v1\n if (v2 > max) max = v2\n if (v3 > max) max = v3\n return max\n } else if (arguments.length === 4) {\n const v1 = arguments[0]; const v2 = arguments[1]; const v3 = arguments[2]; const v4 = arguments[3]\n let max = v1\n if (v2 > max) max = v2\n if (v3 > max) max = v3\n if (v4 > max) max = v4\n return max\n }\n }\n\n static average (x1, x2) {\n return (x1 + x2) / 2.0\n }\n\n getClass () {\n return MathUtil\n }\n\n get interfaces_ () {\n return []\n }\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 constructor () {\n Distance.constructor_.apply(this, arguments)\n }\n\n static segmentToSegment (A, B, C, D) {\n if (A.equals(B)) return Distance.pointToSegment(A, C, D)\n if (C.equals(D)) return Distance.pointToSegment(D, A, B)\n let noIntersection = false\n if (!Envelope.intersects(A, B, C, D)) {\n noIntersection = true\n } else {\n const denom = (B.x - A.x) * (D.y - C.y) - (B.y - A.y) * (D.x - C.x)\n if (denom === 0) {\n noIntersection = true\n } else {\n const r_num = (A.y - C.y) * (D.x - C.x) - (A.x - C.x) * (D.y - C.y)\n const s_num = (A.y - C.y) * (B.x - A.x) - (A.x - C.x) * (B.y - A.y)\n const s = s_num / denom\n const r = r_num / denom\n if (r < 0 || r > 1 || s < 0 || s > 1) {\n noIntersection = true\n }\n }\n }\n if (noIntersection) {\n return MathUtil.min(Distance.pointToSegment(A, C, D), Distance.pointToSegment(B, C, D), Distance.pointToSegment(C, A, B), Distance.pointToSegment(D, A, B))\n }\n return 0.0\n }\n\n static pointToSegment (p, A, B) {\n if (A.x === B.x && A.y === B.y) return p.distance(A)\n const len2 = (B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y)\n const r = ((p.x - A.x) * (B.x - A.x) + (p.y - A.y) * (B.y - A.y)) / len2\n if (r <= 0.0) return p.distance(A)\n if (r >= 1.0) return p.distance(B)\n const s = ((A.y - p.y) * (B.x - A.x) - (A.x - p.x) * (B.y - A.y)) / len2\n return Math.abs(s) * Math.sqrt(len2)\n }\n\n static pointToLinePerpendicular (p, A, B) {\n const len2 = (B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y)\n const s = ((A.y - p.y) * (B.x - A.x) - (A.x - p.x) * (B.y - A.y)) / len2\n return Math.abs(s) * Math.sqrt(len2)\n }\n\n static pointToSegmentString (p, line) {\n if (line.length === 0) throw new IllegalArgumentException('Line array must contain at least one vertex')\n let minDistance = p.distance(line[0])\n for (let i = 0; i < line.length - 1; i++) {\n const dist = Distance.pointToSegment(p, line[i], line[i + 1])\n if (dist < minDistance) {\n minDistance = dist\n }\n }\n return minDistance\n }\n\n getClass () {\n return Distance\n }\n\n get interfaces_ () {\n return []\n }\n}\nDistance.constructor_ = function () {}\n","import Cloneable from '../../../../java/lang/Cloneable'\nexport default class CoordinateSequence {\n constructor () {\n CoordinateSequence.constructor_.apply(this, arguments)\n }\n\n setOrdinate (index, ordinateIndex, value) {}\n size () {}\n getOrdinate (index, ordinateIndex) {}\n getCoordinate () {\n if (arguments.length === 1) {\n const i = arguments[0]\n } else if (arguments.length === 2) {\n const index = arguments[0]; const coord = arguments[1]\n }\n }\n\n getCoordinateCopy (i) {}\n getDimension () {}\n getX (index) {}\n expandEnvelope (env) {}\n copy () {}\n getY (index) {}\n toCoordinateArray () {}\n getClass () {\n return CoordinateSequence\n }\n\n get interfaces_ () {\n return [Cloneable]\n }\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 constructor () {\n CoordinateSequenceFactory.constructor_.apply(this, arguments)\n }\n\n create () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof Array) {\n const coordinates = arguments[0]\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n const coordSeq = arguments[0]\n }\n } else if (arguments.length === 2) {\n const size = arguments[0]; const dimension = arguments[1]\n }\n }\n\n getClass () {\n return CoordinateSequenceFactory\n }\n\n get interfaces_ () {\n return []\n }\n}\nCoordinateSequenceFactory.constructor_ = function () {}\n","export default class GeometryComponentFilter {\n constructor () {\n GeometryComponentFilter.constructor_.apply(this, arguments)\n }\n\n filter (geom) {}\n getClass () {\n return GeometryComponentFilter\n }\n\n get interfaces_ () {\n return []\n }\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 constructor () {\n Geometry.constructor_.apply(this, arguments)\n }\n\n isGeometryCollection () {\n return this.getTypeCode() === Geometry.TYPECODE_GEOMETRYCOLLECTION\n }\n\n getFactory () {\n return this._factory\n }\n\n getGeometryN (n) {\n return this\n }\n\n getArea () {\n return 0.0\n }\n\n isRectangle () {\n return false\n }\n\n equalsExact (other) {\n return this === other || this.equalsExact(other, 0)\n }\n\n geometryChanged () {\n this.apply(Geometry.geometryChangedFilter)\n }\n\n geometryChangedAction () {\n this._envelope = null\n }\n\n equalsNorm (g) {\n if (g === null) return false\n return this.norm().equalsExact(g.norm())\n }\n\n getLength () {\n return 0.0\n }\n\n getNumGeometries () {\n return 1\n }\n\n compareTo () {\n let other\n if (arguments.length === 1) {\n const o = arguments[0]\n other = o\n if (this.getTypeCode() !== other.getTypeCode()) {\n return this.getTypeCode() - other.getTypeCode()\n }\n if (this.isEmpty() && other.isEmpty()) {\n return 0\n }\n if (this.isEmpty()) {\n return -1\n }\n if (other.isEmpty()) {\n return 1\n }\n return this.compareToSameClass(o)\n } else if (arguments.length === 2) {\n const o = arguments[0]; const comp = arguments[1]\n other = o\n if (this.getTypeCode() !== other.getTypeCode()) {\n return this.getTypeCode() - other.getTypeCode()\n }\n if (this.isEmpty() && other.isEmpty()) {\n return 0\n }\n if (this.isEmpty()) {\n return -1\n }\n if (other.isEmpty()) {\n return 1\n }\n return this.compareToSameClass(o, comp)\n }\n }\n\n getUserData () {\n return this._userData\n }\n\n getSRID () {\n return this._SRID\n }\n\n getEnvelope () {\n return this.getFactory().toGeometry(this.getEnvelopeInternal())\n }\n\n checkNotGeometryCollection (g) {\n if (g.getTypeCode() === Geometry.TYPECODE_GEOMETRYCOLLECTION) {\n throw new IllegalArgumentException('This method does not support GeometryCollection arguments')\n }\n }\n\n equal (a, b, tolerance) {\n if (tolerance === 0) {\n return a.equals(b)\n }\n return a.distance(b) <= tolerance\n }\n\n norm () {\n const copy = this.copy()\n copy.normalize()\n return copy\n }\n\n getPrecisionModel () {\n return this._factory.getPrecisionModel()\n }\n\n getEnvelopeInternal () {\n if (this._envelope === null) {\n this._envelope = this.computeEnvelopeInternal()\n }\n return new Envelope(this._envelope)\n }\n\n setSRID (SRID) {\n this._SRID = SRID\n }\n\n setUserData (userData) {\n this._userData = userData\n }\n\n compare (a, b) {\n const i = a.iterator()\n const j = b.iterator()\n while (i.hasNext() && j.hasNext()) {\n const aElement = i.next()\n const bElement = j.next()\n const comparison = aElement.compareTo(bElement)\n if (comparison !== 0) {\n return comparison\n }\n }\n if (i.hasNext()) {\n return 1\n }\n if (j.hasNext()) {\n return -1\n }\n return 0\n }\n\n hashCode () {\n return this.getEnvelopeInternal().hashCode()\n }\n\n isEquivalentClass (other) {\n return this.getClass() === other.getClass()\n }\n\n isGeometryCollectionOrDerived () {\n if (this.getTypeCode() === Geometry.TYPECODE_GEOMETRYCOLLECTION || this.getTypeCode() === Geometry.TYPECODE_MULTIPOINT || this.getTypeCode() === Geometry.TYPECODE_MULTILINESTRING || this.getTypeCode() === Geometry.TYPECODE_MULTIPOLYGON) {\n return true\n }\n return false\n }\n\n get interfaces_ () {\n return [Cloneable, Comparable, Serializable]\n }\n\n getClass () {\n return Geometry\n }\n\n static hasNonEmptyElements (geometries) {\n for (let i = 0; i < geometries.length; i++) {\n if (!geometries[i].isEmpty()) {\n return true\n }\n }\n return false\n }\n\n static hasNullElements (array) {\n for (let i = 0; i < array.length; i++) {\n if (array[i] === null) {\n return true\n }\n }\n return false\n }\n};\nGeometry.constructor_ = function (factory) {\n if (!factory) { return }\n this._envelope = null\n this._userData = null\n this._factory = factory\n this._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 get interfaces_ () {\n return [GeometryComponentFilter]\n },\n filter (geom) {\n geom.geometryChangedAction()\n }\n}\n","export default class CoordinateFilter {\n constructor () {\n CoordinateFilter.constructor_.apply(this, arguments)\n }\n\n filter (coord) {}\n getClass () {\n return CoordinateFilter\n }\n\n get interfaces_ () {\n return []\n }\n}\nCoordinateFilter.constructor_ = function () {}\n","export default class BoundaryNodeRule {\n constructor () {\n BoundaryNodeRule.constructor_.apply(this, arguments)\n }\n\n isInBoundary (boundaryCount) {}\n getClass () {\n return BoundaryNodeRule\n }\n\n get interfaces_ () {\n return []\n }\n}\nclass Mod2BoundaryNodeRule {\n constructor () {\n Mod2BoundaryNodeRule.constructor_.apply(this, arguments)\n }\n\n isInBoundary (boundaryCount) {\n return boundaryCount % 2 === 1\n }\n\n getClass () {\n return Mod2BoundaryNodeRule\n }\n\n get interfaces_ () {\n return [BoundaryNodeRule]\n }\n}\nMod2BoundaryNodeRule.constructor_ = function () {}\nclass EndPointBoundaryNodeRule {\n constructor () {\n EndPointBoundaryNodeRule.constructor_.apply(this, arguments)\n }\n\n isInBoundary (boundaryCount) {\n return boundaryCount > 0\n }\n\n getClass () {\n return EndPointBoundaryNodeRule\n }\n\n get interfaces_ () {\n return [BoundaryNodeRule]\n }\n}\nEndPointBoundaryNodeRule.constructor_ = function () {}\nclass MultiValentEndPointBoundaryNodeRule {\n constructor () {\n MultiValentEndPointBoundaryNodeRule.constructor_.apply(this, arguments)\n }\n\n isInBoundary (boundaryCount) {\n return boundaryCount > 1\n }\n\n getClass () {\n return MultiValentEndPointBoundaryNodeRule\n }\n\n get interfaces_ () {\n return [BoundaryNodeRule]\n }\n}\nMultiValentEndPointBoundaryNodeRule.constructor_ = function () {}\nclass MonoValentEndPointBoundaryNodeRule {\n constructor () {\n MonoValentEndPointBoundaryNodeRule.constructor_.apply(this, arguments)\n }\n\n isInBoundary (boundaryCount) {\n return boundaryCount === 1\n }\n\n getClass () {\n return MonoValentEndPointBoundaryNodeRule\n }\n\n get interfaces_ () {\n return [BoundaryNodeRule]\n }\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 constructor () {\n CoordinateArrays.constructor_.apply(this, arguments)\n }\n\n static isRing (pts) {\n if (pts.length < 4) return false\n if (!pts[0].equals2D(pts[pts.length - 1])) return false\n return true\n }\n\n static ptNotInList (testPts, pts) {\n for (let i = 0; i < testPts.length; i++) {\n const testPt = testPts[i]\n if (CoordinateArrays.indexOf(testPt, pts) < 0) return testPt\n }\n return null\n }\n\n static scroll (coordinates, firstCoordinate) {\n const i = CoordinateArrays.indexOf(firstCoordinate, coordinates)\n if (i < 0) return null\n const newCoordinates = new Array(coordinates.length).fill(null)\n System.arraycopy(coordinates, i, newCoordinates, 0, coordinates.length - i)\n System.arraycopy(coordinates, 0, newCoordinates, coordinates.length - i, i)\n System.arraycopy(newCoordinates, 0, coordinates, 0, coordinates.length)\n }\n\n static equals () {\n if (arguments.length === 2) {\n const coord1 = arguments[0]; const coord2 = arguments[1]\n if (coord1 === coord2) return true\n if (coord1 === null || coord2 === null) return false\n if (coord1.length !== coord2.length) return false\n for (let i = 0; i < coord1.length; i++) {\n if (!coord1[i].equals(coord2[i])) return false\n }\n return true\n } else if (arguments.length === 3) {\n const coord1 = arguments[0]; const coord2 = arguments[1]; const coordinateComparator = arguments[2]\n if (coord1 === coord2) return true\n if (coord1 === null || coord2 === null) return false\n if (coord1.length !== coord2.length) return false\n for (let i = 0; i < coord1.length; i++) {\n if (coordinateComparator.compare(coord1[i], coord2[i]) !== 0) return false\n }\n return true\n }\n }\n\n static intersection (coordinates, env) {\n const coordList = new CoordinateList()\n for (let i = 0; i < coordinates.length; i++) {\n if (env.intersects(coordinates[i])) coordList.add(coordinates[i], true)\n }\n return coordList.toCoordinateArray()\n }\n\n static hasRepeatedPoints (coord) {\n for (let i = 1; i < coord.length; i++) {\n if (coord[i - 1].equals(coord[i])) {\n return true\n }\n }\n return false\n }\n\n static removeRepeatedPoints (coord) {\n if (!CoordinateArrays.hasRepeatedPoints(coord)) return coord\n const coordList = new CoordinateList(coord, false)\n return coordList.toCoordinateArray()\n }\n\n static reverse (coord) {\n const last = coord.length - 1\n const mid = Math.trunc(last / 2)\n for (let i = 0; i <= mid; i++) {\n const tmp = coord[i]\n coord[i] = coord[last - i]\n coord[last - i] = tmp\n }\n }\n\n static removeNull (coord) {\n let nonNull = 0\n for (let i = 0; i < coord.length; i++) {\n if (coord[i] !== null) nonNull++\n }\n const newCoord = new Array(nonNull).fill(null)\n if (nonNull === 0) return newCoord\n let j = 0\n for (let i = 0; i < coord.length; i++) {\n if (coord[i] !== null) newCoord[j++] = coord[i]\n }\n return newCoord\n }\n\n static copyDeep () {\n if (arguments.length === 1) {\n const coordinates = arguments[0]\n const copy = new Array(coordinates.length).fill(null)\n for (let i = 0; i < coordinates.length; i++) {\n copy[i] = new Coordinate(coordinates[i])\n }\n return copy\n } else if (arguments.length === 5) {\n const src = arguments[0]; const srcStart = arguments[1]; const dest = arguments[2]; const destStart = arguments[3]; const length = arguments[4]\n for (let i = 0; i < length; i++) {\n dest[destStart + i] = new Coordinate(src[srcStart + i])\n }\n }\n }\n\n static isEqualReversed (pts1, pts2) {\n for (let i = 0; i < pts1.length; i++) {\n const p1 = pts1[i]\n const p2 = pts2[pts1.length - i - 1]\n if (p1.compareTo(p2) !== 0) return false\n }\n return true\n }\n\n static envelope (coordinates) {\n const env = new Envelope()\n for (let i = 0; i < coordinates.length; i++) {\n env.expandToInclude(coordinates[i])\n }\n return env\n }\n\n static toCoordinateArray (coordList) {\n return coordList.toArray(CoordinateArrays.coordArrayType)\n }\n\n static atLeastNCoordinatesOrNothing (n, c) {\n return c.length >= n ? c : []\n }\n\n static indexOf (coordinate, coordinates) {\n for (let i = 0; i < coordinates.length; i++) {\n if (coordinate.equals(coordinates[i])) {\n return i\n }\n }\n return -1\n }\n\n static increasingDirection (pts) {\n for (let i = 0; i < Math.trunc(pts.length / 2); i++) {\n const j = pts.length - 1 - i\n const comp = pts[i].compareTo(pts[j])\n if (comp !== 0) return comp\n }\n return 1\n }\n\n static compare (pts1, pts2) {\n let i = 0\n while (i < pts1.length && i < pts2.length) {\n const compare = pts1[i].compareTo(pts2[i])\n if (compare !== 0) return compare\n i++\n }\n if (i < pts2.length) return -1\n if (i < pts1.length) return 1\n return 0\n }\n\n static minCoordinate (coordinates) {\n let minCoord = null\n for (let i = 0; i < coordinates.length; i++) {\n if (minCoord === null || minCoord.compareTo(coordinates[i]) > 0) {\n minCoord = coordinates[i]\n }\n }\n return minCoord\n }\n\n static extract (pts, start, end) {\n start = MathUtil.clamp(start, 0, pts.length)\n end = MathUtil.clamp(end, -1, pts.length)\n let npts = end - start + 1\n if (end < 0) npts = 0\n if (start >= pts.length) npts = 0\n if (end < start) npts = 0\n const extractPts = new Array(npts).fill(null)\n if (npts === 0) return extractPts\n let iPts = 0\n for (let i = start; i <= end; i++) {\n extractPts[iPts++] = pts[i]\n }\n return extractPts\n }\n\n getClass () {\n return CoordinateArrays\n }\n\n get interfaces_ () {\n return []\n }\n}\nclass ForwardComparator {\n constructor () {\n ForwardComparator.constructor_.apply(this, arguments)\n }\n\n compare (o1, o2) {\n const pts1 = o1\n const pts2 = o2\n return CoordinateArrays.compare(pts1, pts2)\n }\n\n getClass () {\n return ForwardComparator\n }\n\n get interfaces_ () {\n return [Comparator]\n }\n}\nForwardComparator.constructor_ = function () {}\nclass BidirectionalComparator {\n constructor () {\n BidirectionalComparator.constructor_.apply(this, arguments)\n }\n\n compare (o1, o2) {\n const pts1 = o1\n const pts2 = o2\n if (pts1.length < pts2.length) return -1\n if (pts1.length > pts2.length) return 1\n if (pts1.length === 0) return 0\n const forwardComp = CoordinateArrays.compare(pts1, pts2)\n const isEqualRev = CoordinateArrays.isEqualReversed(pts1, pts2)\n if (isEqualRev) return 0\n return forwardComp\n }\n\n OLDcompare (o1, o2) {\n const pts1 = o1\n const pts2 = o2\n if (pts1.length < pts2.length) return -1\n if (pts1.length > pts2.length) return 1\n if (pts1.length === 0) return 0\n const dir1 = CoordinateArrays.increasingDirection(pts1)\n const dir2 = CoordinateArrays.increasingDirection(pts2)\n let i1 = dir1 > 0 ? 0 : pts1.length - 1\n let i2 = dir2 > 0 ? 0 : pts1.length - 1\n for (let i = 0; i < pts1.length; i++) {\n const comparePt = pts1[i1].compareTo(pts2[i2])\n if (comparePt !== 0) return comparePt\n i1 += dir1\n i2 += dir2\n }\n return 0\n }\n\n getClass () {\n return BidirectionalComparator\n }\n\n get interfaces_ () {\n return [Comparator]\n }\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 * 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 * 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 * Returns the number of key-value mappings in this map.\n * @return {number}\n */\nMap.prototype.size = function () {}\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","/**\n * @param {string=} message Optional message\n * @extends {Error}\n * @constructor\n * @private\n */\nexport default function UnsupportedOperationException (message) {\n this.message = message || ''\n};\nUnsupportedOperationException.prototype = new Error()\n\n/**\n * @type {string}\n */\nUnsupportedOperationException.prototype.name = 'OperationNotSupported'\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 * 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 NoSuchElementException from './NoSuchElementException'\nimport UnsupportedOperationException from '../lang/UnsupportedOperationException'\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 * @override\n */\nHashSet.prototype.contains = function (o) {\n for (let i = 0, len = this.array_.length; i < len; i++) {\n const e = this.array_[i]\n if (e === o) {\n return true\n }\n }\n return false\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 * @override\n */\nHashSet.prototype.addAll = function (c) {\n for (let i = c.iterator(); i.hasNext();) {\n this.add(i.next())\n }\n return true\n}\n\n/**\n * @override\n */\nHashSet.prototype.remove = function (o) {\n throw new UnsupportedOperationException()\n}\n\n/**\n * @override\n */\nHashSet.prototype.size = function () {\n return this.array_.length\n}\n\n/**\n * @override\n */\nHashSet.prototype.isEmpty = function () {\n return this.array_.length === 0\n}\n\n/**\n * @override\n */\nHashSet.prototype.toArray = function () {\n const array = []\n\n for (let i = 0, len = this.array_.length; i < len; i++) {\n array.push(this.array_[i])\n }\n\n return array\n}\n\n/**\n * @override\n */\nHashSet.prototype.iterator = function () {\n return new Iterator_(this)\n}\n\n/**\n * @extends {Iterator}\n * @param {HashSet} hashSet\n * @constructor\n * @private\n */\nconst 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 * @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 * @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 * @override\n */\nIterator_.prototype.remove = function () {\n throw new UnsupportedOperationException()\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 * @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 * @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_; var parent; var 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 * @param {Object} x\n */\nTreeMap.prototype.fixAfterInsertion = function (x) {\n let y\n x.color = RED\n while (x != null && x !== this.root_ && x.parent.color === RED) {\n if (parentOf(x) === leftOf(parentOf(parentOf(x)))) {\n 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 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 * @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 * @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 * @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) { r.left.parent = p }\n r.parent = p.parent\n if (p.parent == null) { this.root_ = r } else if (p.parent.left === p) { p.parent.left = r } else { p.parent.right = r }\n r.left = p\n p.parent = r\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) { this.root_ = l } else if (p.parent.right === p) { p.parent.right = l } else p.parent.left = l\n l.right = p\n p.parent = l\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 * @param {Object} t\n * @return {Object}\n * @private\n */\nTreeMap.successor = function (t) {\n let p\n if (t === null) { return null } else if (t.right !== null) {\n p = t.right\n while (p.left !== null) {\n p = p.left\n }\n return p\n } else {\n 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 * @override\n */\nTreeMap.prototype.size = function () {\n return this.size_\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 constructor () {\n Lineal.constructor_.apply(this, arguments)\n }\n\n getClass () {\n return Lineal\n }\n\n get interfaces_ () {\n return []\n }\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 NoSuchElementException from './NoSuchElementException'\nimport UnsupportedOperationException from '../lang/UnsupportedOperationException'\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 * @override\n */\nTreeSet.prototype.contains = function (o) {\n for (let i = 0, len = this.array_.length; i < len; i++) {\n const e = this.array_[i]\n if (e.compareTo(o) === 0) {\n return true\n }\n }\n return false\n}\n\n/**\n * @override\n */\nTreeSet.prototype.add = function (o) {\n if (this.contains(o)) {\n return false\n }\n\n for (let i = 0, len = this.array_.length; i < len; i++) {\n const 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 * @override\n */\nTreeSet.prototype.addAll = function (c) {\n for (let i = c.iterator(); i.hasNext();) {\n this.add(i.next())\n }\n return true\n}\n\n/**\n * @override\n */\nTreeSet.prototype.remove = function (e) {\n throw new UnsupportedOperationException()\n}\n\n/**\n * @override\n */\nTreeSet.prototype.size = function () {\n return this.array_.length\n}\n\n/**\n * @override\n */\nTreeSet.prototype.isEmpty = function () {\n return this.array_.length === 0\n}\n\n/**\n * @override\n */\nTreeSet.prototype.toArray = function () {\n const array = []\n\n for (let i = 0, len = this.array_.length; i < len; i++) {\n array.push(this.array_[i])\n }\n\n return array\n}\n\n/**\n * @override\n */\nTreeSet.prototype.iterator = function () {\n return new Iterator_(this)\n}\n\n/**\n * @extends {javascript.util.Iterator}\n * @param {javascript.util.TreeSet} treeSet\n * @constructor\n * @private\n */\nconst 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 * @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 * @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 * @override\n */\nIterator_.prototype.remove = function () {\n throw new UnsupportedOperationException()\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 const a = arguments[0]; let i; let t; let comparator; let compare\n if (arguments.length === 1) {\n compare = function (a, b) {\n return a.compareTo(b)\n }\n a.sort(compare)\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 const 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 } 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 const 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 }\n}\n\n/**\n * @param {Array} array\n * @return {ArrayList}\n */\nArrays.asList = function (array) {\n const arrayList = new ArrayList()\n for (let 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 constructor () {\n Dimension.constructor_.apply(this, arguments)\n }\n\n static toDimensionSymbol (dimensionValue) {\n switch (dimensionValue) {\n case Dimension.FALSE:\n return Dimension.SYM_FALSE\n case Dimension.TRUE:\n return Dimension.SYM_TRUE\n case Dimension.DONTCARE:\n return Dimension.SYM_DONTCARE\n case Dimension.P:\n return Dimension.SYM_P\n case Dimension.L:\n return Dimension.SYM_L\n case Dimension.A:\n return Dimension.SYM_A\n }\n throw new IllegalArgumentException('Unknown dimension value: ' + dimensionValue)\n }\n\n static toDimensionValue (dimensionSymbol) {\n switch (Character.toUpperCase(dimensionSymbol)) {\n case Dimension.SYM_FALSE:\n return Dimension.FALSE\n case Dimension.SYM_TRUE:\n return Dimension.TRUE\n case Dimension.SYM_DONTCARE:\n return Dimension.DONTCARE\n case Dimension.SYM_P:\n return Dimension.P\n case Dimension.SYM_L:\n return Dimension.L\n case Dimension.SYM_A:\n return Dimension.A\n }\n throw new IllegalArgumentException('Unknown dimension symbol: ' + dimensionSymbol)\n }\n\n getClass () {\n return Dimension\n }\n\n get interfaces_ () {\n return []\n }\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 constructor () {\n GeometryFilter.constructor_.apply(this, arguments)\n }\n\n filter (geom) {}\n getClass () {\n return GeometryFilter\n }\n\n get interfaces_ () {\n return []\n }\n}\nGeometryFilter.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 constructor () {\n super()\n GeometryCollection.constructor_.apply(this, arguments)\n }\n\n computeEnvelopeInternal () {\n const envelope = new Envelope()\n for (let i = 0; i < this._geometries.length; i++) {\n envelope.expandToInclude(this._geometries[i].getEnvelopeInternal())\n }\n return envelope\n }\n\n getGeometryN (n) {\n return this._geometries[n]\n }\n\n getCoordinates () {\n const coordinates = new Array(this.getNumPoints()).fill(null)\n let k = -1\n for (let i = 0; i < this._geometries.length; i++) {\n const childCoordinates = this._geometries[i].getCoordinates()\n for (let j = 0; j < childCoordinates.length; j++) {\n k++\n coordinates[k] = childCoordinates[j]\n }\n }\n return coordinates\n }\n\n getArea () {\n let area = 0.0\n for (let i = 0; i < this._geometries.length; i++) {\n area += this._geometries[i].getArea()\n }\n return area\n }\n\n equalsExact () {\n if (arguments.length === 2 && (typeof arguments[1] === 'number' && arguments[0] instanceof Geometry)) {\n const other = arguments[0]; const tolerance = arguments[1]\n if (!this.isEquivalentClass(other)) {\n return false\n }\n const otherCollection = other\n if (this._geometries.length !== otherCollection._geometries.length) {\n return false\n }\n for (let i = 0; i < this._geometries.length; i++) {\n if (!this._geometries[i].equalsExact(otherCollection._geometries[i], tolerance)) {\n return false\n }\n }\n return true\n } else return super.equalsExact.apply(this, arguments)\n }\n\n normalize () {\n for (let i = 0; i < this._geometries.length; i++) {\n this._geometries[i].normalize()\n }\n Arrays.sort(this._geometries)\n }\n\n getCoordinate () {\n if (this.isEmpty()) return null\n return this._geometries[0].getCoordinate()\n }\n\n getBoundaryDimension () {\n let dimension = Dimension.FALSE\n for (let i = 0; i < this._geometries.length; i++) {\n dimension = Math.max(dimension, this._geometries[i].getBoundaryDimension())\n }\n return dimension\n }\n\n getTypeCode () {\n return Geometry.TYPECODE_GEOMETRYCOLLECTION\n }\n\n getDimension () {\n let dimension = Dimension.FALSE\n for (let i = 0; i < this._geometries.length; i++) {\n dimension = Math.max(dimension, this._geometries[i].getDimension())\n }\n return dimension\n }\n\n getLength () {\n let sum = 0.0\n for (let i = 0; i < this._geometries.length; i++) {\n sum += this._geometries[i].getLength()\n }\n return sum\n }\n\n getNumPoints () {\n let numPoints = 0\n for (let i = 0; i < this._geometries.length; i++) {\n numPoints += this._geometries[i].getNumPoints()\n }\n return numPoints\n }\n\n getNumGeometries () {\n return this._geometries.length\n }\n\n reverse () {\n const n = this._geometries.length\n const revGeoms = new Array(n).fill(null)\n for (let i = 0; i < this._geometries.length; i++) {\n revGeoms[i] = this._geometries[i].reverse()\n }\n return this.getFactory().createGeometryCollection(revGeoms)\n }\n\n compareToSameClass () {\n if (arguments.length === 1) {\n const o = arguments[0]\n const theseElements = new TreeSet(Arrays.asList(this._geometries))\n const otherElements = new TreeSet(Arrays.asList(o._geometries))\n return this.compare(theseElements, otherElements)\n } else if (arguments.length === 2) {\n const o = arguments[0]; const comp = arguments[1]\n const gc = o\n const n1 = this.getNumGeometries()\n const n2 = gc.getNumGeometries()\n let i = 0\n while (i < n1 && i < n2) {\n const thisGeom = this.getGeometryN(i)\n const otherGeom = gc.getGeometryN(i)\n const holeComp = thisGeom.compareToSameClass(otherGeom, comp)\n if (holeComp !== 0) return holeComp\n i++\n }\n if (i < n1) return 1\n if (i < n2) return -1\n return 0\n }\n }\n\n apply () {\n if (hasInterface(arguments[0], CoordinateFilter)) {\n const filter = arguments[0]\n for (let i = 0; i < this._geometries.length; i++) {\n this._geometries[i].apply(filter)\n }\n } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {\n const filter = arguments[0]\n if (this._geometries.length === 0) return null\n for (let i = 0; i < this._geometries.length; i++) {\n this._geometries[i].apply(filter)\n if (filter.isDone()) {\n break\n }\n }\n if (filter.isGeometryChanged()) this.geometryChanged()\n } else if (hasInterface(arguments[0], GeometryFilter)) {\n const filter = arguments[0]\n filter.filter(this)\n for (let i = 0; i < this._geometries.length; i++) {\n this._geometries[i].apply(filter)\n }\n } else if (hasInterface(arguments[0], GeometryComponentFilter)) {\n const filter = arguments[0]\n filter.filter(this)\n for (let i = 0; i < this._geometries.length; i++) {\n this._geometries[i].apply(filter)\n }\n }\n }\n\n getBoundary () {\n this.checkNotGeometryCollection(this)\n Assert.shouldNeverReachHere()\n return null\n }\n\n getGeometryType () {\n return Geometry.TYPENAME_GEOMETRYCOLLECTION\n }\n\n copy () {\n const geometries = new Array(this._geometries.length).fill(null)\n for (let i = 0; i < geometries.length; i++) {\n geometries[i] = this._geometries[i].copy()\n }\n return new GeometryCollection(geometries, this._factory)\n }\n\n isEmpty () {\n for (let i = 0; i < this._geometries.length; i++) {\n if (!this._geometries[i].isEmpty()) {\n return false\n }\n }\n return true\n }\n\n getClass () {\n return GeometryCollection\n }\n\n get interfaces_ () {\n return []\n }\n}\nGeometryCollection.constructor_ = function () {\n this._geometries = null\n if (arguments.length === 0) {} else if (arguments.length === 2) {\n let geometries = arguments[0]; const factory = arguments[1]\n Geometry.constructor_.call(this, factory)\n if (geometries === null) {\n geometries = []\n }\n if (Geometry.hasNullElements(geometries)) {\n throw new IllegalArgumentException('geometries must not contain null elements')\n }\n this._geometries = geometries\n }\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 constructor () {\n super()\n MultiLineString.constructor_.apply(this, arguments)\n }\n\n equalsExact () {\n if (arguments.length === 2 && (typeof arguments[1] === 'number' && arguments[0] instanceof Geometry)) {\n const other = arguments[0]; const tolerance = arguments[1]\n if (!this.isEquivalentClass(other)) {\n return false\n }\n return super.equalsExact.call(this, other, tolerance)\n } else return super.equalsExact.apply(this, arguments)\n }\n\n getBoundaryDimension () {\n if (this.isClosed()) {\n return Dimension.FALSE\n }\n return 0\n }\n\n isClosed () {\n if (this.isEmpty()) {\n return false\n }\n for (let i = 0; i < this._geometries.length; i++) {\n if (!this._geometries[i].isClosed()) {\n return false\n }\n }\n return true\n }\n\n getTypeCode () {\n return Geometry.TYPECODE_MULTILINESTRING\n }\n\n getDimension () {\n return 1\n }\n\n reverse () {\n const nLines = this._geometries.length\n const revLines = new Array(nLines).fill(null)\n for (let i = 0; i < this._geometries.length; i++) {\n revLines[nLines - 1 - i] = this._geometries[i].reverse()\n }\n return this.getFactory().createMultiLineString(revLines)\n }\n\n getBoundary () {\n return new BoundaryOp(this).getBoundary()\n }\n\n getGeometryType () {\n return Geometry.TYPENAME_MULTILINESTRING\n }\n\n copy () {\n const lineStrings = new Array(this._geometries.length).fill(null)\n for (let i = 0; i < lineStrings.length; i++) {\n lineStrings[i] = this._geometries[i].copy()\n }\n return new MultiLineString(lineStrings, this._factory)\n }\n\n getClass () {\n return MultiLineString\n }\n\n get interfaces_ () {\n return [Lineal]\n }\n}\nMultiLineString.constructor_ = function () {\n const lineStrings = arguments[0]; const factory = arguments[1]\n GeometryCollection.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 constructor () {\n BoundaryOp.constructor_.apply(this, arguments)\n }\n\n static getBoundary () {\n if (arguments.length === 1) {\n const g = arguments[0]\n const bop = new BoundaryOp(g)\n return bop.getBoundary()\n } else if (arguments.length === 2) {\n const g = arguments[0]; const bnRule = arguments[1]\n const bop = new BoundaryOp(g, bnRule)\n return bop.getBoundary()\n }\n }\n\n boundaryMultiLineString (mLine) {\n if (this._geom.isEmpty()) {\n return this.getEmptyMultiPoint()\n }\n const bdyPts = this.computeBoundaryCoordinates(mLine)\n if (bdyPts.length === 1) {\n return this._geomFact.createPoint(bdyPts[0])\n }\n return this._geomFact.createMultiPointFromCoords(bdyPts)\n }\n\n getBoundary () {\n if (this._geom instanceof LineString) return this.boundaryLineString(this._geom)\n if (this._geom instanceof MultiLineString) return this.boundaryMultiLineString(this._geom)\n return this._geom.getBoundary()\n }\n\n boundaryLineString (line) {\n if (this._geom.isEmpty()) {\n return this.getEmptyMultiPoint()\n }\n if (line.isClosed()) {\n const closedEndpointOnBoundary = this._bnRule.isInBoundary(2)\n if (closedEndpointOnBoundary) {\n return line.getStartPoint()\n } else {\n return this._geomFact.createMultiPoint()\n }\n }\n return this._geomFact.createMultiPoint([line.getStartPoint(), line.getEndPoint()])\n }\n\n getEmptyMultiPoint () {\n return this._geomFact.createMultiPoint()\n }\n\n computeBoundaryCoordinates (mLine) {\n const bdyPts = new ArrayList()\n this._endpointMap = new TreeMap()\n for (let i = 0; i < mLine.getNumGeometries(); i++) {\n const line = mLine.getGeometryN(i)\n if (line.getNumPoints() === 0) continue\n this.addEndpoint(line.getCoordinateN(0))\n this.addEndpoint(line.getCoordinateN(line.getNumPoints() - 1))\n }\n for (let it = this._endpointMap.entrySet().iterator(); it.hasNext();) {\n const entry = it.next()\n const counter = entry.getValue()\n const valence = counter.count\n if (this._bnRule.isInBoundary(valence)) {\n bdyPts.add(entry.getKey())\n }\n }\n return CoordinateArrays.toCoordinateArray(bdyPts)\n }\n\n addEndpoint (pt) {\n let counter = this._endpointMap.get(pt)\n if (counter === null) {\n counter = new Counter()\n this._endpointMap.put(pt, counter)\n }\n counter.count++\n }\n\n getClass () {\n return BoundaryOp\n }\n\n get interfaces_ () {\n return []\n }\n}\nBoundaryOp.constructor_ = function () {\n this._geom = null\n this._geomFact = null\n this._bnRule = null\n this._endpointMap = null\n if (arguments.length === 1) {\n const geom = arguments[0]\n BoundaryOp.constructor_.call(this, geom, BoundaryNodeRule.MOD2_BOUNDARY_RULE)\n } else if (arguments.length === 2) {\n const geom = arguments[0]; const bnRule = arguments[1]\n this._geom = geom\n this._geomFact = geom.getFactory()\n this._bnRule = bnRule\n }\n}\nclass Counter {\n constructor () {\n Counter.constructor_.apply(this, arguments)\n }\n\n getClass () {\n return Counter\n }\n\n get interfaces_ () {\n return []\n }\n}\nCounter.constructor_ = function () {\n this.count = null\n}\n","import Coordinate from '../geom/Coordinate'\nexport default class Length {\n constructor () {\n Length.constructor_.apply(this, arguments)\n }\n\n static ofLine (pts) {\n const n = pts.size()\n if (n <= 1) return 0.0\n let len = 0.0\n const p = new Coordinate()\n pts.getCoordinate(0, p)\n let x0 = p.x\n let y0 = p.y\n for (let i = 1; i < n; i++) {\n pts.getCoordinate(i, p)\n const x1 = p.x\n const y1 = p.y\n const dx = x1 - x0\n const dy = y1 - y0\n len += Math.sqrt(dx * dx + dy * dy)\n x0 = x1\n y0 = y1\n }\n return len\n }\n\n getClass () {\n return Length\n }\n\n get interfaces_ () {\n return []\n }\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 constructor () {\n StringUtil.constructor_.apply(this, arguments)\n }\n\n static chars (c, n) {\n const ch = new Array(n).fill(null)\n for (let i = 0; i < n; i++) {\n ch[i] = c\n }\n return new String(ch)\n }\n\n static getStackTrace () {\n if (arguments.length === 1) {\n const t = arguments[0]\n const os = new ByteArrayOutputStream()\n const ps = new PrintStream(os)\n t.printStackTrace(ps)\n return os.toString()\n } else if (arguments.length === 2) {\n const t = arguments[0]; const depth = arguments[1]\n let stackTrace = ''\n const stringReader = new StringReader(StringUtil.getStackTrace(t))\n const lineNumberReader = new LineNumberReader(stringReader)\n for (let i = 0; i < depth; i++) {\n try {\n stackTrace += lineNumberReader.readLine() + StringUtil.NEWLINE\n } catch (e) {\n if (e instanceof IOException) {\n Assert.shouldNeverReachHere()\n } else throw e\n } finally {}\n }\n return stackTrace\n }\n }\n\n static split (s, separator) {\n const separatorlen = separator.length\n const tokenList = new ArrayList()\n let tmpString = '' + s\n let pos = tmpString.indexOf(separator)\n while (pos >= 0) {\n const token = tmpString.substring(0, pos)\n tokenList.add(token)\n tmpString = tmpString.substring(pos + separatorlen)\n pos = tmpString.indexOf(separator)\n }\n if (tmpString.length > 0) tokenList.add(tmpString)\n const res = new Array(tokenList.size()).fill(null)\n for (let i = 0; i < res.length; i++) {\n res[i] = tokenList.get(i)\n }\n return res\n }\n\n static toString () {\n if (arguments.length === 1 && typeof arguments[0] === 'number') {\n const d = arguments[0]\n return StringUtil.SIMPLE_ORDINATE_FORMAT.format(d)\n }\n }\n\n static spaces (n) {\n return StringUtil.chars(' ', n)\n }\n\n getClass () {\n return StringUtil\n }\n\n get interfaces_ () {\n return []\n }\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\nStringBuilder.prototype.append = function (e) {\n this.str += e\n}\n\nStringBuilder.prototype.setCharAt = function (i, c) {\n this.str = this.str.substr(0, i) + c + this.str.substr(i + 1)\n}\n\nStringBuilder.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 constructor () {\n CoordinateSequences.constructor_.apply(this, arguments)\n }\n\n static copyCoord (src, srcPos, dest, destPos) {\n const minDim = Math.min(src.getDimension(), dest.getDimension())\n for (let dim = 0; dim < minDim; dim++) {\n dest.setOrdinate(destPos, dim, src.getOrdinate(srcPos, dim))\n }\n }\n\n static isRing (seq) {\n const n = seq.size()\n if (n === 0) return true\n if (n <= 3) return false\n return seq.getOrdinate(0, CoordinateSequence.X) === seq.getOrdinate(n - 1, CoordinateSequence.X) && seq.getOrdinate(0, CoordinateSequence.Y) === seq.getOrdinate(n - 1, CoordinateSequence.Y)\n }\n\n static isEqual (cs1, cs2) {\n const cs1Size = cs1.size()\n const cs2Size = cs2.size()\n if (cs1Size !== cs2Size) return false\n const dim = Math.min(cs1.getDimension(), cs2.getDimension())\n for (let i = 0; i < cs1Size; i++) {\n for (let d = 0; d < dim; d++) {\n const v1 = cs1.getOrdinate(i, d)\n const v2 = cs2.getOrdinate(i, d)\n if (cs1.getOrdinate(i, d) === cs2.getOrdinate(i, d)) continue\n if (Double.isNaN(v1) && Double.isNaN(v2)) continue\n return false\n }\n }\n return true\n }\n\n static extend (fact, seq, size) {\n const newseq = fact.create(size, seq.getDimension())\n const n = seq.size()\n CoordinateSequences.copy(seq, 0, newseq, 0, n)\n if (n > 0) {\n for (let i = n; i < size; i++) CoordinateSequences.copy(seq, n - 1, newseq, i, 1)\n }\n return newseq\n }\n\n static reverse (seq) {\n const last = seq.size() - 1\n const mid = Math.trunc(last / 2)\n for (let i = 0; i <= mid; i++) {\n CoordinateSequences.swap(seq, i, last - i)\n }\n }\n\n static swap (seq, i, j) {\n if (i === j) return null\n for (let dim = 0; dim < seq.getDimension(); dim++) {\n const tmp = seq.getOrdinate(i, dim)\n seq.setOrdinate(i, dim, seq.getOrdinate(j, dim))\n seq.setOrdinate(j, dim, tmp)\n }\n }\n\n static copy (src, srcPos, dest, destPos, length) {\n for (let i = 0; i < length; i++) {\n CoordinateSequences.copyCoord(src, srcPos + i, dest, destPos + i)\n }\n }\n\n static toString () {\n if (arguments.length === 1 && hasInterface(arguments[0], CoordinateSequence)) {\n const cs = arguments[0]\n const size = cs.size()\n if (size === 0) return '()'\n const dim = cs.getDimension()\n const builder = new StringBuilder()\n builder.append('(')\n for (let i = 0; i < size; i++) {\n if (i > 0) builder.append(' ')\n for (let d = 0; d < dim; d++) {\n if (d > 0) builder.append(',')\n builder.append(StringUtil.toString(cs.getOrdinate(i, d)))\n }\n }\n builder.append(')')\n return builder.toString()\n }\n }\n\n static ensureValidRing (fact, seq) {\n const n = seq.size()\n if (n === 0) return seq\n if (n <= 3) return CoordinateSequences.createClosedRing(fact, seq, 4)\n const isClosed = seq.getOrdinate(0, CoordinateSequence.X) === seq.getOrdinate(n - 1, CoordinateSequence.X) && seq.getOrdinate(0, CoordinateSequence.Y) === seq.getOrdinate(n - 1, CoordinateSequence.Y)\n if (isClosed) return seq\n return CoordinateSequences.createClosedRing(fact, seq, n + 1)\n }\n\n static createClosedRing (fact, seq, size) {\n const newseq = fact.create(size, seq.getDimension())\n const n = seq.size()\n CoordinateSequences.copy(seq, 0, newseq, 0, n)\n for (let i = n; i < size; i++) CoordinateSequences.copy(seq, 0, newseq, i, 1)\n return newseq\n }\n\n getClass () {\n return CoordinateSequences\n }\n\n get interfaces_ () {\n return []\n }\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 constructor () {\n super()\n LineString.constructor_.apply(this, arguments)\n }\n\n computeEnvelopeInternal () {\n if (this.isEmpty()) {\n return new Envelope()\n }\n return this._points.expandEnvelope(new Envelope())\n }\n\n isRing () {\n return this.isClosed() && this.isSimple()\n }\n\n getCoordinates () {\n return this._points.toCoordinateArray()\n }\n\n equalsExact () {\n if (arguments.length === 2 && (typeof arguments[1] === 'number' && arguments[0] instanceof Geometry)) {\n const other = arguments[0]; const tolerance = arguments[1]\n if (!this.isEquivalentClass(other)) {\n return false\n }\n const otherLineString = other\n if (this._points.size() !== otherLineString._points.size()) {\n return false\n }\n for (let i = 0; i < this._points.size(); i++) {\n if (!this.equal(this._points.getCoordinate(i), otherLineString._points.getCoordinate(i), tolerance)) {\n return false\n }\n }\n return true\n } else return super.equalsExact.apply(this, arguments)\n }\n\n normalize () {\n for (let i = 0; i < Math.trunc(this._points.size() / 2); i++) {\n const j = this._points.size() - 1 - i\n if (!this._points.getCoordinate(i).equals(this._points.getCoordinate(j))) {\n if (this._points.getCoordinate(i).compareTo(this._points.getCoordinate(j)) > 0) {\n const copy = this._points.copy()\n CoordinateSequences.reverse(copy)\n this._points = copy\n }\n return null\n }\n }\n }\n\n getCoordinate () {\n if (this.isEmpty()) return null\n return this._points.getCoordinate(0)\n }\n\n getBoundaryDimension () {\n if (this.isClosed()) {\n return Dimension.FALSE\n }\n return 0\n }\n\n isClosed () {\n if (this.isEmpty()) {\n return false\n }\n return this.getCoordinateN(0).equals2D(this.getCoordinateN(this.getNumPoints() - 1))\n }\n\n getEndPoint () {\n if (this.isEmpty()) {\n return null\n }\n return this.getPointN(this.getNumPoints() - 1)\n }\n\n getTypeCode () {\n return Geometry.TYPECODE_LINESTRING\n }\n\n getDimension () {\n return 1\n }\n\n getLength () {\n return Length.ofLine(this._points)\n }\n\n getNumPoints () {\n return this._points.size()\n }\n\n reverse () {\n const seq = this._points.copy()\n CoordinateSequences.reverse(seq)\n const revLine = this.getFactory().createLineString(seq)\n return revLine\n }\n\n compareToSameClass () {\n if (arguments.length === 1) {\n const o = arguments[0]\n const line = o\n let i = 0\n let j = 0\n while (i < this._points.size() && j < line._points.size()) {\n const comparison = this._points.getCoordinate(i).compareTo(line._points.getCoordinate(j))\n if (comparison !== 0) {\n return comparison\n }\n i++\n j++\n }\n if (i < this._points.size()) {\n return 1\n }\n if (j < line._points.size()) {\n return -1\n }\n return 0\n } else if (arguments.length === 2) {\n const o = arguments[0]; const comp = arguments[1]\n const line = o\n return comp.compare(this._points, line._points)\n }\n }\n\n apply () {\n if (hasInterface(arguments[0], CoordinateFilter)) {\n const filter = arguments[0]\n for (let i = 0; i < this._points.size(); i++) {\n filter.filter(this._points.getCoordinate(i))\n }\n } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {\n const filter = arguments[0]\n if (this._points.size() === 0) return null\n for (let i = 0; i < this._points.size(); i++) {\n filter.filter(this._points, i)\n if (filter.isDone()) break\n }\n if (filter.isGeometryChanged()) this.geometryChanged()\n } else if (hasInterface(arguments[0], GeometryFilter)) {\n const filter = arguments[0]\n filter.filter(this)\n } else if (hasInterface(arguments[0], GeometryComponentFilter)) {\n const filter = arguments[0]\n filter.filter(this)\n }\n }\n\n getBoundary () {\n return new BoundaryOp(this).getBoundary()\n }\n\n isEquivalentClass (other) {\n return other instanceof LineString\n }\n\n getCoordinateN (n) {\n return this._points.getCoordinate(n)\n }\n\n getGeometryType () {\n return Geometry.TYPENAME_LINESTRING\n }\n\n copy () {\n return new LineString(this._points.copy(), this._factory)\n }\n\n getCoordinateSequence () {\n return this._points\n }\n\n isEmpty () {\n return this._points.size() === 0\n }\n\n init (points) {\n if (points === null) {\n points = this.getFactory().getCoordinateSequenceFactory().create([])\n }\n if (points.size() === 1) {\n throw new IllegalArgumentException('Invalid number of points in LineString (found ' + points.size() + ' - must be 0 or >= 2)')\n }\n this._points = points\n }\n\n isCoordinate (pt) {\n for (let i = 0; i < this._points.size(); i++) {\n if (this._points.getCoordinate(i).equals(pt)) {\n return true\n }\n }\n return false\n }\n\n getStartPoint () {\n if (this.isEmpty()) {\n return null\n }\n return this.getPointN(0)\n }\n\n getPointN (n) {\n return this.getFactory().createPoint(this._points.getCoordinate(n))\n }\n\n getClass () {\n return LineString\n }\n\n get interfaces_ () {\n return [Lineal]\n }\n}\nLineString.constructor_ = function () {\n this._points = null\n if (arguments.length === 0) {} else if (arguments.length === 2) {\n const points = arguments[0]; const factory = arguments[1]\n Geometry.constructor_.call(this, factory)\n this.init(points)\n }\n}\nLineString.serialVersionUID = 3110669828065365560\n","export default class Puntal {\n constructor () {\n Puntal.constructor_.apply(this, arguments)\n }\n\n getClass () {\n return Puntal\n }\n\n get interfaces_ () {\n return []\n }\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 constructor () {\n super()\n Point.constructor_.apply(this, arguments)\n }\n\n computeEnvelopeInternal () {\n if (this.isEmpty()) {\n return new Envelope()\n }\n const env = new Envelope()\n env.expandToInclude(this._coordinates.getX(0), this._coordinates.getY(0))\n return env\n }\n\n getCoordinates () {\n return this.isEmpty() ? [] : [this.getCoordinate()]\n }\n\n equalsExact () {\n if (arguments.length === 2 && (typeof arguments[1] === 'number' && arguments[0] instanceof Geometry)) {\n const other = arguments[0]; const tolerance = arguments[1]\n if (!this.isEquivalentClass(other)) {\n return false\n }\n if (this.isEmpty() && other.isEmpty()) {\n return true\n }\n if (this.isEmpty() !== other.isEmpty()) {\n return false\n }\n return this.equal(other.getCoordinate(), this.getCoordinate(), tolerance)\n } else return super.equalsExact.apply(this, arguments)\n }\n\n normalize () {}\n getCoordinate () {\n return this._coordinates.size() !== 0 ? this._coordinates.getCoordinate(0) : null\n }\n\n getBoundaryDimension () {\n return Dimension.FALSE\n }\n\n getTypeCode () {\n return Geometry.TYPECODE_POINT\n }\n\n getDimension () {\n return 0\n }\n\n getNumPoints () {\n return this.isEmpty() ? 0 : 1\n }\n\n reverse () {\n return this.copy()\n }\n\n getX () {\n if (this.getCoordinate() === null) {\n throw new IllegalStateException('getX called on empty Point')\n }\n return this.getCoordinate().x\n }\n\n compareToSameClass () {\n if (arguments.length === 1) {\n const other = arguments[0]\n const point = other\n return this.getCoordinate().compareTo(point.getCoordinate())\n } else if (arguments.length === 2) {\n const other = arguments[0]; const comp = arguments[1]\n const point = other\n return comp.compare(this._coordinates, point._coordinates)\n }\n }\n\n apply () {\n if (hasInterface(arguments[0], CoordinateFilter)) {\n const filter = arguments[0]\n if (this.isEmpty()) {\n return null\n }\n filter.filter(this.getCoordinate())\n } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {\n const filter = arguments[0]\n if (this.isEmpty()) return null\n filter.filter(this._coordinates, 0)\n if (filter.isGeometryChanged()) this.geometryChanged()\n } else if (hasInterface(arguments[0], GeometryFilter)) {\n const filter = arguments[0]\n filter.filter(this)\n } else if (hasInterface(arguments[0], GeometryComponentFilter)) {\n const filter = arguments[0]\n filter.filter(this)\n }\n }\n\n getBoundary () {\n return this.getFactory().createGeometryCollection()\n }\n\n getGeometryType () {\n return Geometry.TYPENAME_POINT\n }\n\n copy () {\n return new Point(this._coordinates.copy(), this._factory)\n }\n\n getCoordinateSequence () {\n return this._coordinates\n }\n\n getY () {\n if (this.getCoordinate() === null) {\n throw new IllegalStateException('getY called on empty Point')\n }\n return this.getCoordinate().y\n }\n\n isEmpty () {\n return this._coordinates.size() === 0\n }\n\n init (coordinates) {\n if (coordinates === null) {\n coordinates = this.getFactory().getCoordinateSequenceFactory().create([])\n }\n Assert.isTrue(coordinates.size() <= 1)\n this._coordinates = coordinates\n }\n\n isSimple () {\n return true\n }\n\n getClass () {\n return Point\n }\n\n get interfaces_ () {\n return [Puntal]\n }\n}\nPoint.constructor_ = function () {\n this._coordinates = null\n const coordinates = arguments[0]; const factory = arguments[1]\n Geometry.constructor_.call(this, factory)\n this.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 constructor () {\n Area.constructor_.apply(this, arguments)\n }\n\n static ofRing () {\n if (arguments[0] instanceof Array) {\n const ring = arguments[0]\n return Math.abs(Area.ofRingSigned(ring))\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n const ring = arguments[0]\n return Math.abs(Area.ofRingSigned(ring))\n }\n }\n\n static ofRingSigned () {\n if (arguments[0] instanceof Array) {\n const ring = arguments[0]\n if (ring.length < 3) return 0.0\n let sum = 0.0\n const x0 = ring[0].x\n for (let i = 1; i < ring.length - 1; i++) {\n const x = ring[i].x - x0\n const y1 = ring[i + 1].y\n const y2 = ring[i - 1].y\n sum += x * (y2 - y1)\n }\n return sum / 2.0\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n const ring = arguments[0]\n const n = ring.size()\n if (n < 3) return 0.0\n const p0 = new Coordinate()\n const p1 = new Coordinate()\n const p2 = new Coordinate()\n ring.getCoordinate(0, p1)\n ring.getCoordinate(1, p2)\n const x0 = p1.x\n p2.x -= x0\n let sum = 0.0\n for (let i = 1; i < n - 1; i++) {\n p0.y = p1.y\n p1.x = p2.x\n p1.y = p2.y\n ring.getCoordinate(i + 1, p2)\n p2.x -= x0\n sum += p1.x * (p0.y - p2.y)\n }\n return sum / 2.0\n }\n }\n\n getClass () {\n return Area\n }\n\n get interfaces_ () {\n return []\n }\n}\nArea.constructor_ = function () {}\n","export default class Polygonal {\n constructor () {\n Polygonal.constructor_.apply(this, arguments)\n }\n\n getClass () {\n return Polygonal\n }\n\n get interfaces_ () {\n return []\n }\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 constructor () {\n super()\n Polygon.constructor_.apply(this, arguments)\n }\n\n computeEnvelopeInternal () {\n return this._shell.getEnvelopeInternal()\n }\n\n getCoordinates () {\n if (this.isEmpty()) {\n return []\n }\n const coordinates = new Array(this.getNumPoints()).fill(null)\n let k = -1\n const shellCoordinates = this._shell.getCoordinates()\n for (let x = 0; x < shellCoordinates.length; x++) {\n k++\n coordinates[k] = shellCoordinates[x]\n }\n for (let i = 0; i < this._holes.length; i++) {\n const childCoordinates = this._holes[i].getCoordinates()\n for (let j = 0; j < childCoordinates.length; j++) {\n k++\n coordinates[k] = childCoordinates[j]\n }\n }\n return coordinates\n }\n\n getArea () {\n let area = 0.0\n area += Area.ofRing(this._shell.getCoordinateSequence())\n for (let i = 0; i < this._holes.length; i++) {\n area -= Area.ofRing(this._holes[i].getCoordinateSequence())\n }\n return area\n }\n\n isRectangle () {\n if (this.getNumInteriorRing() !== 0) return false\n if (this._shell === null) return false\n if (this._shell.getNumPoints() !== 5) return false\n const seq = this._shell.getCoordinateSequence()\n const env = this.getEnvelopeInternal()\n for (let i = 0; i < 5; i++) {\n const x = seq.getX(i)\n if (!(x === env.getMinX() || x === env.getMaxX())) return false\n const y = seq.getY(i)\n if (!(y === env.getMinY() || y === env.getMaxY())) return false\n }\n let prevX = seq.getX(0)\n let prevY = seq.getY(0)\n for (let i = 1; i <= 4; i++) {\n const x = seq.getX(i)\n const y = seq.getY(i)\n const xChanged = x !== prevX\n const yChanged = y !== prevY\n if (xChanged === yChanged) return false\n prevX = x\n prevY = y\n }\n return true\n }\n\n equalsExact () {\n if (arguments.length === 2 && (typeof arguments[1] === 'number' && arguments[0] instanceof Geometry)) {\n const other = arguments[0]; const tolerance = arguments[1]\n if (!this.isEquivalentClass(other)) {\n return false\n }\n const otherPolygon = other\n const thisShell = this._shell\n const otherPolygonShell = otherPolygon._shell\n if (!thisShell.equalsExact(otherPolygonShell, tolerance)) {\n return false\n }\n if (this._holes.length !== otherPolygon._holes.length) {\n return false\n }\n for (let i = 0; i < this._holes.length; i++) {\n if (!this._holes[i].equalsExact(otherPolygon._holes[i], tolerance)) {\n return false\n }\n }\n return true\n } else return super.equalsExact.apply(this, arguments)\n }\n\n normalize () {\n if (arguments.length === 0) {\n this.normalize(this._shell, true)\n for (let i = 0; i < this._holes.length; i++) {\n this.normalize(this._holes[i], false)\n }\n Arrays.sort(this._holes)\n } else if (arguments.length === 2) {\n const ring = arguments[0]; const clockwise = arguments[1]\n if (ring.isEmpty()) {\n return null\n }\n const uniqueCoordinates = new Array(ring.getCoordinates().length - 1).fill(null)\n System.arraycopy(ring.getCoordinates(), 0, uniqueCoordinates, 0, uniqueCoordinates.length)\n const minCoordinate = CoordinateArrays.minCoordinate(ring.getCoordinates())\n CoordinateArrays.scroll(uniqueCoordinates, minCoordinate)\n System.arraycopy(uniqueCoordinates, 0, ring.getCoordinates(), 0, uniqueCoordinates.length)\n ring.getCoordinates()[uniqueCoordinates.length] = uniqueCoordinates[0]\n if (Orientation.isCCW(ring.getCoordinates()) === clockwise) {\n CoordinateArrays.reverse(ring.getCoordinates())\n }\n }\n }\n\n getCoordinate () {\n return this._shell.getCoordinate()\n }\n\n getNumInteriorRing () {\n return this._holes.length\n }\n\n getBoundaryDimension () {\n return 1\n }\n\n getTypeCode () {\n return Geometry.TYPECODE_POLYGON\n }\n\n getDimension () {\n return 2\n }\n\n getLength () {\n let len = 0.0\n len += this._shell.getLength()\n for (let i = 0; i < this._holes.length; i++) {\n len += this._holes[i].getLength()\n }\n return len\n }\n\n getNumPoints () {\n let numPoints = this._shell.getNumPoints()\n for (let i = 0; i < this._holes.length; i++) {\n numPoints += this._holes[i].getNumPoints()\n }\n return numPoints\n }\n\n reverse () {\n const poly = this.copy()\n poly._shell = this._shell.copy().reverse()\n poly._holes = new Array(this._holes.length).fill(null)\n for (let i = 0; i < this._holes.length; i++) {\n poly._holes[i] = this._holes[i].copy().reverse()\n }\n return poly\n }\n\n convexHull () {\n return this.getExteriorRing().convexHull()\n }\n\n compareToSameClass () {\n if (arguments.length === 1) {\n const o = arguments[0]\n const thisShell = this._shell\n const otherShell = o._shell\n return thisShell.compareToSameClass(otherShell)\n } else if (arguments.length === 2) {\n const o = arguments[0]; const comp = arguments[1]\n const poly = o\n const thisShell = this._shell\n const otherShell = poly._shell\n const shellComp = thisShell.compareToSameClass(otherShell, comp)\n if (shellComp !== 0) return shellComp\n const nHole1 = this.getNumInteriorRing()\n const nHole2 = poly.getNumInteriorRing()\n let i = 0\n while (i < nHole1 && i < nHole2) {\n const thisHole = this.getInteriorRingN(i)\n const otherHole = poly.getInteriorRingN(i)\n const holeComp = thisHole.compareToSameClass(otherHole, comp)\n if (holeComp !== 0) return holeComp\n i++\n }\n if (i < nHole1) return 1\n if (i < nHole2) return -1\n return 0\n }\n }\n\n apply () {\n if (hasInterface(arguments[0], CoordinateFilter)) {\n const filter = arguments[0]\n this._shell.apply(filter)\n for (let i = 0; i < this._holes.length; i++) {\n this._holes[i].apply(filter)\n }\n } else if (hasInterface(arguments[0], CoordinateSequenceFilter)) {\n const filter = arguments[0]\n this._shell.apply(filter)\n if (!filter.isDone()) {\n for (let i = 0; i < this._holes.length; i++) {\n this._holes[i].apply(filter)\n if (filter.isDone()) break\n }\n }\n if (filter.isGeometryChanged()) this.geometryChanged()\n } else if (hasInterface(arguments[0], GeometryFilter)) {\n const filter = arguments[0]\n filter.filter(this)\n } else if (hasInterface(arguments[0], GeometryComponentFilter)) {\n const filter = arguments[0]\n filter.filter(this)\n this._shell.apply(filter)\n for (let i = 0; i < this._holes.length; i++) {\n this._holes[i].apply(filter)\n }\n }\n }\n\n getBoundary () {\n if (this.isEmpty()) {\n return this.getFactory().createMultiLineString()\n }\n const rings = new Array(this._holes.length + 1).fill(null)\n rings[0] = this._shell\n for (let i = 0; i < this._holes.length; i++) {\n rings[i + 1] = this._holes[i]\n }\n if (rings.length <= 1) return this.getFactory().createLinearRing(rings[0].getCoordinateSequence())\n return this.getFactory().createMultiLineString(rings)\n }\n\n getGeometryType () {\n return Geometry.TYPENAME_POLYGON\n }\n\n copy () {\n const shellCopy = this._shell.copy()\n const holeCopies = new Array(this._holes.length).fill(null)\n for (let i = 0; i < this._holes.length; i++) {\n holeCopies[i] = this._holes[i].copy()\n }\n return new Polygon(shellCopy, holeCopies, this._factory)\n }\n\n getExteriorRing () {\n return this._shell\n }\n\n isEmpty () {\n return this._shell.isEmpty()\n }\n\n getInteriorRingN (n) {\n return this._holes[n]\n }\n\n getClass () {\n return Polygon\n }\n\n get interfaces_ () {\n return [Polygonal]\n }\n}\nPolygon.constructor_ = function () {\n this._shell = null\n this._holes = null\n let shell = arguments[0]; let holes = arguments[1]; const factory = arguments[2]\n Geometry.constructor_.call(this, factory)\n if (shell === null) {\n shell = this.getFactory().createLinearRing()\n }\n if (holes === null) {\n holes = []\n }\n if (Geometry.hasNullElements(holes)) {\n throw new IllegalArgumentException('holes must not contain null elements')\n }\n if (shell.isEmpty() && Geometry.hasNonEmptyElements(holes)) {\n throw new IllegalArgumentException('shell is empty but holes are not')\n }\n this._shell = shell\n this._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 constructor () {\n super()\n MultiPoint.constructor_.apply(this, arguments)\n }\n\n isValid () {\n return true\n }\n\n equalsExact () {\n if (arguments.length === 2 && (typeof arguments[1] === 'number' && arguments[0] instanceof Geometry)) {\n const other = arguments[0]; const tolerance = arguments[1]\n if (!this.isEquivalentClass(other)) {\n return false\n }\n return super.equalsExact.call(this, other, tolerance)\n } else return super.equalsExact.apply(this, arguments)\n }\n\n getCoordinate () {\n if (arguments.length === 1 && Number.isInteger(arguments[0])) {\n const n = arguments[0]\n return this._geometries[n].getCoordinate()\n } else return super.getCoordinate.apply(this, arguments)\n }\n\n getBoundaryDimension () {\n return Dimension.FALSE\n }\n\n getTypeCode () {\n return Geometry.TYPECODE_MULTIPOINT\n }\n\n getDimension () {\n return 0\n }\n\n getBoundary () {\n return this.getFactory().createGeometryCollection()\n }\n\n getGeometryType () {\n return Geometry.TYPENAME_MULTIPOINT\n }\n\n copy () {\n const points = new Array(this._geometries.length).fill(null)\n for (let i = 0; i < points.length; i++) {\n points[i] = this._geometries[i].copy()\n }\n return new MultiPoint(points, this._factory)\n }\n\n getClass () {\n return MultiPoint\n }\n\n get interfaces_ () {\n return [Puntal]\n }\n}\nMultiPoint.constructor_ = function () {\n const points = arguments[0]; const factory = arguments[1]\n GeometryCollection.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 constructor () {\n super()\n LinearRing.constructor_.apply(this, arguments)\n }\n\n getBoundaryDimension () {\n return Dimension.FALSE\n }\n\n isClosed () {\n if (this.isEmpty()) {\n return true\n }\n return super.isClosed.call(this)\n }\n\n getTypeCode () {\n return Geometry.TYPECODE_LINEARRING\n }\n\n reverse () {\n const seq = this._points.copy()\n CoordinateSequences.reverse(seq)\n const rev = this.getFactory().createLinearRing(seq)\n return rev\n }\n\n validateConstruction () {\n if (!this.isEmpty() && !super.isClosed.call(this)) {\n throw new IllegalArgumentException('Points of LinearRing do not form a closed linestring')\n }\n if (this.getCoordinateSequence().size() >= 1 && this.getCoordinateSequence().size() < LinearRing.MINIMUM_VALID_SIZE) {\n throw new IllegalArgumentException('Invalid number of points in LinearRing (found ' + this.getCoordinateSequence().size() + ' - must be 0 or >= 4)')\n }\n }\n\n getGeometryType () {\n return Geometry.TYPENAME_LINEARRING\n }\n\n copy () {\n return new LinearRing(this._points.copy(), this._factory)\n }\n\n getClass () {\n return LinearRing\n }\n\n get interfaces_ () {\n return []\n }\n}\nLinearRing.constructor_ = function () {\n if (arguments[0] instanceof Array && arguments[1] instanceof GeometryFactory) {\n const points = arguments[0]; const factory = arguments[1]\n LinearRing.constructor_.call(this, factory.getCoordinateSequenceFactory().create(points), factory)\n } else if (hasInterface(arguments[0], CoordinateSequence) && arguments[1] instanceof GeometryFactory) {\n const points = arguments[0]; const factory = arguments[1]\n LineString.constructor_.call(this, points, factory)\n this.validateConstruction()\n }\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 constructor () {\n super()\n MultiPolygon.constructor_.apply(this, arguments)\n }\n\n equalsExact () {\n if (arguments.length === 2 && (typeof arguments[1] === 'number' && arguments[0] instanceof Geometry)) {\n const other = arguments[0]; const tolerance = arguments[1]\n if (!this.isEquivalentClass(other)) {\n return false\n }\n return super.equalsExact.call(this, other, tolerance)\n } else return super.equalsExact.apply(this, arguments)\n }\n\n getBoundaryDimension () {\n return 1\n }\n\n getTypeCode () {\n return Geometry.TYPECODE_MULTIPOLYGON\n }\n\n getDimension () {\n return 2\n }\n\n reverse () {\n const n = this._geometries.length\n const revGeoms = new Array(n).fill(null)\n for (let i = 0; i < this._geometries.length; i++) {\n revGeoms[i] = this._geometries[i].reverse()\n }\n return this.getFactory().createMultiPolygon(revGeoms)\n }\n\n getBoundary () {\n if (this.isEmpty()) {\n return this.getFactory().createMultiLineString()\n }\n const allRings = new ArrayList()\n for (let i = 0; i < this._geometries.length; i++) {\n const polygon = this._geometries[i]\n const rings = polygon.getBoundary()\n for (let j = 0; j < rings.getNumGeometries(); j++) {\n allRings.add(rings.getGeometryN(j))\n }\n }\n const allRingsArray = new Array(allRings.size()).fill(null)\n return this.getFactory().createMultiLineString(allRings.toArray(allRingsArray))\n }\n\n getGeometryType () {\n return Geometry.TYPENAME_MULTIPOLYGON\n }\n\n copy () {\n const polygons = new Array(this._geometries.length).fill(null)\n for (let i = 0; i < polygons.length; i++) {\n polygons[i] = this._geometries[i].copy()\n }\n return new MultiPolygon(polygons, this._factory)\n }\n\n getClass () {\n return MultiPolygon\n }\n\n get interfaces_ () {\n return [Polygonal]\n }\n}\nMultiPolygon.constructor_ = function () {\n const polygons = arguments[0]; const factory = arguments[1]\n GeometryCollection.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 constructor () {\n GeometryEditor.constructor_.apply(this, arguments)\n }\n\n setCopyUserData (isUserDataCopied) {\n this._isUserDataCopied = isUserDataCopied\n }\n\n edit (geometry, operation) {\n if (geometry === null) return null\n const result = this.editInternal(geometry, operation)\n if (this._isUserDataCopied) {\n result.setUserData(geometry.getUserData())\n }\n return result\n }\n\n editInternal (geometry, operation) {\n if (this._factory === null) this._factory = geometry.getFactory()\n if (geometry instanceof GeometryCollection) {\n return this.editGeometryCollection(geometry, operation)\n }\n if (geometry instanceof Polygon) {\n return this.editPolygon(geometry, operation)\n }\n if (geometry instanceof Point) {\n return operation.edit(geometry, this._factory)\n }\n if (geometry instanceof LineString) {\n return operation.edit(geometry, this._factory)\n }\n Assert.shouldNeverReachHere('Unsupported Geometry class: ' + geometry.getClass().getName())\n return null\n }\n\n editGeometryCollection (collection, operation) {\n const collectionForType = operation.edit(collection, this._factory)\n const geometries = new ArrayList()\n for (let i = 0; i < collectionForType.getNumGeometries(); i++) {\n const geometry = this.edit(collectionForType.getGeometryN(i), operation)\n if (geometry === null || geometry.isEmpty()) {\n continue\n }\n geometries.add(geometry)\n }\n if (collectionForType.getClass() === MultiPoint) {\n return this._factory.createMultiPoint(geometries.toArray([]))\n }\n if (collectionForType.getClass() === MultiLineString) {\n return this._factory.createMultiLineString(geometries.toArray([]))\n }\n if (collectionForType.getClass() === MultiPolygon) {\n return this._factory.createMultiPolygon(geometries.toArray([]))\n }\n return this._factory.createGeometryCollection(geometries.toArray([]))\n }\n\n editPolygon (polygon, operation) {\n let newPolygon = operation.edit(polygon, this._factory)\n if (newPolygon === null) newPolygon = this._factory.createPolygon()\n if (newPolygon.isEmpty()) {\n return newPolygon\n }\n const shell = this.edit(newPolygon.getExteriorRing(), operation)\n if (shell === null || shell.isEmpty()) {\n return this._factory.createPolygon()\n }\n const holes = new ArrayList()\n for (let i = 0; i < newPolygon.getNumInteriorRing(); i++) {\n const hole = this.edit(newPolygon.getInteriorRingN(i), operation)\n if (hole === null || hole.isEmpty()) {\n continue\n }\n holes.add(hole)\n }\n return this._factory.createPolygon(shell, holes.toArray([]))\n }\n\n getClass () {\n return GeometryEditor\n }\n\n get interfaces_ () {\n return []\n }\n}\nfunction GeometryEditorOperation () {}\nGeometryEditor.GeometryEditorOperation = GeometryEditorOperation\nclass NoOpGeometryOperation {\n constructor () {\n NoOpGeometryOperation.constructor_.apply(this, arguments)\n }\n\n edit (geometry, factory) {\n return geometry\n }\n\n getClass () {\n return NoOpGeometryOperation\n }\n\n get interfaces_ () {\n return [GeometryEditorOperation]\n }\n}\nNoOpGeometryOperation.constructor_ = function () {}\nclass CoordinateOperation {\n constructor () {\n CoordinateOperation.constructor_.apply(this, arguments)\n }\n\n edit (geometry, factory) {\n const coordinates = this.edit(geometry.getCoordinates(), geometry)\n if (geometry instanceof LinearRing) {\n if (coordinates === null) return factory.createLinearRing(); else return factory.createLinearRing(coordinates)\n }\n if (geometry instanceof LineString) {\n if (coordinates === null) return factory.createLineString(); else return factory.createLineString(coordinates)\n }\n if (geometry instanceof Point) {\n if (coordinates === null || coordinates.length === 0) return factory.createPoint(); else return factory.createPoint(coordinates[0])\n }\n return geometry\n }\n\n getClass () {\n return CoordinateOperation\n }\n\n get interfaces_ () {\n return [GeometryEditorOperation]\n }\n}\nCoordinateOperation.constructor_ = function () {}\nclass CoordinateSequenceOperation {\n constructor () {\n CoordinateSequenceOperation.constructor_.apply(this, arguments)\n }\n\n edit (geometry, factory) {\n if (geometry instanceof LinearRing) {\n return factory.createLinearRing(this.edit(geometry.getCoordinateSequence(), geometry))\n }\n if (geometry instanceof LineString) {\n return factory.createLineString(this.edit(geometry.getCoordinateSequence(), geometry))\n }\n if (geometry instanceof Point) {\n return factory.createPoint(this.edit(geometry.getCoordinateSequence(), geometry))\n }\n return geometry\n }\n\n getClass () {\n return CoordinateSequenceOperation\n }\n\n get interfaces_ () {\n return [GeometryEditorOperation]\n }\n}\nCoordinateSequenceOperation.constructor_ = function () {}\nGeometryEditor.NoOpGeometryOperation = NoOpGeometryOperation\nGeometryEditor.CoordinateOperation = CoordinateOperation\nGeometryEditor.CoordinateSequenceOperation = CoordinateSequenceOperation\nGeometryEditor.constructor_ = function () {\n this._factory = null\n this._isUserDataCopied = false\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n const factory = arguments[0]\n this._factory = factory\n }\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 constructor () {\n CoordinateArraySequence.constructor_.apply(this, arguments)\n }\n\n setOrdinate (index, ordinateIndex, value) {\n switch (ordinateIndex) {\n case CoordinateSequence.X:\n this._coordinates[index].x = value\n break\n case CoordinateSequence.Y:\n this._coordinates[index].y = value\n break\n case CoordinateSequence.Z:\n this._coordinates[index].z = value\n break\n default:\n throw new IllegalArgumentException('invalid ordinateIndex')\n }\n }\n\n size () {\n return this._coordinates.length\n }\n\n getOrdinate (index, ordinateIndex) {\n switch (ordinateIndex) {\n case CoordinateSequence.X:\n return this._coordinates[index].x\n case CoordinateSequence.Y:\n return this._coordinates[index].y\n case CoordinateSequence.Z:\n return this._coordinates[index].z\n }\n return Double.NaN\n }\n\n getCoordinate () {\n if (arguments.length === 1) {\n const i = arguments[0]\n return this._coordinates[i]\n } else if (arguments.length === 2) {\n const index = arguments[0]; const coord = arguments[1]\n coord.x = this._coordinates[index].x\n coord.y = this._coordinates[index].y\n coord.z = this._coordinates[index].z\n }\n }\n\n getCoordinateCopy (i) {\n return new Coordinate(this._coordinates[i])\n }\n\n getDimension () {\n return this._dimension\n }\n\n getX (index) {\n return this._coordinates[index].x\n }\n\n expandEnvelope (env) {\n for (let i = 0; i < this._coordinates.length; i++) {\n env.expandToInclude(this._coordinates[i])\n }\n return env\n }\n\n copy () {\n const cloneCoordinates = new Array(this.size()).fill(null)\n for (let i = 0; i < this._coordinates.length; i++) {\n cloneCoordinates[i] = this._coordinates[i].copy()\n }\n return new CoordinateArraySequence(cloneCoordinates, this._dimension)\n }\n\n toString () {\n if (this._coordinates.length > 0) {\n const strBuilder = new StringBuilder(17 * this._coordinates.length)\n strBuilder.append('(')\n strBuilder.append(this._coordinates[0])\n for (let i = 1; i < this._coordinates.length; i++) {\n strBuilder.append(', ')\n strBuilder.append(this._coordinates[i])\n }\n strBuilder.append(')')\n return strBuilder.toString()\n } else {\n return '()'\n }\n }\n\n getY (index) {\n return this._coordinates[index].y\n }\n\n toCoordinateArray () {\n return this._coordinates\n }\n\n getClass () {\n return CoordinateArraySequence\n }\n\n get interfaces_ () {\n return [CoordinateSequence, Serializable]\n }\n}\nCoordinateArraySequence.constructor_ = function () {\n this._dimension = 3\n this._coordinates = null\n if (arguments.length === 1) {\n if (arguments[0] instanceof Array) {\n const coordinates = arguments[0]\n CoordinateArraySequence.constructor_.call(this, coordinates, 3)\n } else if (Number.isInteger(arguments[0])) {\n const size = arguments[0]\n this._coordinates = new Array(size).fill(null)\n for (let i = 0; i < size; i++) {\n this._coordinates[i] = new Coordinate()\n }\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n const coordSeq = arguments[0]\n if (coordSeq === null) {\n this._coordinates = new Array(0).fill(null)\n return null\n }\n this._dimension = coordSeq.getDimension()\n this._coordinates = new Array(coordSeq.size()).fill(null)\n for (let i = 0; i < this._coordinates.length; i++) {\n this._coordinates[i] = coordSeq.getCoordinateCopy(i)\n }\n }\n } else if (arguments.length === 2) {\n if (arguments[0] instanceof Array && Number.isInteger(arguments[1])) {\n const coordinates = arguments[0]; const dimension = arguments[1]\n this._coordinates = coordinates\n this._dimension = dimension\n if (coordinates === null) this._coordinates = new Array(0).fill(null)\n } else if (Number.isInteger(arguments[0]) && Number.isInteger(arguments[1])) {\n const size = arguments[0]; const dimension = arguments[1]\n this._coordinates = new Array(size).fill(null)\n this._dimension = dimension\n for (let i = 0; i < size; i++) {\n this._coordinates[i] = new Coordinate()\n }\n }\n }\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 constructor () {\n CoordinateArraySequenceFactory.constructor_.apply(this, arguments)\n }\n\n static instance () {\n return CoordinateArraySequenceFactory.instanceObject\n }\n\n readResolve () {\n return CoordinateArraySequenceFactory.instance()\n }\n\n create () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof Array) {\n const coordinates = arguments[0]\n return new CoordinateArraySequence(coordinates)\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n const coordSeq = arguments[0]\n return new CoordinateArraySequence(coordSeq)\n }\n } else if (arguments.length === 2) {\n const size = arguments[0]; let dimension = arguments[1]\n if (dimension > 3) dimension = 3\n if (dimension < 2) return new CoordinateArraySequence(size)\n return new CoordinateArraySequence(size, dimension)\n }\n }\n\n getClass () {\n return CoordinateArraySequenceFactory\n }\n\n get interfaces_ () {\n return [CoordinateSequenceFactory, Serializable]\n }\n}\nCoordinateArraySequenceFactory.constructor_ = function () {}\nCoordinateArraySequenceFactory.serialVersionUID = -4099577099607551657\nCoordinateArraySequenceFactory.instanceObject = new CoordinateArraySequenceFactory()\n","import ArrayList from './ArrayList'\nimport MapInterface from './Map'\nimport HashSet from './HashSet'\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 Map()\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 constructor () {\n PrecisionModel.constructor_.apply(this, arguments)\n }\n\n static mostPrecise (pm1, pm2) {\n if (pm1.compareTo(pm2) >= 0) return pm1\n return pm2\n }\n\n equals (other) {\n if (!(other instanceof PrecisionModel)) {\n return false\n }\n const otherPrecisionModel = other\n return this._modelType === otherPrecisionModel._modelType && this._scale === otherPrecisionModel._scale\n }\n\n compareTo (o) {\n const other = o\n const sigDigits = this.getMaximumSignificantDigits()\n const otherSigDigits = other.getMaximumSignificantDigits()\n return new Integer(sigDigits).compareTo(new Integer(otherSigDigits))\n }\n\n getScale () {\n return this._scale\n }\n\n isFloating () {\n return this._modelType === PrecisionModel.FLOATING || this._modelType === PrecisionModel.FLOATING_SINGLE\n }\n\n getType () {\n return this._modelType\n }\n\n toString () {\n let description = 'UNKNOWN'\n if (this._modelType === PrecisionModel.FLOATING) {\n description = 'Floating'\n } else if (this._modelType === PrecisionModel.FLOATING_SINGLE) {\n description = 'Floating-Single'\n } else if (this._modelType === PrecisionModel.FIXED) {\n description = 'Fixed (Scale=' + this.getScale() + ')'\n }\n return description\n }\n\n makePrecise () {\n if (typeof arguments[0] === 'number') {\n const val = arguments[0]\n if (Double.isNaN(val)) return val\n if (this._modelType === PrecisionModel.FLOATING_SINGLE) {\n const floatSingleVal = val\n return floatSingleVal\n }\n if (this._modelType === PrecisionModel.FIXED) {\n return Math.round(val * this._scale) / this._scale\n }\n return val\n } else if (arguments[0] instanceof Coordinate) {\n const coord = arguments[0]\n if (this._modelType === PrecisionModel.FLOATING) return null\n coord.x = this.makePrecise(coord.x)\n coord.y = this.makePrecise(coord.y)\n }\n }\n\n getMaximumSignificantDigits () {\n let maxSigDigits = 16\n if (this._modelType === PrecisionModel.FLOATING) {\n maxSigDigits = 16\n } else if (this._modelType === PrecisionModel.FLOATING_SINGLE) {\n maxSigDigits = 6\n } else if (this._modelType === PrecisionModel.FIXED) {\n maxSigDigits = 1 + Math.trunc(Math.ceil(Math.log(this.getScale()) / Math.log(10)))\n }\n return maxSigDigits\n }\n\n setScale (scale) {\n this._scale = Math.abs(scale)\n }\n\n getClass () {\n return PrecisionModel\n }\n\n get interfaces_ () {\n return [Serializable, Comparable]\n }\n}\nclass Type {\n constructor () {\n Type.constructor_.apply(this, arguments)\n }\n\n readResolve () {\n return Type.nameToTypeMap.get(this._name)\n }\n\n toString () {\n return this._name\n }\n\n getClass () {\n return Type\n }\n\n get interfaces_ () {\n return [Serializable]\n }\n}\nType.constructor_ = function () {\n this._name = null\n const name = arguments[0]\n this._name = name\n Type.nameToTypeMap.put(name, this)\n}\nType.serialVersionUID = -5528602631731589822\nType.nameToTypeMap = new HashMap()\nPrecisionModel.Type = Type\nPrecisionModel.constructor_ = function () {\n this._modelType = null\n this._scale = null\n if (arguments.length === 0) {\n this._modelType = PrecisionModel.FLOATING\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof Type) {\n const modelType = arguments[0]\n this._modelType = modelType\n if (modelType === PrecisionModel.FIXED) {\n this.setScale(1.0)\n }\n } else if (typeof arguments[0] === 'number') {\n const scale = arguments[0]\n this._modelType = PrecisionModel.FIXED\n this.setScale(scale)\n } else if (arguments[0] instanceof PrecisionModel) {\n const pm = arguments[0]\n this._modelType = pm._modelType\n this._scale = pm._scale\n }\n }\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 constructor () {\n GeometryFactory.constructor_.apply(this, arguments)\n }\n\n static toMultiPolygonArray (multiPolygons) {\n const multiPolygonArray = new Array(multiPolygons.size()).fill(null)\n return multiPolygons.toArray(multiPolygonArray)\n }\n\n static toGeometryArray (geometries) {\n if (geometries === null) return null\n const geometryArray = new Array(geometries.size()).fill(null)\n return geometries.toArray(geometryArray)\n }\n\n static getDefaultCoordinateSequenceFactory () {\n return CoordinateArraySequenceFactory.instance()\n }\n\n static toMultiLineStringArray (multiLineStrings) {\n const multiLineStringArray = new Array(multiLineStrings.size()).fill(null)\n return multiLineStrings.toArray(multiLineStringArray)\n }\n\n static toLineStringArray (lineStrings) {\n const lineStringArray = new Array(lineStrings.size()).fill(null)\n return lineStrings.toArray(lineStringArray)\n }\n\n static toMultiPointArray (multiPoints) {\n const multiPointArray = new Array(multiPoints.size()).fill(null)\n return multiPoints.toArray(multiPointArray)\n }\n\n static toLinearRingArray (linearRings) {\n const linearRingArray = new Array(linearRings.size()).fill(null)\n return linearRings.toArray(linearRingArray)\n }\n\n static toPointArray (points) {\n const pointArray = new Array(points.size()).fill(null)\n return points.toArray(pointArray)\n }\n\n static toPolygonArray (polygons) {\n const polygonArray = new Array(polygons.size()).fill(null)\n return polygons.toArray(polygonArray)\n }\n\n static createPointFromInternalCoord (coord, exemplar) {\n exemplar.getPrecisionModel().makePrecise(coord)\n return exemplar.getFactory().createPoint(coord)\n }\n\n toGeometry (envelope) {\n if (envelope.isNull()) {\n return this.createPoint()\n }\n if (envelope.getMinX() === envelope.getMaxX() && envelope.getMinY() === envelope.getMaxY()) {\n return this.createPoint(new Coordinate(envelope.getMinX(), envelope.getMinY()))\n }\n if (envelope.getMinX() === envelope.getMaxX() || envelope.getMinY() === envelope.getMaxY()) {\n return this.createLineString([new Coordinate(envelope.getMinX(), envelope.getMinY()), new Coordinate(envelope.getMaxX(), envelope.getMaxY())])\n }\n return 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 }\n\n createLineString () {\n if (arguments.length === 0) {\n return this.createLineString(this.getCoordinateSequenceFactory().create([]))\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof Array) {\n const coordinates = arguments[0]\n return this.createLineString(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null)\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n const coordinates = arguments[0]\n return new LineString(coordinates, this)\n }\n }\n }\n\n createMultiLineString () {\n if (arguments.length === 0) {\n return new MultiLineString(null, this)\n } else if (arguments.length === 1) {\n const lineStrings = arguments[0]\n return new MultiLineString(lineStrings, this)\n }\n }\n\n buildGeometry (geomList) {\n let geomClass = null\n let isHeterogeneous = false\n let hasGeometryCollection = false\n for (let i = geomList.iterator(); i.hasNext();) {\n const geom = i.next()\n const partClass = geom.getClass()\n if (geomClass === null) {\n geomClass = partClass\n }\n if (partClass !== geomClass) {\n isHeterogeneous = true\n }\n if (geom instanceof GeometryCollection) hasGeometryCollection = true\n }\n if (geomClass === null) {\n return this.createGeometryCollection()\n }\n if (isHeterogeneous || hasGeometryCollection) {\n return this.createGeometryCollection(GeometryFactory.toGeometryArray(geomList))\n }\n const geom0 = geomList.iterator().next()\n const isCollection = geomList.size() > 1\n if (isCollection) {\n if (geom0 instanceof Polygon) {\n return this.createMultiPolygon(GeometryFactory.toPolygonArray(geomList))\n } else if (geom0 instanceof LineString) {\n return this.createMultiLineString(GeometryFactory.toLineStringArray(geomList))\n } else if (geom0 instanceof Point) {\n return this.createMultiPoint(GeometryFactory.toPointArray(geomList))\n }\n Assert.shouldNeverReachHere('Unhandled class: ' + geom0.getClass().getName())\n }\n return geom0\n }\n\n createMultiPointFromCoords (coordinates) {\n return this.createMultiPoint(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null)\n }\n\n createPoint () {\n if (arguments.length === 0) {\n return this.createPoint(this.getCoordinateSequenceFactory().create([]))\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof Coordinate) {\n const coordinate = arguments[0]\n return this.createPoint(coordinate !== null ? this.getCoordinateSequenceFactory().create([coordinate]) : null)\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n const coordinates = arguments[0]\n return new Point(coordinates, this)\n }\n }\n }\n\n getCoordinateSequenceFactory () {\n return this._coordinateSequenceFactory\n }\n\n createPolygon () {\n if (arguments.length === 0) {\n return this.createPolygon(null, null)\n } else if (arguments.length === 1) {\n if (hasInterface(arguments[0], CoordinateSequence)) {\n const shell = arguments[0]\n return this.createPolygon(this.createLinearRing(shell))\n } else if (arguments[0] instanceof Array) {\n const shell = arguments[0]\n return this.createPolygon(this.createLinearRing(shell))\n } else if (arguments[0] instanceof LinearRing) {\n const shell = arguments[0]\n return this.createPolygon(shell, null)\n }\n } else if (arguments.length === 2) {\n const shell = arguments[0]; const holes = arguments[1]\n return new Polygon(shell, holes, this)\n }\n }\n\n getSRID () {\n return this._SRID\n }\n\n createGeometryCollection () {\n if (arguments.length === 0) {\n return new GeometryCollection(null, this)\n } else if (arguments.length === 1) {\n const geometries = arguments[0]\n return new GeometryCollection(geometries, this)\n }\n }\n\n createGeometry (g) {\n const editor = new GeometryEditor(this)\n return editor.edit(g, new CloneOp(this._coordinateSequenceFactory))\n }\n\n getPrecisionModel () {\n return this._precisionModel\n }\n\n createLinearRing () {\n if (arguments.length === 0) {\n return this.createLinearRing(this.getCoordinateSequenceFactory().create([]))\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof Array) {\n const coordinates = arguments[0]\n return this.createLinearRing(coordinates !== null ? this.getCoordinateSequenceFactory().create(coordinates) : null)\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n const coordinates = arguments[0]\n return new LinearRing(coordinates, this)\n }\n }\n }\n\n createMultiPolygon () {\n if (arguments.length === 0) {\n return new MultiPolygon(null, this)\n } else if (arguments.length === 1) {\n const polygons = arguments[0]\n return new MultiPolygon(polygons, this)\n }\n }\n\n createMultiPoint () {\n if (arguments.length === 0) {\n return new MultiPoint(null, this)\n } else if (arguments.length === 1) {\n if (arguments[0] instanceof Array) {\n const point = arguments[0]\n return new MultiPoint(point, this)\n } else if (hasInterface(arguments[0], CoordinateSequence)) {\n const coordinates = arguments[0]\n if (coordinates === null) {\n return this.createMultiPoint(new Array(0).fill(null))\n }\n const points = new Array(coordinates.size()).fill(null)\n for (let i = 0; i < coordinates.size(); i++) {\n const ptSeq = this.getCoordinateSequenceFactory().create(1, coordinates.getDimension())\n CoordinateSequences.copy(coordinates, i, ptSeq, 0, 1)\n points[i] = this.createPoint(ptSeq)\n }\n return this.createMultiPoint(points)\n }\n }\n }\n\n getClass () {\n return GeometryFactory\n }\n\n get interfaces_ () {\n return [Serializable]\n }\n}\nclass CloneOp extends GeometryEditor.CoordinateSequenceOperation {\n constructor () {\n super()\n CloneOp.constructor_.apply(this, arguments)\n }\n\n edit () {\n if (arguments.length === 2 && (arguments[1] instanceof Geometry && hasInterface(arguments[0], CoordinateSequence))) {\n const coordSeq = arguments[0]; const geometry = arguments[1]\n return this.coordinateSequenceFactory.create(coordSeq)\n } else return super.edit.apply(this, arguments)\n }\n\n getClass () {\n return CloneOp\n }\n\n get interfaces_ () {\n return []\n }\n}\nCloneOp.constructor_ = function () {\n this.coordinateSequenceFactory = null\n const coordinateSequenceFactory = arguments[0]\n this.coordinateSequenceFactory = coordinateSequenceFactory\n}\nGeometryFactory.CloneOp = CloneOp\nGeometryFactory.constructor_ = function () {\n this._precisionModel = null\n this._coordinateSequenceFactory = null\n this._SRID = null\n if (arguments.length === 0) {\n GeometryFactory.constructor_.call(this, new PrecisionModel(), 0)\n } else if (arguments.length === 1) {\n if (hasInterface(arguments[0], CoordinateSequenceFactory)) {\n const coordinateSequenceFactory = arguments[0]\n GeometryFactory.constructor_.call(this, new PrecisionModel(), 0, coordinateSequenceFactory)\n } else if (arguments[0] instanceof PrecisionModel) {\n const precisionModel = arguments[0]\n GeometryFactory.constructor_.call(this, precisionModel, 0, GeometryFactory.getDefaultCoordinateSequenceFactory())\n }\n } else if (arguments.length === 2) {\n const precisionModel = arguments[0]; const SRID = arguments[1]\n GeometryFactory.constructor_.call(this, precisionModel, SRID, GeometryFactory.getDefaultCoordinateSequenceFactory())\n } else if (arguments.length === 3) {\n const precisionModel = arguments[0]; const SRID = arguments[1]; const coordinateSequenceFactory = arguments[2]\n this._precisionModel = precisionModel\n this._coordinateSequenceFactory = coordinateSequenceFactory\n this._SRID = SRID\n }\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 this.precisionModel.makePrecise(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) { 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) { 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 /**\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 const 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","/**\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 /**\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}\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 constructor () {\n ScaledNoder.constructor_.apply(this, arguments)\n }\n\n rescale () {\n if (hasInterface(arguments[0], Collection)) {\n const segStrings = arguments[0]\n for (let i = segStrings.iterator(); i.hasNext();) {\n const ss = i.next()\n this.rescale(ss.getCoordinates())\n }\n } else if (arguments[0] instanceof Array) {\n const pts = arguments[0]\n let p0 = null\n let p1 = null\n if (pts.length === 2) {\n p0 = new Coordinate(pts[0])\n p1 = new Coordinate(pts[1])\n }\n for (let i = 0; i < pts.length; i++) {\n pts[i].x = pts[i].x / this._scaleFactor + this._offsetX\n pts[i].y = pts[i].y / this._scaleFactor + this._offsetY\n }\n if (pts.length === 2 && pts[0].equals2D(pts[1])) {\n System.out.println(pts)\n }\n }\n }\n\n scale () {\n if (hasInterface(arguments[0], Collection)) {\n const segStrings = arguments[0]\n const nodedSegmentStrings = new ArrayList(segStrings.size())\n for (let i = segStrings.iterator(); i.hasNext();) {\n const ss = i.next()\n nodedSegmentStrings.add(new NodedSegmentString(this.scale(ss.getCoordinates()), ss.getData()))\n }\n return nodedSegmentStrings\n } else if (arguments[0] instanceof Array) {\n const pts = arguments[0]\n const roundPts = new Array(pts.length).fill(null)\n for (let i = 0; i < pts.length; i++) {\n roundPts[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 }\n const roundPtsNoDup = CoordinateArrays.removeRepeatedPoints(roundPts)\n return roundPtsNoDup\n }\n }\n\n isIntegerPrecision () {\n return this._scaleFactor === 1.0\n }\n\n getNodedSubstrings () {\n const splitSS = this._noder.getNodedSubstrings()\n if (this._isScaled) this.rescale(splitSS)\n return splitSS\n }\n\n computeNodes (inputSegStrings) {\n let intSegStrings = inputSegStrings\n if (this._isScaled) intSegStrings = this.scale(inputSegStrings)\n this._noder.computeNodes(intSegStrings)\n }\n\n getClass () {\n return ScaledNoder\n }\n\n get interfaces_ () {\n return [Noder]\n }\n}\nScaledNoder.constructor_ = function () {\n this._noder = null\n this._scaleFactor = null\n this._offsetX = null\n this._offsetY = null\n this._isScaled = false\n if (arguments.length === 2) {\n const noder = arguments[0]; const scaleFactor = arguments[1]\n ScaledNoder.constructor_.call(this, noder, scaleFactor, 0, 0)\n } else if (arguments.length === 4) {\n const noder = arguments[0]; const scaleFactor = arguments[1]; const offsetX = arguments[2]; const offsetY = arguments[3]\n this._noder = noder\n this._scaleFactor = scaleFactor\n this._isScaled = !this.isIntegerPrecision()\n }\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 constructor () {\n IsSimpleOp.constructor_.apply(this, arguments)\n }\n\n static isSimple () {\n if (arguments.length === 1) {\n const geom = arguments[0]\n const op = new IsSimpleOp(geom)\n return op.isSimple()\n } else if (arguments.length === 2) {\n const geom = arguments[0]; const boundaryNodeRule = arguments[1]\n const op = new IsSimpleOp(geom, boundaryNodeRule)\n return op.isSimple()\n }\n }\n\n isSimpleMultiPoint (mp) {\n if (mp.isEmpty()) return true\n const points = new TreeSet()\n for (let i = 0; i < mp.getNumGeometries(); i++) {\n const pt = mp.getGeometryN(i)\n const p = pt.getCoordinate()\n if (points.contains(p)) {\n this._nonSimpleLocation = p\n return false\n }\n points.add(p)\n }\n return true\n }\n\n isSimplePolygonal (geom) {\n const rings = LinearComponentExtracter.getLines(geom)\n for (let i = rings.iterator(); i.hasNext();) {\n const ring = i.next()\n if (!this.isSimpleLinearGeometry(ring)) return false\n }\n return true\n }\n\n hasClosedEndpointIntersection (graph) {\n const endPoints = new TreeMap()\n for (let i = graph.getEdgeIterator(); i.hasNext();) {\n const e = i.next()\n const maxSegmentIndex = e.getMaximumSegmentIndex()\n const isClosed = e.isClosed()\n const p0 = e.getCoordinate(0)\n this.addEndpoint(endPoints, p0, isClosed)\n const p1 = e.getCoordinate(e.getNumPoints() - 1)\n this.addEndpoint(endPoints, p1, isClosed)\n }\n for (let i = endPoints.values().iterator(); i.hasNext();) {\n const eiInfo = i.next()\n if (eiInfo.isClosed && eiInfo.degree !== 2) {\n this._nonSimpleLocation = eiInfo.getCoordinate()\n return true\n }\n }\n return false\n }\n\n getNonSimpleLocation () {\n return this._nonSimpleLocation\n }\n\n isSimpleLinearGeometry (geom) {\n if (geom.isEmpty()) return true\n const graph = new GeometryGraph(0, geom)\n const li = new RobustLineIntersector()\n const si = graph.computeSelfNodes(li, true)\n if (!si.hasIntersection()) return true\n if (si.hasProperIntersection()) {\n this._nonSimpleLocation = si.getProperIntersectionPoint()\n return false\n }\n if (this.hasNonEndpointIntersection(graph)) return false\n if (this._isClosedEndpointsInInterior) {\n if (this.hasClosedEndpointIntersection(graph)) return false\n }\n return true\n }\n\n hasNonEndpointIntersection (graph) {\n for (let i = graph.getEdgeIterator(); i.hasNext();) {\n const e = i.next()\n const maxSegmentIndex = e.getMaximumSegmentIndex()\n for (let eiIt = e.getEdgeIntersectionList().iterator(); eiIt.hasNext();) {\n const ei = eiIt.next()\n if (!ei.isEndPoint(maxSegmentIndex)) {\n this._nonSimpleLocation = ei.getCoordinate()\n return true\n }\n }\n }\n return false\n }\n\n addEndpoint (endPoints, p, isClosed) {\n let eiInfo = endPoints.get(p)\n if (eiInfo === null) {\n eiInfo = new EndpointInfo(p)\n endPoints.put(p, eiInfo)\n }\n eiInfo.addEndpoint(isClosed)\n }\n\n computeSimple (geom) {\n this._nonSimpleLocation = null\n if (geom.isEmpty()) return true\n if (geom instanceof LineString) return this.isSimpleLinearGeometry(geom)\n if (geom instanceof MultiLineString) return this.isSimpleLinearGeometry(geom)\n if (geom instanceof MultiPoint) return this.isSimpleMultiPoint(geom)\n if (hasInterface(geom, Polygonal)) return this.isSimplePolygonal(geom)\n if (geom instanceof GeometryCollection) return this.isSimpleGeometryCollection(geom)\n return true\n }\n\n isSimple () {\n this._nonSimpleLocation = null\n return this.computeSimple(this._inputGeom)\n }\n\n isSimpleGeometryCollection (geom) {\n for (let i = 0; i < geom.getNumGeometries(); i++) {\n const comp = geom.getGeometryN(i)\n if (!this.computeSimple(comp)) return false\n }\n return true\n }\n\n getClass () {\n return IsSimpleOp\n }\n\n get interfaces_ () {\n return []\n }\n}\nclass EndpointInfo {\n constructor () {\n EndpointInfo.constructor_.apply(this, arguments)\n }\n\n addEndpoint (isClosed) {\n this.degree++\n this.isClosed |= isClosed\n }\n\n getCoordinate () {\n return this.pt\n }\n\n getClass () {\n return EndpointInfo\n }\n\n get interfaces_ () {\n return []\n }\n}\nEndpointInfo.constructor_ = function () {\n this.pt = null\n this.isClosed = null\n this.degree = null\n const pt = arguments[0]\n this.pt = pt\n this.isClosed = false\n this.degree = 0\n}\nIsSimpleOp.EndpointInfo = EndpointInfo\nIsSimpleOp.constructor_ = function () {\n this._inputGeom = null\n this._isClosedEndpointsInInterior = true\n this._nonSimpleLocation = null\n if (arguments.length === 1) {\n const geom = arguments[0]\n this._inputGeom = geom\n } else if (arguments.length === 2) {\n const geom = arguments[0]; const boundaryNodeRule = arguments[1]\n this._inputGeom = geom\n this._isClosedEndpointsInInterior = !boundaryNodeRule.isInBoundary(2)\n }\n}\n","export default class BufferParameters {\n constructor () {\n BufferParameters.constructor_.apply(this, arguments)\n }\n\n static bufferDistanceError (quadSegs) {\n const alpha = Math.PI / 2.0 / quadSegs\n return 1 - Math.cos(alpha / 2.0)\n }\n\n getEndCapStyle () {\n return this._endCapStyle\n }\n\n isSingleSided () {\n return this._isSingleSided\n }\n\n setQuadrantSegments (quadSegs) {\n this._quadrantSegments = quadSegs\n if (this._quadrantSegments === 0) this._joinStyle = BufferParameters.JOIN_BEVEL\n if (this._quadrantSegments < 0) {\n this._joinStyle = BufferParameters.JOIN_MITRE\n this._mitreLimit = Math.abs(this._quadrantSegments)\n }\n if (quadSegs <= 0) {\n this._quadrantSegments = 1\n }\n if (this._joinStyle !== BufferParameters.JOIN_ROUND) {\n this._quadrantSegments = BufferParameters.DEFAULT_QUADRANT_SEGMENTS\n }\n }\n\n getJoinStyle () {\n return this._joinStyle\n }\n\n setJoinStyle (joinStyle) {\n this._joinStyle = joinStyle\n }\n\n setSimplifyFactor (simplifyFactor) {\n this._simplifyFactor = simplifyFactor < 0 ? 0 : simplifyFactor\n }\n\n getSimplifyFactor () {\n return this._simplifyFactor\n }\n\n getQuadrantSegments () {\n return this._quadrantSegments\n }\n\n setEndCapStyle (endCapStyle) {\n this._endCapStyle = endCapStyle\n }\n\n getMitreLimit () {\n return this._mitreLimit\n }\n\n setMitreLimit (mitreLimit) {\n this._mitreLimit = mitreLimit\n }\n\n setSingleSided (isSingleSided) {\n this._isSingleSided = isSingleSided\n }\n\n getClass () {\n return BufferParameters\n }\n\n get interfaces_ () {\n return []\n }\n}\nBufferParameters.constructor_ = function () {\n this._quadrantSegments = BufferParameters.DEFAULT_QUADRANT_SEGMENTS\n this._endCapStyle = BufferParameters.CAP_ROUND\n this._joinStyle = BufferParameters.JOIN_ROUND\n this._mitreLimit = BufferParameters.DEFAULT_MITRE_LIMIT\n this._isSingleSided = false\n this._simplifyFactor = BufferParameters.DEFAULT_SIMPLIFY_FACTOR\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n const quadrantSegments = arguments[0]\n this.setQuadrantSegments(quadrantSegments)\n } else if (arguments.length === 2) {\n const quadrantSegments = arguments[0]; const endCapStyle = arguments[1]\n this.setQuadrantSegments(quadrantSegments)\n this.setEndCapStyle(endCapStyle)\n } else if (arguments.length === 4) {\n const quadrantSegments = arguments[0]; const endCapStyle = arguments[1]; const joinStyle = arguments[2]; const mitreLimit = arguments[3]\n this.setQuadrantSegments(quadrantSegments)\n this.setEndCapStyle(endCapStyle)\n this.setJoinStyle(joinStyle)\n this.setMitreLimit(mitreLimit)\n }\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 constructor () {\n RightmostEdgeFinder.constructor_.apply(this, arguments)\n }\n\n getCoordinate () {\n return this._minCoord\n }\n\n getRightmostSide (de, index) {\n let side = this.getRightmostSideOfSegment(de, index)\n if (side < 0) side = this.getRightmostSideOfSegment(de, index - 1)\n if (side < 0) {\n this._minCoord = null\n this.checkForRightmostCoordinate(de)\n }\n return side\n }\n\n findRightmostEdgeAtVertex () {\n const pts = this._minDe.getEdge().getCoordinates()\n Assert.isTrue(this._minIndex > 0 && this._minIndex < pts.length, 'rightmost point expected to be interior vertex of edge')\n const pPrev = pts[this._minIndex - 1]\n const pNext = pts[this._minIndex + 1]\n const orientation = Orientation.index(this._minCoord, pNext, pPrev)\n let usePrev = false\n if (pPrev.y < this._minCoord.y && pNext.y < this._minCoord.y && orientation === Orientation.COUNTERCLOCKWISE) {\n usePrev = true\n } else if (pPrev.y > this._minCoord.y && pNext.y > this._minCoord.y && orientation === Orientation.CLOCKWISE) {\n usePrev = true\n }\n if (usePrev) {\n this._minIndex = this._minIndex - 1\n }\n }\n\n getRightmostSideOfSegment (de, i) {\n const e = de.getEdge()\n const coord = e.getCoordinates()\n if (i < 0 || i + 1 >= coord.length) return -1\n if (coord[i].y === coord[i + 1].y) return -1\n let pos = Position.LEFT\n if (coord[i].y < coord[i + 1].y) pos = Position.RIGHT\n return pos\n }\n\n getEdge () {\n return this._orientedDe\n }\n\n checkForRightmostCoordinate (de) {\n const coord = de.getEdge().getCoordinates()\n for (let i = 0; i < coord.length - 1; i++) {\n if (this._minCoord === null || coord[i].x > this._minCoord.x) {\n this._minDe = de\n this._minIndex = i\n this._minCoord = coord[i]\n }\n }\n }\n\n findRightmostEdgeAtNode () {\n const node = this._minDe.getNode()\n const star = node.getEdges()\n this._minDe = star.getRightmostEdge()\n if (!this._minDe.isForward()) {\n this._minDe = this._minDe.getSym()\n this._minIndex = this._minDe.getEdge().getCoordinates().length - 1\n }\n }\n\n findEdge (dirEdgeList) {\n for (let i = dirEdgeList.iterator(); i.hasNext();) {\n const de = i.next()\n if (!de.isForward()) continue\n this.checkForRightmostCoordinate(de)\n }\n Assert.isTrue(this._minIndex !== 0 || this._minCoord.equals(this._minDe.getCoordinate()), 'inconsistency in rightmost processing')\n if (this._minIndex === 0) {\n this.findRightmostEdgeAtNode()\n } else {\n this.findRightmostEdgeAtVertex()\n }\n this._orientedDe = this._minDe\n const rightmostSide = this.getRightmostSide(this._minDe, this._minIndex)\n if (rightmostSide === Position.LEFT) {\n this._orientedDe = this._minDe.getSym()\n }\n }\n\n getClass () {\n return RightmostEdgeFinder\n }\n\n get interfaces_ () {\n return []\n }\n}\nRightmostEdgeFinder.constructor_ = function () {\n this._minIndex = -1\n this._minCoord = null\n this._minDe = null\n this._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 constructor () {\n BufferSubgraph.constructor_.apply(this, arguments)\n }\n\n clearVisitedEdges () {\n for (let it = this._dirEdgeList.iterator(); it.hasNext();) {\n const de = it.next()\n de.setVisited(false)\n }\n }\n\n getRightmostCoordinate () {\n return this._rightMostCoord\n }\n\n computeNodeDepth (n) {\n let startEdge = null\n for (let i = n.getEdges().iterator(); i.hasNext();) {\n const de = i.next()\n if (de.isVisited() || de.getSym().isVisited()) {\n startEdge = de\n break\n }\n }\n if (startEdge === null) throw new TopologyException('unable to find edge to compute depths at ' + n.getCoordinate())\n n.getEdges().computeDepths(startEdge)\n for (let i = n.getEdges().iterator(); i.hasNext();) {\n const de = i.next()\n de.setVisited(true)\n this.copySymDepths(de)\n }\n }\n\n computeDepth (outsideDepth) {\n this.clearVisitedEdges()\n const de = this._finder.getEdge()\n const n = de.getNode()\n const label = de.getLabel()\n de.setEdgeDepths(Position.RIGHT, outsideDepth)\n this.copySymDepths(de)\n this.computeDepths(de)\n }\n\n create (node) {\n this.addReachable(node)\n this._finder.findEdge(this._dirEdgeList)\n this._rightMostCoord = this._finder.getCoordinate()\n }\n\n findResultEdges () {\n for (let it = this._dirEdgeList.iterator(); it.hasNext();) {\n const de = it.next()\n if (de.getDepth(Position.RIGHT) >= 1 && de.getDepth(Position.LEFT) <= 0 && !de.isInteriorAreaEdge()) {\n de.setInResult(true)\n }\n }\n }\n\n computeDepths (startEdge) {\n const nodesVisited = new HashSet()\n const nodeQueue = new LinkedList()\n const startNode = startEdge.getNode()\n nodeQueue.addLast(startNode)\n nodesVisited.add(startNode)\n startEdge.setVisited(true)\n while (!nodeQueue.isEmpty()) {\n const n = nodeQueue.removeFirst()\n nodesVisited.add(n)\n this.computeNodeDepth(n)\n for (let i = n.getEdges().iterator(); i.hasNext();) {\n const de = i.next()\n const sym = de.getSym()\n if (sym.isVisited()) continue\n const adjNode = sym.getNode()\n if (!nodesVisited.contains(adjNode)) {\n nodeQueue.addLast(adjNode)\n nodesVisited.add(adjNode)\n }\n }\n }\n }\n\n compareTo (o) {\n const graph = o\n if (this._rightMostCoord.x < graph._rightMostCoord.x) {\n return -1\n }\n if (this._rightMostCoord.x > graph._rightMostCoord.x) {\n return 1\n }\n return 0\n }\n\n getEnvelope () {\n if (this._env === null) {\n const edgeEnv = new Envelope()\n for (let it = this._dirEdgeList.iterator(); it.hasNext();) {\n const dirEdge = it.next()\n const pts = dirEdge.getEdge().getCoordinates()\n for (let i = 0; i < pts.length - 1; i++) {\n edgeEnv.expandToInclude(pts[i])\n }\n }\n this._env = edgeEnv\n }\n return this._env\n }\n\n addReachable (startNode) {\n const nodeStack = new Stack()\n nodeStack.add(startNode)\n while (!nodeStack.empty()) {\n const node = nodeStack.pop()\n this.add(node, nodeStack)\n }\n }\n\n copySymDepths (de) {\n const sym = de.getSym()\n sym.setDepth(Position.LEFT, de.getDepth(Position.RIGHT))\n sym.setDepth(Position.RIGHT, de.getDepth(Position.LEFT))\n }\n\n add (node, nodeStack) {\n node.setVisited(true)\n this._nodes.add(node)\n for (let i = node.getEdges().iterator(); i.hasNext();) {\n const de = i.next()\n this._dirEdgeList.add(de)\n const sym = de.getSym()\n const symNode = sym.getNode()\n if (!symNode.isVisited()) nodeStack.push(symNode)\n }\n }\n\n getNodes () {\n return this._nodes\n }\n\n getDirectedEdges () {\n return this._dirEdgeList\n }\n\n getClass () {\n return BufferSubgraph\n }\n\n get interfaces_ () {\n return [Comparable]\n }\n}\nBufferSubgraph.constructor_ = function () {\n this._finder = null\n this._dirEdgeList = new ArrayList()\n this._nodes = new ArrayList()\n this._rightMostCoord = null\n this._env = null\n this._finder = new RightmostEdgeFinder()\n}\n","import CoordinateList from '../../geom/CoordinateList'\nimport Orientation from '../../algorithm/Orientation'\nimport Distance from '../../algorithm/Distance'\nexport default class BufferInputLineSimplifier {\n constructor () {\n BufferInputLineSimplifier.constructor_.apply(this, arguments)\n }\n\n static simplify (inputLine, distanceTol) {\n const simp = new BufferInputLineSimplifier(inputLine)\n return simp.simplify(distanceTol)\n }\n\n isDeletable (i0, i1, i2, distanceTol) {\n const p0 = this._inputLine[i0]\n const p1 = this._inputLine[i1]\n const p2 = this._inputLine[i2]\n if (!this.isConcave(p0, p1, p2)) return false\n if (!this.isShallow(p0, p1, p2, distanceTol)) return false\n return this.isShallowSampled(p0, p1, i0, i2, distanceTol)\n }\n\n deleteShallowConcavities () {\n let index = 1\n const maxIndex = this._inputLine.length - 1\n let midIndex = this.findNextNonDeletedIndex(index)\n let lastIndex = this.findNextNonDeletedIndex(midIndex)\n let isChanged = false\n while (lastIndex < this._inputLine.length) {\n let isMiddleVertexDeleted = false\n if (this.isDeletable(index, midIndex, lastIndex, this._distanceTol)) {\n this._isDeleted[midIndex] = BufferInputLineSimplifier.DELETE\n isMiddleVertexDeleted = true\n isChanged = true\n }\n if (isMiddleVertexDeleted) index = lastIndex; else index = midIndex\n midIndex = this.findNextNonDeletedIndex(index)\n lastIndex = this.findNextNonDeletedIndex(midIndex)\n }\n return isChanged\n }\n\n isShallowConcavity (p0, p1, p2, distanceTol) {\n const orientation = Orientation.index(p0, p1, p2)\n const isAngleToSimplify = orientation === this._angleOrientation\n if (!isAngleToSimplify) return false\n const dist = Distance.pointToSegment(p1, p0, p2)\n return dist < distanceTol\n }\n\n isShallowSampled (p0, p2, i0, i2, distanceTol) {\n let inc = Math.trunc((i2 - i0) / BufferInputLineSimplifier.NUM_PTS_TO_CHECK)\n if (inc <= 0) inc = 1\n for (let i = i0; i < i2; i += inc) {\n if (!this.isShallow(p0, p2, this._inputLine[i], distanceTol)) return false\n }\n return true\n }\n\n isConcave (p0, p1, p2) {\n const orientation = Orientation.index(p0, p1, p2)\n const isConcave = orientation === this._angleOrientation\n return isConcave\n }\n\n simplify (distanceTol) {\n this._distanceTol = Math.abs(distanceTol)\n if (distanceTol < 0) this._angleOrientation = Orientation.CLOCKWISE\n this._isDeleted = new Array(this._inputLine.length).fill(null)\n let isChanged = false\n do {\n isChanged = this.deleteShallowConcavities()\n } while (isChanged)\n return this.collapseLine()\n }\n\n findNextNonDeletedIndex (index) {\n let next = index + 1\n while (next < this._inputLine.length && this._isDeleted[next] === BufferInputLineSimplifier.DELETE) next++\n return next\n }\n\n isShallow (p0, p1, p2, distanceTol) {\n const dist = Distance.pointToSegment(p1, p0, p2)\n return dist < distanceTol\n }\n\n collapseLine () {\n const coordList = new CoordinateList()\n for (let i = 0; i < this._inputLine.length; i++) {\n if (this._isDeleted[i] !== BufferInputLineSimplifier.DELETE) coordList.add(this._inputLine[i])\n }\n return coordList.toCoordinateArray()\n }\n\n getClass () {\n return BufferInputLineSimplifier\n }\n\n get interfaces_ () {\n return []\n }\n}\nBufferInputLineSimplifier.constructor_ = function () {\n this._inputLine = null\n this._distanceTol = null\n this._isDeleted = null\n this._angleOrientation = Orientation.COUNTERCLOCKWISE\n const inputLine = arguments[0]\n this._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 constructor () {\n OffsetSegmentString.constructor_.apply(this, arguments)\n }\n\n getCoordinates () {\n const coord = this._ptList.toArray(OffsetSegmentString.COORDINATE_ARRAY_TYPE)\n return coord\n }\n\n setPrecisionModel (precisionModel) {\n this._precisionModel = precisionModel\n }\n\n addPt (pt) {\n const bufPt = new Coordinate(pt)\n this._precisionModel.makePrecise(bufPt)\n if (this.isRedundant(bufPt)) return null\n this._ptList.add(bufPt)\n }\n\n reverse () {}\n addPts (pt, isForward) {\n if (isForward) {\n for (let i = 0; i < pt.length; i++) {\n this.addPt(pt[i])\n }\n } else {\n for (let i = pt.length - 1; i >= 0; i--) {\n this.addPt(pt[i])\n }\n }\n }\n\n isRedundant (pt) {\n if (this._ptList.size() < 1) return false\n const lastPt = this._ptList.get(this._ptList.size() - 1)\n const ptDist = pt.distance(lastPt)\n if (ptDist < this._minimimVertexDistance) return true\n return false\n }\n\n toString () {\n const fact = new GeometryFactory()\n const line = fact.createLineString(this.getCoordinates())\n return line.toString()\n }\n\n closeRing () {\n if (this._ptList.size() < 1) return null\n const startPt = new Coordinate(this._ptList.get(0))\n const lastPt = this._ptList.get(this._ptList.size() - 1)\n let last2Pt = null\n if (this._ptList.size() >= 2) last2Pt = this._ptList.get(this._ptList.size() - 2)\n if (startPt.equals(lastPt)) return null\n this._ptList.add(startPt)\n }\n\n setMinimumVertexDistance (minimimVertexDistance) {\n this._minimimVertexDistance = minimimVertexDistance\n }\n\n getClass () {\n return OffsetSegmentString\n }\n\n get interfaces_ () {\n return []\n }\n}\nOffsetSegmentString.constructor_ = function () {\n this._ptList = null\n this._precisionModel = null\n this._minimimVertexDistance = 0.0\n this._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 constructor () {\n OffsetSegmentGenerator.constructor_.apply(this, arguments)\n }\n\n addNextSegment (p, addStartPoint) {\n this._s0 = this._s1\n this._s1 = this._s2\n this._s2 = p\n this._seg0.setCoordinates(this._s0, this._s1)\n this.computeOffsetSegment(this._seg0, this._side, this._distance, this._offset0)\n this._seg1.setCoordinates(this._s1, this._s2)\n this.computeOffsetSegment(this._seg1, this._side, this._distance, this._offset1)\n if (this._s1.equals(this._s2)) return null\n const orientation = Orientation.index(this._s0, this._s1, this._s2)\n const outsideTurn = orientation === Orientation.CLOCKWISE && this._side === Position.LEFT || orientation === Orientation.COUNTERCLOCKWISE && this._side === Position.RIGHT\n if (orientation === 0) {\n this.addCollinear(addStartPoint)\n } else if (outsideTurn) {\n this.addOutsideTurn(orientation, addStartPoint)\n } else {\n this.addInsideTurn(orientation, addStartPoint)\n }\n }\n\n addLineEndCap (p0, p1) {\n const seg = new LineSegment(p0, p1)\n const offsetL = new LineSegment()\n this.computeOffsetSegment(seg, Position.LEFT, this._distance, offsetL)\n const offsetR = new LineSegment()\n this.computeOffsetSegment(seg, Position.RIGHT, this._distance, offsetR)\n const dx = p1.x - p0.x\n const dy = p1.y - p0.y\n const angle = Math.atan2(dy, dx)\n switch (this._bufParams.getEndCapStyle()) {\n case BufferParameters.CAP_ROUND:\n this._segList.addPt(offsetL.p1)\n this.addDirectedFillet(p1, angle + Math.PI / 2, angle - Math.PI / 2, Orientation.CLOCKWISE, this._distance)\n this._segList.addPt(offsetR.p1)\n break\n case BufferParameters.CAP_FLAT:\n this._segList.addPt(offsetL.p1)\n this._segList.addPt(offsetR.p1)\n break\n case BufferParameters.CAP_SQUARE:\n const squareCapSideOffset = new Coordinate()\n squareCapSideOffset.x = Math.abs(this._distance) * Math.cos(angle)\n squareCapSideOffset.y = Math.abs(this._distance) * Math.sin(angle)\n const squareCapLOffset = new Coordinate(offsetL.p1.x + squareCapSideOffset.x, offsetL.p1.y + squareCapSideOffset.y)\n const squareCapROffset = new Coordinate(offsetR.p1.x + squareCapSideOffset.x, offsetR.p1.y + squareCapSideOffset.y)\n this._segList.addPt(squareCapLOffset)\n this._segList.addPt(squareCapROffset)\n break\n }\n }\n\n getCoordinates () {\n const pts = this._segList.getCoordinates()\n return pts\n }\n\n addMitreJoin (p, offset0, offset1, distance) {\n let isMitreWithinLimit = true\n let intPt = null\n try {\n intPt = HCoordinate.intersection(offset0.p0, offset0.p1, offset1.p0, offset1.p1)\n const mitreRatio = distance <= 0.0 ? 1.0 : intPt.distance(p) / Math.abs(distance)\n if (mitreRatio > this._bufParams.getMitreLimit()) isMitreWithinLimit = false\n } catch (ex) {\n if (ex instanceof NotRepresentableException) {\n intPt = new Coordinate(0, 0)\n isMitreWithinLimit = false\n } else throw ex\n } finally {}\n if (isMitreWithinLimit) {\n this._segList.addPt(intPt)\n } else {\n this.addLimitedMitreJoin(offset0, offset1, distance, this._bufParams.getMitreLimit())\n }\n }\n\n addOutsideTurn (orientation, addStartPoint) {\n if (this._offset0.p1.distance(this._offset1.p0) < this._distance * OffsetSegmentGenerator.OFFSET_SEGMENT_SEPARATION_FACTOR) {\n this._segList.addPt(this._offset0.p1)\n return null\n }\n if (this._bufParams.getJoinStyle() === BufferParameters.JOIN_MITRE) {\n this.addMitreJoin(this._s1, this._offset0, this._offset1, this._distance)\n } else if (this._bufParams.getJoinStyle() === BufferParameters.JOIN_BEVEL) {\n this.addBevelJoin(this._offset0, this._offset1)\n } else {\n if (addStartPoint) this._segList.addPt(this._offset0.p1)\n this.addCornerFillet(this._s1, this._offset0.p1, this._offset1.p0, orientation, this._distance)\n this._segList.addPt(this._offset1.p0)\n }\n }\n\n createSquare (p) {\n this._segList.addPt(new Coordinate(p.x + this._distance, p.y + this._distance))\n this._segList.addPt(new Coordinate(p.x + this._distance, p.y - this._distance))\n this._segList.addPt(new Coordinate(p.x - this._distance, p.y - this._distance))\n this._segList.addPt(new Coordinate(p.x - this._distance, p.y + this._distance))\n this._segList.closeRing()\n }\n\n addSegments (pt, isForward) {\n this._segList.addPts(pt, isForward)\n }\n\n addFirstSegment () {\n this._segList.addPt(this._offset1.p0)\n }\n\n addCornerFillet (p, p0, p1, direction, radius) {\n const dx0 = p0.x - p.x\n const dy0 = p0.y - p.y\n let startAngle = Math.atan2(dy0, dx0)\n const dx1 = p1.x - p.x\n const dy1 = p1.y - p.y\n const endAngle = Math.atan2(dy1, dx1)\n if (direction === Orientation.CLOCKWISE) {\n if (startAngle <= endAngle) startAngle += 2.0 * Math.PI\n } else {\n if (startAngle >= endAngle) startAngle -= 2.0 * Math.PI\n }\n this._segList.addPt(p0)\n this.addDirectedFillet(p, startAngle, endAngle, direction, radius)\n this._segList.addPt(p1)\n }\n\n addLastSegment () {\n this._segList.addPt(this._offset1.p1)\n }\n\n initSideSegments (s1, s2, side) {\n this._s1 = s1\n this._s2 = s2\n this._side = side\n this._seg1.setCoordinates(s1, s2)\n this.computeOffsetSegment(this._seg1, side, this._distance, this._offset1)\n }\n\n addLimitedMitreJoin (offset0, offset1, distance, mitreLimit) {\n const basePt = this._seg0.p1\n const ang0 = Angle.angle(basePt, this._seg0.p0)\n const ang1 = Angle.angle(basePt, this._seg1.p1)\n const angDiff = Angle.angleBetweenOriented(this._seg0.p0, basePt, this._seg1.p1)\n const angDiffHalf = angDiff / 2\n const midAng = Angle.normalize(ang0 + angDiffHalf)\n const mitreMidAng = Angle.normalize(midAng + Math.PI)\n const mitreDist = mitreLimit * distance\n const bevelDelta = mitreDist * Math.abs(Math.sin(angDiffHalf))\n const bevelHalfLen = distance - bevelDelta\n const bevelMidX = basePt.x + mitreDist * Math.cos(mitreMidAng)\n const bevelMidY = basePt.y + mitreDist * Math.sin(mitreMidAng)\n const bevelMidPt = new Coordinate(bevelMidX, bevelMidY)\n const mitreMidLine = new LineSegment(basePt, bevelMidPt)\n const bevelEndLeft = mitreMidLine.pointAlongOffset(1.0, bevelHalfLen)\n const bevelEndRight = mitreMidLine.pointAlongOffset(1.0, -bevelHalfLen)\n if (this._side === Position.LEFT) {\n this._segList.addPt(bevelEndLeft)\n this._segList.addPt(bevelEndRight)\n } else {\n this._segList.addPt(bevelEndRight)\n this._segList.addPt(bevelEndLeft)\n }\n }\n\n addDirectedFillet (p, startAngle, endAngle, direction, radius) {\n const directionFactor = direction === Orientation.CLOCKWISE ? -1 : 1\n const totalAngle = Math.abs(startAngle - endAngle)\n const nSegs = Math.trunc(totalAngle / this._filletAngleQuantum + 0.5)\n if (nSegs < 1) return null\n let initAngle = null; let currAngleInc = null\n initAngle = 0.0\n currAngleInc = totalAngle / nSegs\n let currAngle = initAngle\n const pt = new Coordinate()\n while (currAngle < totalAngle) {\n const angle = startAngle + directionFactor * currAngle\n pt.x = p.x + radius * Math.cos(angle)\n pt.y = p.y + radius * Math.sin(angle)\n this._segList.addPt(pt)\n currAngle += currAngleInc\n }\n }\n\n computeOffsetSegment (seg, side, distance, offset) {\n const sideSign = side === Position.LEFT ? 1 : -1\n const dx = seg.p1.x - seg.p0.x\n const dy = seg.p1.y - seg.p0.y\n const len = Math.sqrt(dx * dx + dy * dy)\n const ux = sideSign * distance * dx / len\n const uy = sideSign * distance * dy / len\n offset.p0.x = seg.p0.x - uy\n offset.p0.y = seg.p0.y + ux\n offset.p1.x = seg.p1.x - uy\n offset.p1.y = seg.p1.y + ux\n }\n\n addInsideTurn (orientation, addStartPoint) {\n this._li.computeIntersection(this._offset0.p0, this._offset0.p1, this._offset1.p0, this._offset1.p1)\n if (this._li.hasIntersection()) {\n this._segList.addPt(this._li.getIntersection(0))\n } else {\n this._hasNarrowConcaveAngle = true\n if (this._offset0.p1.distance(this._offset1.p0) < this._distance * OffsetSegmentGenerator.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR) {\n this._segList.addPt(this._offset0.p1)\n } else {\n this._segList.addPt(this._offset0.p1)\n if (this._closingSegLengthFactor > 0) {\n const 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 this._segList.addPt(mid0)\n const 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 this._segList.addPt(mid1)\n } else {\n this._segList.addPt(this._s1)\n }\n this._segList.addPt(this._offset1.p0)\n }\n }\n }\n\n createCircle (p) {\n const pt = new Coordinate(p.x + this._distance, p.y)\n this._segList.addPt(pt)\n this.addDirectedFillet(p, 0.0, 2.0 * Math.PI, -1, this._distance)\n this._segList.closeRing()\n }\n\n addBevelJoin (offset0, offset1) {\n this._segList.addPt(offset0.p1)\n this._segList.addPt(offset1.p0)\n }\n\n init (distance) {\n this._distance = distance\n this._maxCurveSegmentError = distance * (1 - Math.cos(this._filletAngleQuantum / 2.0))\n this._segList = new OffsetSegmentString()\n this._segList.setPrecisionModel(this._precisionModel)\n this._segList.setMinimumVertexDistance(distance * OffsetSegmentGenerator.CURVE_VERTEX_SNAP_DISTANCE_FACTOR)\n }\n\n addCollinear (addStartPoint) {\n this._li.computeIntersection(this._s0, this._s1, this._s1, this._s2)\n const numInt = this._li.getIntersectionNum()\n if (numInt >= 2) {\n if (this._bufParams.getJoinStyle() === BufferParameters.JOIN_BEVEL || this._bufParams.getJoinStyle() === BufferParameters.JOIN_MITRE) {\n if (addStartPoint) this._segList.addPt(this._offset0.p1)\n this._segList.addPt(this._offset1.p0)\n } else {\n this.addCornerFillet(this._s1, this._offset0.p1, this._offset1.p0, Orientation.CLOCKWISE, this._distance)\n }\n }\n }\n\n closeRing () {\n this._segList.closeRing()\n }\n\n hasNarrowConcaveAngle () {\n return this._hasNarrowConcaveAngle\n }\n\n getClass () {\n return OffsetSegmentGenerator\n }\n\n get interfaces_ () {\n return []\n }\n}\nOffsetSegmentGenerator.constructor_ = function () {\n this._maxCurveSegmentError = 0.0\n this._filletAngleQuantum = null\n this._closingSegLengthFactor = 1\n this._segList = null\n this._distance = 0.0\n this._precisionModel = null\n this._bufParams = null\n this._li = null\n this._s0 = null\n this._s1 = null\n this._s2 = null\n this._seg0 = new LineSegment()\n this._seg1 = new LineSegment()\n this._offset0 = new LineSegment()\n this._offset1 = new LineSegment()\n this._side = 0\n this._hasNarrowConcaveAngle = false\n const precisionModel = arguments[0]; const bufParams = arguments[1]; const distance = arguments[2]\n this._precisionModel = precisionModel\n this._bufParams = bufParams\n this._li = new RobustLineIntersector()\n this._filletAngleQuantum = Math.PI / 2.0 / bufParams.getQuadrantSegments()\n if (bufParams.getQuadrantSegments() >= 8 && bufParams.getJoinStyle() === BufferParameters.JOIN_ROUND) this._closingSegLengthFactor = OffsetSegmentGenerator.MAX_CLOSING_SEG_LEN_FACTOR\n this.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 constructor () {\n OffsetCurveBuilder.constructor_.apply(this, arguments)\n }\n\n static copyCoordinates (pts) {\n const copy = new Array(pts.length).fill(null)\n for (let i = 0; i < copy.length; i++) {\n copy[i] = new Coordinate(pts[i])\n }\n return copy\n }\n\n getOffsetCurve (inputPts, distance) {\n this._distance = distance\n if (distance === 0.0) return null\n const isRightSide = distance < 0.0\n const posDistance = Math.abs(distance)\n const segGen = this.getSegGen(posDistance)\n if (inputPts.length <= 1) {\n this.computePointCurve(inputPts[0], segGen)\n } else {\n this.computeOffsetCurve(inputPts, isRightSide, segGen)\n }\n const curvePts = segGen.getCoordinates()\n if (isRightSide) CoordinateArrays.reverse(curvePts)\n return curvePts\n }\n\n computeSingleSidedBufferCurve (inputPts, isRightSide, segGen) {\n const distTol = this.simplifyTolerance(this._distance)\n if (isRightSide) {\n segGen.addSegments(inputPts, true)\n const simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol)\n const n2 = simp2.length - 1\n segGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT)\n segGen.addFirstSegment()\n for (let i = n2 - 2; i >= 0; i--) {\n segGen.addNextSegment(simp2[i], true)\n }\n } else {\n segGen.addSegments(inputPts, false)\n const simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol)\n const n1 = simp1.length - 1\n segGen.initSideSegments(simp1[0], simp1[1], Position.LEFT)\n segGen.addFirstSegment()\n for (let i = 2; i <= n1; i++) {\n segGen.addNextSegment(simp1[i], true)\n }\n }\n segGen.addLastSegment()\n segGen.closeRing()\n }\n\n computeRingBufferCurve (inputPts, side, segGen) {\n let distTol = this.simplifyTolerance(this._distance)\n if (side === Position.RIGHT) distTol = -distTol\n const simp = BufferInputLineSimplifier.simplify(inputPts, distTol)\n const n = simp.length - 1\n segGen.initSideSegments(simp[n - 1], simp[0], side)\n for (let i = 1; i <= n; i++) {\n const addStartPoint = i !== 1\n segGen.addNextSegment(simp[i], addStartPoint)\n }\n segGen.closeRing()\n }\n\n computeLineBufferCurve (inputPts, segGen) {\n const distTol = this.simplifyTolerance(this._distance)\n const simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol)\n const n1 = simp1.length - 1\n segGen.initSideSegments(simp1[0], simp1[1], Position.LEFT)\n for (let i = 2; i <= n1; i++) {\n segGen.addNextSegment(simp1[i], true)\n }\n segGen.addLastSegment()\n segGen.addLineEndCap(simp1[n1 - 1], simp1[n1])\n const simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol)\n const n2 = simp2.length - 1\n segGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT)\n for (let i = n2 - 2; i >= 0; i--) {\n segGen.addNextSegment(simp2[i], true)\n }\n segGen.addLastSegment()\n segGen.addLineEndCap(simp2[1], simp2[0])\n segGen.closeRing()\n }\n\n computePointCurve (pt, segGen) {\n switch (this._bufParams.getEndCapStyle()) {\n case BufferParameters.CAP_ROUND:\n segGen.createCircle(pt)\n break\n case BufferParameters.CAP_SQUARE:\n segGen.createSquare(pt)\n break\n }\n }\n\n getLineCurve (inputPts, distance) {\n this._distance = distance\n if (distance < 0.0 && !this._bufParams.isSingleSided()) return null\n if (distance === 0.0) return null\n const posDistance = Math.abs(distance)\n const segGen = this.getSegGen(posDistance)\n if (inputPts.length <= 1) {\n this.computePointCurve(inputPts[0], segGen)\n } else {\n if (this._bufParams.isSingleSided()) {\n const isRightSide = distance < 0.0\n this.computeSingleSidedBufferCurve(inputPts, isRightSide, segGen)\n } else this.computeLineBufferCurve(inputPts, segGen)\n }\n const lineCoord = segGen.getCoordinates()\n return lineCoord\n }\n\n getBufferParameters () {\n return this._bufParams\n }\n\n simplifyTolerance (bufDistance) {\n return bufDistance * this._bufParams.getSimplifyFactor()\n }\n\n getRingCurve (inputPts, side, distance) {\n this._distance = distance\n if (inputPts.length <= 2) return this.getLineCurve(inputPts, distance)\n if (distance === 0.0) {\n return OffsetCurveBuilder.copyCoordinates(inputPts)\n }\n const segGen = this.getSegGen(distance)\n this.computeRingBufferCurve(inputPts, side, segGen)\n return segGen.getCoordinates()\n }\n\n computeOffsetCurve (inputPts, isRightSide, segGen) {\n const distTol = this.simplifyTolerance(this._distance)\n if (isRightSide) {\n const simp2 = BufferInputLineSimplifier.simplify(inputPts, -distTol)\n const n2 = simp2.length - 1\n segGen.initSideSegments(simp2[n2], simp2[n2 - 1], Position.LEFT)\n segGen.addFirstSegment()\n for (let i = n2 - 2; i >= 0; i--) {\n segGen.addNextSegment(simp2[i], true)\n }\n } else {\n const simp1 = BufferInputLineSimplifier.simplify(inputPts, distTol)\n const n1 = simp1.length - 1\n segGen.initSideSegments(simp1[0], simp1[1], Position.LEFT)\n segGen.addFirstSegment()\n for (let i = 2; i <= n1; i++) {\n segGen.addNextSegment(simp1[i], true)\n }\n }\n segGen.addLastSegment()\n }\n\n getSegGen (distance) {\n return new OffsetSegmentGenerator(this._precisionModel, this._bufParams, distance)\n }\n\n getClass () {\n return OffsetCurveBuilder\n }\n\n get interfaces_ () {\n return []\n }\n}\nOffsetCurveBuilder.constructor_ = function () {\n this._distance = 0.0\n this._precisionModel = null\n this._bufParams = null\n const precisionModel = arguments[0]; const bufParams = arguments[1]\n this._precisionModel = precisionModel\n this._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 constructor () {\n SubgraphDepthLocater.constructor_.apply(this, arguments)\n }\n\n findStabbedSegments () {\n if (arguments.length === 1) {\n const stabbingRayLeftPt = arguments[0]\n const stabbedSegments = new ArrayList()\n for (let i = this._subgraphs.iterator(); i.hasNext();) {\n const bsg = i.next()\n const env = bsg.getEnvelope()\n if (stabbingRayLeftPt.y < env.getMinY() || stabbingRayLeftPt.y > env.getMaxY()) continue\n this.findStabbedSegments(stabbingRayLeftPt, bsg.getDirectedEdges(), stabbedSegments)\n }\n return stabbedSegments\n } else if (arguments.length === 3) {\n if (hasInterface(arguments[2], List) && (arguments[0] instanceof Coordinate && arguments[1] instanceof DirectedEdge)) {\n const stabbingRayLeftPt = arguments[0]; const dirEdge = arguments[1]; const stabbedSegments = arguments[2]\n const pts = dirEdge.getEdge().getCoordinates()\n for (let i = 0; i < pts.length - 1; i++) {\n this._seg.p0 = pts[i]\n this._seg.p1 = pts[i + 1]\n if (this._seg.p0.y > this._seg.p1.y) this._seg.reverse()\n const maxx = Math.max(this._seg.p0.x, this._seg.p1.x)\n if (maxx < stabbingRayLeftPt.x) continue\n if (this._seg.isHorizontal()) continue\n if (stabbingRayLeftPt.y < this._seg.p0.y || stabbingRayLeftPt.y > this._seg.p1.y) continue\n if (Orientation.index(this._seg.p0, this._seg.p1, stabbingRayLeftPt) === Orientation.RIGHT) continue\n let depth = dirEdge.getDepth(Position.LEFT)\n if (!this._seg.p0.equals(pts[i])) depth = dirEdge.getDepth(Position.RIGHT)\n const ds = new DepthSegment(this._seg, depth)\n stabbedSegments.add(ds)\n }\n } else if (hasInterface(arguments[2], List) && (arguments[0] instanceof Coordinate && hasInterface(arguments[1], List))) {\n const stabbingRayLeftPt = arguments[0]; const dirEdges = arguments[1]; const stabbedSegments = arguments[2]\n for (let i = dirEdges.iterator(); i.hasNext();) {\n const de = i.next()\n if (!de.isForward()) continue\n this.findStabbedSegments(stabbingRayLeftPt, de, stabbedSegments)\n }\n }\n }\n }\n\n getDepth (p) {\n const stabbedSegments = this.findStabbedSegments(p)\n if (stabbedSegments.size() === 0) return 0\n const ds = Collections.min(stabbedSegments)\n return ds._leftDepth\n }\n\n getClass () {\n return SubgraphDepthLocater\n }\n\n get interfaces_ () {\n return []\n }\n}\nclass DepthSegment {\n constructor () {\n DepthSegment.constructor_.apply(this, arguments)\n }\n\n compareTo (obj) {\n const other = obj\n if (this._upwardSeg.minX() >= other._upwardSeg.maxX()) return 1\n if (this._upwardSeg.maxX() <= other._upwardSeg.minX()) return -1\n let orientIndex = this._upwardSeg.orientationIndex(other._upwardSeg)\n if (orientIndex !== 0) return orientIndex\n orientIndex = -1 * other._upwardSeg.orientationIndex(this._upwardSeg)\n if (orientIndex !== 0) return orientIndex\n return this._upwardSeg.compareTo(other._upwardSeg)\n }\n\n compareX (seg0, seg1) {\n const compare0 = seg0.p0.compareTo(seg1.p0)\n if (compare0 !== 0) return compare0\n return seg0.p1.compareTo(seg1.p1)\n }\n\n toString () {\n return this._upwardSeg.toString()\n }\n\n getClass () {\n return DepthSegment\n }\n\n get interfaces_ () {\n return [Comparable]\n }\n}\nDepthSegment.constructor_ = function () {\n this._upwardSeg = null\n this._leftDepth = null\n const seg = arguments[0]; const depth = arguments[1]\n this._upwardSeg = new LineSegment(seg)\n this._leftDepth = depth\n}\nSubgraphDepthLocater.DepthSegment = DepthSegment\nSubgraphDepthLocater.constructor_ = function () {\n this._subgraphs = null\n this._seg = new LineSegment()\n const subgraphs = arguments[0]\n this._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 UnsupportedOperationException from '../../../../../java/lang/UnsupportedOperationException'\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 constructor () {\n OffsetCurveSetBuilder.constructor_.apply(this, arguments)\n }\n\n addPoint (p) {\n if (this._distance <= 0.0) return null\n const coord = p.getCoordinates()\n const curve = this._curveBuilder.getLineCurve(coord, this._distance)\n this.addCurve(curve, Location.EXTERIOR, Location.INTERIOR)\n }\n\n addPolygon (p) {\n let offsetDistance = this._distance\n let offsetSide = Position.LEFT\n if (this._distance < 0.0) {\n offsetDistance = -this._distance\n offsetSide = Position.RIGHT\n }\n const shell = p.getExteriorRing()\n const shellCoord = CoordinateArrays.removeRepeatedPoints(shell.getCoordinates())\n if (this._distance < 0.0 && this.isErodedCompletely(shell, this._distance)) return null\n if (this._distance <= 0.0 && shellCoord.length < 3) return null\n this.addPolygonRing(shellCoord, offsetDistance, offsetSide, Location.EXTERIOR, Location.INTERIOR)\n for (let i = 0; i < p.getNumInteriorRing(); i++) {\n const hole = p.getInteriorRingN(i)\n const holeCoord = CoordinateArrays.removeRepeatedPoints(hole.getCoordinates())\n if (this._distance > 0.0 && this.isErodedCompletely(hole, -this._distance)) continue\n this.addPolygonRing(holeCoord, offsetDistance, Position.opposite(offsetSide), Location.INTERIOR, Location.EXTERIOR)\n }\n }\n\n isTriangleErodedCompletely (triangleCoord, bufferDistance) {\n const tri = new Triangle(triangleCoord[0], triangleCoord[1], triangleCoord[2])\n const inCentre = tri.inCentre()\n const distToCentre = Distance.pointToSegment(inCentre, tri.p0, tri.p1)\n return distToCentre < Math.abs(bufferDistance)\n }\n\n addLineString (line) {\n if (this._distance <= 0.0 && !this._curveBuilder.getBufferParameters().isSingleSided()) return null\n const coord = CoordinateArrays.removeRepeatedPoints(line.getCoordinates())\n const curve = this._curveBuilder.getLineCurve(coord, this._distance)\n this.addCurve(curve, Location.EXTERIOR, Location.INTERIOR)\n }\n\n addCurve (coord, leftLoc, rightLoc) {\n if (coord === null || coord.length < 2) return null\n const e = new NodedSegmentString(coord, new Label(0, Location.BOUNDARY, leftLoc, rightLoc))\n this._curveList.add(e)\n }\n\n getCurves () {\n this.add(this._inputGeom)\n return this._curveList\n }\n\n addPolygonRing (coord, offsetDistance, side, cwLeftLoc, cwRightLoc) {\n if (offsetDistance === 0.0 && coord.length < LinearRing.MINIMUM_VALID_SIZE) return null\n let leftLoc = cwLeftLoc\n let rightLoc = cwRightLoc\n if (coord.length >= LinearRing.MINIMUM_VALID_SIZE && Orientation.isCCW(coord)) {\n leftLoc = cwRightLoc\n rightLoc = cwLeftLoc\n side = Position.opposite(side)\n }\n const curve = this._curveBuilder.getRingCurve(coord, side, offsetDistance)\n this.addCurve(curve, leftLoc, rightLoc)\n }\n\n add (g) {\n if (g.isEmpty()) return null\n if (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 }\n\n isErodedCompletely (ring, bufferDistance) {\n const ringCoord = ring.getCoordinates()\n const minDiam = 0.0\n if (ringCoord.length < 4) return bufferDistance < 0\n if (ringCoord.length === 4) return this.isTriangleErodedCompletely(ringCoord, bufferDistance)\n const env = ring.getEnvelopeInternal()\n const envMinDimension = Math.min(env.getHeight(), env.getWidth())\n if (bufferDistance < 0.0 && 2 * Math.abs(bufferDistance) > envMinDimension) return true\n return false\n }\n\n addCollection (gc) {\n for (let i = 0; i < gc.getNumGeometries(); i++) {\n const g = gc.getGeometryN(i)\n this.add(g)\n }\n }\n\n getClass () {\n return OffsetCurveSetBuilder\n }\n\n get interfaces_ () {\n return []\n }\n}\nOffsetCurveSetBuilder.constructor_ = function () {\n this._inputGeom = null\n this._distance = null\n this._curveBuilder = null\n this._curveList = new ArrayList()\n const inputGeom = arguments[0]; const distance = arguments[1]; const curveBuilder = arguments[2]\n this._inputGeom = inputGeom\n this._distance = distance\n this._curveBuilder = curveBuilder\n}\n","import SegmentIntersector from './SegmentIntersector'\nexport default class IntersectionAdder {\n constructor () {\n IntersectionAdder.constructor_.apply(this, arguments)\n }\n\n static isAdjacentSegments (i1, i2) {\n return Math.abs(i1 - i2) === 1\n }\n\n isTrivialIntersection (e0, segIndex0, e1, segIndex1) {\n if (e0 === e1) {\n if (this._li.getIntersectionNum() === 1) {\n if (IntersectionAdder.isAdjacentSegments(segIndex0, segIndex1)) return true\n if (e0.isClosed()) {\n const maxSegIndex = e0.size() - 1\n if (segIndex0 === 0 && segIndex1 === maxSegIndex || segIndex1 === 0 && segIndex0 === maxSegIndex) {\n return true\n }\n }\n }\n }\n return false\n }\n\n getProperIntersectionPoint () {\n return this._properIntersectionPoint\n }\n\n hasProperInteriorIntersection () {\n return this._hasProperInterior\n }\n\n getLineIntersector () {\n return this._li\n }\n\n hasProperIntersection () {\n return this._hasProper\n }\n\n processIntersections (e0, segIndex0, e1, segIndex1) {\n if (e0 === e1 && segIndex0 === segIndex1) return null\n this.numTests++\n const p00 = e0.getCoordinates()[segIndex0]\n const p01 = e0.getCoordinates()[segIndex0 + 1]\n const p10 = e1.getCoordinates()[segIndex1]\n const p11 = e1.getCoordinates()[segIndex1 + 1]\n this._li.computeIntersection(p00, p01, p10, p11)\n if (this._li.hasIntersection()) {\n this.numIntersections++\n if (this._li.isInteriorIntersection()) {\n this.numInteriorIntersections++\n this._hasInterior = true\n }\n if (!this.isTrivialIntersection(e0, segIndex0, e1, segIndex1)) {\n this._hasIntersection = true\n e0.addIntersections(this._li, segIndex0, 0)\n e1.addIntersections(this._li, segIndex1, 1)\n if (this._li.isProper()) {\n this.numProperIntersections++\n this._hasProper = true\n this._hasProperInterior = true\n }\n }\n }\n }\n\n hasIntersection () {\n return this._hasIntersection\n }\n\n isDone () {\n return false\n }\n\n hasInteriorIntersection () {\n return this._hasInterior\n }\n\n getClass () {\n return IntersectionAdder\n }\n\n get interfaces_ () {\n return [SegmentIntersector]\n }\n}\nIntersectionAdder.constructor_ = function () {\n this._hasIntersection = false\n this._hasProper = false\n this._hasProperInterior = false\n this._hasInterior = false\n this._properIntersectionPoint = null\n this._li = null\n this._isSelfIntersection = null\n this.numIntersections = 0\n this.numInteriorIntersections = 0\n this.numProperIntersections = 0\n this.numTests = 0\n const li = arguments[0]\n this._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 constructor () {\n BufferBuilder.constructor_.apply(this, arguments)\n }\n\n static depthDelta (label) {\n const lLoc = label.getLocation(0, Position.LEFT)\n const rLoc = label.getLocation(0, Position.RIGHT)\n if (lLoc === Location.INTERIOR && rLoc === Location.EXTERIOR) return 1; else if (lLoc === Location.EXTERIOR && rLoc === Location.INTERIOR) return -1\n return 0\n }\n\n static convertSegStrings (it) {\n const fact = new GeometryFactory()\n const lines = new ArrayList()\n while (it.hasNext()) {\n const ss = it.next()\n const line = fact.createLineString(ss.getCoordinates())\n lines.add(line)\n }\n return fact.buildGeometry(lines)\n }\n\n setWorkingPrecisionModel (pm) {\n this._workingPrecisionModel = pm\n }\n\n insertUniqueEdge (e) {\n const existingEdge = this._edgeList.findEqualEdge(e)\n if (existingEdge !== null) {\n const existingLabel = existingEdge.getLabel()\n let labelToMerge = e.getLabel()\n if (!existingEdge.isPointwiseEqual(e)) {\n labelToMerge = new Label(e.getLabel())\n labelToMerge.flip()\n }\n existingLabel.merge(labelToMerge)\n const mergeDelta = BufferBuilder.depthDelta(labelToMerge)\n const existingDelta = existingEdge.getDepthDelta()\n const newDelta = existingDelta + mergeDelta\n existingEdge.setDepthDelta(newDelta)\n } else {\n this._edgeList.add(e)\n e.setDepthDelta(BufferBuilder.depthDelta(e.getLabel()))\n }\n }\n\n buildSubgraphs (subgraphList, polyBuilder) {\n const processedGraphs = new ArrayList()\n for (let i = subgraphList.iterator(); i.hasNext();) {\n const subgraph = i.next()\n const p = subgraph.getRightmostCoordinate()\n const locater = new SubgraphDepthLocater(processedGraphs)\n const outsideDepth = locater.getDepth(p)\n subgraph.computeDepth(outsideDepth)\n subgraph.findResultEdges()\n processedGraphs.add(subgraph)\n polyBuilder.add(subgraph.getDirectedEdges(), subgraph.getNodes())\n }\n }\n\n createSubgraphs (graph) {\n const subgraphList = new ArrayList()\n for (let i = graph.getNodes().iterator(); i.hasNext();) {\n const node = i.next()\n if (!node.isVisited()) {\n const subgraph = new BufferSubgraph()\n subgraph.create(node)\n subgraphList.add(subgraph)\n }\n }\n Collections.sort(subgraphList, Collections.reverseOrder())\n return subgraphList\n }\n\n createEmptyResultGeometry () {\n const emptyGeom = this._geomFact.createPolygon()\n return emptyGeom\n }\n\n getNoder (precisionModel) {\n if (this._workingNoder !== null) return this._workingNoder\n const noder = new MCIndexNoder()\n const li = new RobustLineIntersector()\n li.setPrecisionModel(precisionModel)\n noder.setSegmentIntersector(new IntersectionAdder(li))\n return noder\n }\n\n buffer (g, distance) {\n let precisionModel = this._workingPrecisionModel\n if (precisionModel === null) precisionModel = g.getPrecisionModel()\n this._geomFact = g.getFactory()\n const curveBuilder = new OffsetCurveBuilder(precisionModel, this._bufParams)\n const curveSetBuilder = new OffsetCurveSetBuilder(g, distance, curveBuilder)\n const bufferSegStrList = curveSetBuilder.getCurves()\n if (bufferSegStrList.size() <= 0) {\n return this.createEmptyResultGeometry()\n }\n this.computeNodedEdges(bufferSegStrList, precisionModel)\n this._graph = new PlanarGraph(new OverlayNodeFactory())\n this._graph.addEdges(this._edgeList.getEdges())\n const subgraphList = this.createSubgraphs(this._graph)\n const polyBuilder = new PolygonBuilder(this._geomFact)\n this.buildSubgraphs(subgraphList, polyBuilder)\n const resultPolyList = polyBuilder.getPolygons()\n if (resultPolyList.size() <= 0) {\n return this.createEmptyResultGeometry()\n }\n const resultGeom = this._geomFact.buildGeometry(resultPolyList)\n return resultGeom\n }\n\n computeNodedEdges (bufferSegStrList, precisionModel) {\n const noder = this.getNoder(precisionModel)\n noder.computeNodes(bufferSegStrList)\n const nodedSegStrings = noder.getNodedSubstrings()\n for (let i = nodedSegStrings.iterator(); i.hasNext();) {\n const segStr = i.next()\n const pts = segStr.getCoordinates()\n if (pts.length === 2 && pts[0].equals2D(pts[1])) continue\n const oldLabel = segStr.getData()\n const edge = new Edge(segStr.getCoordinates(), new Label(oldLabel))\n this.insertUniqueEdge(edge)\n }\n }\n\n setNoder (noder) {\n this._workingNoder = noder\n }\n\n getClass () {\n return BufferBuilder\n }\n\n get interfaces_ () {\n return []\n }\n}\nBufferBuilder.constructor_ = function () {\n this._bufParams = null\n this._workingPrecisionModel = null\n this._workingNoder = null\n this._geomFact = null\n this._graph = null\n this._edgeList = new EdgeList()\n const bufParams = arguments[0]\n this._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 constructor () {\n NodingValidator.constructor_.apply(this, arguments)\n }\n\n checkEndPtVertexIntersections () {\n if (arguments.length === 0) {\n for (let i = this._segStrings.iterator(); i.hasNext();) {\n const ss = i.next()\n const pts = ss.getCoordinates()\n this.checkEndPtVertexIntersections(pts[0], this._segStrings)\n this.checkEndPtVertexIntersections(pts[pts.length - 1], this._segStrings)\n }\n } else if (arguments.length === 2) {\n const testPt = arguments[0]; const segStrings = arguments[1]\n for (let i = segStrings.iterator(); i.hasNext();) {\n const ss = i.next()\n const pts = ss.getCoordinates()\n for (let j = 1; j < pts.length - 1; j++) {\n if (pts[j].equals(testPt)) throw new RuntimeException('found endpt/interior pt intersection at index ' + j + ' :pt ' + testPt)\n }\n }\n }\n }\n\n checkInteriorIntersections () {\n if (arguments.length === 0) {\n for (let i = this._segStrings.iterator(); i.hasNext();) {\n const ss0 = i.next()\n for (let j = this._segStrings.iterator(); j.hasNext();) {\n const ss1 = j.next()\n this.checkInteriorIntersections(ss0, ss1)\n }\n }\n } else if (arguments.length === 2) {\n const ss0 = arguments[0]; const ss1 = arguments[1]\n const pts0 = ss0.getCoordinates()\n const pts1 = ss1.getCoordinates()\n for (let i0 = 0; i0 < pts0.length - 1; i0++) {\n for (let i1 = 0; i1 < pts1.length - 1; i1++) {\n this.checkInteriorIntersections(ss0, i0, ss1, i1)\n }\n }\n } else if (arguments.length === 4) {\n const e0 = arguments[0]; const segIndex0 = arguments[1]; const e1 = arguments[2]; const segIndex1 = arguments[3]\n if (e0 === e1 && segIndex0 === segIndex1) return null\n const p00 = e0.getCoordinates()[segIndex0]\n const p01 = e0.getCoordinates()[segIndex0 + 1]\n const p10 = e1.getCoordinates()[segIndex1]\n const p11 = e1.getCoordinates()[segIndex1 + 1]\n this._li.computeIntersection(p00, p01, p10, p11)\n if (this._li.hasIntersection()) {\n if (this._li.isProper() || this.hasInteriorIntersection(this._li, p00, p01) || this.hasInteriorIntersection(this._li, p10, p11)) {\n throw new RuntimeException('found non-noded intersection at ' + p00 + '-' + p01 + ' and ' + p10 + '-' + p11)\n }\n }\n }\n }\n\n checkValid () {\n this.checkEndPtVertexIntersections()\n this.checkInteriorIntersections()\n this.checkCollapses()\n }\n\n checkCollapses () {\n if (arguments.length === 0) {\n for (let i = this._segStrings.iterator(); i.hasNext();) {\n const ss = i.next()\n this.checkCollapses(ss)\n }\n } else if (arguments.length === 1) {\n const ss = arguments[0]\n const pts = ss.getCoordinates()\n for (let i = 0; i < pts.length - 2; i++) {\n this.checkCollapse(pts[i], pts[i + 1], pts[i + 2])\n }\n }\n }\n\n hasInteriorIntersection (li, p0, p1) {\n for (let i = 0; i < li.getIntersectionNum(); i++) {\n const intPt = li.getIntersection(i)\n if (!(intPt.equals(p0) || intPt.equals(p1))) return true\n }\n return false\n }\n\n checkCollapse (p0, p1, p2) {\n if (p0.equals(p2)) throw new RuntimeException('found non-noded collapse at ' + NodingValidator.fact.createLineString([p0, p1, p2]))\n }\n\n getClass () {\n return NodingValidator\n }\n\n get interfaces_ () {\n return []\n }\n}\nNodingValidator.constructor_ = function () {\n this._li = new RobustLineIntersector()\n this._segStrings = null\n const segStrings = arguments[0]\n this._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 constructor () {\n HotPixel.constructor_.apply(this, arguments)\n }\n\n intersectsScaled (p0, p1) {\n const segMinx = Math.min(p0.x, p1.x)\n const segMaxx = Math.max(p0.x, p1.x)\n const segMiny = Math.min(p0.y, p1.y)\n const segMaxy = Math.max(p0.y, p1.y)\n const isOutsidePixelEnv = this._maxx < segMinx || this._minx > segMaxx || this._maxy < segMiny || this._miny > segMaxy\n if (isOutsidePixelEnv) return false\n const intersects = this.intersectsToleranceSquare(p0, p1)\n Assert.isTrue(!(isOutsidePixelEnv && intersects), 'Found bad envelope test')\n return intersects\n }\n\n initCorners (pt) {\n const tolerance = 0.5\n this._minx = pt.x - tolerance\n this._maxx = pt.x + tolerance\n this._miny = pt.y - tolerance\n this._maxy = pt.y + tolerance\n this._corner[0] = new Coordinate(this._maxx, this._maxy)\n this._corner[1] = new Coordinate(this._minx, this._maxy)\n this._corner[2] = new Coordinate(this._minx, this._miny)\n this._corner[3] = new Coordinate(this._maxx, this._miny)\n }\n\n intersects (p0, p1) {\n if (this._scaleFactor === 1.0) return this.intersectsScaled(p0, p1)\n this.copyScaled(p0, this._p0Scaled)\n this.copyScaled(p1, this._p1Scaled)\n return this.intersectsScaled(this._p0Scaled, this._p1Scaled)\n }\n\n scale (val) {\n return Math.round(val * this._scaleFactor)\n }\n\n getCoordinate () {\n return this._originalPt\n }\n\n copyScaled (p, pScaled) {\n pScaled.x = this.scale(p.x)\n pScaled.y = this.scale(p.y)\n }\n\n getSafeEnvelope () {\n if (this._safeEnv === null) {\n const safeTolerance = HotPixel.SAFE_ENV_EXPANSION_FACTOR / this._scaleFactor\n this._safeEnv = new Envelope(this._originalPt.x - safeTolerance, this._originalPt.x + safeTolerance, this._originalPt.y - safeTolerance, this._originalPt.y + safeTolerance)\n }\n return this._safeEnv\n }\n\n intersectsPixelClosure (p0, p1) {\n this._li.computeIntersection(p0, p1, this._corner[0], this._corner[1])\n if (this._li.hasIntersection()) return true\n this._li.computeIntersection(p0, p1, this._corner[1], this._corner[2])\n if (this._li.hasIntersection()) return true\n this._li.computeIntersection(p0, p1, this._corner[2], this._corner[3])\n if (this._li.hasIntersection()) return true\n this._li.computeIntersection(p0, p1, this._corner[3], this._corner[0])\n if (this._li.hasIntersection()) return true\n return false\n }\n\n intersectsToleranceSquare (p0, p1) {\n let intersectsLeft = false\n let intersectsBottom = false\n this._li.computeIntersection(p0, p1, this._corner[0], this._corner[1])\n if (this._li.isProper()) return true\n this._li.computeIntersection(p0, p1, this._corner[1], this._corner[2])\n if (this._li.isProper()) return true\n if (this._li.hasIntersection()) intersectsLeft = true\n this._li.computeIntersection(p0, p1, this._corner[2], this._corner[3])\n if (this._li.isProper()) return true\n if (this._li.hasIntersection()) intersectsBottom = true\n this._li.computeIntersection(p0, p1, this._corner[3], this._corner[0])\n if (this._li.isProper()) return true\n if (intersectsLeft && intersectsBottom) return true\n if (p0.equals(this._pt)) return true\n if (p1.equals(this._pt)) return true\n return false\n }\n\n addSnappedNode (segStr, segIndex) {\n const p0 = segStr.getCoordinate(segIndex)\n const p1 = segStr.getCoordinate(segIndex + 1)\n if (this.intersects(p0, p1)) {\n segStr.addIntersection(this.getCoordinate(), segIndex)\n return true\n }\n return false\n }\n\n getClass () {\n return HotPixel\n }\n\n get interfaces_ () {\n return []\n }\n}\nHotPixel.constructor_ = function () {\n this._li = null\n this._pt = null\n this._originalPt = null\n this._ptScaled = null\n this._p0Scaled = null\n this._p1Scaled = null\n this._scaleFactor = null\n this._minx = null\n this._maxx = null\n this._miny = null\n this._maxy = null\n this._corner = new Array(4).fill(null)\n this._safeEnv = null\n const pt = arguments[0]; const scaleFactor = arguments[1]; const li = arguments[2]\n this._originalPt = pt\n this._pt = pt\n this._scaleFactor = scaleFactor\n this._li = li\n if (scaleFactor <= 0) throw new IllegalArgumentException('Scale factor must be non-zero')\n if (scaleFactor !== 1.0) {\n this._pt = new Coordinate(this.scale(pt.x), this.scale(pt.y))\n this._p0Scaled = new Coordinate()\n this._p1Scaled = new Coordinate()\n }\n this.initCorners(this._pt)\n}\nHotPixel.SAFE_ENV_EXPANSION_FACTOR = 0.75\n","import LineSegment from '../../geom/LineSegment'\nexport default class MonotoneChainSelectAction {\n constructor () {\n MonotoneChainSelectAction.constructor_.apply(this, arguments)\n }\n\n select () {\n if (arguments.length === 1) {\n const seg = arguments[0]\n } else if (arguments.length === 2) {\n const mc = arguments[0]; const startIndex = arguments[1]\n mc.getLineSegment(startIndex, this.selectedSegment)\n this.select(this.selectedSegment)\n }\n }\n\n getClass () {\n return MonotoneChainSelectAction\n }\n\n get interfaces_ () {\n return []\n }\n}\nMonotoneChainSelectAction.constructor_ = function () {\n this.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 constructor () {\n MCIndexPointSnapper.constructor_.apply(this, arguments)\n }\n\n snap () {\n if (arguments.length === 1) {\n const hotPixel = arguments[0]\n return this.snap(hotPixel, null, -1)\n } else if (arguments.length === 3) {\n const hotPixel = arguments[0]; const parentEdge = arguments[1]; const hotPixelVertexIndex = arguments[2]\n const pixelEnv = hotPixel.getSafeEnvelope()\n const hotPixelSnapAction = new HotPixelSnapAction(hotPixel, parentEdge, hotPixelVertexIndex)\n this._index.query(pixelEnv, new (class {\n get interfaces_ () {\n return [ItemVisitor]\n }\n\n visitItem (item) {\n const testChain = item\n testChain.select(pixelEnv, hotPixelSnapAction)\n }\n })())\n return hotPixelSnapAction.isNodeAdded()\n }\n }\n\n getClass () {\n return MCIndexPointSnapper\n }\n\n get interfaces_ () {\n return []\n }\n}\nclass HotPixelSnapAction extends MonotoneChainSelectAction {\n constructor () {\n super()\n HotPixelSnapAction.constructor_.apply(this, arguments)\n }\n\n isNodeAdded () {\n return this._isNodeAdded\n }\n\n select () {\n if (arguments.length === 2 && (Number.isInteger(arguments[1]) && arguments[0] instanceof MonotoneChain)) {\n const mc = arguments[0]; const startIndex = arguments[1]\n const ss = mc.getContext()\n if (this._parentEdge !== null) {\n if (ss === this._parentEdge && startIndex === this._hotPixelVertexIndex) return null\n }\n this._isNodeAdded = this._hotPixel.addSnappedNode(ss, startIndex)\n } else return super.select.apply(this, arguments)\n }\n\n getClass () {\n return HotPixelSnapAction\n }\n\n get interfaces_ () {\n return []\n }\n}\nHotPixelSnapAction.constructor_ = function () {\n this._hotPixel = null\n this._parentEdge = null\n this._hotPixelVertexIndex = null\n this._isNodeAdded = false\n const hotPixel = arguments[0]; const parentEdge = arguments[1]; const hotPixelVertexIndex = arguments[2]\n this._hotPixel = hotPixel\n this._parentEdge = parentEdge\n this._hotPixelVertexIndex = hotPixelVertexIndex\n}\nMCIndexPointSnapper.HotPixelSnapAction = HotPixelSnapAction\nMCIndexPointSnapper.constructor_ = function () {\n this._index = null\n const index = arguments[0]\n this._index = index\n}\n","import SegmentIntersector from './SegmentIntersector'\nimport ArrayList from '../../../../java/util/ArrayList'\nexport default class InteriorIntersectionFinderAdder {\n constructor () {\n InteriorIntersectionFinderAdder.constructor_.apply(this, arguments)\n }\n\n processIntersections (e0, segIndex0, e1, segIndex1) {\n if (e0 === e1 && segIndex0 === segIndex1) return null\n const p00 = e0.getCoordinates()[segIndex0]\n const p01 = e0.getCoordinates()[segIndex0 + 1]\n const p10 = e1.getCoordinates()[segIndex1]\n const p11 = e1.getCoordinates()[segIndex1 + 1]\n this._li.computeIntersection(p00, p01, p10, p11)\n if (this._li.hasIntersection()) {\n if (this._li.isInteriorIntersection()) {\n for (let intIndex = 0; intIndex < this._li.getIntersectionNum(); intIndex++) {\n this._interiorIntersections.add(this._li.getIntersection(intIndex))\n }\n e0.addIntersections(this._li, segIndex0, 0)\n e1.addIntersections(this._li, segIndex1, 1)\n }\n }\n }\n\n isDone () {\n return false\n }\n\n getInteriorIntersections () {\n return this._interiorIntersections\n }\n\n getClass () {\n return InteriorIntersectionFinderAdder\n }\n\n get interfaces_ () {\n return [SegmentIntersector]\n }\n}\nInteriorIntersectionFinderAdder.constructor_ = function () {\n this._li = null\n this._interiorIntersections = null\n const li = arguments[0]\n this._li = li\n this._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 constructor () {\n MCIndexSnapRounder.constructor_.apply(this, arguments)\n }\n\n checkCorrectness (inputSegmentStrings) {\n const resultSegStrings = NodedSegmentString.getNodedSubstrings(inputSegmentStrings)\n const nv = new NodingValidator(resultSegStrings)\n try {\n nv.checkValid()\n } catch (ex) {\n if (ex instanceof Exception) {\n ex.printStackTrace()\n } else throw ex\n } finally {}\n }\n\n getNodedSubstrings () {\n return NodedSegmentString.getNodedSubstrings(this._nodedSegStrings)\n }\n\n snapRound (segStrings, li) {\n const intersections = this.findInteriorIntersections(segStrings, li)\n this.computeIntersectionSnaps(intersections)\n this.computeVertexSnaps(segStrings)\n }\n\n findInteriorIntersections (segStrings, li) {\n const intFinderAdder = new InteriorIntersectionFinderAdder(li)\n this._noder.setSegmentIntersector(intFinderAdder)\n this._noder.computeNodes(segStrings)\n return intFinderAdder.getInteriorIntersections()\n }\n\n computeVertexSnaps () {\n if (hasInterface(arguments[0], Collection)) {\n const edges = arguments[0]\n for (let i0 = edges.iterator(); i0.hasNext();) {\n const edge0 = i0.next()\n this.computeVertexSnaps(edge0)\n }\n } else if (arguments[0] instanceof NodedSegmentString) {\n const e = arguments[0]\n const pts0 = e.getCoordinates()\n for (let i = 0; i < pts0.length; i++) {\n const hotPixel = new HotPixel(pts0[i], this._scaleFactor, this._li)\n const isNodeAdded = this._pointSnapper.snap(hotPixel, e, i)\n if (isNodeAdded) {\n e.addIntersection(pts0[i], i)\n }\n }\n }\n }\n\n computeNodes (inputSegmentStrings) {\n this._nodedSegStrings = inputSegmentStrings\n this._noder = new MCIndexNoder()\n this._pointSnapper = new MCIndexPointSnapper(this._noder.getIndex())\n this.snapRound(inputSegmentStrings, this._li)\n }\n\n computeIntersectionSnaps (snapPts) {\n for (let it = snapPts.iterator(); it.hasNext();) {\n const snapPt = it.next()\n const hotPixel = new HotPixel(snapPt, this._scaleFactor, this._li)\n this._pointSnapper.snap(hotPixel)\n }\n }\n\n getClass () {\n return MCIndexSnapRounder\n }\n\n get interfaces_ () {\n return [Noder]\n }\n}\nMCIndexSnapRounder.constructor_ = function () {\n this._pm = null\n this._li = null\n this._scaleFactor = null\n this._noder = null\n this._pointSnapper = null\n this._nodedSegStrings = null\n const pm = arguments[0]\n this._pm = pm\n this._li = new RobustLineIntersector()\n this._li.setPrecisionModel(pm)\n this._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 constructor () {\n BufferOp.constructor_.apply(this, arguments)\n }\n\n static bufferOp () {\n if (arguments.length === 2) {\n const g = arguments[0]; const distance = arguments[1]\n const gBuf = new BufferOp(g)\n const geomBuf = gBuf.getResultGeometry(distance)\n return geomBuf\n } else if (arguments.length === 3) {\n if (Number.isInteger(arguments[2]) && (arguments[0] instanceof Geometry && typeof arguments[1] === 'number')) {\n const g = arguments[0]; const distance = arguments[1]; const quadrantSegments = arguments[2]\n const bufOp = new BufferOp(g)\n bufOp.setQuadrantSegments(quadrantSegments)\n const geomBuf = bufOp.getResultGeometry(distance)\n return geomBuf\n } else if (arguments[2] instanceof BufferParameters && (arguments[0] instanceof Geometry && typeof arguments[1] === 'number')) {\n const g = arguments[0]; const distance = arguments[1]; const params = arguments[2]\n const bufOp = new BufferOp(g, params)\n const geomBuf = bufOp.getResultGeometry(distance)\n return geomBuf\n }\n } else if (arguments.length === 4) {\n const g = arguments[0]; const distance = arguments[1]; const quadrantSegments = arguments[2]; const endCapStyle = arguments[3]\n const bufOp = new BufferOp(g)\n bufOp.setQuadrantSegments(quadrantSegments)\n bufOp.setEndCapStyle(endCapStyle)\n const geomBuf = bufOp.getResultGeometry(distance)\n return geomBuf\n }\n }\n\n static precisionScaleFactor (g, distance, maxPrecisionDigits) {\n const env = g.getEnvelopeInternal()\n const envMax = MathUtil.max(Math.abs(env.getMaxX()), Math.abs(env.getMaxY()), Math.abs(env.getMinX()), Math.abs(env.getMinY()))\n const expandByDistance = distance > 0.0 ? distance : 0.0\n const bufEnvMax = envMax + 2 * expandByDistance\n const bufEnvPrecisionDigits = Math.trunc(Math.log(bufEnvMax) / Math.log(10) + 1.0)\n const minUnitLog10 = maxPrecisionDigits - bufEnvPrecisionDigits\n const scaleFactor = Math.pow(10.0, minUnitLog10)\n return scaleFactor\n }\n\n bufferFixedPrecision (fixedPM) {\n const noder = new ScaledNoder(new MCIndexSnapRounder(new PrecisionModel(1.0)), fixedPM.getScale())\n const bufBuilder = new BufferBuilder(this._bufParams)\n bufBuilder.setWorkingPrecisionModel(fixedPM)\n bufBuilder.setNoder(noder)\n this._resultGeometry = bufBuilder.buffer(this._argGeom, this._distance)\n }\n\n bufferReducedPrecision () {\n if (arguments.length === 0) {\n for (let precDigits = BufferOp.MAX_PRECISION_DIGITS; precDigits >= 0; precDigits--) {\n try {\n this.bufferReducedPrecision(precDigits)\n } catch (ex) {\n if (ex instanceof TopologyException) {\n this._saveException = ex\n } else throw ex\n } finally {}\n if (this._resultGeometry !== null) return null\n }\n throw this._saveException\n } else if (arguments.length === 1) {\n const precisionDigits = arguments[0]\n const sizeBasedScaleFactor = BufferOp.precisionScaleFactor(this._argGeom, this._distance, precisionDigits)\n const fixedPM = new PrecisionModel(sizeBasedScaleFactor)\n this.bufferFixedPrecision(fixedPM)\n }\n }\n\n computeGeometry () {\n this.bufferOriginalPrecision()\n if (this._resultGeometry !== null) return null\n const argPM = this._argGeom.getFactory().getPrecisionModel()\n if (argPM.getType() === PrecisionModel.FIXED) this.bufferFixedPrecision(argPM); else this.bufferReducedPrecision()\n }\n\n setQuadrantSegments (quadrantSegments) {\n this._bufParams.setQuadrantSegments(quadrantSegments)\n }\n\n bufferOriginalPrecision () {\n try {\n const bufBuilder = new BufferBuilder(this._bufParams)\n this._resultGeometry = bufBuilder.buffer(this._argGeom, this._distance)\n } catch (ex) {\n if (ex instanceof RuntimeException) {\n this._saveException = ex\n } else throw ex\n } finally {}\n }\n\n getResultGeometry (distance) {\n this._distance = distance\n this.computeGeometry()\n return this._resultGeometry\n }\n\n setEndCapStyle (endCapStyle) {\n this._bufParams.setEndCapStyle(endCapStyle)\n }\n\n getClass () {\n return BufferOp\n }\n\n get interfaces_ () {\n return []\n }\n}\nBufferOp.constructor_ = function () {\n this._argGeom = null\n this._distance = null\n this._bufParams = new BufferParameters()\n this._resultGeometry = null\n this._saveException = null\n if (arguments.length === 1) {\n const g = arguments[0]\n this._argGeom = g\n } else if (arguments.length === 2) {\n const g = arguments[0]; const bufParams = arguments[1]\n this._argGeom = g\n this._bufParams = bufParams\n }\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","export default class GeometryLocation {\n constructor () {\n GeometryLocation.constructor_.apply(this, arguments)\n }\n\n isInsideArea () {\n return this._segIndex === GeometryLocation.INSIDE_AREA\n }\n\n getCoordinate () {\n return this._pt\n }\n\n getGeometryComponent () {\n return this._component\n }\n\n getSegmentIndex () {\n return this._segIndex\n }\n\n getClass () {\n return GeometryLocation\n }\n\n get interfaces_ () {\n return []\n }\n}\nGeometryLocation.constructor_ = function () {\n this._component = null\n this._segIndex = null\n this._pt = null\n if (arguments.length === 2) {\n const component = arguments[0]; const pt = arguments[1]\n GeometryLocation.constructor_.call(this, component, GeometryLocation.INSIDE_AREA, pt)\n } else if (arguments.length === 3) {\n const component = arguments[0]; const segIndex = arguments[1]; const pt = arguments[2]\n this._component = component\n this._segIndex = segIndex\n this._pt = pt\n }\n}\nGeometryLocation.INSIDE_AREA = -1\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 constructor () {\n ConnectedElementLocationFilter.constructor_.apply(this, arguments)\n }\n\n static getLocations (geom) {\n const locations = new ArrayList()\n geom.apply(new ConnectedElementLocationFilter(locations))\n return locations\n }\n\n filter (geom) {\n if (geom instanceof Point || geom instanceof LineString || geom instanceof Polygon) this._locations.add(new GeometryLocation(geom, 0, geom.getCoordinate()))\n }\n\n getClass () {\n return ConnectedElementLocationFilter\n }\n\n get interfaces_ () {\n return [GeometryFilter]\n }\n}\nConnectedElementLocationFilter.constructor_ = function () {\n this._locations = null\n const locations = arguments[0]\n this._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 constructor () {\n DistanceOp.constructor_.apply(this, arguments)\n }\n\n static distance (g0, g1) {\n const distOp = new DistanceOp(g0, g1)\n return distOp.distance()\n }\n\n static isWithinDistance (g0, g1, distance) {\n const envDist = g0.getEnvelopeInternal().distance(g1.getEnvelopeInternal())\n if (envDist > distance) return false\n const distOp = new DistanceOp(g0, g1, distance)\n return distOp.distance() <= distance\n }\n\n static nearestPoints (g0, g1) {\n const distOp = new DistanceOp(g0, g1)\n return distOp.nearestPoints()\n }\n\n computeContainmentDistance () {\n if (arguments.length === 0) {\n const locPtPoly = new Array(2).fill(null)\n this.computeContainmentDistance(0, locPtPoly)\n if (this._minDistance <= this._terminateDistance) return null\n this.computeContainmentDistance(1, locPtPoly)\n } else if (arguments.length === 2) {\n const polyGeomIndex = arguments[0]; const locPtPoly = arguments[1]\n const polyGeom = this._geom[polyGeomIndex]\n if (polyGeom.getDimension() < 2) return null\n const locationsIndex = 1 - polyGeomIndex\n const polys = PolygonExtracter.getPolygons(polyGeom)\n if (polys.size() > 0) {\n const insideLocs = ConnectedElementLocationFilter.getLocations(this._geom[locationsIndex])\n this.computeContainmentDistance(insideLocs, polys, locPtPoly)\n if (this._minDistance <= this._terminateDistance) {\n this._minDistanceLocation[locationsIndex] = locPtPoly[0]\n this._minDistanceLocation[polyGeomIndex] = locPtPoly[1]\n return null\n }\n }\n } else if (arguments.length === 3) {\n if (arguments[2] instanceof Array && (hasInterface(arguments[0], List) && hasInterface(arguments[1], List))) {\n const locs = arguments[0]; const polys = arguments[1]; const locPtPoly = arguments[2]\n for (let i = 0; i < locs.size(); i++) {\n const loc = locs.get(i)\n for (let j = 0; j < polys.size(); j++) {\n this.computeContainmentDistance(loc, polys.get(j), locPtPoly)\n if (this._minDistance <= this._terminateDistance) return null\n }\n }\n } else if (arguments[2] instanceof Array && (arguments[0] instanceof GeometryLocation && arguments[1] instanceof Polygon)) {\n const ptLoc = arguments[0]; const poly = arguments[1]; const locPtPoly = arguments[2]\n const pt = ptLoc.getCoordinate()\n if (Location.EXTERIOR !== this._ptLocator.locate(pt, poly)) {\n this._minDistance = 0.0\n locPtPoly[0] = ptLoc\n locPtPoly[1] = new GeometryLocation(poly, pt)\n\n return null\n }\n }\n }\n }\n\n computeMinDistanceLinesPoints (lines, points, locGeom) {\n for (let i = 0; i < lines.size(); i++) {\n const line = lines.get(i)\n for (let j = 0; j < points.size(); j++) {\n const pt = points.get(j)\n this.computeMinDistance(line, pt, locGeom)\n if (this._minDistance <= this._terminateDistance) return null\n }\n }\n }\n\n computeFacetDistance () {\n const locGeom = new Array(2).fill(null)\n const lines0 = LinearComponentExtracter.getLines(this._geom[0])\n const lines1 = LinearComponentExtracter.getLines(this._geom[1])\n const pts0 = PointExtracter.getPoints(this._geom[0])\n const pts1 = PointExtracter.getPoints(this._geom[1])\n this.computeMinDistanceLines(lines0, lines1, locGeom)\n this.updateMinDistance(locGeom, false)\n if (this._minDistance <= this._terminateDistance) return null\n locGeom[0] = null\n locGeom[1] = null\n this.computeMinDistanceLinesPoints(lines0, pts1, locGeom)\n this.updateMinDistance(locGeom, false)\n if (this._minDistance <= this._terminateDistance) return null\n locGeom[0] = null\n locGeom[1] = null\n this.computeMinDistanceLinesPoints(lines1, pts0, locGeom)\n this.updateMinDistance(locGeom, true)\n if (this._minDistance <= this._terminateDistance) return null\n locGeom[0] = null\n locGeom[1] = null\n this.computeMinDistancePoints(pts0, pts1, locGeom)\n this.updateMinDistance(locGeom, false)\n }\n\n nearestLocations () {\n this.computeMinDistance()\n return this._minDistanceLocation\n }\n\n updateMinDistance (locGeom, flip) {\n if (locGeom[0] === null) return null\n if (flip) {\n this._minDistanceLocation[0] = locGeom[1]\n this._minDistanceLocation[1] = locGeom[0]\n } else {\n this._minDistanceLocation[0] = locGeom[0]\n this._minDistanceLocation[1] = locGeom[1]\n }\n }\n\n nearestPoints () {\n this.computeMinDistance()\n const nearestPts = [this._minDistanceLocation[0].getCoordinate(), this._minDistanceLocation[1].getCoordinate()]\n return nearestPts\n }\n\n computeMinDistance () {\n if (arguments.length === 0) {\n if (this._minDistanceLocation !== null) return null\n this._minDistanceLocation = new Array(2).fill(null)\n this.computeContainmentDistance()\n if (this._minDistance <= this._terminateDistance) return null\n this.computeFacetDistance()\n } else if (arguments.length === 3) {\n if (arguments[2] instanceof Array && (arguments[0] instanceof LineString && arguments[1] instanceof Point)) {\n const line = arguments[0]; const pt = arguments[1]; const locGeom = arguments[2]\n if (line.getEnvelopeInternal().distance(pt.getEnvelopeInternal()) > this._minDistance) return null\n const coord0 = line.getCoordinates()\n const coord = pt.getCoordinate()\n for (let i = 0; i < coord0.length - 1; i++) {\n const dist = Distance.pointToSegment(coord, coord0[i], coord0[i + 1])\n if (dist < this._minDistance) {\n this._minDistance = dist\n const seg = new LineSegment(coord0[i], coord0[i + 1])\n const segClosestPoint = seg.closestPoint(coord)\n locGeom[0] = new GeometryLocation(line, i, segClosestPoint)\n locGeom[1] = new GeometryLocation(pt, 0, coord)\n }\n if (this._minDistance <= this._terminateDistance) return null\n }\n } else if (arguments[2] instanceof Array && (arguments[0] instanceof LineString && arguments[1] instanceof LineString)) {\n const line0 = arguments[0]; const line1 = arguments[1]; const locGeom = arguments[2]\n if (line0.getEnvelopeInternal().distance(line1.getEnvelopeInternal()) > this._minDistance) return null\n const coord0 = line0.getCoordinates()\n const coord1 = line1.getCoordinates()\n for (let i = 0; i < coord0.length - 1; i++) {\n for (let j = 0; j < coord1.length - 1; j++) {\n const dist = Distance.segmentToSegment(coord0[i], coord0[i + 1], coord1[j], coord1[j + 1])\n if (dist < this._minDistance) {\n this._minDistance = dist\n const seg0 = new LineSegment(coord0[i], coord0[i + 1])\n const seg1 = new LineSegment(coord1[j], coord1[j + 1])\n const closestPt = seg0.closestPoints(seg1)\n locGeom[0] = new GeometryLocation(line0, i, closestPt[0])\n locGeom[1] = new GeometryLocation(line1, j, closestPt[1])\n }\n if (this._minDistance <= this._terminateDistance) return null\n }\n }\n }\n }\n }\n\n computeMinDistancePoints (points0, points1, locGeom) {\n for (let i = 0; i < points0.size(); i++) {\n const pt0 = points0.get(i)\n for (let j = 0; j < points1.size(); j++) {\n const pt1 = points1.get(j)\n const dist = pt0.getCoordinate().distance(pt1.getCoordinate())\n if (dist < this._minDistance) {\n this._minDistance = dist\n locGeom[0] = new GeometryLocation(pt0, 0, pt0.getCoordinate())\n locGeom[1] = new GeometryLocation(pt1, 0, pt1.getCoordinate())\n }\n if (this._minDistance <= this._terminateDistance) return null\n }\n }\n }\n\n distance () {\n if (this._geom[0] === null || this._geom[1] === null) throw new IllegalArgumentException('null geometries are not supported')\n if (this._geom[0].isEmpty() || this._geom[1].isEmpty()) return 0.0\n this.computeMinDistance()\n return this._minDistance\n }\n\n computeMinDistanceLines (lines0, lines1, locGeom) {\n for (let i = 0; i < lines0.size(); i++) {\n const line0 = lines0.get(i)\n for (let j = 0; j < lines1.size(); j++) {\n const line1 = lines1.get(j)\n this.computeMinDistance(line0, line1, locGeom)\n if (this._minDistance <= this._terminateDistance) return null\n }\n }\n }\n\n getClass () {\n return DistanceOp\n }\n\n get interfaces_ () {\n return []\n }\n}\nDistanceOp.constructor_ = function () {\n this._geom = null\n this._terminateDistance = 0.0\n this._ptLocator = new PointLocator()\n this._minDistanceLocation = null\n this._minDistance = Double.MAX_VALUE\n if (arguments.length === 2) {\n const g0 = arguments[0]; const g1 = arguments[1]\n DistanceOp.constructor_.call(this, g0, g1, 0.0)\n } else if (arguments.length === 3) {\n const g0 = arguments[0]; const g1 = arguments[1]; const terminateDistance = arguments[2]\n this._geom = new Array(2).fill(null)\n this._geom[0] = g0\n this._geom[1] = g1\n this._terminateDistance = terminateDistance\n }\n}\n","import CoordinateList from '../../geom/CoordinateList'\nimport CoordinateArrays from '../../geom/CoordinateArrays'\nimport ArrayList from '../../../../../java/util/ArrayList'\nexport default class EdgeString {\n constructor () {\n EdgeString.constructor_.apply(this, arguments)\n }\n\n getCoordinates () {\n if (this._coordinates === null) {\n let forwardDirectedEdges = 0\n let reverseDirectedEdges = 0\n const coordinateList = new CoordinateList()\n for (let i = this._directedEdges.iterator(); i.hasNext();) {\n const directedEdge = i.next()\n if (directedEdge.getEdgeDirection()) {\n forwardDirectedEdges++\n } else {\n reverseDirectedEdges++\n }\n coordinateList.add(directedEdge.getEdge().getLine().getCoordinates(), false, directedEdge.getEdgeDirection())\n }\n this._coordinates = coordinateList.toCoordinateArray()\n if (reverseDirectedEdges > forwardDirectedEdges) {\n CoordinateArrays.reverse(this._coordinates)\n }\n }\n return this._coordinates\n }\n\n toLineString () {\n return this._factory.createLineString(this.getCoordinates())\n }\n\n add (directedEdge) {\n this._directedEdges.add(directedEdge)\n }\n\n getClass () {\n return EdgeString\n }\n\n get interfaces_ () {\n return []\n }\n}\nEdgeString.constructor_ = function () {\n this._factory = null\n this._directedEdges = new ArrayList()\n this._coordinates = null\n const factory = arguments[0]\n this._factory = factory\n}\n","export default class GraphComponent {\n constructor () {\n GraphComponent.constructor_.apply(this, arguments)\n }\n\n static getComponentWithVisitedState (i, visitedState) {\n while (i.hasNext()) {\n const comp = i.next()\n if (comp.isVisited() === visitedState) return comp\n }\n return null\n }\n\n static setVisited (i, visited) {\n while (i.hasNext()) {\n const comp = i.next()\n comp.setVisited(visited)\n }\n }\n\n static setMarked (i, marked) {\n while (i.hasNext()) {\n const comp = i.next()\n comp.setMarked(marked)\n }\n }\n\n setVisited (isVisited) {\n this._isVisited = isVisited\n }\n\n isMarked () {\n return this._isMarked\n }\n\n setData (data) {\n this._data = data\n }\n\n getData () {\n return this._data\n }\n\n setMarked (isMarked) {\n this._isMarked = isMarked\n }\n\n getContext () {\n return this._data\n }\n\n isVisited () {\n return this._isVisited\n }\n\n setContext (data) {\n this._data = data\n }\n\n getClass () {\n return GraphComponent\n }\n\n get interfaces_ () {\n return []\n }\n}\nGraphComponent.constructor_ = function () {\n this._isMarked = false\n this._isVisited = false\n this._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 constructor () {\n super()\n DirectedEdge.constructor_.apply(this, arguments)\n }\n\n static toEdges (dirEdges) {\n const edges = new ArrayList()\n for (let i = dirEdges.iterator(); i.hasNext();) {\n edges.add(i.next()._parentEdge)\n }\n return edges\n }\n\n isRemoved () {\n return this._parentEdge === null\n }\n\n compareDirection (e) {\n if (this._quadrant > e._quadrant) return 1\n if (this._quadrant < e._quadrant) return -1\n return Orientation.index(e._p0, e._p1, this._p1)\n }\n\n getCoordinate () {\n return this._from.getCoordinate()\n }\n\n print (out) {\n const className = this.getClass().getName()\n const lastDotPos = className.lastIndexOf('.')\n const name = className.substring(lastDotPos + 1)\n out.print(' ' + name + ': ' + this._p0 + ' - ' + this._p1 + ' ' + this._quadrant + ':' + this._angle)\n }\n\n getDirectionPt () {\n return this._p1\n }\n\n getAngle () {\n return this._angle\n }\n\n compareTo (obj) {\n const de = obj\n return this.compareDirection(de)\n }\n\n getFromNode () {\n return this._from\n }\n\n getSym () {\n return this._sym\n }\n\n setEdge (parentEdge) {\n this._parentEdge = parentEdge\n }\n\n remove () {\n this._sym = null\n this._parentEdge = null\n }\n\n getEdge () {\n return this._parentEdge\n }\n\n getQuadrant () {\n return this._quadrant\n }\n\n setSym (sym) {\n this._sym = sym\n }\n\n getToNode () {\n return this._to\n }\n\n getEdgeDirection () {\n return this._edgeDirection\n }\n\n getClass () {\n return DirectedEdge\n }\n\n get interfaces_ () {\n return [Comparable]\n }\n}\nDirectedEdge.constructor_ = function () {\n this._parentEdge = null\n this._from = null\n this._to = null\n this._p0 = null\n this._p1 = null\n this._sym = null\n this._edgeDirection = null\n this._quadrant = null\n this._angle = null\n if (arguments.length === 0) {} else if (arguments.length === 4) {\n const from = arguments[0]; const to = arguments[1]; const directionPt = arguments[2]; const edgeDirection = arguments[3]\n this._from = from\n this._to = to\n this._edgeDirection = edgeDirection\n this._p0 = from.getCoordinate()\n this._p1 = directionPt\n const dx = this._p1.x - this._p0.x\n const dy = this._p1.y - this._p0.y\n this._quadrant = Quadrant.quadrant(dx, dy)\n this._angle = Math.atan2(dy, dx)\n }\n}\n","import DirectedEdge from '../../planargraph/DirectedEdge'\nimport Assert from '../../util/Assert'\nexport default class LineMergeDirectedEdge extends DirectedEdge {\n constructor () {\n super()\n LineMergeDirectedEdge.constructor_.apply(this, arguments)\n }\n\n getNext () {\n if (this.getToNode().getDegree() !== 2) {\n return null\n }\n if (this.getToNode().getOutEdges().getEdges().get(0) === this.getSym()) {\n return this.getToNode().getOutEdges().getEdges().get(1)\n }\n Assert.isTrue(this.getToNode().getOutEdges().getEdges().get(1) === this.getSym())\n return this.getToNode().getOutEdges().getEdges().get(0)\n }\n\n getClass () {\n return LineMergeDirectedEdge\n }\n\n get interfaces_ () {\n return []\n }\n}\nLineMergeDirectedEdge.constructor_ = function () {\n const from = arguments[0]; const to = arguments[1]; const directionPt = arguments[2]; const edgeDirection = arguments[3]\n DirectedEdge.constructor_.call(this, from, to, directionPt, edgeDirection)\n}\n","import Node from './Node'\nimport GraphComponent from './GraphComponent'\nexport default class Edge extends GraphComponent {\n constructor () {\n super()\n Edge.constructor_.apply(this, arguments)\n }\n\n isRemoved () {\n return this._dirEdge === null\n }\n\n setDirectedEdges (de0, de1) {\n this._dirEdge = [de0, de1]\n de0.setEdge(this)\n de1.setEdge(this)\n de0.setSym(de1)\n de1.setSym(de0)\n de0.getFromNode().addOutEdge(de0)\n de1.getFromNode().addOutEdge(de1)\n }\n\n getDirEdge () {\n if (Number.isInteger(arguments[0])) {\n const i = arguments[0]\n return this._dirEdge[i]\n } else if (arguments[0] instanceof Node) {\n const fromNode = arguments[0]\n if (this._dirEdge[0].getFromNode() === fromNode) return this._dirEdge[0]\n if (this._dirEdge[1].getFromNode() === fromNode) return this._dirEdge[1]\n return null\n }\n }\n\n remove () {\n this._dirEdge = null\n }\n\n getOppositeNode (node) {\n if (this._dirEdge[0].getFromNode() === node) return this._dirEdge[0].getToNode()\n if (this._dirEdge[1].getFromNode() === node) return this._dirEdge[1].getToNode()\n return null\n }\n\n getClass () {\n return Edge\n }\n\n get interfaces_ () {\n return []\n }\n}\nEdge.constructor_ = function () {\n this._dirEdge = null\n if (arguments.length === 0) {} else if (arguments.length === 2) {\n const de0 = arguments[0]; const de1 = arguments[1]\n this.setDirectedEdges(de0, de1)\n }\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 constructor () {\n DirectedEdgeStar.constructor_.apply(this, arguments)\n }\n\n getNextEdge (dirEdge) {\n const i = this.getIndex(dirEdge)\n return this._outEdges.get(this.getIndex(i + 1))\n }\n\n getCoordinate () {\n const it = this.iterator()\n if (!it.hasNext()) return null\n const e = it.next()\n return e.getCoordinate()\n }\n\n iterator () {\n this.sortEdges()\n return this._outEdges.iterator()\n }\n\n sortEdges () {\n if (!this._sorted) {\n Collections.sort(this._outEdges)\n this._sorted = true\n }\n }\n\n remove (de) {\n this._outEdges.remove(de)\n }\n\n getEdges () {\n this.sortEdges()\n return this._outEdges\n }\n\n getNextCWEdge (dirEdge) {\n const i = this.getIndex(dirEdge)\n return this._outEdges.get(this.getIndex(i - 1))\n }\n\n getIndex () {\n if (arguments[0] instanceof Edge) {\n const edge = arguments[0]\n this.sortEdges()\n for (let i = 0; i < this._outEdges.size(); i++) {\n const de = this._outEdges.get(i)\n if (de.getEdge() === edge) return i\n }\n return -1\n } else if (arguments[0] instanceof DirectedEdge) {\n const dirEdge = arguments[0]\n this.sortEdges()\n for (let i = 0; i < this._outEdges.size(); i++) {\n const de = this._outEdges.get(i)\n if (de === dirEdge) return i\n }\n return -1\n } else if (Number.isInteger(arguments[0])) {\n const i = arguments[0]\n let modi = i % this._outEdges.size()\n if (modi < 0) modi += this._outEdges.size()\n return modi\n }\n }\n\n add (de) {\n this._outEdges.add(de)\n this._sorted = false\n }\n\n getDegree () {\n return this._outEdges.size()\n }\n\n getClass () {\n return DirectedEdgeStar\n }\n\n get interfaces_ () {\n return []\n }\n}\nDirectedEdgeStar.constructor_ = function () {\n this._outEdges = new ArrayList()\n this._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 constructor () {\n super()\n Node.constructor_.apply(this, arguments)\n }\n\n static getEdgesBetween (node0, node1) {\n const edges0 = DirectedEdge.toEdges(node0.getOutEdges().getEdges())\n const commonEdges = new HashSet(edges0)\n const edges1 = DirectedEdge.toEdges(node1.getOutEdges().getEdges())\n commonEdges.retainAll(edges1)\n return commonEdges\n }\n\n isRemoved () {\n return this._pt === null\n }\n\n addOutEdge (de) {\n this._deStar.add(de)\n }\n\n getCoordinate () {\n return this._pt\n }\n\n getOutEdges () {\n return this._deStar\n }\n\n remove () {\n if (arguments.length === 0) {\n this._pt = null\n } else if (arguments.length === 1) {\n const de = arguments[0]\n this._deStar.remove(de)\n }\n }\n\n getIndex (edge) {\n return this._deStar.getIndex(edge)\n }\n\n getDegree () {\n return this._deStar.getDegree()\n }\n\n getClass () {\n return Node\n }\n\n get interfaces_ () {\n return []\n }\n}\nNode.constructor_ = function () {\n this._pt = null\n this._deStar = null\n if (arguments.length === 1) {\n const pt = arguments[0]\n Node.constructor_.call(this, pt, new DirectedEdgeStar())\n } else if (arguments.length === 2) {\n const pt = arguments[0]; const deStar = arguments[1]\n this._pt = pt\n this._deStar = deStar\n }\n}\n","import Edge from '../../planargraph/Edge'\nexport default class LineMergeEdge extends Edge {\n constructor () {\n super()\n LineMergeEdge.constructor_.apply(this, arguments)\n }\n\n getLine () {\n return this._line\n }\n\n getClass () {\n return LineMergeEdge\n }\n\n get interfaces_ () {\n return []\n }\n}\nLineMergeEdge.constructor_ = function () {\n this._line = null\n const line = arguments[0]\n this._line = line\n}\n","import TreeMap from '../../../../java/util/TreeMap'\nexport default class NodeMap {\n constructor () {\n NodeMap.constructor_.apply(this, arguments)\n }\n\n find (coord) {\n return this._nodeMap.get(coord)\n }\n\n iterator () {\n return this._nodeMap.values().iterator()\n }\n\n remove (pt) {\n return this._nodeMap.remove(pt)\n }\n\n values () {\n return this._nodeMap.values()\n }\n\n add (n) {\n this._nodeMap.put(n.getCoordinate(), n)\n return n\n }\n\n getClass () {\n return NodeMap\n }\n\n get interfaces_ () {\n return []\n }\n}\nNodeMap.constructor_ = function () {\n this._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 constructor () {\n PlanarGraph.constructor_.apply(this, arguments)\n }\n\n findNodesOfDegree (degree) {\n const nodesFound = new ArrayList()\n for (let i = this.nodeIterator(); i.hasNext();) {\n const node = i.next()\n if (node.getDegree() === degree) nodesFound.add(node)\n }\n return nodesFound\n }\n\n dirEdgeIterator () {\n return this._dirEdges.iterator()\n }\n\n edgeIterator () {\n return this._edges.iterator()\n }\n\n remove () {\n if (arguments[0] instanceof Edge) {\n const edge = arguments[0]\n this.remove(edge.getDirEdge(0))\n this.remove(edge.getDirEdge(1))\n this._edges.remove(edge)\n edge.remove()\n } else if (arguments[0] instanceof DirectedEdge) {\n const de = arguments[0]\n const sym = de.getSym()\n if (sym !== null) sym.setSym(null)\n de.getFromNode().remove(de)\n de.remove()\n this._dirEdges.remove(de)\n } else if (arguments[0] instanceof Node) {\n const node = arguments[0]\n const outEdges = node.getOutEdges().getEdges()\n for (let i = outEdges.iterator(); i.hasNext();) {\n const de = i.next()\n const sym = de.getSym()\n if (sym !== null) this.remove(sym)\n this._dirEdges.remove(de)\n const edge = de.getEdge()\n if (edge !== null) {\n this._edges.remove(edge)\n }\n }\n this._nodeMap.remove(node.getCoordinate())\n node.remove()\n }\n }\n\n findNode (pt) {\n return this._nodeMap.find(pt)\n }\n\n getEdges () {\n return this._edges\n }\n\n nodeIterator () {\n return this._nodeMap.iterator()\n }\n\n contains () {\n if (arguments[0] instanceof Edge) {\n const e = arguments[0]\n return this._edges.contains(e)\n } else if (arguments[0] instanceof DirectedEdge) {\n const de = arguments[0]\n return this._dirEdges.contains(de)\n }\n }\n\n add () {\n if (arguments[0] instanceof Node) {\n const node = arguments[0]\n this._nodeMap.add(node)\n } else if (arguments[0] instanceof Edge) {\n const edge = arguments[0]\n this._edges.add(edge)\n this.add(edge.getDirEdge(0))\n this.add(edge.getDirEdge(1))\n } else if (arguments[0] instanceof DirectedEdge) {\n const dirEdge = arguments[0]\n this._dirEdges.add(dirEdge)\n }\n }\n\n getNodes () {\n return this._nodeMap.values()\n }\n\n getClass () {\n return PlanarGraph\n }\n\n get interfaces_ () {\n return []\n }\n}\nPlanarGraph.constructor_ = function () {\n this._edges = new HashSet()\n this._dirEdges = new HashSet()\n this._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 constructor () {\n super()\n LineMergeGraph.constructor_.apply(this, arguments)\n }\n\n addEdge (lineString) {\n if (lineString.isEmpty()) {\n return null\n }\n const coordinates = CoordinateArrays.removeRepeatedPoints(lineString.getCoordinates())\n if (coordinates.length <= 1) return null\n const startCoordinate = coordinates[0]\n const endCoordinate = coordinates[coordinates.length - 1]\n const startNode = this.getNode(startCoordinate)\n const endNode = this.getNode(endCoordinate)\n const directedEdge0 = new LineMergeDirectedEdge(startNode, endNode, coordinates[1], true)\n const directedEdge1 = new LineMergeDirectedEdge(endNode, startNode, coordinates[coordinates.length - 2], false)\n const edge = new LineMergeEdge(lineString)\n edge.setDirectedEdges(directedEdge0, directedEdge1)\n this.add(edge)\n }\n\n getNode (coordinate) {\n let node = this.findNode(coordinate)\n if (node === null) {\n node = new Node(coordinate)\n this.add(node)\n }\n return node\n }\n\n getClass () {\n return LineMergeGraph\n }\n\n get interfaces_ () {\n return []\n }\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 ArrayList from '../../../../../java/util/ArrayList'\nimport Assert from '../../util/Assert'\nimport GraphComponent from '../../planargraph/GraphComponent'\nexport default class LineMerger {\n constructor () {\n LineMerger.constructor_.apply(this, arguments)\n }\n\n buildEdgeStringsForUnprocessedNodes () {\n for (let i = this._graph.getNodes().iterator(); i.hasNext();) {\n const node = i.next()\n if (!node.isMarked()) {\n Assert.isTrue(node.getDegree() === 2)\n this.buildEdgeStringsStartingAt(node)\n node.setMarked(true)\n }\n }\n }\n\n buildEdgeStringsForNonDegree2Nodes () {\n for (let i = this._graph.getNodes().iterator(); i.hasNext();) {\n const node = i.next()\n if (node.getDegree() !== 2) {\n this.buildEdgeStringsStartingAt(node)\n node.setMarked(true)\n }\n }\n }\n\n buildEdgeStringsForObviousStartNodes () {\n this.buildEdgeStringsForNonDegree2Nodes()\n }\n\n getMergedLineStrings () {\n this.merge()\n return this._mergedLineStrings\n }\n\n buildEdgeStringsStartingAt (node) {\n for (let i = node.getOutEdges().iterator(); i.hasNext();) {\n const directedEdge = i.next()\n if (directedEdge.getEdge().isMarked()) {\n continue\n }\n this._edgeStrings.add(this.buildEdgeStringStartingWith(directedEdge))\n }\n }\n\n merge () {\n if (this._mergedLineStrings !== null) {\n return null\n }\n GraphComponent.setMarked(this._graph.nodeIterator(), false)\n GraphComponent.setMarked(this._graph.edgeIterator(), false)\n this._edgeStrings = new ArrayList()\n this.buildEdgeStringsForObviousStartNodes()\n this.buildEdgeStringsForIsolatedLoops()\n this._mergedLineStrings = new ArrayList()\n for (let i = this._edgeStrings.iterator(); i.hasNext();) {\n const edgeString = i.next()\n this._mergedLineStrings.add(edgeString.toLineString())\n }\n }\n\n addLineString (lineString) {\n if (this._factory === null) {\n this._factory = lineString.getFactory()\n }\n this._graph.addEdge(lineString)\n }\n\n buildEdgeStringStartingWith (start) {\n const edgeString = new EdgeString(this._factory)\n let current = start\n do {\n edgeString.add(current)\n current.getEdge().setMarked(true)\n current = current.getNext()\n } while (current !== null && current !== start)\n return edgeString\n }\n\n add () {\n if (arguments[0] instanceof Geometry) {\n const geometry = arguments[0]\n for (let i = 0; i < geometry.getNumGeometries(); i++) {\n const component = geometry.getGeometryN(i)\n if (component instanceof LineString) {\n this.addLineString(component)\n }\n }\n ;\n } else if (hasInterface(arguments[0], Collection)) {\n const geometries = arguments[0]\n this._mergedLineStrings = null\n for (let i = geometries.iterator(); i.hasNext();) {\n const geometry = i.next()\n this.add(geometry)\n }\n }\n }\n\n buildEdgeStringsForIsolatedLoops () {\n this.buildEdgeStringsForUnprocessedNodes()\n }\n\n getClass () {\n return LineMerger\n }\n\n get interfaces_ () {\n return []\n }\n}\nLineMerger.constructor_ = function () {\n this._graph = new LineMergeGraph()\n this._mergedLineStrings = null\n this._factory = null\n this._edgeStrings = null\n}\n","import HashSet from '../../../../java/util/HashSet'\nimport NodeMap from './NodeMap'\nimport ArrayList from '../../../../java/util/ArrayList'\nexport default class Subgraph {\n constructor () {\n Subgraph.constructor_.apply(this, arguments)\n }\n\n dirEdgeIterator () {\n return this._dirEdges.iterator()\n }\n\n edgeIterator () {\n return this._edges.iterator()\n }\n\n getParent () {\n return this._parentGraph\n }\n\n nodeIterator () {\n return this._nodeMap.iterator()\n }\n\n contains (e) {\n return this._edges.contains(e)\n }\n\n add (e) {\n if (this._edges.contains(e)) return null\n this._edges.add(e)\n this._dirEdges.add(e.getDirEdge(0))\n this._dirEdges.add(e.getDirEdge(1))\n this._nodeMap.add(e.getDirEdge(0).getFromNode())\n this._nodeMap.add(e.getDirEdge(1).getFromNode())\n }\n\n getClass () {\n return Subgraph\n }\n\n get interfaces_ () {\n return []\n }\n}\nSubgraph.constructor_ = function () {\n this._parentGraph = null\n this._edges = new HashSet()\n this._dirEdges = new ArrayList()\n this._nodeMap = new NodeMap()\n const parentGraph = arguments[0]\n this._parentGraph = parentGraph\n}\n","import Stack from '../../../../../java/util/Stack'\nimport Subgraph from '../Subgraph'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport GraphComponent from '../GraphComponent'\nexport default class ConnectedSubgraphFinder {\n constructor () {\n ConnectedSubgraphFinder.constructor_.apply(this, arguments)\n }\n\n addReachable (startNode, subgraph) {\n const nodeStack = new Stack()\n nodeStack.add(startNode)\n while (!nodeStack.empty()) {\n const node = nodeStack.pop()\n this.addEdges(node, nodeStack, subgraph)\n }\n }\n\n findSubgraph (node) {\n const subgraph = new Subgraph(this._graph)\n this.addReachable(node, subgraph)\n return subgraph\n }\n\n getConnectedSubgraphs () {\n const subgraphs = new ArrayList()\n GraphComponent.setVisited(this._graph.nodeIterator(), false)\n for (let i = this._graph.edgeIterator(); i.hasNext();) {\n const e = i.next()\n const node = e.getDirEdge(0).getFromNode()\n if (!node.isVisited()) {\n subgraphs.add(this.findSubgraph(node))\n }\n }\n return subgraphs\n }\n\n addEdges (node, nodeStack, subgraph) {\n node.setVisited(true)\n for (let i = node.getOutEdges().iterator(); i.hasNext();) {\n const de = i.next()\n subgraph.add(de.getEdge())\n const toNode = de.getToNode()\n if (!toNode.isVisited()) nodeStack.push(toNode)\n }\n }\n\n getClass () {\n return ConnectedSubgraphFinder\n }\n\n get interfaces_ () {\n return []\n }\n}\nConnectedSubgraphFinder.constructor_ = function () {\n this._graph = null\n const graph = arguments[0]\n this._graph = graph\n}\n","import TreeSet from '../../../../../java/util/TreeSet'\nimport LineString from '../../geom/LineString'\nimport Geometry from '../../geom/Geometry'\nimport hasInterface from '../../../../../hasInterface'\nimport GeometryFactory from '../../geom/GeometryFactory'\nimport Collection from '../../../../../java/util/Collection'\nimport Coordinate from '../../geom/Coordinate'\nimport Integer from '../../../../../java/lang/Integer'\nimport LineMergeGraph from './LineMergeGraph'\nimport LinkedList from '../../../../../java/util/LinkedList'\nimport GeometryComponentFilter from '../../geom/GeometryComponentFilter'\nimport ArrayList from '../../../../../java/util/ArrayList'\nimport ConnectedSubgraphFinder from '../../planargraph/algorithm/ConnectedSubgraphFinder'\nimport Assert from '../../util/Assert'\nimport MultiLineString from '../../geom/MultiLineString'\nimport GraphComponent from '../../planargraph/GraphComponent'\nexport default class LineSequencer {\n constructor () {\n LineSequencer.constructor_.apply(this, arguments)\n }\n\n static findUnvisitedBestOrientedDE (node) {\n let wellOrientedDE = null\n let unvisitedDE = null\n for (let i = node.getOutEdges().iterator(); i.hasNext();) {\n const de = i.next()\n if (!de.getEdge().isVisited()) {\n unvisitedDE = de\n if (de.getEdgeDirection()) wellOrientedDE = de\n }\n }\n if (wellOrientedDE !== null) return wellOrientedDE\n return unvisitedDE\n }\n\n static findLowestDegreeNode (graph) {\n let minDegree = Integer.MAX_VALUE\n let minDegreeNode = null\n for (let i = graph.nodeIterator(); i.hasNext();) {\n const node = i.next()\n if (minDegreeNode === null || node.getDegree() < minDegree) {\n minDegree = node.getDegree()\n minDegreeNode = node\n }\n }\n return minDegreeNode\n }\n\n static isSequenced (geom) {\n if (!(geom instanceof MultiLineString)) {\n return true\n }\n const mls = geom\n const prevSubgraphNodes = new TreeSet()\n let lastNode = null\n const currNodes = new ArrayList()\n for (let i = 0; i < mls.getNumGeometries(); i++) {\n const line = mls.getGeometryN(i)\n const startNode = line.getCoordinateN(0)\n const endNode = line.getCoordinateN(line.getNumPoints() - 1)\n if (prevSubgraphNodes.contains(startNode)) return false\n if (prevSubgraphNodes.contains(endNode)) return false\n if (lastNode !== null) {\n if (!startNode.equals(lastNode)) {\n prevSubgraphNodes.addAll(currNodes)\n currNodes.clear()\n }\n }\n currNodes.add(startNode)\n currNodes.add(endNode)\n lastNode = endNode\n }\n return true\n }\n\n static reverse (line) {\n const pts = line.getCoordinates()\n const revPts = new Array(pts.length).fill(null)\n const len = pts.length\n for (let i = 0; i < len; i++) {\n revPts[len - 1 - i] = new Coordinate(pts[i])\n }\n return line.getFactory().createLineString(revPts)\n }\n\n static sequence (geom) {\n const sequencer = new LineSequencer()\n sequencer.add(geom)\n return sequencer.getSequencedLineStrings()\n }\n\n addLine (lineString) {\n if (this._factory === null) {\n this._factory = lineString.getFactory()\n }\n this._graph.addEdge(lineString)\n this._lineCount++\n }\n\n hasSequence (graph) {\n let oddDegreeCount = 0\n for (let i = graph.nodeIterator(); i.hasNext();) {\n const node = i.next()\n if (node.getDegree() % 2 === 1) oddDegreeCount++\n }\n return oddDegreeCount <= 2\n }\n\n computeSequence () {\n if (this._isRun) {\n return null\n }\n this._isRun = true\n const sequences = this.findSequences()\n if (sequences === null) return null\n this._sequencedGeometry = this.buildSequencedGeometry(sequences)\n this._isSequenceable = true\n const finalLineCount = this._sequencedGeometry.getNumGeometries()\n Assert.isTrue(this._lineCount === finalLineCount, 'Lines were missing from result')\n Assert.isTrue(this._sequencedGeometry instanceof LineString || this._sequencedGeometry instanceof MultiLineString, 'Result is not lineal')\n }\n\n findSequences () {\n const sequences = new ArrayList()\n const csFinder = new ConnectedSubgraphFinder(this._graph)\n const subgraphs = csFinder.getConnectedSubgraphs()\n for (let i = subgraphs.iterator(); i.hasNext();) {\n const subgraph = i.next()\n if (this.hasSequence(subgraph)) {\n const seq = this.findSequence(subgraph)\n sequences.add(seq)\n } else {\n return null\n }\n }\n return sequences\n }\n\n addReverseSubpath (de, lit, expectedClosed) {\n const endNode = de.getToNode()\n let fromNode = null\n while (true) {\n lit.add(de.getSym())\n de.getEdge().setVisited(true)\n fromNode = de.getFromNode()\n const unvisitedOutDE = LineSequencer.findUnvisitedBestOrientedDE(fromNode)\n if (unvisitedOutDE === null) break\n de = unvisitedOutDE.getSym()\n }\n if (expectedClosed) {\n Assert.isTrue(fromNode === endNode, 'path not contiguous')\n }\n }\n\n findSequence (graph) {\n GraphComponent.setVisited(graph.edgeIterator(), false)\n const startNode = LineSequencer.findLowestDegreeNode(graph)\n const startDE = startNode.getOutEdges().iterator().next()\n const startDESym = startDE.getSym()\n const seq = new LinkedList()\n const lit = seq.listIterator()\n this.addReverseSubpath(startDESym, lit, false)\n while (lit.hasPrevious()) {\n const prev = lit.previous()\n const unvisitedOutDE = LineSequencer.findUnvisitedBestOrientedDE(prev.getFromNode())\n if (unvisitedOutDE !== null) this.addReverseSubpath(unvisitedOutDE.getSym(), lit, true)\n }\n const orientedSeq = this.orient(seq)\n return orientedSeq\n }\n\n reverse (seq) {\n const newSeq = new LinkedList()\n for (let i = seq.iterator(); i.hasNext();) {\n const de = i.next()\n newSeq.addFirst(de.getSym())\n }\n return newSeq\n }\n\n orient (seq) {\n const startEdge = seq.get(0)\n const endEdge = seq.get(seq.size() - 1)\n const startNode = startEdge.getFromNode()\n const endNode = endEdge.getToNode()\n let flipSeq = false\n const hasDegree1Node = startNode.getDegree() === 1 || endNode.getDegree() === 1\n if (hasDegree1Node) {\n let hasObviousStartNode = false\n if (endEdge.getToNode().getDegree() === 1 && endEdge.getEdgeDirection() === false) {\n hasObviousStartNode = true\n flipSeq = true\n }\n if (startEdge.getFromNode().getDegree() === 1 && startEdge.getEdgeDirection() === true) {\n hasObviousStartNode = true\n flipSeq = false\n }\n if (!hasObviousStartNode) {\n if (startEdge.getFromNode().getDegree() === 1) flipSeq = true\n }\n }\n if (flipSeq) return this.reverse(seq)\n return seq\n }\n\n buildSequencedGeometry (sequences) {\n const lines = new ArrayList()\n for (let i1 = sequences.iterator(); i1.hasNext();) {\n const seq = i1.next()\n for (let i2 = seq.iterator(); i2.hasNext();) {\n const de = i2.next()\n const e = de.getEdge()\n const line = e.getLine()\n let lineToAdd = line\n if (!de.getEdgeDirection() && !line.isClosed()) lineToAdd = LineSequencer.reverse(line)\n lines.add(lineToAdd)\n }\n }\n if (lines.size() === 0) return this._factory.createMultiLineString(new Array(0).fill(null))\n return this._factory.buildGeometry(lines)\n }\n\n getSequencedLineStrings () {\n this.computeSequence()\n return this._sequencedGeometry\n }\n\n isSequenceable () {\n this.computeSequence()\n return this._isSequenceable\n }\n\n add () {\n if (hasInterface(arguments[0], Collection)) {\n const geometries = arguments[0]\n for (let i = geometries.iterator(); i.hasNext();) {\n const geometry = i.next()\n this.add(geometry)\n }\n } else if (arguments[0] instanceof Geometry) {\n const geometry = arguments[0]\n geometry.apply(new (class {\n get interfaces_ () {\n return [GeometryComponentFilter]\n }\n\n filter (component) {\n if (component instanceof LineString) {\n this.addLine(component)\n }\n }\n })())\n }\n }\n\n getClass () {\n return LineSequencer\n }\n\n get interfaces_ () {\n return []\n }\n}\nLineSequencer.constructor_ = function () {\n this._graph = new LineMergeGraph()\n this._factory = new GeometryFactory()\n this._lineCount = 0\n this._isRun = false\n this._sequencedGeometry = null\n this._isSequenceable = false\n}\n","import DirectedEdge from '../../planargraph/DirectedEdge'\nexport default class PolygonizeDirectedEdge extends DirectedEdge {\n constructor () {\n super()\n PolygonizeDirectedEdge.constructor_.apply(this, arguments)\n }\n\n getNext () {\n return this._next\n }\n\n isInRing () {\n return this._edgeRing !== null\n }\n\n setRing (edgeRing) {\n this._edgeRing = edgeRing\n }\n\n setLabel (label) {\n this._label = label\n }\n\n getLabel () {\n return this._label\n }\n\n setNext (next) {\n this._next = next\n }\n\n getRing () {\n return this._edgeRing\n }\n\n getClass () {\n return PolygonizeDirectedEdge\n }\n\n get interfaces_ () {\n return []\n }\n}\nPolygonizeDirectedEdge.constructor_ = function () {\n this._edgeRing = null\n this._next = null\n this._label = -1\n const from = arguments[0]; const to = arguments[1]; const directionPt = arguments[2]; const edgeDirection = arguments[3]\n DirectedEdge.constructor_.call(this, from, to, directionPt, edgeDirection)\n}\n","import Edge from '../../planargraph/Edge'\nexport default class PolygonizeEdge extends Edge {\n constructor () {\n super()\n PolygonizeEdge.constructor_.apply(this, arguments)\n }\n\n getLine () {\n return this._line\n }\n\n getClass () {\n return PolygonizeEdge\n }\n\n get interfaces_ () {\n return []\n }\n}\nPolygonizeEdge.constructor_ = function () {\n this._line = null\n const line = arguments[0]\n this._line = line\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 constructor () {\n ConnectedInteriorTester.constructor_.apply(this, arguments)\n }\n\n static findDifferentPoint (coord, pt) {\n for (let i = 0; i < coord.length; i++) {\n if (!coord[i].equals(pt)) return coord[i]\n }\n return null\n }\n\n visitInteriorRing (ring, graph) {\n const pts = ring.getCoordinates()\n const pt0 = pts[0]\n const pt1 = ConnectedInteriorTester.findDifferentPoint(pts, pt0)\n const e = graph.findEdgeInSameDirection(pt0, pt1)\n const de = graph.findEdgeEnd(e)\n let intDe = null\n if (de.getLabel().getLocation(0, Position.RIGHT) === Location.INTERIOR) {\n intDe = de\n } else if (de.getSym().getLabel().getLocation(0, Position.RIGHT) === Location.INTERIOR) {\n intDe = de.getSym()\n }\n Assert.isTrue(intDe !== null, 'unable to find dirEdge with Interior on RHS')\n this.visitLinkedDirectedEdges(intDe)\n }\n\n visitShellInteriors (g, graph) {\n if (g instanceof Polygon) {\n const p = g\n this.visitInteriorRing(p.getExteriorRing(), graph)\n }\n if (g instanceof MultiPolygon) {\n const mp = g\n for (let i = 0; i < mp.getNumGeometries(); i++) {\n const p = mp.getGeometryN(i)\n this.visitInteriorRing(p.getExteriorRing(), graph)\n }\n }\n }\n\n getCoordinate () {\n return this._disconnectedRingcoord\n }\n\n setInteriorEdgesInResult (graph) {\n for (let it = graph.getEdgeEnds().iterator(); it.hasNext();) {\n const de = it.next()\n if (de.getLabel().getLocation(0, Position.RIGHT) === Location.INTERIOR) {\n de.setInResult(true)\n }\n }\n }\n\n visitLinkedDirectedEdges (start) {\n const startDe = start\n let de = start\n do {\n Assert.isTrue(de !== null, 'found null Directed Edge')\n de.setVisited(true)\n de = de.getNext()\n } while (de !== startDe)\n }\n\n buildEdgeRings (dirEdges) {\n const edgeRings = new ArrayList()\n for (let it = dirEdges.iterator(); it.hasNext();) {\n const de = it.next()\n if (de.isInResult() && de.getEdgeRing() === null) {\n const er = new MaximalEdgeRing(de, this._geometryFactory)\n er.linkDirectedEdgesForMinimalEdgeRings()\n const minEdgeRings = er.buildMinimalRings()\n edgeRings.addAll(minEdgeRings)\n }\n }\n return edgeRings\n }\n\n hasUnvisitedShellEdge (edgeRings) {\n for (let i = 0; i < edgeRings.size(); i++) {\n const er = edgeRings.get(i)\n if (er.isHole()) continue\n const edges = er.getEdges()\n let de = edges.get(0)\n if (de.getLabel().getLocation(0, Position.RIGHT) !== Location.INTERIOR) continue\n for (let j = 0; j < edges.size(); j++) {\n de = edges.get(j)\n if (!de.isVisited()) {\n this._disconnectedRingcoord = de.getCoordinate()\n return true\n }\n }\n }\n return false\n }\n\n isInteriorsConnected () {\n const splitEdges = new ArrayList()\n this._geomGraph.computeSplitEdges(splitEdges)\n const graph = new PlanarGraph(new OverlayNodeFactory())\n graph.addEdges(splitEdges)\n this.setInteriorEdgesInResult(graph)\n graph.linkResultDirectedEdges()\n const edgeRings = this.buildEdgeRings(graph.getEdgeEnds())\n this.visitShellInteriors(this._geomGraph.getGeometry(), graph)\n return !this.hasUnvisitedShellEdge(edgeRings)\n }\n\n getClass () {\n return ConnectedInteriorTester\n }\n\n get interfaces_ () {\n return []\n }\n}\nConnectedInteriorTester.constructor_ = function () {\n this._geometryFactory = new GeometryFactory()\n this._geomGraph = null\n this._disconnectedRingcoord = null\n const geomGraph = arguments[0]\n this._geomGraph = geomGraph\n}\n","import EdgeEnd from '../../geomgraph/EdgeEnd'\nimport Label from '../../geomgraph/Label'\nimport ArrayList from '../../../../../java/util/ArrayList'\nexport default class EdgeEndBuilder {\n constructor () {\n EdgeEndBuilder.constructor_.apply(this, arguments)\n }\n\n createEdgeEndForNext (edge, l, eiCurr, eiNext) {\n const iNext = eiCurr.segmentIndex + 1\n if (iNext >= edge.getNumPoints() && eiNext === null) return null\n let pNext = edge.getCoordinate(iNext)\n if (eiNext !== null && eiNext.segmentIndex === eiCurr.segmentIndex) pNext = eiNext.coord\n const e = new EdgeEnd(edge, eiCurr.coord, pNext, new Label(edge.getLabel()))\n l.add(e)\n }\n\n createEdgeEndForPrev (edge, l, eiCurr, eiPrev) {\n let iPrev = eiCurr.segmentIndex\n if (eiCurr.dist === 0.0) {\n if (iPrev === 0) return null\n iPrev--\n }\n let pPrev = edge.getCoordinate(iPrev)\n if (eiPrev !== null && eiPrev.segmentIndex >= iPrev) pPrev = eiPrev.coord\n const label = new Label(edge.getLabel())\n label.flip()\n const e = new EdgeEnd(edge, eiCurr.coord, pPrev, label)\n l.add(e)\n }\n\n computeEdgeEnds () {\n if (arguments.length === 1) {\n const edges = arguments[0]\n const l = new ArrayList()\n for (let i = edges; i.hasNext();) {\n const e = i.next()\n this.computeEdgeEnds(e, l)\n }\n return l\n } else if (arguments.length === 2) {\n const edge = arguments[0]; const l = arguments[1]\n const eiList = edge.getEdgeIntersectionList()\n eiList.addEndpoints()\n const it = eiList.iterator()\n let eiPrev = null\n let eiCurr = null\n if (!it.hasNext()) return null\n let eiNext = it.next()\n do {\n eiPrev = eiCurr\n eiCurr = eiNext\n eiNext = null\n if (it.hasNext()) eiNext = it.next()\n if (eiCurr !== null) {\n this.createEdgeEndForPrev(edge, l, eiCurr, eiPrev)\n this.createEdgeEndForNext(edge, l, eiCurr, eiNext)\n }\n } while (eiCurr !== null)\n }\n }\n\n getClass () {\n return EdgeEndBuilder\n }\n\n get interfaces_ () {\n return []\n }\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 constructor () {\n super()\n EdgeEndBundle.constructor_.apply(this, arguments)\n }\n\n insert (e) {\n this._edgeEnds.add(e)\n }\n\n print (out) {\n out.println('EdgeEndBundle--> Label: ' + this._label)\n for (let it = this.iterator(); it.hasNext();) {\n const ee = it.next()\n ee.print(out)\n out.println()\n }\n }\n\n iterator () {\n return this._edgeEnds.iterator()\n }\n\n getEdgeEnds () {\n return this._edgeEnds\n }\n\n computeLabelOn (geomIndex, boundaryNodeRule) {\n let boundaryCount = 0\n let foundInterior = false\n for (let it = this.iterator(); it.hasNext();) {\n const e = it.next()\n const loc = e.getLabel().getLocation(geomIndex)\n if (loc === Location.BOUNDARY) boundaryCount++\n if (loc === Location.INTERIOR) foundInterior = true\n }\n let loc = Location.NONE\n if (foundInterior) loc = Location.INTERIOR\n if (boundaryCount > 0) {\n loc = GeometryGraph.determineBoundary(boundaryNodeRule, boundaryCount)\n }\n this._label.setLocation(geomIndex, loc)\n }\n\n computeLabelSide (geomIndex, side) {\n for (let it = this.iterator(); it.hasNext();) {\n const e = it.next()\n if (e.getLabel().isArea()) {\n const loc = e.getLabel().getLocation(geomIndex, side)\n if (loc === Location.INTERIOR) {\n this._label.setLocation(geomIndex, side, Location.INTERIOR)\n return null\n } else if (loc === Location.EXTERIOR) this._label.setLocation(geomIndex, side, Location.EXTERIOR)\n }\n }\n }\n\n getLabel () {\n return this._label\n }\n\n computeLabelSides (geomIndex) {\n this.computeLabelSide(geomIndex, Position.LEFT)\n this.computeLabelSide(geomIndex, Position.RIGHT)\n }\n\n updateIM (im) {\n Edge.updateIM(this._label, im)\n }\n\n computeLabel (boundaryNodeRule) {\n let isArea = false\n for (let it = this.iterator(); it.hasNext();) {\n const e = it.next()\n if (e.getLabel().isArea()) isArea = true\n }\n if (isArea) this._label = new Label(Location.NONE, Location.NONE, Location.NONE); else this._label = new Label(Location.NONE)\n for (let i = 0; i < 2; i++) {\n this.computeLabelOn(i, boundaryNodeRule)\n if (isArea) this.computeLabelSides(i)\n }\n }\n\n getClass () {\n return EdgeEndBundle\n }\n\n get interfaces_ () {\n return []\n }\n}\nEdgeEndBundle.constructor_ = function () {\n this._edgeEnds = new ArrayList()\n if (arguments.length === 1) {\n const e = arguments[0]\n EdgeEndBundle.constructor_.call(this, null, e)\n } else if (arguments.length === 2) {\n const boundaryNodeRule = arguments[0]; const e = arguments[1]\n EdgeEnd.constructor_.call(this, e.getEdge(), e.getCoordinate(), e.getDirectedCoordinate(), new Label(e.getLabel()))\n this.insert(e)\n }\n}\n","import EdgeEndStar from '../../geomgraph/EdgeEndStar'\nimport EdgeEndBundle from './EdgeEndBundle'\nexport default class EdgeEndBundleStar extends EdgeEndStar {\n constructor () {\n super()\n EdgeEndBundleStar.constructor_.apply(this, arguments)\n }\n\n updateIM (im) {\n for (let it = this.iterator(); it.hasNext();) {\n const esb = it.next()\n esb.updateIM(im)\n }\n }\n\n insert (e) {\n let eb = this._edgeMap.get(e)\n if (eb === null) {\n eb = new EdgeEndBundle(e)\n this.insertEdgeEnd(e, eb)\n } else {\n eb.insert(e)\n }\n }\n\n getClass () {\n return EdgeEndBundleStar\n }\n\n get interfaces_ () {\n return []\n }\n}\nEdgeEndBundleStar.constructor_ = function () {}\n","import Node from '../../geomgraph/Node'\nexport default class RelateNode extends Node {\n constructor () {\n super()\n RelateNode.constructor_.apply(this, arguments)\n }\n\n updateIMFromEdges (im) {\n this._edges.updateIM(im)\n }\n\n computeIM (im) {\n im.setAtLeastIfValid(this._label.getLocation(0), this._label.getLocation(1), 0)\n }\n\n getClass () {\n return RelateNode\n }\n\n get interfaces_ () {\n return []\n }\n}\nRelateNode.constructor_ = function () {\n const coord = arguments[0]; const edges = arguments[1]\n Node.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 constructor () {\n super()\n RelateNodeFactory.constructor_.apply(this, arguments)\n }\n\n createNode (coord) {\n return new RelateNode(coord, new EdgeEndBundleStar())\n }\n\n getClass () {\n return RelateNodeFactory\n }\n\n get interfaces_ () {\n return []\n }\n}\nRelateNodeFactory.constructor_ = function () {}\n","import Location from '../../geom/Location'\nimport EdgeEndBuilder from './EdgeEndBuilder'\nimport NodeMap from '../../geomgraph/NodeMap'\nimport RelateNodeFactory from './RelateNodeFactory'\nexport default class RelateNodeGraph {\n constructor () {\n RelateNodeGraph.constructor_.apply(this, arguments)\n }\n\n insertEdgeEnds (ee) {\n for (let i = ee.iterator(); i.hasNext();) {\n const e = i.next()\n this._nodes.add(e)\n }\n }\n\n getNodeIterator () {\n return this._nodes.iterator()\n }\n\n copyNodesAndLabels (geomGraph, argIndex) {\n for (let nodeIt = geomGraph.getNodeIterator(); nodeIt.hasNext();) {\n const graphNode = nodeIt.next()\n const newNode = this._nodes.addNode(graphNode.getCoordinate())\n newNode.setLabel(argIndex, graphNode.getLabel().getLocation(argIndex))\n }\n }\n\n build (geomGraph) {\n this.computeIntersectionNodes(geomGraph, 0)\n this.copyNodesAndLabels(geomGraph, 0)\n const eeBuilder = new EdgeEndBuilder()\n const eeList = eeBuilder.computeEdgeEnds(geomGraph.getEdgeIterator())\n this.insertEdgeEnds(eeList)\n }\n\n computeIntersectionNodes (geomGraph, argIndex) {\n for (let edgeIt = geomGraph.getEdgeIterator(); edgeIt.hasNext();) {\n const e = edgeIt.next()\n const eLoc = e.getLabel().getLocation(argIndex)\n for (let eiIt = e.getEdgeIntersectionList().iterator(); eiIt.hasNext();) {\n const ei = eiIt.next()\n const n = this._nodes.addNode(ei.coord)\n if (eLoc === Location.BOUNDARY) n.setLabelBoundary(argIndex); else {\n if (n.getLabel().isNull(argIndex)) n.setLabel(argIndex, Location.INTERIOR)\n }\n }\n }\n }\n\n getClass () {\n return RelateNodeGraph\n }\n\n get interfaces_ () {\n return []\n }\n}\nRelateNodeGraph.constructor_ = function () {\n this._nodes = new NodeMap(new RelateNodeFactory())\n}\n","import RelateNodeGraph from '../relate/RelateNodeGraph'\nimport RobustLineIntersector from '../../algorithm/RobustLineIntersector'\nexport default class ConsistentAreaTester {\n constructor () {\n ConsistentAreaTester.constructor_.apply(this, arguments)\n }\n\n isNodeEdgeAreaLabelsConsistent () {\n for (let nodeIt = this._nodeGraph.getNodeIterator(); nodeIt.hasNext();) {\n const node = nodeIt.next()\n if (!node.getEdges().isAreaLabelsConsistent(this._geomGraph)) {\n this._invalidPoint = node.getCoordinate().copy()\n return false\n }\n }\n return true\n }\n\n getInvalidPoint () {\n return this._invalidPoint\n }\n\n hasDuplicateRings () {\n for (let nodeIt = this._nodeGraph.getNodeIterator(); nodeIt.hasNext();) {\n const node = nodeIt.next()\n for (let i = node.getEdges().iterator(); i.hasNext();) {\n const eeb = i.next()\n if (eeb.getEdgeEnds().size() > 1) {\n this._invalidPoint = eeb.getEdge().getCoordinate(0)\n return true\n }\n }\n }\n return false\n }\n\n isNodeConsistentArea () {\n const intersector = this._geomGraph.computeSelfNodes(this._li, true, true)\n if (intersector.hasProperIntersection()) {\n this._invalidPoint = intersector.getProperIntersectionPoint()\n return false\n }\n this._nodeGraph.build(this._geomGraph)\n return this.isNodeEdgeAreaLabelsConsistent()\n }\n\n getClass () {\n return ConsistentAreaTester\n }\n\n get interfaces_ () {\n return []\n }\n}\nConsistentAreaTester.constructor_ = function () {\n this._li = new RobustLineIntersector()\n this._geomGraph = null\n this._nodeGraph = new RelateNodeGraph()\n this._invalidPoint = null\n const geomGraph = arguments[0]\n this._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 constructor () {\n IndexedNestedRingTester.constructor_.apply(this, arguments)\n }\n\n buildIndex () {\n this._index = new STRtree()\n for (let i = 0; i < this._rings.size(); i++) {\n const ring = this._rings.get(i)\n const env = ring.getEnvelopeInternal()\n this._index.insert(env, ring)\n }\n }\n\n getNestedPoint () {\n return this._nestedPt\n }\n\n isNonNested () {\n this.buildIndex()\n for (let i = 0; i < this._rings.size(); i++) {\n const innerRing = this._rings.get(i)\n const innerRingPts = innerRing.getCoordinates()\n const results = this._index.query(innerRing.getEnvelopeInternal())\n for (let j = 0; j < results.size(); j++) {\n const searchRing = results.get(j)\n const searchRingPts = searchRing.getCoordinates()\n if (innerRing === searchRing) continue\n if (!innerRing.getEnvelopeInternal().intersects(searchRing.getEnvelopeInternal())) continue\n const innerRingPt = IsValidOp.findPtNotNode(innerRingPts, searchRing, this._graph)\n if (innerRingPt === null) continue\n const isInside = PointLocation.isInRing(innerRingPt, searchRingPts)\n if (isInside) {\n this._nestedPt = innerRingPt\n return false\n }\n }\n }\n return true\n }\n\n add (ring) {\n this._rings.add(ring)\n this._totalEnv.expandToInclude(ring.getEnvelopeInternal())\n }\n\n getClass () {\n return IndexedNestedRingTester\n }\n\n get interfaces_ () {\n return []\n }\n}\nIndexedNestedRingTester.constructor_ = function () {\n this._graph = null\n this._rings = new ArrayList()\n this._totalEnv = new Envelope()\n this._index = null\n this._nestedPt = null\n const graph = arguments[0]\n this._graph = graph\n}\n","export default class TopologyValidationError {\n constructor () {\n TopologyValidationError.constructor_.apply(this, arguments)\n }\n\n getErrorType () {\n return this._errorType\n }\n\n getMessage () {\n return TopologyValidationError.errMsg[this._errorType]\n }\n\n getCoordinate () {\n return this._pt\n }\n\n toString () {\n let locStr = ''\n if (this._pt !== null) locStr = ' at or near point ' + this._pt\n return this.getMessage() + locStr\n }\n\n getClass () {\n return TopologyValidationError\n }\n\n get interfaces_ () {\n return []\n }\n}\nTopologyValidationError.constructor_ = function () {\n this._errorType = null\n this._pt = null\n if (arguments.length === 1) {\n const errorType = arguments[0]\n TopologyValidationError.constructor_.call(this, errorType, null)\n } else if (arguments.length === 2) {\n const errorType = arguments[0]; const pt = arguments[1]\n this._errorType = errorType\n if (pt !== null) this._pt = pt.copy()\n }\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 UnsupportedOperationException from '../../../../../java/lang/UnsupportedOperationException'\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 constructor () {\n IsValidOp.constructor_.apply(this, arguments)\n }\n\n static findPtNotNode (testCoords, searchRing, graph) {\n const searchEdge = graph.findEdge(searchRing)\n const eiList = searchEdge.getEdgeIntersectionList()\n for (let i = 0; i < testCoords.length; i++) {\n const pt = testCoords[i]\n if (!eiList.isIntersection(pt)) return pt\n }\n return null\n }\n\n static isValid () {\n if (arguments[0] instanceof Geometry) {\n const geom = arguments[0]\n const isValidOp = new IsValidOp(geom)\n return isValidOp.isValid()\n } else if (arguments[0] instanceof Coordinate) {\n const coord = arguments[0]\n if (Double.isNaN(coord.x)) return false\n if (Double.isInfinite(coord.x)) return false\n if (Double.isNaN(coord.y)) return false\n if (Double.isInfinite(coord.y)) return false\n return true\n }\n }\n\n checkInvalidCoordinates () {\n if (arguments[0] instanceof Array) {\n const coords = arguments[0]\n for (let i = 0; i < coords.length; i++) {\n if (!IsValidOp.isValid(coords[i])) {\n this._validErr = new TopologyValidationError(TopologyValidationError.INVALID_COORDINATE, coords[i])\n return null\n }\n }\n } else if (arguments[0] instanceof Polygon) {\n const poly = arguments[0]\n this.checkInvalidCoordinates(poly.getExteriorRing().getCoordinates())\n if (this._validErr !== null) return null\n for (let i = 0; i < poly.getNumInteriorRing(); i++) {\n this.checkInvalidCoordinates(poly.getInteriorRingN(i).getCoordinates())\n if (this._validErr !== null) return null\n }\n }\n }\n\n checkHolesNotNested (p, graph) {\n const nestedTester = new IndexedNestedRingTester(graph)\n for (let i = 0; i < p.getNumInteriorRing(); i++) {\n const innerHole = p.getInteriorRingN(i)\n nestedTester.add(innerHole)\n }\n const isNonNested = nestedTester.isNonNested()\n if (!isNonNested) {\n this._validErr = new TopologyValidationError(TopologyValidationError.NESTED_HOLES, nestedTester.getNestedPoint())\n }\n }\n\n checkConsistentArea (graph) {\n const cat = new ConsistentAreaTester(graph)\n const isValidArea = cat.isNodeConsistentArea()\n if (!isValidArea) {\n this._validErr = new TopologyValidationError(TopologyValidationError.SELF_INTERSECTION, cat.getInvalidPoint())\n return null\n }\n if (cat.hasDuplicateRings()) {\n this._validErr = new TopologyValidationError(TopologyValidationError.DUPLICATE_RINGS, cat.getInvalidPoint())\n }\n }\n\n isValid () {\n this.checkValid(this._parentGeometry)\n return this._validErr === null\n }\n\n checkShellInsideHole (shell, hole, graph) {\n const shellPts = shell.getCoordinates()\n const holePts = hole.getCoordinates()\n const shellPt = IsValidOp.findPtNotNode(shellPts, hole, graph)\n if (shellPt !== null) {\n const insideHole = PointLocation.isInRing(shellPt, holePts)\n if (!insideHole) {\n return shellPt\n }\n }\n const holePt = IsValidOp.findPtNotNode(holePts, shell, graph)\n if (holePt !== null) {\n const insideShell = PointLocation.isInRing(holePt, shellPts)\n if (insideShell) {\n return holePt\n }\n return null\n }\n Assert.shouldNeverReachHere('points in shell and hole appear to be equal')\n return null\n }\n\n checkNoSelfIntersectingRings (graph) {\n for (let i = graph.getEdgeIterator(); i.hasNext();) {\n const e = i.next()\n this.checkNoSelfIntersectingRing(e.getEdgeIntersectionList())\n if (this._validErr !== null) return null\n }\n }\n\n checkConnectedInteriors (graph) {\n const cit = new ConnectedInteriorTester(graph)\n if (!cit.isInteriorsConnected()) this._validErr = new TopologyValidationError(TopologyValidationError.DISCONNECTED_INTERIOR, cit.getCoordinate())\n }\n\n checkNoSelfIntersectingRing (eiList) {\n const nodeSet = new TreeSet()\n let isFirst = true\n for (let i = eiList.iterator(); i.hasNext();) {\n const ei = i.next()\n if (isFirst) {\n isFirst = false\n continue\n }\n if (nodeSet.contains(ei.coord)) {\n this._validErr = new TopologyValidationError(TopologyValidationError.RING_SELF_INTERSECTION, ei.coord)\n return null\n } else {\n nodeSet.add(ei.coord)\n }\n }\n }\n\n checkHolesInShell (p, graph) {\n const shell = p.getExteriorRing()\n const pir = new IndexedPointInAreaLocator(shell)\n for (let i = 0; i < p.getNumInteriorRing(); i++) {\n const hole = p.getInteriorRingN(i)\n const holePt = IsValidOp.findPtNotNode(hole.getCoordinates(), shell, graph)\n if (holePt === null) return null\n const outside = Location.EXTERIOR === pir.locate(holePt)\n if (outside) {\n this._validErr = new TopologyValidationError(TopologyValidationError.HOLE_OUTSIDE_SHELL, holePt)\n return null\n }\n }\n }\n\n checkTooFewPoints (graph) {\n if (graph.hasTooFewPoints()) {\n this._validErr = new TopologyValidationError(TopologyValidationError.TOO_FEW_POINTS, graph.getInvalidPoint())\n return null\n }\n }\n\n getValidationError () {\n this.checkValid(this._parentGeometry)\n return this._validErr\n }\n\n checkValid () {\n if (arguments[0] instanceof Point) {\n const g = arguments[0]\n this.checkInvalidCoordinates(g.getCoordinates())\n } else if (arguments[0] instanceof MultiPoint) {\n const g = arguments[0]\n this.checkInvalidCoordinates(g.getCoordinates())\n } else if (arguments[0] instanceof LinearRing) {\n const g = arguments[0]\n this.checkInvalidCoordinates(g.getCoordinates())\n if (this._validErr !== null) return null\n this.checkClosedRing(g)\n if (this._validErr !== null) return null\n const graph = new GeometryGraph(0, g)\n this.checkTooFewPoints(graph)\n if (this._validErr !== null) return null\n const li = new RobustLineIntersector()\n graph.computeSelfNodes(li, true, true)\n this.checkNoSelfIntersectingRings(graph)\n } else if (arguments[0] instanceof LineString) {\n const g = arguments[0]\n this.checkInvalidCoordinates(g.getCoordinates())\n if (this._validErr !== null) return null\n const graph = new GeometryGraph(0, g)\n this.checkTooFewPoints(graph)\n } else if (arguments[0] instanceof Polygon) {\n const g = arguments[0]\n this.checkInvalidCoordinates(g)\n if (this._validErr !== null) return null\n this.checkClosedRings(g)\n if (this._validErr !== null) return null\n const graph = new GeometryGraph(0, g)\n this.checkTooFewPoints(graph)\n if (this._validErr !== null) return null\n this.checkConsistentArea(graph)\n if (this._validErr !== null) return null\n if (!this._isSelfTouchingRingFormingHoleValid) {\n this.checkNoSelfIntersectingRings(graph)\n if (this._validErr !== null) return null\n }\n this.checkHolesInShell(g, graph)\n if (this._validErr !== null) return null\n this.checkHolesNotNested(g, graph)\n if (this._validErr !== null) return null\n this.checkConnectedInteriors(graph)\n } else if (arguments[0] instanceof MultiPolygon) {\n const g = arguments[0]\n for (let i = 0; i < g.getNumGeometries(); i++) {\n const p = g.getGeometryN(i)\n this.checkInvalidCoordinates(p)\n if (this._validErr !== null) return null\n this.checkClosedRings(p)\n if (this._validErr !== null) return null\n }\n const graph = new GeometryGraph(0, g)\n this.checkTooFewPoints(graph)\n if (this._validErr !== null) return null\n this.checkConsistentArea(graph)\n if (this._validErr !== null) return null\n if (!this._isSelfTouchingRingFormingHoleValid) {\n this.checkNoSelfIntersectingRings(graph)\n if (this._validErr !== null) return null\n }\n for (let i = 0; i < g.getNumGeometries(); i++) {\n const p = g.getGeometryN(i)\n this.checkHolesInShell(p, graph)\n if (this._validErr !== null) return null\n }\n for (let i = 0; i < g.getNumGeometries(); i++) {\n const p = g.getGeometryN(i)\n this.checkHolesNotNested(p, graph)\n if (this._validErr !== null) return null\n }\n this.checkShellsNotNested(g, graph)\n if (this._validErr !== null) return null\n this.checkConnectedInteriors(graph)\n } else if (arguments[0] instanceof GeometryCollection) {\n const gc = arguments[0]\n for (let i = 0; i < gc.getNumGeometries(); i++) {\n const g = gc.getGeometryN(i)\n this.checkValid(g)\n if (this._validErr !== null) return null\n }\n } else if (arguments[0] instanceof Geometry) {\n const g = arguments[0]\n this._validErr = null\n if (g.isEmpty()) return null\n if (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 }\n }\n\n setSelfTouchingRingFormingHoleValid (isValid) {\n this._isSelfTouchingRingFormingHoleValid = isValid\n }\n\n checkShellNotNested (shell, p, graph) {\n const shellPts = shell.getCoordinates()\n const polyShell = p.getExteriorRing()\n const polyPts = polyShell.getCoordinates()\n const shellPt = IsValidOp.findPtNotNode(shellPts, polyShell, graph)\n if (shellPt === null) return null\n const insidePolyShell = PointLocation.isInRing(shellPt, polyPts)\n if (!insidePolyShell) return null\n if (p.getNumInteriorRing() <= 0) {\n this._validErr = new TopologyValidationError(TopologyValidationError.NESTED_SHELLS, shellPt)\n return null\n }\n let badNestedPt = null\n for (let i = 0; i < p.getNumInteriorRing(); i++) {\n const hole = p.getInteriorRingN(i)\n badNestedPt = this.checkShellInsideHole(shell, hole, graph)\n if (badNestedPt === null) return null\n }\n this._validErr = new TopologyValidationError(TopologyValidationError.NESTED_SHELLS, badNestedPt)\n }\n\n checkClosedRings (poly) {\n this.checkClosedRing(poly.getExteriorRing())\n if (this._validErr !== null) return null\n for (let i = 0; i < poly.getNumInteriorRing(); i++) {\n this.checkClosedRing(poly.getInteriorRingN(i))\n if (this._validErr !== null) return null\n }\n }\n\n checkClosedRing (ring) {\n if (!ring.isClosed()) {\n let pt = null\n if (ring.getNumPoints() >= 1) pt = ring.getCoordinateN(0)\n this._validErr = new TopologyValidationError(TopologyValidationError.RING_NOT_CLOSED, pt)\n }\n }\n\n checkShellsNotNested (mp, graph) {\n for (let i = 0; i < mp.getNumGeometries(); i++) {\n const p = mp.getGeometryN(i)\n const shell = p.getExteriorRing()\n for (let j = 0; j < mp.getNumGeometries(); j++) {\n if (i === j) continue\n const p2 = mp.getGeometryN(j)\n this.checkShellNotNested(shell, p2, graph)\n if (this._validErr !== null) return null\n }\n }\n }\n\n getClass () {\n return IsValidOp\n }\n\n get interfaces_ () {\n return []\n }\n}\nIsValidOp.constructor_ = function () {\n this._parentGeometry = null\n this._isSelfTouchingRingFormingHoleValid = false\n this._validErr = null\n const parentGeometry = arguments[0]\n this._parentGeometry = parentGeometry\n}\n","import CoordinateList from '../../geom/CoordinateList'\nimport WKTWriter from '../../io/WKTWriter'\nimport CoordinateArraySequence from '../../geom/impl/CoordinateArraySequence'\nimport IsValidOp from '../valid/IsValidOp'\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 constructor () {\n EdgeRing.constructor_.apply(this, arguments)\n }\n\n static findDirEdgesInRing (startDE) {\n let de = startDE\n const edges = new ArrayList()\n do {\n edges.add(de)\n de = de.getNext()\n Assert.isTrue(de !== null, 'found null DE in ring')\n Assert.isTrue(de === startDE || !de.isInRing(), 'found DE already in ring')\n } while (de !== startDE)\n return edges\n }\n\n static addEdge (coords, isForward, coordList) {\n if (isForward) {\n for (let i = 0; i < coords.length; i++) {\n coordList.add(coords[i], false)\n }\n } else {\n for (let i = coords.length - 1; i >= 0; i--) {\n coordList.add(coords[i], false)\n }\n }\n }\n\n static findEdgeRingContaining (testEr, shellList) {\n const testRing = testEr.getRing()\n const testEnv = testRing.getEnvelopeInternal()\n let testPt = testRing.getCoordinateN(0)\n let minShell = null\n let minShellEnv = null\n for (let it = shellList.iterator(); it.hasNext();) {\n const tryShell = it.next()\n const tryShellRing = tryShell.getRing()\n const tryShellEnv = tryShellRing.getEnvelopeInternal()\n if (tryShellEnv.equals(testEnv)) continue\n if (!tryShellEnv.contains(testEnv)) continue\n testPt = CoordinateArrays.ptNotInList(testRing.getCoordinates(), tryShellRing.getCoordinates())\n let isContained = false\n if (PointLocation.isInRing(testPt, tryShellRing.getCoordinates())) isContained = true\n if (isContained) {\n if (minShell === null || minShellEnv.contains(tryShellEnv)) {\n minShell = tryShell\n minShellEnv = minShell.getRing().getEnvelopeInternal()\n }\n }\n }\n return minShell\n }\n\n isIncluded () {\n return this._isIncluded\n }\n\n getCoordinates () {\n if (this._ringPts === null) {\n const coordList = new CoordinateList()\n for (let i = this._deList.iterator(); i.hasNext();) {\n const de = i.next()\n const edge = de.getEdge()\n EdgeRing.addEdge(edge.getLine().getCoordinates(), de.getEdgeDirection(), coordList)\n }\n this._ringPts = coordList.toCoordinateArray()\n }\n return this._ringPts\n }\n\n isIncludedSet () {\n return this._isIncludedSet\n }\n\n isValid () {\n this.getCoordinates()\n if (this._ringPts.length <= 3) return false\n this.getRing()\n return IsValidOp.isValid(this._ring)\n }\n\n build (startDE) {\n let de = startDE\n do {\n this.add(de)\n de.setRing(this)\n de = de.getNext()\n Assert.isTrue(de !== null, 'found null DE in ring')\n Assert.isTrue(de === startDE || !de.isInRing(), 'found DE already in ring')\n } while (de !== startDE)\n }\n\n isOuterHole () {\n if (!this._isHole) return false\n return !this.hasShell()\n }\n\n getPolygon () {\n let holeLR = null\n if (this._holes !== null) {\n holeLR = new Array(this._holes.size()).fill(null)\n for (let i = 0; i < this._holes.size(); i++) {\n holeLR[i] = this._holes.get(i)\n }\n }\n const poly = this._factory.createPolygon(this._ring, holeLR)\n return poly\n }\n\n isHole () {\n return this._isHole\n }\n\n isProcessed () {\n return this._isProcessed\n }\n\n addHole () {\n if (arguments[0] instanceof LinearRing) {\n const hole = arguments[0]\n if (this._holes === null) this._holes = new ArrayList()\n this._holes.add(hole)\n } else if (arguments[0] instanceof EdgeRing) {\n const holeER = arguments[0]\n holeER.setShell(this)\n const hole = holeER.getRing()\n if (this._holes === null) this._holes = new ArrayList()\n this._holes.add(hole)\n }\n }\n\n setIncluded (isIncluded) {\n this._isIncluded = isIncluded\n this._isIncludedSet = true\n }\n\n getOuterHole () {\n if (this.isHole()) return null\n for (let i = 0; i < this._deList.size(); i++) {\n const de = this._deList.get(i)\n const adjRing = de.getSym().getRing()\n if (adjRing.isOuterHole()) return adjRing\n }\n return null\n }\n\n computeHole () {\n const ring = this.getRing()\n this._isHole = Orientation.isCCW(ring.getCoordinates())\n }\n\n hasShell () {\n return this._shell !== null\n }\n\n isOuterShell () {\n return this.getOuterHole() !== null\n }\n\n getLineString () {\n this.getCoordinates()\n return this._factory.createLineString(this._ringPts)\n }\n\n toString () {\n return WKTWriter.toLineString(new CoordinateArraySequence(this.getCoordinates()))\n }\n\n getShell () {\n if (this.isHole()) return this._shell\n return this\n }\n\n add (de) {\n this._deList.add(de)\n }\n\n getRing () {\n if (this._ring !== null) return this._ring\n this.getCoordinates()\n if (this._ringPts.length < 3) System.out.println(this._ringPts)\n try {\n this._ring = this._factory.createLinearRing(this._ringPts)\n } catch (ex) {\n if (ex instanceof Exception) {\n System.out.println(this._ringPts)\n } else throw ex\n } finally {}\n return this._ring\n }\n\n updateIncluded () {\n if (this.isHole()) return null\n for (let i = 0; i < this._deList.size(); i++) {\n const de = this._deList.get(i)\n const adjShell = de.getSym().getRing().getShell()\n if (adjShell !== null && adjShell.isIncludedSet()) {\n this.setIncluded(!adjShell.isIncluded())\n return null\n }\n }\n }\n\n setShell (shell) {\n this._shell = shell\n }\n\n setProcessed (isProcessed) {\n this._isProcessed = isProcessed\n }\n\n getClass () {\n return EdgeRing\n }\n\n get interfaces_ () {\n return []\n }\n}\nclass EnvelopeComparator {\n constructor () {\n EnvelopeComparator.constructor_.apply(this, arguments)\n }\n\n compare (obj0, obj1) {\n const r0 = obj0\n const r1 = obj1\n return r0.getRing().getEnvelope().compareTo(r1.getRing().getEnvelope())\n }\n\n getClass () {\n return EnvelopeComparator\n }\n\n get interfaces_ () {\n return [Comparator]\n }\n}\nEnvelopeComparator.constructor_ = function () {}\nEdgeRing.EnvelopeComparator = EnvelopeComparator\nEdgeRing.constructor_ = function () {\n this._factory = null\n this._deList = new ArrayList()\n this._lowestEdge = null\n this._ring = null\n this._ringPts = null\n this._holes = null\n this._shell = null\n this._isHole = null\n this._isProcessed = false\n this._isIncludedSet = false\n this._isIncluded = false\n const factory = arguments[0]\n this._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 constructor () {\n super()\n PolygonizeGraph.constructor_.apply(this, arguments)\n }\n\n static findLabeledEdgeRings (dirEdges) {\n const edgeRingStarts = new ArrayList()\n let currLabel = 1\n for (let i = dirEdges.iterator(); i.hasNext();) {\n const de = i.next()\n if (de.isMarked()) continue\n if (de.getLabel() >= 0) continue\n edgeRingStarts.add(de)\n const edges = EdgeRing.findDirEdgesInRing(de)\n PolygonizeGraph.label(edges, currLabel)\n currLabel++\n }\n return edgeRingStarts\n }\n\n static getDegreeNonDeleted (node) {\n const edges = node.getOutEdges().getEdges()\n let degree = 0\n for (let i = edges.iterator(); i.hasNext();) {\n const de = i.next()\n if (!de.isMarked()) degree++\n }\n return degree\n }\n\n static deleteAllEdges (node) {\n const edges = node.getOutEdges().getEdges()\n for (let i = edges.iterator(); i.hasNext();) {\n const de = i.next()\n de.setMarked(true)\n const sym = de.getSym()\n if (sym !== null) sym.setMarked(true)\n }\n }\n\n static label (dirEdges, label) {\n for (let i = dirEdges.iterator(); i.hasNext();) {\n const de = i.next()\n de.setLabel(label)\n }\n }\n\n static computeNextCWEdges (node) {\n const deStar = node.getOutEdges()\n let startDE = null\n let prevDE = null\n for (let i = deStar.getEdges().iterator(); i.hasNext();) {\n const outDE = i.next()\n if (outDE.isMarked()) continue\n if (startDE === null) startDE = outDE\n if (prevDE !== null) {\n const sym = prevDE.getSym()\n sym.setNext(outDE)\n }\n prevDE = outDE\n }\n if (prevDE !== null) {\n const sym = prevDE.getSym()\n sym.setNext(startDE)\n }\n }\n\n static computeNextCCWEdges (node, label) {\n const deStar = node.getOutEdges()\n let firstOutDE = null\n let prevInDE = null\n const edges = deStar.getEdges()\n for (let i = edges.size() - 1; i >= 0; i--) {\n const de = edges.get(i)\n const sym = de.getSym()\n let outDE = null\n if (de.getLabel() === label) outDE = de\n let inDE = null\n if (sym.getLabel() === label) inDE = sym\n if (outDE === null && inDE === null) continue\n if (inDE !== null) {\n prevInDE = inDE\n }\n if (outDE !== null) {\n if (prevInDE !== null) {\n prevInDE.setNext(outDE)\n prevInDE = null\n }\n if (firstOutDE === null) firstOutDE = outDE\n }\n }\n if (prevInDE !== null) {\n Assert.isTrue(firstOutDE !== null)\n prevInDE.setNext(firstOutDE)\n }\n }\n\n static getDegree (node, label) {\n const edges = node.getOutEdges().getEdges()\n let degree = 0\n for (let i = edges.iterator(); i.hasNext();) {\n const de = i.next()\n if (de.getLabel() === label) degree++\n }\n return degree\n }\n\n static findIntersectionNodes (startDE, label) {\n let de = startDE\n let intNodes = null\n do {\n const node = de.getFromNode()\n if (PolygonizeGraph.getDegree(node, label) > 1) {\n if (intNodes === null) intNodes = new ArrayList()\n intNodes.add(node)\n }\n de = de.getNext()\n Assert.isTrue(de !== null, 'found null DE in ring')\n Assert.isTrue(de === startDE || !de.isInRing(), 'found DE already in ring')\n } while (de !== startDE)\n return intNodes\n }\n\n findEdgeRing (startDE) {\n const er = new EdgeRing(this._factory)\n er.build(startDE)\n return er\n }\n\n computeDepthParity () {\n if (arguments.length === 0) {\n while (true) {\n const de = null\n if (de === null) return null\n this.computeDepthParity(de)\n }\n } else if (arguments.length === 1) {\n const de = arguments[0]\n }\n }\n\n computeNextCWEdges () {\n for (let iNode = this.nodeIterator(); iNode.hasNext();) {\n const node = iNode.next()\n PolygonizeGraph.computeNextCWEdges(node)\n }\n }\n\n addEdge (line) {\n if (line.isEmpty()) {\n return null\n }\n const linePts = CoordinateArrays.removeRepeatedPoints(line.getCoordinates())\n if (linePts.length < 2) {\n return null\n }\n const startPt = linePts[0]\n const endPt = linePts[linePts.length - 1]\n const nStart = this.getNode(startPt)\n const nEnd = this.getNode(endPt)\n const de0 = new PolygonizeDirectedEdge(nStart, nEnd, linePts[1], true)\n const de1 = new PolygonizeDirectedEdge(nEnd, nStart, linePts[linePts.length - 2], false)\n const edge = new PolygonizeEdge(line)\n edge.setDirectedEdges(de0, de1)\n this.add(edge)\n }\n\n deleteCutEdges () {\n this.computeNextCWEdges()\n PolygonizeGraph.findLabeledEdgeRings(this._dirEdges)\n const cutLines = new ArrayList()\n for (let i = this._dirEdges.iterator(); i.hasNext();) {\n const de = i.next()\n if (de.isMarked()) continue\n const sym = de.getSym()\n if (de.getLabel() === sym.getLabel()) {\n de.setMarked(true)\n sym.setMarked(true)\n const e = de.getEdge()\n cutLines.add(e.getLine())\n }\n }\n return cutLines\n }\n\n getEdgeRings () {\n this.computeNextCWEdges()\n PolygonizeGraph.label(this._dirEdges, -1)\n const maximalRings = PolygonizeGraph.findLabeledEdgeRings(this._dirEdges)\n this.convertMaximalToMinimalEdgeRings(maximalRings)\n const edgeRingList = new ArrayList()\n for (let i = this._dirEdges.iterator(); i.hasNext();) {\n const de = i.next()\n if (de.isMarked()) continue\n if (de.isInRing()) continue\n const er = this.findEdgeRing(de)\n edgeRingList.add(er)\n }\n return edgeRingList\n }\n\n getNode (pt) {\n let node = this.findNode(pt)\n if (node === null) {\n node = new Node(pt)\n this.add(node)\n }\n return node\n }\n\n convertMaximalToMinimalEdgeRings (ringEdges) {\n for (let i = ringEdges.iterator(); i.hasNext();) {\n const de = i.next()\n const label = de.getLabel()\n const intNodes = PolygonizeGraph.findIntersectionNodes(de, label)\n if (intNodes === null) continue\n for (let iNode = intNodes.iterator(); iNode.hasNext();) {\n const node = iNode.next()\n PolygonizeGraph.computeNextCCWEdges(node, label)\n }\n }\n }\n\n deleteDangles () {\n const nodesToRemove = this.findNodesOfDegree(1)\n const dangleLines = new HashSet()\n const nodeStack = new Stack()\n for (let i = nodesToRemove.iterator(); i.hasNext();) {\n nodeStack.push(i.next())\n }\n while (!nodeStack.isEmpty()) {\n const node = nodeStack.pop()\n PolygonizeGraph.deleteAllEdges(node)\n const nodeOutEdges = node.getOutEdges().getEdges()\n for (let i = nodeOutEdges.iterator(); i.hasNext();) {\n const de = i.next()\n de.setMarked(true)\n const sym = de.getSym()\n if (sym !== null) sym.setMarked(true)\n const e = de.getEdge()\n dangleLines.add(e.getLine())\n const toNode = de.getToNode()\n if (PolygonizeGraph.getDegreeNonDeleted(toNode) === 1) nodeStack.push(toNode)\n }\n }\n return dangleLines\n }\n\n getClass () {\n return PolygonizeGraph\n }\n\n get interfaces_ () {\n return []\n }\n}\nPolygonizeGraph.constructor_ = function () {\n this._factory = null\n const factory = arguments[0]\n this._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 constructor () {\n Polygonizer.constructor_.apply(this, arguments)\n }\n\n static findOuterShells (shellList) {\n for (let i = shellList.iterator(); i.hasNext();) {\n const er = i.next()\n const outerHoleER = er.getOuterHole()\n if (outerHoleER !== null && !outerHoleER.isProcessed()) {\n er.setIncluded(true)\n outerHoleER.setProcessed(true)\n }\n }\n }\n\n static extractPolygons (shellList, includeAll) {\n const polyList = new ArrayList()\n for (let i = shellList.iterator(); i.hasNext();) {\n const er = i.next()\n if (includeAll || er.isIncluded()) {\n polyList.add(er.getPolygon())\n }\n }\n return polyList\n }\n\n static assignHolesToShells (holeList, shellList) {\n for (let i = holeList.iterator(); i.hasNext();) {\n const holeER = i.next()\n Polygonizer.assignHoleToShell(holeER, shellList)\n }\n }\n\n static assignHoleToShell (holeER, shellList) {\n const shell = EdgeRing.findEdgeRingContaining(holeER, shellList)\n if (shell !== null) {\n shell.addHole(holeER)\n }\n }\n\n static findDisjointShells (shellList) {\n Polygonizer.findOuterShells(shellList)\n let isMoreToScan = null\n do {\n isMoreToScan = false\n for (let i = shellList.iterator(); i.hasNext();) {\n const er = i.next()\n if (er.isIncludedSet()) continue\n er.updateIncluded()\n if (!er.isIncludedSet()) {\n isMoreToScan = true\n }\n }\n } while (isMoreToScan)\n }\n\n getGeometry () {\n if (this._geomFactory === null) this._geomFactory = new GeometryFactory()\n this.polygonize()\n if (this._extractOnlyPolygonal) {\n return this._geomFactory.buildGeometry(this._polyList)\n }\n return this._geomFactory.createGeometryCollection(GeometryFactory.toGeometryArray(this._polyList))\n }\n\n getInvalidRingLines () {\n this.polygonize()\n return this._invalidRingLines\n }\n\n findValidRings (edgeRingList, validEdgeRingList, invalidRingList) {\n for (let i = edgeRingList.iterator(); i.hasNext();) {\n const er = i.next()\n if (er.isValid()) validEdgeRingList.add(er); else invalidRingList.add(er.getLineString())\n }\n }\n\n polygonize () {\n if (this._polyList !== null) return null\n this._polyList = new ArrayList()\n if (this._graph === null) return null\n this._dangles = this._graph.deleteDangles()\n this._cutEdges = this._graph.deleteCutEdges()\n const edgeRingList = this._graph.getEdgeRings()\n let validEdgeRingList = new ArrayList()\n this._invalidRingLines = new ArrayList()\n if (this._isCheckingRingsValid) {\n this.findValidRings(edgeRingList, validEdgeRingList, this._invalidRingLines)\n } else {\n validEdgeRingList = edgeRingList\n }\n this.findShellsAndHoles(validEdgeRingList)\n Polygonizer.assignHolesToShells(this._holeList, this._shellList)\n Collections.sort(this._shellList, new EdgeRing.EnvelopeComparator())\n let includeAll = true\n if (this._extractOnlyPolygonal) {\n Polygonizer.findDisjointShells(this._shellList)\n includeAll = false\n }\n this._polyList = Polygonizer.extractPolygons(this._shellList, includeAll)\n }\n\n getDangles () {\n this.polygonize()\n return this._dangles\n }\n\n getCutEdges () {\n this.polygonize()\n return this._cutEdges\n }\n\n getPolygons () {\n this.polygonize()\n return this._polyList\n }\n\n add () {\n if (hasInterface(arguments[0], Collection)) {\n const geomList = arguments[0]\n for (let i = geomList.iterator(); i.hasNext();) {\n const geometry = i.next()\n this.add(geometry)\n }\n } else if (arguments[0] instanceof LineString) {\n const line = arguments[0]\n this._geomFactory = line.getFactory()\n if (this._graph === null) this._graph = new PolygonizeGraph(this._geomFactory)\n this._graph.addEdge(line)\n } else if (arguments[0] instanceof Geometry) {\n const g = arguments[0]\n g.apply(this._lineStringAdder)\n }\n }\n\n setCheckRingsValid (isCheckingRingsValid) {\n this._isCheckingRingsValid = isCheckingRingsValid\n }\n\n findShellsAndHoles (edgeRingList) {\n this._holeList = new ArrayList()\n this._shellList = new ArrayList()\n for (let i = edgeRingList.iterator(); i.hasNext();) {\n const er = i.next()\n er.computeHole()\n if (er.isHole()) this._holeList.add(er); else this._shellList.add(er)\n }\n }\n\n getClass () {\n return Polygonizer\n }\n\n get interfaces_ () {\n return []\n }\n}\nclass LineStringAdder {\n constructor () {\n LineStringAdder.constructor_.apply(this, arguments)\n }\n\n filter (g) {\n if (g instanceof LineString) this.p.add(g)\n }\n\n getClass () {\n return LineStringAdder\n }\n\n get interfaces_ () {\n return [GeometryComponentFilter]\n }\n}\nLineStringAdder.constructor_ = function () {\n this.p = null\n const p = arguments[0]\n this.p = p\n}\nPolygonizer.LineStringAdder = LineStringAdder\nPolygonizer.constructor_ = function () {\n this._lineStringAdder = new LineStringAdder(this)\n this._graph = null\n this._dangles = new ArrayList()\n this._cutEdges = new ArrayList()\n this._invalidRingLines = new ArrayList()\n this._holeList = null\n this._shellList = null\n this._polyList = null\n this._isCheckingRingsValid = true\n this._extractOnlyPolygonal = null\n this._geomFactory = null\n if (arguments.length === 0) {\n Polygonizer.constructor_.call(this, false)\n } else if (arguments.length === 1) {\n const extractOnlyPolygonal = arguments[0]\n this._extractOnlyPolygonal = extractOnlyPolygonal\n }\n}\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 constructor () {\n RelateComputer.constructor_.apply(this, arguments)\n }\n\n insertEdgeEnds (ee) {\n for (let i = ee.iterator(); i.hasNext();) {\n const e = i.next()\n this._nodes.add(e)\n }\n }\n\n computeProperIntersectionIM (intersector, im) {\n const dimA = this._arg[0].getGeometry().getDimension()\n const dimB = this._arg[1].getGeometry().getDimension()\n const hasProper = intersector.hasProperIntersection()\n const hasProperInterior = intersector.hasProperInteriorIntersection()\n if (dimA === 2 && dimB === 2) {\n if (hasProper) im.setAtLeast('212101212')\n } else if (dimA === 2 && dimB === 1) {\n if (hasProper) im.setAtLeast('FFF0FFFF2')\n if (hasProperInterior) im.setAtLeast('1FFFFF1FF')\n } else if (dimA === 1 && dimB === 2) {\n if (hasProper) im.setAtLeast('F0FFFFFF2')\n if (hasProperInterior) im.setAtLeast('1F1FFFFFF')\n } else if (dimA === 1 && dimB === 1) {\n if (hasProperInterior) im.setAtLeast('0FFFFFFFF')\n }\n }\n\n labelIsolatedEdges (thisIndex, targetIndex) {\n for (let ei = this._arg[thisIndex].getEdgeIterator(); ei.hasNext();) {\n const e = ei.next()\n if (e.isIsolated()) {\n this.labelIsolatedEdge(e, targetIndex, this._arg[targetIndex].getGeometry())\n this._isolatedEdges.add(e)\n }\n }\n }\n\n labelIsolatedEdge (e, targetIndex, target) {\n if (target.getDimension() > 0) {\n const loc = this._ptLocator.locate(e.getCoordinate(), target)\n e.getLabel().setAllLocations(targetIndex, loc)\n } else {\n e.getLabel().setAllLocations(targetIndex, Location.EXTERIOR)\n }\n }\n\n computeIM () {\n const im = new IntersectionMatrix()\n im.set(Location.EXTERIOR, Location.EXTERIOR, 2)\n if (!this._arg[0].getGeometry().getEnvelopeInternal().intersects(this._arg[1].getGeometry().getEnvelopeInternal())) {\n this.computeDisjointIM(im)\n return im\n }\n this._arg[0].computeSelfNodes(this._li, false)\n this._arg[1].computeSelfNodes(this._li, false)\n const intersector = this._arg[0].computeEdgeIntersections(this._arg[1], this._li, false)\n this.computeIntersectionNodes(0)\n this.computeIntersectionNodes(1)\n this.copyNodesAndLabels(0)\n this.copyNodesAndLabels(1)\n this.labelIsolatedNodes()\n this.computeProperIntersectionIM(intersector, im)\n const eeBuilder = new EdgeEndBuilder()\n const ee0 = eeBuilder.computeEdgeEnds(this._arg[0].getEdgeIterator())\n this.insertEdgeEnds(ee0)\n const ee1 = eeBuilder.computeEdgeEnds(this._arg[1].getEdgeIterator())\n this.insertEdgeEnds(ee1)\n this.labelNodeEdges()\n this.labelIsolatedEdges(0, 1)\n this.labelIsolatedEdges(1, 0)\n this.updateIM(im)\n return im\n }\n\n labelNodeEdges () {\n for (let ni = this._nodes.iterator(); ni.hasNext();) {\n const node = ni.next()\n node.getEdges().computeLabelling(this._arg)\n }\n }\n\n copyNodesAndLabels (argIndex) {\n for (let i = this._arg[argIndex].getNodeIterator(); i.hasNext();) {\n const graphNode = i.next()\n const newNode = this._nodes.addNode(graphNode.getCoordinate())\n newNode.setLabel(argIndex, graphNode.getLabel().getLocation(argIndex))\n }\n }\n\n labelIntersectionNodes (argIndex) {\n for (let i = this._arg[argIndex].getEdgeIterator(); i.hasNext();) {\n const e = i.next()\n const eLoc = e.getLabel().getLocation(argIndex)\n for (let eiIt = e.getEdgeIntersectionList().iterator(); eiIt.hasNext();) {\n const ei = eiIt.next()\n const n = this._nodes.find(ei.coord)\n if (n.getLabel().isNull(argIndex)) {\n if (eLoc === Location.BOUNDARY) n.setLabelBoundary(argIndex); else n.setLabel(argIndex, Location.INTERIOR)\n }\n }\n }\n }\n\n labelIsolatedNode (n, targetIndex) {\n const loc = this._ptLocator.locate(n.getCoordinate(), this._arg[targetIndex].getGeometry())\n n.getLabel().setAllLocations(targetIndex, loc)\n }\n\n computeIntersectionNodes (argIndex) {\n for (let i = this._arg[argIndex].getEdgeIterator(); i.hasNext();) {\n const e = i.next()\n const eLoc = e.getLabel().getLocation(argIndex)\n for (let eiIt = e.getEdgeIntersectionList().iterator(); eiIt.hasNext();) {\n const ei = eiIt.next()\n const n = this._nodes.addNode(ei.coord)\n if (eLoc === Location.BOUNDARY) n.setLabelBoundary(argIndex); else {\n if (n.getLabel().isNull(argIndex)) n.setLabel(argIndex, Location.INTERIOR)\n }\n }\n }\n }\n\n labelIsolatedNodes () {\n for (let ni = this._nodes.iterator(); ni.hasNext();) {\n const n = ni.next()\n const label = n.getLabel()\n Assert.isTrue(label.getGeometryCount() > 0, 'node with empty label found')\n if (n.isIsolated()) {\n if (label.isNull(0)) this.labelIsolatedNode(n, 0); else this.labelIsolatedNode(n, 1)\n }\n }\n }\n\n updateIM (im) {\n for (let ei = this._isolatedEdges.iterator(); ei.hasNext();) {\n const e = ei.next()\n e.updateIM(im)\n }\n for (let ni = this._nodes.iterator(); ni.hasNext();) {\n const node = ni.next()\n node.updateIM(im)\n node.updateIMFromEdges(im)\n }\n }\n\n computeDisjointIM (im) {\n const ga = this._arg[0].getGeometry()\n if (!ga.isEmpty()) {\n im.set(Location.INTERIOR, Location.EXTERIOR, ga.getDimension())\n im.set(Location.BOUNDARY, Location.EXTERIOR, ga.getBoundaryDimension())\n }\n const gb = this._arg[1].getGeometry()\n if (!gb.isEmpty()) {\n im.set(Location.EXTERIOR, Location.INTERIOR, gb.getDimension())\n im.set(Location.EXTERIOR, Location.BOUNDARY, gb.getBoundaryDimension())\n }\n }\n\n getClass () {\n return RelateComputer\n }\n\n get interfaces_ () {\n return []\n }\n}\nRelateComputer.constructor_ = function () {\n this._li = new RobustLineIntersector()\n this._ptLocator = new PointLocator()\n this._arg = null\n this._nodes = new NodeMap(new RelateNodeFactory())\n this._im = null\n this._isolatedEdges = new ArrayList()\n this._invalidPoint = null\n const arg = arguments[0]\n this._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 constructor () {\n RectangleContains.constructor_.apply(this, arguments)\n }\n\n static contains (rectangle, b) {\n const rc = new RectangleContains(rectangle)\n return rc.contains(b)\n }\n\n isContainedInBoundary (geom) {\n if (geom instanceof Polygon) return false\n if (geom instanceof Point) return this.isPointContainedInBoundary(geom)\n if (geom instanceof LineString) return this.isLineStringContainedInBoundary(geom)\n for (let i = 0; i < geom.getNumGeometries(); i++) {\n const comp = geom.getGeometryN(i)\n if (!this.isContainedInBoundary(comp)) return false\n }\n return true\n }\n\n isLineSegmentContainedInBoundary (p0, p1) {\n if (p0.equals(p1)) return this.isPointContainedInBoundary(p0)\n if (p0.x === p1.x) {\n if (p0.x === this._rectEnv.getMinX() || p0.x === this._rectEnv.getMaxX()) return true\n } else if (p0.y === p1.y) {\n if (p0.y === this._rectEnv.getMinY() || p0.y === this._rectEnv.getMaxY()) return true\n }\n return false\n }\n\n isLineStringContainedInBoundary (line) {\n const seq = line.getCoordinateSequence()\n const p0 = new Coordinate()\n const p1 = new Coordinate()\n for (let i = 0; i < seq.size() - 1; i++) {\n seq.getCoordinate(i, p0)\n seq.getCoordinate(i + 1, p1)\n if (!this.isLineSegmentContainedInBoundary(p0, p1)) return false\n }\n return true\n }\n\n isPointContainedInBoundary () {\n if (arguments[0] instanceof Point) {\n const point = arguments[0]\n return this.isPointContainedInBoundary(point.getCoordinate())\n } else if (arguments[0] instanceof Coordinate) {\n const pt = arguments[0]\n return pt.x === this._rectEnv.getMinX() || pt.x === this._rectEnv.getMaxX() || pt.y === this._rectEnv.getMinY() || pt.y === this._rectEnv.getMaxY()\n }\n }\n\n contains (geom) {\n if (!this._rectEnv.contains(geom.getEnvelopeInternal())) return false\n if (this.isContainedInBoundary(geom)) return false\n return true\n }\n\n getClass () {\n return RectangleContains\n }\n\n get interfaces_ () {\n return []\n }\n}\nRectangleContains.constructor_ = function () {\n this._rectEnv = null\n const rectangle = arguments[0]\n this._rectEnv = rectangle.getEnvelopeInternal()\n}\n","import Coordinate from '../geom/Coordinate'\nimport RobustLineIntersector from './RobustLineIntersector'\nimport Envelope from '../geom/Envelope'\nexport default class RectangleLineIntersector {\n constructor () {\n RectangleLineIntersector.constructor_.apply(this, arguments)\n }\n\n intersects (p0, p1) {\n const segEnv = new Envelope(p0, p1)\n if (!this._rectEnv.intersects(segEnv)) return false\n if (this._rectEnv.intersects(p0)) return true\n if (this._rectEnv.intersects(p1)) return true\n if (p0.compareTo(p1) > 0) {\n const tmp = p0\n p0 = p1\n p1 = tmp\n }\n let isSegUpwards = false\n if (p1.y > p0.y) isSegUpwards = true\n if (isSegUpwards) {\n this._li.computeIntersection(p0, p1, this._diagDown0, this._diagDown1)\n } else {\n this._li.computeIntersection(p0, p1, this._diagUp0, this._diagUp1)\n }\n if (this._li.hasIntersection()) return true\n return false\n }\n\n getClass () {\n return RectangleLineIntersector\n }\n\n get interfaces_ () {\n return []\n }\n}\nRectangleLineIntersector.constructor_ = function () {\n this._li = new RobustLineIntersector()\n this._rectEnv = null\n this._diagUp0 = null\n this._diagUp1 = null\n this._diagDown0 = null\n this._diagDown1 = null\n const rectEnv = arguments[0]\n this._rectEnv = rectEnv\n this._diagUp0 = new Coordinate(rectEnv.getMinX(), rectEnv.getMinY())\n this._diagUp1 = new Coordinate(rectEnv.getMaxX(), rectEnv.getMaxY())\n this._diagDown0 = new Coordinate(rectEnv.getMinX(), rectEnv.getMaxY())\n this._diagDown1 = new Coordinate(rectEnv.getMaxX(), rectEnv.getMinY())\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 constructor () {\n RectangleIntersects.constructor_.apply(this, arguments)\n }\n\n static intersects (rectangle, b) {\n const rp = new RectangleIntersects(rectangle)\n return rp.intersects(b)\n }\n\n intersects (geom) {\n if (!this._rectEnv.intersects(geom.getEnvelopeInternal())) return false\n const visitor = new EnvelopeIntersectsVisitor(this._rectEnv)\n visitor.applyTo(geom)\n if (visitor.intersects()) return true\n const ecpVisitor = new GeometryContainsPointVisitor(this._rectangle)\n ecpVisitor.applyTo(geom)\n if (ecpVisitor.containsPoint()) return true\n const riVisitor = new RectangleIntersectsSegmentVisitor(this._rectangle)\n riVisitor.applyTo(geom)\n if (riVisitor.intersects()) return true\n return false\n }\n\n getClass () {\n return RectangleIntersects\n }\n\n get interfaces_ () {\n return []\n }\n}\nRectangleIntersects.constructor_ = function () {\n this._rectangle = null\n this._rectEnv = null\n const rectangle = arguments[0]\n this._rectangle = rectangle\n this._rectEnv = rectangle.getEnvelopeInternal()\n}\nclass EnvelopeIntersectsVisitor extends ShortCircuitedGeometryVisitor {\n constructor () {\n super()\n EnvelopeIntersectsVisitor.constructor_.apply(this, arguments)\n }\n\n isDone () {\n return this._intersects === true\n }\n\n visit (element) {\n const elementEnv = element.getEnvelopeInternal()\n if (!this._rectEnv.intersects(elementEnv)) {\n return null\n }\n if (this._rectEnv.contains(elementEnv)) {\n this._intersects = true\n return null\n }\n if (elementEnv.getMinX() >= this._rectEnv.getMinX() && elementEnv.getMaxX() <= this._rectEnv.getMaxX()) {\n this._intersects = true\n return null\n }\n if (elementEnv.getMinY() >= this._rectEnv.getMinY() && elementEnv.getMaxY() <= this._rectEnv.getMaxY()) {\n this._intersects = true\n return null\n }\n }\n\n intersects () {\n return this._intersects\n }\n\n getClass () {\n return EnvelopeIntersectsVisitor\n }\n\n get interfaces_ () {\n return []\n }\n}\nEnvelopeIntersectsVisitor.constructor_ = function () {\n this._rectEnv = null\n this._intersects = false\n const rectEnv = arguments[0]\n this._rectEnv = rectEnv\n}\nclass GeometryContainsPointVisitor extends ShortCircuitedGeometryVisitor {\n constructor () {\n super()\n GeometryContainsPointVisitor.constructor_.apply(this, arguments)\n }\n\n isDone () {\n return this._containsPoint === true\n }\n\n visit (geom) {\n if (!(geom instanceof Polygon)) return null\n const elementEnv = geom.getEnvelopeInternal()\n if (!this._rectEnv.intersects(elementEnv)) return null\n const rectPt = new Coordinate()\n for (let i = 0; i < 4; i++) {\n this._rectSeq.getCoordinate(i, rectPt)\n if (!elementEnv.contains(rectPt)) continue\n if (SimplePointInAreaLocator.containsPointInPolygon(rectPt, geom)) {\n this._containsPoint = true\n return null\n }\n }\n }\n\n containsPoint () {\n return this._containsPoint\n }\n\n getClass () {\n return GeometryContainsPointVisitor\n }\n\n get interfaces_ () {\n return []\n }\n}\nGeometryContainsPointVisitor.constructor_ = function () {\n this._rectSeq = null\n this._rectEnv = null\n this._containsPoint = false\n const rectangle = arguments[0]\n this._rectSeq = rectangle.getExteriorRing().getCoordinateSequence()\n this._rectEnv = rectangle.getEnvelopeInternal()\n}\nclass RectangleIntersectsSegmentVisitor extends ShortCircuitedGeometryVisitor {\n constructor () {\n super()\n RectangleIntersectsSegmentVisitor.constructor_.apply(this, arguments)\n }\n\n intersects () {\n return this._hasIntersection\n }\n\n isDone () {\n return this._hasIntersection === true\n }\n\n visit (geom) {\n const elementEnv = geom.getEnvelopeInternal()\n if (!this._rectEnv.intersects(elementEnv)) return null\n const lines = LinearComponentExtracter.getLines(geom)\n this.checkIntersectionWithLineStrings(lines)\n }\n\n checkIntersectionWithLineStrings (lines) {\n for (let i = lines.iterator(); i.hasNext();) {\n const testLine = i.next()\n this.checkIntersectionWithSegments(testLine)\n if (this._hasIntersection) return null\n }\n }\n\n checkIntersectionWithSegments (testLine) {\n const seq1 = testLine.getCoordinateSequence()\n for (let j = 1; j < seq1.size(); j++) {\n seq1.getCoordinate(j - 1, this._p0)\n seq1.getCoordinate(j, this._p1)\n if (this._rectIntersector.intersects(this._p0, this._p1)) {\n this._hasIntersection = true\n return null\n }\n }\n }\n\n getClass () {\n return RectangleIntersectsSegmentVisitor\n }\n\n get interfaces_ () {\n return []\n }\n}\nRectangleIntersectsSegmentVisitor.constructor_ = function () {\n this._rectEnv = null\n this._rectIntersector = null\n this._hasIntersection = false\n this._p0 = new Coordinate()\n this._p1 = new Coordinate()\n const rectangle = arguments[0]\n this._rectEnv = rectangle.getEnvelopeInternal()\n this._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 constructor () {\n super()\n RelateOp.constructor_.apply(this, arguments)\n }\n\n static covers (g1, g2) {\n if (g2.getDimension() === 2 && g1.getDimension() < 2) {\n return false\n }\n if (g2.getDimension() === 1 && g1.getDimension() < 1 && g2.getLength() > 0.0) {\n return false\n }\n if (!g1.getEnvelopeInternal().covers(g2.getEnvelopeInternal())) return false\n if (g1.isRectangle()) {\n return true\n }\n return new RelateOp(g1, g2).getIntersectionMatrix().isCovers()\n }\n\n static intersects (g1, g2) {\n if (!g1.getEnvelopeInternal().intersects(g2.getEnvelopeInternal())) return false\n if (g1.isRectangle()) {\n return RectangleIntersects.intersects(g1, g2)\n }\n if (g2.isRectangle()) {\n return RectangleIntersects.intersects(g2, g1)\n }\n if (g1.isGeometryCollection() || g2.isGeometryCollection()) {\n const r = false\n for (let i = 0; i < g1.getNumGeometries(); i++) {\n for (let j = 0; j < g2.getNumGeometries(); j++) {\n if (g1.getGeometryN(i).intersects(g2.getGeometryN(j))) {\n return true\n }\n }\n }\n return false\n }\n return new RelateOp(g1, g2).getIntersectionMatrix().isIntersects()\n }\n\n static touches (g1, g2) {\n if (!g1.getEnvelopeInternal().intersects(g2.getEnvelopeInternal())) return false\n return new RelateOp(g1, g2).getIntersectionMatrix().isTouches(g1.getDimension(), g2.getDimension())\n }\n\n static equalsTopo (g1, g2) {\n if (!g1.getEnvelopeInternal().equals(g2.getEnvelopeInternal())) return false\n return RelateOp.relate(g1, g2).isEquals(g1.getDimension(), g2.getDimension())\n }\n\n static relate () {\n if (arguments.length === 2) {\n const a = arguments[0]; const b = arguments[1]\n const relOp = new RelateOp(a, b)\n const im = relOp.getIntersectionMatrix()\n return im\n } else if (arguments.length === 3) {\n const a = arguments[0]; const b = arguments[1]; const boundaryNodeRule = arguments[2]\n const relOp = new RelateOp(a, b, boundaryNodeRule)\n const im = relOp.getIntersectionMatrix()\n return im\n }\n }\n\n static overlaps (g1, g2) {\n if (!g1.getEnvelopeInternal().intersects(g2.getEnvelopeInternal())) return false\n return new RelateOp(g1, g2).getIntersectionMatrix().isOverlaps(g1.getDimension(), g2.getDimension())\n }\n\n static crosses (g1, g2) {\n if (!g1.getEnvelopeInternal().intersects(g2.getEnvelopeInternal())) return false\n return new RelateOp(g1, g2).getIntersectionMatrix().isCrosses(g1.getDimension(), g2.getDimension())\n }\n\n static contains (g1, g2) {\n if (g2.getDimension() === 2 && g1.getDimension() < 2) {\n return false\n }\n if (g2.getDimension() === 1 && g1.getDimension() < 1 && g2.getLength() > 0.0) {\n return false\n }\n if (!g1.getEnvelopeInternal().contains(g2.getEnvelopeInternal())) return false\n if (g1.isRectangle()) {\n return RectangleContains.contains(g1, g2)\n }\n return new RelateOp(g1, g2).getIntersectionMatrix().isContains()\n }\n\n getIntersectionMatrix () {\n return this._relate.computeIM()\n }\n\n getClass () {\n return RelateOp\n }\n\n get interfaces_ () {\n return []\n }\n}\nRelateOp.constructor_ = function () {\n this._relate = null\n if (arguments.length === 2) {\n const g0 = arguments[0]; const g1 = arguments[1]\n GeometryGraphOperation.constructor_.call(this, g0, g1)\n this._relate = new RelateComputer(this._arg)\n } else if (arguments.length === 3) {\n const g0 = arguments[0]; const g1 = arguments[1]; const boundaryNodeRule = arguments[2]\n GeometryGraphOperation.constructor_.call(this, g0, g1, boundaryNodeRule)\n this._relate = new RelateComputer(this._arg)\n }\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 constructor () {\n PointGeometryUnion.constructor_.apply(this, arguments)\n }\n\n static union (pointGeom, otherGeom) {\n const unioner = new PointGeometryUnion(pointGeom, otherGeom)\n return unioner.union()\n }\n\n union () {\n const locater = new PointLocator()\n const exteriorCoords = new TreeSet()\n for (let i = 0; i < this._pointGeom.getNumGeometries(); i++) {\n const point = this._pointGeom.getGeometryN(i)\n const coord = point.getCoordinate()\n const loc = locater.locate(coord, this._otherGeom)\n if (loc === Location.EXTERIOR) exteriorCoords.add(coord)\n }\n if (exteriorCoords.size() === 0) return this._otherGeom\n let ptComp = null\n const coords = CoordinateArrays.toCoordinateArray(exteriorCoords)\n if (coords.length === 1) {\n ptComp = this._geomFact.createPoint(coords[0])\n } else {\n ptComp = this._geomFact.createMultiPointFromCoords(coords)\n }\n return GeometryCombiner.combine(ptComp, this._otherGeom)\n }\n\n getClass () {\n return PointGeometryUnion\n }\n\n get interfaces_ () {\n return []\n }\n}\nPointGeometryUnion.constructor_ = function () {\n this._pointGeom = null\n this._otherGeom = null\n this._geomFact = null\n const pointGeom = arguments[0]; const otherGeom = arguments[1]\n this._pointGeom = pointGeom\n this._otherGeom = otherGeom\n this._geomFact = otherGeom.getFactory()\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 constructor () {\n CascadedPolygonUnion.constructor_.apply(this, arguments)\n }\n\n static restrictToPolygons (g) {\n if (hasInterface(g, Polygonal)) {\n return g\n }\n const polygons = PolygonExtracter.getPolygons(g)\n if (polygons.size() === 1) return polygons.get(0)\n return g.getFactory().createMultiPolygon(GeometryFactory.toPolygonArray(polygons))\n }\n\n static getGeometry (list, index) {\n if (index >= list.size()) return null\n return list.get(index)\n }\n\n static union (polys) {\n const op = new CascadedPolygonUnion(polys)\n return op.union()\n }\n\n reduceToGeometries (geomTree) {\n const geoms = new ArrayList()\n for (let i = geomTree.iterator(); i.hasNext();) {\n const o = i.next()\n let geom = null\n if (hasInterface(o, List)) {\n geom = this.unionTree(o)\n } else if (o instanceof Geometry) {\n geom = o\n }\n geoms.add(geom)\n }\n return geoms\n }\n\n extractByEnvelope (env, geom, disjointGeoms) {\n const intersectingGeoms = new ArrayList()\n for (let i = 0; i < geom.getNumGeometries(); i++) {\n const elem = geom.getGeometryN(i)\n if (elem.getEnvelopeInternal().intersects(env)) intersectingGeoms.add(elem); else disjointGeoms.add(elem)\n }\n return this._geomFactory.buildGeometry(intersectingGeoms)\n }\n\n unionOptimized (g0, g1) {\n const g0Env = g0.getEnvelopeInternal()\n const g1Env = g1.getEnvelopeInternal()\n if (!g0Env.intersects(g1Env)) {\n const combo = GeometryCombiner.combine(g0, g1)\n return combo\n }\n if (g0.getNumGeometries() <= 1 && g1.getNumGeometries() <= 1) return this.unionActual(g0, g1)\n const commonEnv = g0Env.intersection(g1Env)\n return this.unionUsingEnvelopeIntersection(g0, g1, commonEnv)\n }\n\n union () {\n if (this._inputPolys === null) throw new IllegalStateException('union() method cannot be called twice')\n if (this._inputPolys.isEmpty()) return null\n this._geomFactory = this._inputPolys.iterator().next().getFactory()\n const index = new STRtree(CascadedPolygonUnion.STRTREE_NODE_CAPACITY)\n for (let i = this._inputPolys.iterator(); i.hasNext();) {\n const item = i.next()\n index.insert(item.getEnvelopeInternal(), item)\n }\n this._inputPolys = null\n const itemTree = index.itemsTree()\n const unionAll = this.unionTree(itemTree)\n return unionAll\n }\n\n binaryUnion () {\n if (arguments.length === 1) {\n const geoms = arguments[0]\n return this.binaryUnion(geoms, 0, geoms.size())\n } else if (arguments.length === 3) {\n const geoms = arguments[0]; const start = arguments[1]; const end = arguments[2]\n if (end - start <= 1) {\n const g0 = CascadedPolygonUnion.getGeometry(geoms, start)\n return this.unionSafe(g0, null)\n } else if (end - start === 2) {\n return this.unionSafe(CascadedPolygonUnion.getGeometry(geoms, start), CascadedPolygonUnion.getGeometry(geoms, start + 1))\n } else {\n const mid = Math.trunc((end + start) / 2)\n const g0 = this.binaryUnion(geoms, start, mid)\n const g1 = this.binaryUnion(geoms, mid, end)\n return this.unionSafe(g0, g1)\n }\n }\n }\n\n repeatedUnion (geoms) {\n let union = null\n for (let i = geoms.iterator(); i.hasNext();) {\n const g = i.next()\n if (union === null) union = g.copy(); else union = union.union(g)\n }\n return union\n }\n\n unionSafe (g0, g1) {\n if (g0 === null && g1 === null) return null\n if (g0 === null) return g1.copy()\n if (g1 === null) return g0.copy()\n return this.unionOptimized(g0, g1)\n }\n\n unionActual (g0, g1) {\n return CascadedPolygonUnion.restrictToPolygons(g0.union(g1))\n }\n\n unionTree (geomTree) {\n const geoms = this.reduceToGeometries(geomTree)\n const union = this.binaryUnion(geoms)\n return union\n }\n\n unionUsingEnvelopeIntersection (g0, g1, common) {\n const disjointPolys = new ArrayList()\n const g0Int = this.extractByEnvelope(common, g0, disjointPolys)\n const g1Int = this.extractByEnvelope(common, g1, disjointPolys)\n const union = this.unionActual(g0Int, g1Int)\n disjointPolys.add(union)\n const overallUnion = GeometryCombiner.combine(disjointPolys)\n return overallUnion\n }\n\n bufferUnion () {\n if (arguments.length === 1) {\n const geoms = arguments[0]\n const factory = geoms.get(0).getFactory()\n const gColl = factory.buildGeometry(geoms)\n const unionAll = gColl.buffer(0.0)\n return unionAll\n } else if (arguments.length === 2) {\n const g0 = arguments[0]; const g1 = arguments[1]\n const factory = g0.getFactory()\n const gColl = factory.createGeometryCollection([g0, g1])\n const unionAll = gColl.buffer(0.0)\n return unionAll\n }\n }\n\n getClass () {\n return CascadedPolygonUnion\n }\n\n get interfaces_ () {\n return []\n }\n}\nCascadedPolygonUnion.constructor_ = function () {\n this._inputPolys = null\n this._geomFactory = null\n const polys = arguments[0]\n this._inputPolys = polys\n if (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 constructor () {\n UnaryUnionOp.constructor_.apply(this, arguments)\n }\n\n static union () {\n if (arguments.length === 1) {\n if (hasInterface(arguments[0], Collection)) {\n const geoms = arguments[0]\n const op = new UnaryUnionOp(geoms)\n return op.union()\n } else if (arguments[0] instanceof Geometry) {\n const geom = arguments[0]\n const op = new UnaryUnionOp(geom)\n return op.union()\n }\n } else if (arguments.length === 2) {\n const geoms = arguments[0]; const geomFact = arguments[1]\n const op = new UnaryUnionOp(geoms, geomFact)\n return op.union()\n }\n }\n\n unionNoOpt (g0) {\n const empty = this._geomFact.createPoint()\n return SnapIfNeededOverlayOp.overlayOp(g0, empty, OverlayOp.UNION)\n }\n\n unionWithNull (g0, g1) {\n if (g0 === null && g1 === null) return null\n if (g1 === null) return g0\n if (g0 === null) return g1\n return g0.union(g1)\n }\n\n extract () {\n if (hasInterface(arguments[0], Collection)) {\n const geoms = arguments[0]\n for (let i = geoms.iterator(); i.hasNext();) {\n const geom = i.next()\n this.extract(geom)\n }\n } else if (arguments[0] instanceof Geometry) {\n const geom = arguments[0]\n if (this._geomFact === null) this._geomFact = geom.getFactory()\n GeometryExtracter.extract(geom, Geometry.TYPENAME_POLYGON, this._polygons)\n GeometryExtracter.extract(geom, Geometry.TYPENAME_LINESTRING, this._lines)\n GeometryExtracter.extract(geom, Geometry.TYPENAME_POINT, this._points)\n }\n }\n\n union () {\n if (this._geomFact === null) {\n return null\n }\n let unionPoints = null\n if (this._points.size() > 0) {\n const ptGeom = this._geomFact.buildGeometry(this._points)\n unionPoints = this.unionNoOpt(ptGeom)\n }\n let unionLines = null\n if (this._lines.size() > 0) {\n const lineGeom = this._geomFact.buildGeometry(this._lines)\n unionLines = this.unionNoOpt(lineGeom)\n }\n let unionPolygons = null\n if (this._polygons.size() > 0) {\n unionPolygons = CascadedPolygonUnion.union(this._polygons)\n }\n const unionLA = this.unionWithNull(unionLines, unionPolygons)\n let union = null\n if (unionPoints === null) union = unionLA; else if (unionLA === null) union = unionPoints; else union = PointGeometryUnion.union(unionPoints, unionLA)\n if (union === null) return this._geomFact.createGeometryCollection()\n return union\n }\n\n getClass () {\n return UnaryUnionOp\n }\n\n get interfaces_ () {\n return []\n }\n}\nUnaryUnionOp.constructor_ = function () {\n this._polygons = new ArrayList()\n this._lines = new ArrayList()\n this._points = new ArrayList()\n this._geomFact = null\n if (arguments.length === 1) {\n if (hasInterface(arguments[0], Collection)) {\n const geoms = arguments[0]\n this.extract(geoms)\n } else if (arguments[0] instanceof Geometry) {\n const geom = arguments[0]\n this.extract(geom)\n }\n } else if (arguments.length === 2) {\n const geoms = arguments[0]; const geomFact = arguments[1]\n this._geomFact = geomFact\n this.extract(geoms)\n }\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 constructor () {\n super()\n PrecisionReducerCoordinateOperation.constructor_.apply(this, arguments)\n }\n\n edit () {\n if (arguments.length === 2 && (arguments[1] instanceof Geometry && arguments[0] instanceof Array)) {\n const coordinates = arguments[0]; const geom = arguments[1]\n if (coordinates.length === 0) return null\n const reducedCoords = new Array(coordinates.length).fill(null)\n for (let i = 0; i < coordinates.length; i++) {\n const coord = new Coordinate(coordinates[i])\n this._targetPM.makePrecise(coord)\n reducedCoords[i] = coord\n }\n const noRepeatedCoordList = new CoordinateList(reducedCoords, false)\n const noRepeatedCoords = noRepeatedCoordList.toCoordinateArray()\n let minLength = 0\n if (geom instanceof LineString) minLength = 2\n if (geom instanceof LinearRing) minLength = 4\n let collapsedCoords = reducedCoords\n if (this._removeCollapsed) collapsedCoords = null\n if (noRepeatedCoords.length < minLength) {\n return collapsedCoords\n }\n return noRepeatedCoords\n } else return super.edit.apply(this, arguments)\n }\n\n getClass () {\n return PrecisionReducerCoordinateOperation\n }\n\n get interfaces_ () {\n return []\n }\n}\nPrecisionReducerCoordinateOperation.constructor_ = function () {\n this._targetPM = null\n this._removeCollapsed = true\n const targetPM = arguments[0]; const removeCollapsed = arguments[1]\n this._targetPM = targetPM\n this._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 constructor () {\n GeometryPrecisionReducer.constructor_.apply(this, arguments)\n }\n\n static reduce (g, precModel) {\n const reducer = new GeometryPrecisionReducer(precModel)\n return reducer.reduce(g)\n }\n\n static reducePointwise (g, precModel) {\n const reducer = new GeometryPrecisionReducer(precModel)\n reducer.setPointwise(true)\n return reducer.reduce(g)\n }\n\n fixPolygonalTopology (geom) {\n let geomToBuffer = geom\n if (!this._changePrecisionModel) {\n geomToBuffer = this.changePM(geom, this._targetPM)\n }\n const bufGeom = BufferOp.bufferOp(geomToBuffer, 0)\n let finalGeom = bufGeom\n if (!this._changePrecisionModel) {\n finalGeom = geom.getFactory().createGeometry(bufGeom)\n }\n return finalGeom\n }\n\n reducePointwise (geom) {\n let geomEdit = null\n if (this._changePrecisionModel) {\n const newFactory = this.createFactory(geom.getFactory(), this._targetPM)\n geomEdit = new GeometryEditor(newFactory)\n } else geomEdit = new GeometryEditor()\n let finalRemoveCollapsed = this._removeCollapsed\n if (geom.getDimension() >= 2) finalRemoveCollapsed = true\n const reduceGeom = geomEdit.edit(geom, new PrecisionReducerCoordinateOperation(this._targetPM, finalRemoveCollapsed))\n return reduceGeom\n }\n\n changePM (geom, newPM) {\n const geomEditor = this.createEditor(geom.getFactory(), newPM)\n return geomEditor.edit(geom, new GeometryEditor.NoOpGeometryOperation())\n }\n\n setRemoveCollapsedComponents (removeCollapsed) {\n this._removeCollapsed = removeCollapsed\n }\n\n createFactory (inputFactory, pm) {\n const newFactory = new GeometryFactory(pm, inputFactory.getSRID(), inputFactory.getCoordinateSequenceFactory())\n return newFactory\n }\n\n setChangePrecisionModel (changePrecisionModel) {\n this._changePrecisionModel = changePrecisionModel\n }\n\n reduce (geom) {\n const reducePW = this.reducePointwise(geom)\n if (this._isPointwise) return reducePW\n if (!hasInterface(reducePW, Polygonal)) return reducePW\n if (IsValidOp.isValid(reducePW)) return reducePW\n return this.fixPolygonalTopology(reducePW)\n }\n\n setPointwise (isPointwise) {\n this._isPointwise = isPointwise\n }\n\n createEditor (geomFactory, newPM) {\n if (geomFactory.getPrecisionModel() === newPM) return new GeometryEditor()\n const newFactory = this.createFactory(geomFactory, newPM)\n const geomEdit = new GeometryEditor(newFactory)\n return geomEdit\n }\n\n getClass () {\n return GeometryPrecisionReducer\n }\n\n get interfaces_ () {\n return []\n }\n}\nGeometryPrecisionReducer.constructor_ = function () {\n this._targetPM = null\n this._removeCollapsed = true\n this._changePrecisionModel = false\n this._isPointwise = false\n const pm = arguments[0]\n this._targetPM = pm\n}\n","import CoordinateList from '../geom/CoordinateList'\nimport Coordinate from '../geom/Coordinate'\nimport LineSegment from '../geom/LineSegment'\nexport default class DouglasPeuckerLineSimplifier {\n constructor () {\n DouglasPeuckerLineSimplifier.constructor_.apply(this, arguments)\n }\n\n static simplify (pts, distanceTolerance) {\n const simp = new DouglasPeuckerLineSimplifier(pts)\n simp.setDistanceTolerance(distanceTolerance)\n return simp.simplify()\n }\n\n simplifySection (i, j) {\n if (i + 1 === j) {\n return null\n }\n this._seg.p0 = this._pts[i]\n this._seg.p1 = this._pts[j]\n let maxDistance = -1.0\n let maxIndex = i\n for (let k = i + 1; k < j; k++) {\n const distance = this._seg.distance(this._pts[k])\n if (distance > maxDistance) {\n maxDistance = distance\n maxIndex = k\n }\n }\n if (maxDistance <= this._distanceTolerance) {\n for (let k = i + 1; k < j; k++) {\n this._usePt[k] = false\n }\n } else {\n this.simplifySection(i, maxIndex)\n this.simplifySection(maxIndex, j)\n }\n }\n\n setDistanceTolerance (distanceTolerance) {\n this._distanceTolerance = distanceTolerance\n }\n\n simplify () {\n this._usePt = new Array(this._pts.length).fill(null)\n for (let i = 0; i < this._pts.length; i++) {\n this._usePt[i] = true\n }\n this.simplifySection(0, this._pts.length - 1)\n const coordList = new CoordinateList()\n for (let i = 0; i < this._pts.length; i++) {\n if (this._usePt[i]) coordList.add(new Coordinate(this._pts[i]))\n }\n return coordList.toCoordinateArray()\n }\n\n getClass () {\n return DouglasPeuckerLineSimplifier\n }\n\n get interfaces_ () {\n return []\n }\n}\nDouglasPeuckerLineSimplifier.constructor_ = function () {\n this._pts = null\n this._usePt = null\n this._distanceTolerance = null\n this._seg = new LineSegment()\n const pts = arguments[0]\n this._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 constructor () {\n DouglasPeuckerSimplifier.constructor_.apply(this, arguments)\n }\n\n static simplify (geom, distanceTolerance) {\n const tss = new DouglasPeuckerSimplifier(geom)\n tss.setDistanceTolerance(distanceTolerance)\n return tss.getResultGeometry()\n }\n\n setEnsureValid (isEnsureValidTopology) {\n this._isEnsureValidTopology = isEnsureValidTopology\n }\n\n getResultGeometry () {\n if (this._inputGeom.isEmpty()) return this._inputGeom.copy()\n return new DPTransformer(this._isEnsureValidTopology, this._distanceTolerance).transform(this._inputGeom)\n }\n\n setDistanceTolerance (distanceTolerance) {\n if (distanceTolerance < 0.0) throw new IllegalArgumentException('Tolerance must be non-negative')\n this._distanceTolerance = distanceTolerance\n }\n\n getClass () {\n return DouglasPeuckerSimplifier\n }\n\n get interfaces_ () {\n return []\n }\n}\nclass DPTransformer extends GeometryTransformer {\n constructor () {\n super()\n DPTransformer.constructor_.apply(this, arguments)\n }\n\n transformPolygon (geom, parent) {\n if (geom.isEmpty()) return null\n const rawGeom = super.transformPolygon.call(this, geom, parent)\n if (parent instanceof MultiPolygon) {\n return rawGeom\n }\n return this.createValidArea(rawGeom)\n }\n\n createValidArea (rawAreaGeom) {\n if (this._isEnsureValidTopology) return rawAreaGeom.buffer(0.0)\n return rawAreaGeom\n }\n\n transformCoordinates (coords, parent) {\n const inputPts = coords.toCoordinateArray()\n let newPts = null\n if (inputPts.length === 0) {\n newPts = new Array(0).fill(null)\n } else {\n newPts = DouglasPeuckerLineSimplifier.simplify(inputPts, this._distanceTolerance)\n }\n return this._factory.getCoordinateSequenceFactory().create(newPts)\n }\n\n transformMultiPolygon (geom, parent) {\n const rawGeom = super.transformMultiPolygon.call(this, geom, parent)\n return this.createValidArea(rawGeom)\n }\n\n transformLinearRing (geom, parent) {\n const removeDegenerateRings = parent instanceof Polygon\n const simpResult = super.transformLinearRing.call(this, geom, parent)\n if (removeDegenerateRings && !(simpResult instanceof LinearRing)) return null\n\n return simpResult\n }\n\n getClass () {\n return DPTransformer\n }\n\n get interfaces_ () {\n return []\n }\n}\nDPTransformer.constructor_ = function () {\n this._isEnsureValidTopology = true\n this._distanceTolerance = null\n const isEnsureValidTopology = arguments[0]; const distanceTolerance = arguments[1]\n this._isEnsureValidTopology = isEnsureValidTopology\n this._distanceTolerance = distanceTolerance\n}\nDouglasPeuckerSimplifier.DPTransformer = DPTransformer\nDouglasPeuckerSimplifier.constructor_ = function () {\n this._inputGeom = null\n this._distanceTolerance = null\n this._isEnsureValidTopology = true\n const inputGeom = arguments[0]\n this._inputGeom = inputGeom\n}\n","import LineSegment from '../geom/LineSegment'\nexport default class TaggedLineSegment extends LineSegment {\n constructor () {\n super()\n TaggedLineSegment.constructor_.apply(this, arguments)\n }\n\n getIndex () {\n return this._index\n }\n\n getParent () {\n return this._parent\n }\n\n getClass () {\n return TaggedLineSegment\n }\n\n get interfaces_ () {\n return []\n }\n}\nTaggedLineSegment.constructor_ = function () {\n this._parent = null\n this._index = null\n if (arguments.length === 2) {\n const p0 = arguments[0]; const p1 = arguments[1]\n TaggedLineSegment.constructor_.call(this, p0, p1, null, -1)\n } else if (arguments.length === 4) {\n const p0 = arguments[0]; const p1 = arguments[1]; const parent = arguments[2]; const index = arguments[3]\n LineSegment.constructor_.call(this, p0, p1)\n this._parent = parent\n this._index = index\n }\n}\n","import TaggedLineSegment from './TaggedLineSegment'\nimport ArrayList from '../../../../java/util/ArrayList'\nexport default class TaggedLineString {\n constructor () {\n TaggedLineString.constructor_.apply(this, arguments)\n }\n\n static extractCoordinates (segs) {\n const pts = new Array(segs.size() + 1).fill(null)\n let seg = null\n for (let i = 0; i < segs.size(); i++) {\n seg = segs.get(i)\n pts[i] = seg.p0\n }\n pts[pts.length - 1] = seg.p1\n return pts\n }\n\n addToResult (seg) {\n this._resultSegs.add(seg)\n }\n\n asLineString () {\n return this._parentLine.getFactory().createLineString(TaggedLineString.extractCoordinates(this._resultSegs))\n }\n\n getResultSize () {\n const resultSegsSize = this._resultSegs.size()\n return resultSegsSize === 0 ? 0 : resultSegsSize + 1\n }\n\n getParent () {\n return this._parentLine\n }\n\n getSegment (i) {\n return this._segs[i]\n }\n\n getParentCoordinates () {\n return this._parentLine.getCoordinates()\n }\n\n getMinimumSize () {\n return this._minimumSize\n }\n\n asLinearRing () {\n return this._parentLine.getFactory().createLinearRing(TaggedLineString.extractCoordinates(this._resultSegs))\n }\n\n getSegments () {\n return this._segs\n }\n\n init () {\n const pts = this._parentLine.getCoordinates()\n this._segs = new Array(pts.length - 1).fill(null)\n for (let i = 0; i < pts.length - 1; i++) {\n const seg = new TaggedLineSegment(pts[i], pts[i + 1], this._parentLine, i)\n this._segs[i] = seg\n }\n }\n\n getResultCoordinates () {\n return TaggedLineString.extractCoordinates(this._resultSegs)\n }\n\n getClass () {\n return TaggedLineString\n }\n\n get interfaces_ () {\n return []\n }\n}\nTaggedLineString.constructor_ = function () {\n this._parentLine = null\n this._segs = null\n this._resultSegs = new ArrayList()\n this._minimumSize = null\n if (arguments.length === 1) {\n const parentLine = arguments[0]\n TaggedLineString.constructor_.call(this, parentLine, 2)\n } else if (arguments.length === 2) {\n const parentLine = arguments[0]; const minimumSize = arguments[1]\n this._parentLine = parentLine\n this._minimumSize = minimumSize\n this.init()\n }\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 constructor () {\n LineSegmentIndex.constructor_.apply(this, arguments)\n }\n\n remove (seg) {\n this._index.remove(new Envelope(seg.p0, seg.p1), seg)\n }\n\n add () {\n if (arguments[0] instanceof TaggedLineString) {\n const line = arguments[0]\n const segs = line.getSegments()\n for (let i = 0; i < segs.length; i++) {\n const seg = segs[i]\n this.add(seg)\n }\n } else if (arguments[0] instanceof LineSegment) {\n const seg = arguments[0]\n this._index.insert(new Envelope(seg.p0, seg.p1), seg)\n }\n }\n\n query (querySeg) {\n const env = new Envelope(querySeg.p0, querySeg.p1)\n const visitor = new LineSegmentVisitor(querySeg)\n this._index.query(env, visitor)\n const itemsFound = visitor.getItems()\n return itemsFound\n }\n\n getClass () {\n return LineSegmentIndex\n }\n\n get interfaces_ () {\n return []\n }\n}\nLineSegmentIndex.constructor_ = function () {\n this._index = new Quadtree()\n}\nclass LineSegmentVisitor {\n constructor () {\n LineSegmentVisitor.constructor_.apply(this, arguments)\n }\n\n visitItem (item) {\n const seg = item\n if (Envelope.intersects(seg.p0, seg.p1, this._querySeg.p0, this._querySeg.p1)) this._items.add(item)\n }\n\n getItems () {\n return this._items\n }\n\n getClass () {\n return LineSegmentVisitor\n }\n\n get interfaces_ () {\n return [ItemVisitor]\n }\n}\nLineSegmentVisitor.constructor_ = function () {\n this._querySeg = null\n this._items = new ArrayList()\n const querySeg = arguments[0]\n this._querySeg = querySeg\n}\n","import LineSegment from '../geom/LineSegment'\nimport LineSegmentIndex from './LineSegmentIndex'\nimport RobustLineIntersector from '../algorithm/RobustLineIntersector'\nexport default class TaggedLineStringSimplifier {\n constructor () {\n TaggedLineStringSimplifier.constructor_.apply(this, arguments)\n }\n\n static isInLineSection (line, sectionIndex, seg) {\n if (seg.getParent() !== line.getParent()) return false\n const segIndex = seg.getIndex()\n if (segIndex >= sectionIndex[0] && segIndex < sectionIndex[1]) return true\n return false\n }\n\n flatten (start, end) {\n const p0 = this._linePts[start]\n const p1 = this._linePts[end]\n const newSeg = new LineSegment(p0, p1)\n this.remove(this._line, start, end)\n this._outputIndex.add(newSeg)\n return newSeg\n }\n\n hasBadIntersection (parentLine, sectionIndex, candidateSeg) {\n if (this.hasBadOutputIntersection(candidateSeg)) return true\n if (this.hasBadInputIntersection(parentLine, sectionIndex, candidateSeg)) return true\n return false\n }\n\n setDistanceTolerance (distanceTolerance) {\n this._distanceTolerance = distanceTolerance\n }\n\n simplifySection (i, j, depth) {\n depth += 1\n const sectionIndex = new Array(2).fill(null)\n if (i + 1 === j) {\n const newSeg = this._line.getSegment(i)\n this._line.addToResult(newSeg)\n return null\n }\n let isValidToSimplify = true\n if (this._line.getResultSize() < this._line.getMinimumSize()) {\n const worstCaseSize = depth + 1\n if (worstCaseSize < this._line.getMinimumSize()) isValidToSimplify = false\n }\n const distance = new Array(1).fill(null)\n const furthestPtIndex = this.findFurthestPoint(this._linePts, i, j, distance)\n if (distance[0] > this._distanceTolerance) isValidToSimplify = false\n const candidateSeg = new LineSegment()\n candidateSeg.p0 = this._linePts[i]\n candidateSeg.p1 = this._linePts[j]\n sectionIndex[0] = i\n sectionIndex[1] = j\n if (this.hasBadIntersection(this._line, sectionIndex, candidateSeg)) isValidToSimplify = false\n if (isValidToSimplify) {\n const newSeg = this.flatten(i, j)\n this._line.addToResult(newSeg)\n return null\n }\n this.simplifySection(i, furthestPtIndex, depth)\n this.simplifySection(furthestPtIndex, j, depth)\n }\n\n hasBadOutputIntersection (candidateSeg) {\n const querySegs = this._outputIndex.query(candidateSeg)\n for (let i = querySegs.iterator(); i.hasNext();) {\n const querySeg = i.next()\n if (this.hasInteriorIntersection(querySeg, candidateSeg)) {\n return true\n }\n }\n return false\n }\n\n findFurthestPoint (pts, i, j, maxDistance) {\n const seg = new LineSegment()\n seg.p0 = pts[i]\n seg.p1 = pts[j]\n let maxDist = -1.0\n let maxIndex = i\n for (let k = i + 1; k < j; k++) {\n const midPt = pts[k]\n const distance = seg.distance(midPt)\n if (distance > maxDist) {\n maxDist = distance\n maxIndex = k\n }\n }\n maxDistance[0] = maxDist\n return maxIndex\n }\n\n simplify (line) {\n this._line = line\n this._linePts = line.getParentCoordinates()\n this.simplifySection(0, this._linePts.length - 1, 0)\n }\n\n remove (line, start, end) {\n for (let i = start; i < end; i++) {\n const seg = line.getSegment(i)\n this._inputIndex.remove(seg)\n }\n }\n\n hasInteriorIntersection (seg0, seg1) {\n this._li.computeIntersection(seg0.p0, seg0.p1, seg1.p0, seg1.p1)\n return this._li.isInteriorIntersection()\n }\n\n hasBadInputIntersection (parentLine, sectionIndex, candidateSeg) {\n const querySegs = this._inputIndex.query(candidateSeg)\n for (let i = querySegs.iterator(); i.hasNext();) {\n const querySeg = i.next()\n if (this.hasInteriorIntersection(querySeg, candidateSeg)) {\n if (TaggedLineStringSimplifier.isInLineSection(parentLine, sectionIndex, querySeg)) continue\n return true\n }\n }\n return false\n }\n\n getClass () {\n return TaggedLineStringSimplifier\n }\n\n get interfaces_ () {\n return []\n }\n}\nTaggedLineStringSimplifier.constructor_ = function () {\n this._li = new RobustLineIntersector()\n this._inputIndex = new LineSegmentIndex()\n this._outputIndex = new LineSegmentIndex()\n this._line = null\n this._linePts = null\n this._distanceTolerance = 0.0\n const inputIndex = arguments[0]; const outputIndex = arguments[1]\n this._inputIndex = inputIndex\n this._outputIndex = outputIndex\n}\n","import TaggedLineStringSimplifier from './TaggedLineStringSimplifier'\nimport LineSegmentIndex from './LineSegmentIndex'\nexport default class TaggedLinesSimplifier {\n constructor () {\n TaggedLinesSimplifier.constructor_.apply(this, arguments)\n }\n\n setDistanceTolerance (distanceTolerance) {\n this._distanceTolerance = distanceTolerance\n }\n\n simplify (taggedLines) {\n for (let i = taggedLines.iterator(); i.hasNext();) {\n this._inputIndex.add(i.next())\n }\n for (let i = taggedLines.iterator(); i.hasNext();) {\n const tlss = new TaggedLineStringSimplifier(this._inputIndex, this._outputIndex)\n tlss.setDistanceTolerance(this._distanceTolerance)\n tlss.simplify(i.next())\n }\n }\n\n getClass () {\n return TaggedLinesSimplifier\n }\n\n get interfaces_ () {\n return []\n }\n}\nTaggedLinesSimplifier.constructor_ = function () {\n this._inputIndex = new LineSegmentIndex()\n this._outputIndex = new LineSegmentIndex()\n this._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 constructor () {\n TopologyPreservingSimplifier.constructor_.apply(this, arguments)\n }\n\n static simplify (geom, distanceTolerance) {\n const tss = new TopologyPreservingSimplifier(geom)\n tss.setDistanceTolerance(distanceTolerance)\n return tss.getResultGeometry()\n }\n\n getResultGeometry () {\n if (this._inputGeom.isEmpty()) return this._inputGeom.copy()\n this._linestringMap = new HashMap()\n this._inputGeom.apply(new LineStringMapBuilderFilter(this))\n this._lineSimplifier.simplify(this._linestringMap.values())\n const result = new LineStringTransformer(this._linestringMap).transform(this._inputGeom)\n return result\n }\n\n setDistanceTolerance (distanceTolerance) {\n if (distanceTolerance < 0.0) throw new IllegalArgumentException('Tolerance must be non-negative')\n this._lineSimplifier.setDistanceTolerance(distanceTolerance)\n }\n\n getClass () {\n return TopologyPreservingSimplifier\n }\n\n get interfaces_ () {\n return []\n }\n}\nclass LineStringTransformer extends GeometryTransformer {\n constructor () {\n super()\n LineStringTransformer.constructor_.apply(this, arguments)\n }\n\n transformCoordinates (coords, parent) {\n if (coords.size() === 0) return null\n if (parent instanceof LineString) {\n const taggedLine = this._linestringMap.get(parent)\n return this.createCoordinateSequence(taggedLine.getResultCoordinates())\n }\n return super.transformCoordinates.call(this, coords, parent)\n }\n\n getClass () {\n return LineStringTransformer\n }\n\n get interfaces_ () {\n return []\n }\n}\nLineStringTransformer.constructor_ = function () {\n this._linestringMap = null\n const linestringMap = arguments[0]\n this._linestringMap = linestringMap\n}\nclass LineStringMapBuilderFilter {\n constructor () {\n LineStringMapBuilderFilter.constructor_.apply(this, arguments)\n }\n\n filter (geom) {\n if (geom instanceof LineString) {\n const line = geom\n if (line.isEmpty()) return null\n const minSize = line.isClosed() ? 4 : 2\n const taggedLine = new TaggedLineString(line, minSize)\n this.tps._linestringMap.put(line, taggedLine)\n }\n }\n\n getClass () {\n return LineStringMapBuilderFilter\n }\n\n get interfaces_ () {\n return [GeometryComponentFilter]\n }\n}\nLineStringMapBuilderFilter.constructor_ = function () {\n this.tps = null\n const tps = arguments[0]\n this.tps = tps\n}\nTopologyPreservingSimplifier.LineStringTransformer = LineStringTransformer\nTopologyPreservingSimplifier.LineStringMapBuilderFilter = LineStringMapBuilderFilter\nTopologyPreservingSimplifier.constructor_ = function () {\n this._inputGeom = null\n this._lineSimplifier = new TaggedLinesSimplifier()\n this._linestringMap = null\n const inputGeom = arguments[0]\n this._inputGeom = inputGeom\n}\n","import CoordinateList from '../geom/CoordinateList'\nimport Coordinate from '../geom/Coordinate'\nimport Double from '../../../../java/lang/Double'\nimport Triangle from '../geom/Triangle'\nexport default class VWLineSimplifier {\n constructor () {\n VWLineSimplifier.constructor_.apply(this, arguments)\n }\n\n static simplify (pts, distanceTolerance) {\n const simp = new VWLineSimplifier(pts, distanceTolerance)\n return simp.simplify()\n }\n\n simplifyVertex (vwLine) {\n let curr = vwLine\n let minArea = curr.getArea()\n let minVertex = null\n while (curr !== null) {\n const area = curr.getArea()\n if (area < minArea) {\n minArea = area\n minVertex = curr\n }\n curr = curr._next\n }\n if (minVertex !== null && minArea < this._tolerance) {\n minVertex.remove()\n }\n if (!vwLine.isLive()) return -1\n return minArea\n }\n\n simplify () {\n const vwLine = VWVertex.buildLine(this._pts)\n let minArea = this._tolerance\n do {\n minArea = this.simplifyVertex(vwLine)\n } while (minArea < this._tolerance)\n const simp = vwLine.getCoordinates()\n if (simp.length < 2) {\n return [simp[0], new Coordinate(simp[0])]\n }\n return simp\n }\n\n getClass () {\n return VWLineSimplifier\n }\n\n get interfaces_ () {\n return []\n }\n}\nclass VWVertex {\n constructor () {\n VWVertex.constructor_.apply(this, arguments)\n }\n\n static buildLine (pts) {\n let first = null\n let prev = null\n for (let i = 0; i < pts.length; i++) {\n const v = new VWVertex(pts[i])\n if (first === null) first = v\n v.setPrev(prev)\n if (prev !== null) {\n prev.setNext(v)\n prev.updateArea()\n }\n prev = v\n }\n return first\n }\n\n getCoordinates () {\n const coords = new CoordinateList()\n let curr = this\n do {\n coords.add(curr._pt, false)\n curr = curr._next\n } while (curr !== null)\n return coords.toCoordinateArray()\n }\n\n getArea () {\n return this._area\n }\n\n updateArea () {\n if (this._prev === null || this._next === null) {\n this._area = VWVertex.MAX_AREA\n return null\n }\n this._area = Math.abs(Triangle.area(this._prev._pt, this._pt, this._next._pt))\n }\n\n remove () {\n const tmpPrev = this._prev\n const tmpNext = this._next\n let result = null\n if (this._prev !== null) {\n this._prev.setNext(tmpNext)\n this._prev.updateArea()\n result = this._prev\n }\n if (this._next !== null) {\n this._next.setPrev(tmpPrev)\n this._next.updateArea()\n if (result === null) result = this._next\n }\n this._isLive = false\n return result\n }\n\n isLive () {\n return this._isLive\n }\n\n setPrev (prev) {\n this._prev = prev\n }\n\n setNext (next) {\n this._next = next\n }\n\n getClass () {\n return VWVertex\n }\n\n get interfaces_ () {\n return []\n }\n}\nVWVertex.constructor_ = function () {\n this._pt = null\n this._prev = null\n this._next = null\n this._area = VWVertex.MAX_AREA\n this._isLive = true\n const pt = arguments[0]\n this._pt = pt\n}\nVWVertex.MAX_AREA = Double.MAX_VALUE\nVWLineSimplifier.VWVertex = VWVertex\nVWLineSimplifier.constructor_ = function () {\n this._pts = null\n this._tolerance = null\n const pts = arguments[0]; const distanceTolerance = arguments[1]\n this._pts = pts\n this._tolerance = distanceTolerance * distanceTolerance\n}\n","import GeometryTransformer from '../geom/util/GeometryTransformer'\nimport VWLineSimplifier from './VWLineSimplifier'\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nimport Polygon from '../geom/Polygon'\nimport LinearRing from '../geom/LinearRing'\nimport MultiPolygon from '../geom/MultiPolygon'\nexport default class VWSimplifier {\n constructor () {\n VWSimplifier.constructor_.apply(this, arguments)\n }\n\n static simplify (geom, distanceTolerance) {\n const simp = new VWSimplifier(geom)\n simp.setDistanceTolerance(distanceTolerance)\n return simp.getResultGeometry()\n }\n\n setEnsureValid (isEnsureValidTopology) {\n this._isEnsureValidTopology = isEnsureValidTopology\n }\n\n getResultGeometry () {\n if (this._inputGeom.isEmpty()) return this._inputGeom.copy()\n return new VWTransformer(this._isEnsureValidTopology, this._distanceTolerance).transform(this._inputGeom)\n }\n\n setDistanceTolerance (distanceTolerance) {\n if (distanceTolerance < 0.0) throw new IllegalArgumentException('Tolerance must be non-negative')\n this._distanceTolerance = distanceTolerance\n }\n\n getClass () {\n return VWSimplifier\n }\n\n get interfaces_ () {\n return []\n }\n}\nclass VWTransformer extends GeometryTransformer {\n constructor () {\n super()\n VWTransformer.constructor_.apply(this, arguments)\n }\n\n transformPolygon (geom, parent) {\n if (geom.isEmpty()) return null\n const rawGeom = super.transformPolygon.call(this, geom, parent)\n if (parent instanceof MultiPolygon) {\n return rawGeom\n }\n return this.createValidArea(rawGeom)\n }\n\n createValidArea (rawAreaGeom) {\n if (this._isEnsureValidTopology) return rawAreaGeom.buffer(0.0)\n return rawAreaGeom\n }\n\n transformCoordinates (coords, parent) {\n const inputPts = coords.toCoordinateArray()\n let newPts = null\n if (inputPts.length === 0) {\n newPts = new Array(0).fill(null)\n } else {\n newPts = VWLineSimplifier.simplify(inputPts, this._distanceTolerance)\n }\n return this._factory.getCoordinateSequenceFactory().create(newPts)\n }\n\n transformMultiPolygon (geom, parent) {\n const rawGeom = super.transformMultiPolygon.call(this, geom, parent)\n return this.createValidArea(rawGeom)\n }\n\n transformLinearRing (geom, parent) {\n const removeDegenerateRings = parent instanceof Polygon\n const simpResult = super.transformLinearRing.call(this, geom, parent)\n if (removeDegenerateRings && !(simpResult instanceof LinearRing)) return null\n\n return simpResult\n }\n\n getClass () {\n return VWTransformer\n }\n\n get interfaces_ () {\n return []\n }\n}\nVWTransformer.constructor_ = function () {\n this._isEnsureValidTopology = true\n this._distanceTolerance = null\n const isEnsureValidTopology = arguments[0]; const distanceTolerance = arguments[1]\n this._isEnsureValidTopology = isEnsureValidTopology\n this._distanceTolerance = distanceTolerance\n}\nVWSimplifier.VWTransformer = VWTransformer\nVWSimplifier.constructor_ = function () {\n this._inputGeom = null\n this._distanceTolerance = null\n this._isEnsureValidTopology = true\n const inputGeom = arguments[0]\n this._inputGeom = inputGeom\n}\n","import Coordinate from '../geom/Coordinate'\nexport default class SplitSegment {\n constructor () {\n SplitSegment.constructor_.apply(this, arguments)\n }\n\n static pointAlongReverse (seg, segmentLengthFraction) {\n const coord = new Coordinate()\n coord.x = seg.p1.x - segmentLengthFraction * (seg.p1.x - seg.p0.x)\n coord.y = seg.p1.y - segmentLengthFraction * (seg.p1.y - seg.p0.y)\n return coord\n }\n\n splitAt () {\n if (arguments.length === 1) {\n const pt = arguments[0]\n const minFrac = this._minimumLen / this._segLen\n if (pt.distance(this._seg.p0) < this._minimumLen) {\n this._splitPt = this._seg.pointAlong(minFrac)\n return null\n }\n if (pt.distance(this._seg.p1) < this._minimumLen) {\n this._splitPt = SplitSegment.pointAlongReverse(this._seg, minFrac)\n return null\n }\n this._splitPt = pt\n } else if (arguments.length === 2) {\n const length = arguments[0]; const endPt = arguments[1]\n const actualLen = this.getConstrainedLength(length)\n const frac = actualLen / this._segLen\n if (endPt.equals2D(this._seg.p0)) this._splitPt = this._seg.pointAlong(frac); else this._splitPt = SplitSegment.pointAlongReverse(this._seg, frac)\n }\n }\n\n setMinimumLength (minLen) {\n this._minimumLen = minLen\n }\n\n getConstrainedLength (len) {\n if (len < this._minimumLen) return this._minimumLen\n return len\n }\n\n getSplitPoint () {\n return this._splitPt\n }\n\n getClass () {\n return SplitSegment\n }\n\n get interfaces_ () {\n return []\n }\n}\nSplitSegment.constructor_ = function () {\n this._seg = null\n this._segLen = null\n this._splitPt = null\n this._minimumLen = 0.0\n const seg = arguments[0]\n this._seg = seg\n this._segLen = seg.getLength()\n}\n","export default class ConstraintSplitPointFinder {\n constructor () {\n ConstraintSplitPointFinder.constructor_.apply(this, arguments)\n }\n\n findSplitPoint (seg, encroachPt) {}\n getClass () {\n return ConstraintSplitPointFinder\n }\n\n get interfaces_ () {\n return []\n }\n}\nConstraintSplitPointFinder.constructor_ = function () {}\n","import SplitSegment from './SplitSegment'\nimport ConstraintSplitPointFinder from './ConstraintSplitPointFinder'\nexport default class NonEncroachingSplitPointFinder {\n constructor () {\n NonEncroachingSplitPointFinder.constructor_.apply(this, arguments)\n }\n\n static projectedSplitPoint (seg, encroachPt) {\n const lineSeg = seg.getLineSegment()\n const projPt = lineSeg.project(encroachPt)\n return projPt\n }\n\n findSplitPoint (seg, encroachPt) {\n const lineSeg = seg.getLineSegment()\n const segLen = lineSeg.getLength()\n const midPtLen = segLen / 2\n const splitSeg = new SplitSegment(lineSeg)\n const projPt = NonEncroachingSplitPointFinder.projectedSplitPoint(seg, encroachPt)\n const nonEncroachDiam = projPt.distance(encroachPt) * 2 * 0.8\n let maxSplitLen = nonEncroachDiam\n if (maxSplitLen > midPtLen) {\n maxSplitLen = midPtLen\n }\n splitSeg.setMinimumLength(maxSplitLen)\n splitSeg.splitAt(projPt)\n return splitSeg.getSplitPoint()\n }\n\n getClass () {\n return NonEncroachingSplitPointFinder\n }\n\n get interfaces_ () {\n return [ConstraintSplitPointFinder]\n }\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 constructor () {\n TrianglePredicate.constructor_.apply(this, arguments)\n }\n\n static triArea (a, b, c) {\n return (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x)\n }\n\n static isInCircleDDNormalized (a, b, c, p) {\n const adx = DD.valueOf(a.x).selfSubtract(p.x)\n const ady = DD.valueOf(a.y).selfSubtract(p.y)\n const bdx = DD.valueOf(b.x).selfSubtract(p.x)\n const bdy = DD.valueOf(b.y).selfSubtract(p.y)\n const cdx = DD.valueOf(c.x).selfSubtract(p.x)\n const cdy = DD.valueOf(c.y).selfSubtract(p.y)\n const abdet = adx.multiply(bdy).selfSubtract(bdx.multiply(ady))\n const bcdet = bdx.multiply(cdy).selfSubtract(cdx.multiply(bdy))\n const cadet = cdx.multiply(ady).selfSubtract(adx.multiply(cdy))\n const alift = adx.multiply(adx).selfAdd(ady.multiply(ady))\n const blift = bdx.multiply(bdx).selfAdd(bdy.multiply(bdy))\n const clift = cdx.multiply(cdx).selfAdd(cdy.multiply(cdy))\n const sum = alift.selfMultiply(bcdet).selfAdd(blift.selfMultiply(cadet)).selfAdd(clift.selfMultiply(abdet))\n const isInCircle = sum.doubleValue() > 0\n return isInCircle\n }\n\n static checkRobustInCircle (a, b, c, p) {\n const nonRobustInCircle = TrianglePredicate.isInCircleNonRobust(a, b, c, p)\n const isInCircleDD = TrianglePredicate.isInCircleDDSlow(a, b, c, p)\n const isInCircleCC = TrianglePredicate.isInCircleCC(a, b, c, p)\n const circumCentre = Triangle.circumcentre(a, b, c)\n System.out.println('p radius diff a = ' + Math.abs(p.distance(circumCentre) - a.distance(circumCentre)) / a.distance(circumCentre))\n if (nonRobustInCircle !== isInCircleDD || nonRobustInCircle !== isInCircleCC) {\n System.out.println('inCircle robustness failure (double result = ' + nonRobustInCircle + ', DD result = ' + isInCircleDD + ', CC result = ' + isInCircleCC + ')')\n System.out.println(WKTWriter.toLineString(new CoordinateArraySequence([a, b, c, p])))\n System.out.println('Circumcentre = ' + WKTWriter.toPoint(circumCentre) + ' radius = ' + a.distance(circumCentre))\n System.out.println('p radius diff a = ' + Math.abs(p.distance(circumCentre) / a.distance(circumCentre) - 1))\n System.out.println('p radius diff b = ' + Math.abs(p.distance(circumCentre) / b.distance(circumCentre) - 1))\n System.out.println('p radius diff c = ' + Math.abs(p.distance(circumCentre) / c.distance(circumCentre) - 1))\n System.out.println()\n }\n }\n\n static isInCircleDDFast (a, b, c, p) {\n const aTerm = DD.sqr(a.x).selfAdd(DD.sqr(a.y)).selfMultiply(TrianglePredicate.triAreaDDFast(b, c, p))\n const bTerm = DD.sqr(b.x).selfAdd(DD.sqr(b.y)).selfMultiply(TrianglePredicate.triAreaDDFast(a, c, p))\n const cTerm = DD.sqr(c.x).selfAdd(DD.sqr(c.y)).selfMultiply(TrianglePredicate.triAreaDDFast(a, b, p))\n const pTerm = DD.sqr(p.x).selfAdd(DD.sqr(p.y)).selfMultiply(TrianglePredicate.triAreaDDFast(a, b, c))\n const sum = aTerm.selfSubtract(bTerm).selfAdd(cTerm).selfSubtract(pTerm)\n const isInCircle = sum.doubleValue() > 0\n return isInCircle\n }\n\n static isInCircleCC (a, b, c, p) {\n const cc = Triangle.circumcentre(a, b, c)\n const ccRadius = a.distance(cc)\n const pRadiusDiff = p.distance(cc) - ccRadius\n return pRadiusDiff <= 0\n }\n\n static isInCircleNormalized (a, b, c, p) {\n const adx = a.x - p.x\n const ady = a.y - p.y\n const bdx = b.x - p.x\n const bdy = b.y - p.y\n const cdx = c.x - p.x\n const cdy = c.y - p.y\n const abdet = adx * bdy - bdx * ady\n const bcdet = bdx * cdy - cdx * bdy\n const cadet = cdx * ady - adx * cdy\n const alift = adx * adx + ady * ady\n const blift = bdx * bdx + bdy * bdy\n const clift = cdx * cdx + cdy * cdy\n const disc = alift * bcdet + blift * cadet + clift * abdet\n return disc > 0\n }\n\n static isInCircleDDSlow (a, b, c, p) {\n const px = DD.valueOf(p.x)\n const py = DD.valueOf(p.y)\n const ax = DD.valueOf(a.x)\n const ay = DD.valueOf(a.y)\n const bx = DD.valueOf(b.x)\n const by = DD.valueOf(b.y)\n const cx = DD.valueOf(c.x)\n const cy = DD.valueOf(c.y)\n const aTerm = ax.multiply(ax).add(ay.multiply(ay)).multiply(TrianglePredicate.triAreaDDSlow(bx, by, cx, cy, px, py))\n const bTerm = bx.multiply(bx).add(by.multiply(by)).multiply(TrianglePredicate.triAreaDDSlow(ax, ay, cx, cy, px, py))\n const cTerm = cx.multiply(cx).add(cy.multiply(cy)).multiply(TrianglePredicate.triAreaDDSlow(ax, ay, bx, by, px, py))\n const pTerm = px.multiply(px).add(py.multiply(py)).multiply(TrianglePredicate.triAreaDDSlow(ax, ay, bx, by, cx, cy))\n const sum = aTerm.subtract(bTerm).add(cTerm).subtract(pTerm)\n const isInCircle = sum.doubleValue() > 0\n return isInCircle\n }\n\n static isInCircleNonRobust (a, b, c, p) {\n const 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 return isInCircle\n }\n\n static isInCircleRobust (a, b, c, p) {\n return TrianglePredicate.isInCircleNormalized(a, b, c, p)\n }\n\n static triAreaDDSlow (ax, ay, bx, by, cx, cy) {\n return bx.subtract(ax).multiply(cy.subtract(ay)).subtract(by.subtract(ay).multiply(cx.subtract(ax)))\n }\n\n static triAreaDDFast (a, b, c) {\n const t1 = DD.valueOf(b.x).selfSubtract(a.x).selfMultiply(DD.valueOf(c.y).selfSubtract(a.y))\n const t2 = DD.valueOf(b.y).selfSubtract(a.y).selfMultiply(DD.valueOf(c.x).selfSubtract(a.x))\n return t1.selfSubtract(t2)\n }\n\n getClass () {\n return TrianglePredicate\n }\n\n get interfaces_ () {\n return []\n }\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 constructor () {\n Vertex.constructor_.apply(this, arguments)\n }\n\n static interpolateZ () {\n if (arguments.length === 3) {\n const p = arguments[0]; const p0 = arguments[1]; const p1 = arguments[2]\n const segLen = p0.distance(p1)\n const ptLen = p.distance(p0)\n const dz = p1.z - p0.z\n const pz = p0.z + dz * (ptLen / segLen)\n return pz\n } else if (arguments.length === 4) {\n const p = arguments[0]; const v0 = arguments[1]; const v1 = arguments[2]; const v2 = arguments[3]\n const x0 = v0.x\n const y0 = v0.y\n const a = v1.x - x0\n const b = v2.x - x0\n const c = v1.y - y0\n const d = v2.y - y0\n const det = a * d - b * c\n const dx = p.x - x0\n const dy = p.y - y0\n const t = (d * dx - b * dy) / det\n const u = (-c * dx + a * dy) / det\n const z = v0.z + t * (v1.z - v0.z) + u * (v2.z - v0.z)\n return z\n }\n }\n\n circleCenter (b, c) {\n const a = new Vertex(this.getX(), this.getY())\n const cab = this.bisector(a, b)\n const cbc = this.bisector(b, c)\n const hcc = new HCoordinate(cab, cbc)\n let cc = null\n try {\n cc = new Vertex(hcc.getX(), hcc.getY())\n } catch (nre) {\n if (nre instanceof NotRepresentableException) {\n System.err.println('a: ' + a + ' b: ' + b + ' c: ' + c)\n System.err.println(nre)\n } else throw nre\n } finally {}\n return cc\n }\n\n dot (v) {\n return this._p.x * v.getX() + this._p.y * v.getY()\n }\n\n magn () {\n return Math.sqrt(this._p.x * this._p.x + this._p.y * this._p.y)\n }\n\n getZ () {\n return this._p.z\n }\n\n bisector (a, b) {\n const dx = b.getX() - a.getX()\n const dy = b.getY() - a.getY()\n const l1 = new HCoordinate(a.getX() + dx / 2.0, a.getY() + dy / 2.0, 1.0)\n const l2 = new HCoordinate(a.getX() - dy + dx / 2.0, a.getY() + dx + dy / 2.0, 1.0)\n return new HCoordinate(l1, l2)\n }\n\n equals () {\n if (arguments.length === 1) {\n const _x = arguments[0]\n if (this._p.x === _x.getX() && this._p.y === _x.getY()) {\n return true\n } else {\n return false\n }\n } else if (arguments.length === 2) {\n const _x = arguments[0]; const tolerance = arguments[1]\n if (this._p.distance(_x.getCoordinate()) < tolerance) {\n return true\n } else {\n return false\n }\n }\n }\n\n getCoordinate () {\n return this._p\n }\n\n isInCircle (a, b, c) {\n return TrianglePredicate.isInCircleRobust(a._p, b._p, c._p, this._p)\n }\n\n interpolateZValue (v0, v1, v2) {\n const x0 = v0.getX()\n const y0 = v0.getY()\n const a = v1.getX() - x0\n const b = v2.getX() - x0\n const c = v1.getY() - y0\n const d = v2.getY() - y0\n const det = a * d - b * c\n const dx = this.getX() - x0\n const dy = this.getY() - y0\n const t = (d * dx - b * dy) / det\n const u = (-c * dx + a * dy) / det\n const z = v0.getZ() + t * (v1.getZ() - v0.getZ()) + u * (v2.getZ() - v0.getZ())\n return z\n }\n\n midPoint (a) {\n const xm = (this._p.x + a.getX()) / 2.0\n const ym = (this._p.y + a.getY()) / 2.0\n const zm = (this._p.z + a.getZ()) / 2.0\n return new Vertex(xm, ym, zm)\n }\n\n rightOf (e) {\n return this.isCCW(e.dest(), e.orig())\n }\n\n isCCW (b, c) {\n return (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 }\n\n getX () {\n return this._p.x\n }\n\n crossProduct (v) {\n return this._p.x * v.getY() - this._p.y * v.getX()\n }\n\n setZ (_z) {\n this._p.z = _z\n }\n\n times (c) {\n return new Vertex(c * this._p.x, c * this._p.y)\n }\n\n cross () {\n return new Vertex(this._p.y, -this._p.x)\n }\n\n leftOf (e) {\n return this.isCCW(e.orig(), e.dest())\n }\n\n toString () {\n return 'POINT (' + this._p.x + ' ' + this._p.y + ')'\n }\n\n sub (v) {\n return new Vertex(this._p.x - v.getX(), this._p.y - v.getY())\n }\n\n getY () {\n return this._p.y\n }\n\n classify (p0, p1) {\n const p2 = this\n const a = p1.sub(p0)\n const b = p2.sub(p0)\n const sa = a.crossProduct(b)\n if (sa > 0.0) return Vertex.LEFT\n if (sa < 0.0) return Vertex.RIGHT\n if (a.getX() * b.getX() < 0.0 || a.getY() * b.getY() < 0.0) return Vertex.BEHIND\n if (a.magn() < b.magn()) return Vertex.BEYOND\n if (p0.equals(p2)) return Vertex.ORIGIN\n if (p1.equals(p2)) return Vertex.DESTINATION\n return Vertex.BETWEEN\n }\n\n sum (v) {\n return new Vertex(this._p.x + v.getX(), this._p.y + v.getY())\n }\n\n distance (v1, v2) {\n return Math.sqrt(Math.pow(v2.getX() - v1.getX(), 2.0) + Math.pow(v2.getY() - v1.getY(), 2.0))\n }\n\n circumRadiusRatio (b, c) {\n const x = this.circleCenter(b, c)\n const radius = this.distance(x, b)\n let edgeLength = this.distance(this, b)\n let el = this.distance(b, c)\n if (el < edgeLength) {\n edgeLength = el\n }\n el = this.distance(c, this)\n if (el < edgeLength) {\n edgeLength = el\n }\n return radius / edgeLength\n }\n\n getClass () {\n return Vertex\n }\n\n get interfaces_ () {\n return []\n }\n}\nVertex.constructor_ = function () {\n this._p = null\n if (arguments.length === 1) {\n const _p = arguments[0]\n this._p = new Coordinate(_p)\n } else if (arguments.length === 2) {\n const _x = arguments[0]; const _y = arguments[1]\n this._p = new Coordinate(_x, _y)\n } else if (arguments.length === 3) {\n const _x = arguments[0]; const _y = arguments[1]; const _z = arguments[2]\n this._p = new Coordinate(_x, _y, _z)\n }\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 constructor () {\n super()\n ConstraintVertex.constructor_.apply(this, arguments)\n }\n\n getConstraint () {\n return this._constraint\n }\n\n setOnConstraint (isOnConstraint) {\n this._isOnConstraint = isOnConstraint\n }\n\n merge (other) {\n if (other._isOnConstraint) {\n this._isOnConstraint = true\n this._constraint = other._constraint\n }\n }\n\n isOnConstraint () {\n return this._isOnConstraint\n }\n\n setConstraint (constraint) {\n this._isOnConstraint = true\n this._constraint = constraint\n }\n\n getClass () {\n return ConstraintVertex\n }\n\n get interfaces_ () {\n return []\n }\n}\nConstraintVertex.constructor_ = function () {\n this._isOnConstraint = null\n this._constraint = null\n const p = arguments[0]\n Vertex.constructor_.call(this, p)\n}\n","import WKTWriter from '../../io/WKTWriter'\nimport LineSegment from '../../geom/LineSegment'\nexport default class QuadEdge {\n constructor () {\n QuadEdge.constructor_.apply(this, arguments)\n }\n\n static makeEdge (o, d) {\n const q0 = new QuadEdge()\n const q1 = new QuadEdge()\n const q2 = new QuadEdge()\n const q3 = new QuadEdge()\n q0._rot = q1\n q1._rot = q2\n q2._rot = q3\n q3._rot = q0\n q0.setNext(q0)\n q1.setNext(q3)\n q2.setNext(q2)\n q3.setNext(q1)\n const base = q0\n base.setOrig(o)\n base.setDest(d)\n return base\n }\n\n static swap (e) {\n const a = e.oPrev()\n const b = e.sym().oPrev()\n QuadEdge.splice(e, a)\n QuadEdge.splice(e.sym(), b)\n QuadEdge.splice(e, a.lNext())\n QuadEdge.splice(e.sym(), b.lNext())\n e.setOrig(a.dest())\n e.setDest(b.dest())\n }\n\n static splice (a, b) {\n const alpha = a.oNext().rot()\n const beta = b.oNext().rot()\n const t1 = b.oNext()\n const t2 = a.oNext()\n const t3 = beta.oNext()\n const t4 = alpha.oNext()\n a.setNext(t1)\n b.setNext(t2)\n alpha.setNext(t3)\n beta.setNext(t4)\n }\n\n static connect (a, b) {\n const e = QuadEdge.makeEdge(a.dest(), b.orig())\n QuadEdge.splice(e, a.lNext())\n QuadEdge.splice(e.sym(), b)\n return e\n }\n\n equalsNonOriented (qe) {\n if (this.equalsOriented(qe)) return true\n if (this.equalsOriented(qe.sym())) return true\n return false\n }\n\n toLineSegment () {\n return new LineSegment(this._vertex.getCoordinate(), this.dest().getCoordinate())\n }\n\n dest () {\n return this.sym().orig()\n }\n\n oNext () {\n return this._next\n }\n\n equalsOriented (qe) {\n if (this.orig().getCoordinate().equals2D(qe.orig().getCoordinate()) && this.dest().getCoordinate().equals2D(qe.dest().getCoordinate())) return true\n return false\n }\n\n dNext () {\n return this.sym().oNext().sym()\n }\n\n lPrev () {\n return this._next.sym()\n }\n\n rPrev () {\n return this.sym().oNext()\n }\n\n rot () {\n return this._rot\n }\n\n oPrev () {\n return this._rot._next._rot\n }\n\n sym () {\n return this._rot._rot\n }\n\n setOrig (o) {\n this._vertex = o\n }\n\n lNext () {\n return this.invRot().oNext().rot()\n }\n\n getLength () {\n return this.orig().getCoordinate().distance(this.dest().getCoordinate())\n }\n\n invRot () {\n return this._rot.sym()\n }\n\n setDest (d) {\n this.sym().setOrig(d)\n }\n\n setData (data) {\n this._data = data\n }\n\n getData () {\n return this._data\n }\n\n delete () {\n this._rot = null\n }\n\n orig () {\n return this._vertex\n }\n\n rNext () {\n return this._rot._next.invRot()\n }\n\n toString () {\n const p0 = this._vertex.getCoordinate()\n const p1 = this.dest().getCoordinate()\n return WKTWriter.toLineString(p0, p1)\n }\n\n isLive () {\n return this._rot !== null\n }\n\n getPrimary () {\n if (this.orig().getCoordinate().compareTo(this.dest().getCoordinate()) <= 0) return this; else return this.sym()\n }\n\n dPrev () {\n return this.invRot().oNext().invRot()\n }\n\n setNext (next) {\n this._next = next\n }\n\n getClass () {\n return QuadEdge\n }\n\n get interfaces_ () {\n return []\n }\n}\nQuadEdge.constructor_ = function () {\n this._rot = null\n this._vertex = null\n this._next = null\n this._data = null\n}\n","import QuadEdge from './quadedge/QuadEdge'\nexport default class IncrementalDelaunayTriangulator {\n constructor () {\n IncrementalDelaunayTriangulator.constructor_.apply(this, arguments)\n }\n\n insertSite (v) {\n let e = this._subdiv.locate(v)\n if (this._subdiv.isVertexOfEdge(e, v)) {\n return e\n } else if (this._subdiv.isOnEdge(e, v.getCoordinate())) {\n e = e.oPrev()\n this._subdiv.delete(e.oNext())\n }\n let base = this._subdiv.makeEdge(e.orig(), v)\n QuadEdge.splice(base, e)\n const startEdge = base\n do {\n base = this._subdiv.connect(e, base.sym())\n e = base.oPrev()\n } while (e.lNext() !== startEdge)\n do {\n const t = e.oPrev()\n if (t.dest().rightOf(e) && v.isInCircle(e.orig(), t.dest(), e.dest())) {\n QuadEdge.swap(e)\n e = e.oPrev()\n } else if (e.oNext() === startEdge) {\n return base\n } else {\n e = e.oNext().lPrev()\n }\n } while (true)\n }\n\n insertSites (vertices) {\n for (let i = vertices.iterator(); i.hasNext();) {\n const v = i.next()\n this.insertSite(v)\n }\n }\n\n getClass () {\n return IncrementalDelaunayTriangulator\n }\n\n get interfaces_ () {\n return []\n }\n}\nIncrementalDelaunayTriangulator.constructor_ = function () {\n this._subdiv = null\n this._isUsingTolerance = false\n const subdiv = arguments[0]\n this._subdiv = subdiv\n this._isUsingTolerance = subdiv.getTolerance() > 0.0\n}\n","export default class QuadEdgeLocator {\n constructor () {\n QuadEdgeLocator.constructor_.apply(this, arguments)\n }\n\n locate (v) {}\n getClass () {\n return QuadEdgeLocator\n }\n\n get interfaces_ () {\n return []\n }\n}\nQuadEdgeLocator.constructor_ = function () {}\n","import QuadEdgeLocator from './QuadEdgeLocator'\nexport default class LastFoundQuadEdgeLocator {\n constructor () {\n LastFoundQuadEdgeLocator.constructor_.apply(this, arguments)\n }\n\n init () {\n this._lastEdge = this.findEdge()\n }\n\n locate (v) {\n if (!this._lastEdge.isLive()) {\n this.init()\n }\n const e = this._subdiv.locateFromEdge(v, this._lastEdge)\n this._lastEdge = e\n return e\n }\n\n findEdge () {\n const edges = this._subdiv.getEdges()\n return edges.iterator().next()\n }\n\n getClass () {\n return LastFoundQuadEdgeLocator\n }\n\n get interfaces_ () {\n return [QuadEdgeLocator]\n }\n}\nLastFoundQuadEdgeLocator.constructor_ = function () {\n this._subdiv = null\n this._lastEdge = null\n const subdiv = arguments[0]\n this._subdiv = subdiv\n this.init()\n}\n","import LineSegment from '../../geom/LineSegment'\nimport RuntimeException from '../../../../../java/lang/RuntimeException'\nexport default class LocateFailureException extends RuntimeException {\n constructor () {\n super()\n LocateFailureException.constructor_.apply(this, arguments)\n }\n\n static msgWithSpatial (msg, seg) {\n if (seg !== null) return msg + ' [ ' + seg + ' ]'\n return msg\n }\n\n getSegment () {\n return this._seg\n }\n\n getClass () {\n return LocateFailureException\n }\n\n get interfaces_ () {\n return []\n }\n}\nLocateFailureException.constructor_ = function () {\n this._seg = null\n if (arguments.length === 1) {\n if (typeof arguments[0] === 'string') {\n const msg = arguments[0]\n RuntimeException.constructor_.call(this, msg)\n } else if (arguments[0] instanceof LineSegment) {\n const seg = arguments[0]\n RuntimeException.constructor_.call(this, 'Locate failed to converge (at edge: ' + seg + '). Possible causes include invalid Subdivision topology or very close sites')\n this._seg = new LineSegment(seg)\n }\n } else if (arguments.length === 2) {\n const msg = arguments[0]; const seg = arguments[1]\n RuntimeException.constructor_.call(this, LocateFailureException.msgWithSpatial(msg, seg))\n this._seg = new LineSegment(seg)\n }\n}\n","export default class TriangleVisitor {\n constructor () {\n TriangleVisitor.constructor_.apply(this, arguments)\n }\n\n visit (triEdges) {}\n getClass () {\n return TriangleVisitor\n }\n\n get interfaces_ () {\n return []\n }\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 constructor () {\n QuadEdgeSubdivision.constructor_.apply(this, arguments)\n }\n\n static getTriangleEdges (startQE, triEdge) {\n triEdge[0] = startQE\n triEdge[1] = triEdge[0].lNext()\n triEdge[2] = triEdge[1].lNext()\n if (triEdge[2].lNext() !== triEdge[0]) throw new IllegalArgumentException('Edges do not form a triangle')\n }\n\n getTriangleVertices (includeFrame) {\n const visitor = new TriangleVertexListVisitor()\n this.visitTriangles(visitor, includeFrame)\n return visitor.getTriangleVertices()\n }\n\n isFrameVertex (v) {\n if (v.equals(this._frameVertex[0])) return true\n if (v.equals(this._frameVertex[1])) return true\n if (v.equals(this._frameVertex[2])) return true\n return false\n }\n\n isVertexOfEdge (e, v) {\n if (v.equals(e.orig(), this._tolerance) || v.equals(e.dest(), this._tolerance)) {\n return true\n }\n return false\n }\n\n connect (a, b) {\n const q = QuadEdge.connect(a, b)\n this._quadEdges.add(q)\n return q\n }\n\n getVoronoiCellPolygon (qe, geomFact) {\n const cellPts = new ArrayList()\n const startQE = qe\n do {\n const cc = qe.rot().orig().getCoordinate()\n cellPts.add(cc)\n qe = qe.oPrev()\n } while (qe !== startQE)\n const coordList = new CoordinateList()\n coordList.addAll(cellPts, false)\n coordList.closeRing()\n if (coordList.size() < 4) {\n System.out.println(coordList)\n coordList.add(coordList.get(coordList.size() - 1), true)\n }\n const pts = coordList.toCoordinateArray()\n const cellPoly = geomFact.createPolygon(geomFact.createLinearRing(pts))\n const v = startQE.orig()\n cellPoly.setUserData(v.getCoordinate())\n return cellPoly\n }\n\n setLocator (locator) {\n this._locator = locator\n }\n\n initSubdiv () {\n const ea = this.makeEdge(this._frameVertex[0], this._frameVertex[1])\n const eb = this.makeEdge(this._frameVertex[1], this._frameVertex[2])\n QuadEdge.splice(ea.sym(), eb)\n const ec = this.makeEdge(this._frameVertex[2], this._frameVertex[0])\n QuadEdge.splice(eb.sym(), ec)\n QuadEdge.splice(ec.sym(), ea)\n return ea\n }\n\n isFrameBorderEdge (e) {\n const leftTri = new Array(3).fill(null)\n QuadEdgeSubdivision.getTriangleEdges(e, leftTri)\n const rightTri = new Array(3).fill(null)\n QuadEdgeSubdivision.getTriangleEdges(e.sym(), rightTri)\n const vLeftTriOther = e.lNext().dest()\n if (this.isFrameVertex(vLeftTriOther)) return true\n const vRightTriOther = e.sym().lNext().dest()\n if (this.isFrameVertex(vRightTriOther)) return true\n return false\n }\n\n makeEdge (o, d) {\n const q = QuadEdge.makeEdge(o, d)\n this._quadEdges.add(q)\n return q\n }\n\n visitTriangles (triVisitor, includeFrame) {\n this._visitedKey++\n const edgeStack = new Stack()\n edgeStack.push(this._startingEdge)\n const visitedEdges = new HashSet()\n while (!edgeStack.empty()) {\n const edge = edgeStack.pop()\n if (!visitedEdges.contains(edge)) {\n const triEdges = this.fetchTriangleToVisit(edge, edgeStack, includeFrame, visitedEdges)\n if (triEdges !== null) triVisitor.visit(triEdges)\n }\n }\n }\n\n isFrameEdge (e) {\n if (this.isFrameVertex(e.orig()) || this.isFrameVertex(e.dest())) return true\n return false\n }\n\n isOnEdge (e, p) {\n this._seg.setCoordinates(e.orig().getCoordinate(), e.dest().getCoordinate())\n const dist = this._seg.distance(p)\n return dist < this._edgeCoincidenceTolerance\n }\n\n getEnvelope () {\n return new Envelope(this._frameEnv)\n }\n\n createFrame (env) {\n const deltaX = env.getWidth()\n const deltaY = env.getHeight()\n let offset = 0.0\n if (deltaX > deltaY) {\n offset = deltaX * 10.0\n } else {\n offset = deltaY * 10.0\n }\n this._frameVertex[0] = new Vertex((env.getMaxX() + env.getMinX()) / 2.0, env.getMaxY() + offset)\n this._frameVertex[1] = new Vertex(env.getMinX() - offset, env.getMinY() - offset)\n this._frameVertex[2] = new Vertex(env.getMaxX() + offset, env.getMinY() - offset)\n this._frameEnv = new Envelope(this._frameVertex[0].getCoordinate(), this._frameVertex[1].getCoordinate())\n this._frameEnv.expandToInclude(this._frameVertex[2].getCoordinate())\n }\n\n getTriangleCoordinates (includeFrame) {\n const visitor = new TriangleCoordinatesVisitor()\n this.visitTriangles(visitor, includeFrame)\n return visitor.getTriangles()\n }\n\n getVertices (includeFrame) {\n const vertices = new HashSet()\n for (let i = this._quadEdges.iterator(); i.hasNext();) {\n const qe = i.next()\n const v = qe.orig()\n if (includeFrame || !this.isFrameVertex(v)) vertices.add(v)\n const vd = qe.dest()\n if (includeFrame || !this.isFrameVertex(vd)) vertices.add(vd)\n }\n return vertices\n }\n\n fetchTriangleToVisit (edge, edgeStack, includeFrame, visitedEdges) {\n let curr = edge\n let edgeCount = 0\n let isFrame = false\n do {\n this._triEdges[edgeCount] = curr\n if (this.isFrameEdge(curr)) isFrame = true\n const sym = curr.sym()\n if (!visitedEdges.contains(sym)) edgeStack.push(sym)\n visitedEdges.add(curr)\n edgeCount++\n curr = curr.lNext()\n } while (curr !== edge)\n if (isFrame && !includeFrame) return null\n return this._triEdges\n }\n\n getEdges () {\n if (arguments.length === 0) {\n return this._quadEdges\n } else if (arguments.length === 1) {\n const geomFact = arguments[0]\n const quadEdges = this.getPrimaryEdges(false)\n const edges = new Array(quadEdges.size()).fill(null)\n let i = 0\n for (let it = quadEdges.iterator(); it.hasNext();) {\n const qe = it.next()\n edges[i++] = geomFact.createLineString([qe.orig().getCoordinate(), qe.dest().getCoordinate()])\n }\n return geomFact.createMultiLineString(edges)\n }\n }\n\n getVertexUniqueEdges (includeFrame) {\n const edges = new ArrayList()\n const visitedVertices = new HashSet()\n for (let i = this._quadEdges.iterator(); i.hasNext();) {\n const qe = i.next()\n const v = qe.orig()\n if (!visitedVertices.contains(v)) {\n visitedVertices.add(v)\n if (includeFrame || !this.isFrameVertex(v)) {\n edges.add(qe)\n }\n }\n const qd = qe.sym()\n const vd = qd.orig()\n if (!visitedVertices.contains(vd)) {\n visitedVertices.add(vd)\n if (includeFrame || !this.isFrameVertex(vd)) {\n edges.add(qd)\n }\n }\n }\n return edges\n }\n\n getTriangleEdges (includeFrame) {\n const visitor = new TriangleEdgesListVisitor()\n this.visitTriangles(visitor, includeFrame)\n return visitor.getTriangleEdges()\n }\n\n getPrimaryEdges (includeFrame) {\n this._visitedKey++\n const edges = new ArrayList()\n const edgeStack = new Stack()\n edgeStack.push(this._startingEdge)\n const visitedEdges = new HashSet()\n while (!edgeStack.empty()) {\n const edge = edgeStack.pop()\n if (!visitedEdges.contains(edge)) {\n const priQE = edge.getPrimary()\n if (includeFrame || !this.isFrameEdge(priQE)) edges.add(priQE)\n edgeStack.push(edge.oNext())\n edgeStack.push(edge.sym().oNext())\n visitedEdges.add(edge)\n visitedEdges.add(edge.sym())\n }\n }\n return edges\n }\n\n delete (e) {\n QuadEdge.splice(e, e.oPrev())\n QuadEdge.splice(e.sym(), e.sym().oPrev())\n const eSym = e.sym()\n const eRot = e.rot()\n const eRotSym = e.rot().sym()\n this._quadEdges.remove(e)\n this._quadEdges.remove(eSym)\n this._quadEdges.remove(eRot)\n this._quadEdges.remove(eRotSym)\n e.delete()\n eSym.delete()\n eRot.delete()\n eRotSym.delete()\n }\n\n locateFromEdge (v, startEdge) {\n let iter = 0\n const maxIter = this._quadEdges.size()\n let e = startEdge\n while (true) {\n iter++\n if (iter > maxIter) {\n throw new LocateFailureException(e.toLineSegment())\n }\n if (v.equals(e.orig()) || v.equals(e.dest())) {\n break\n } else if (v.rightOf(e)) {\n e = e.sym()\n } else if (!v.rightOf(e.oNext())) {\n e = e.oNext()\n } else if (!v.rightOf(e.dPrev())) {\n e = e.dPrev()\n } else {\n break\n }\n }\n return e\n }\n\n getTolerance () {\n return this._tolerance\n }\n\n getVoronoiCellPolygons (geomFact) {\n this.visitTriangles(new TriangleCircumcentreVisitor(), true)\n const cells = new ArrayList()\n const edges = this.getVertexUniqueEdges(false)\n for (let i = edges.iterator(); i.hasNext();) {\n const qe = i.next()\n cells.add(this.getVoronoiCellPolygon(qe, geomFact))\n }\n return cells\n }\n\n getVoronoiDiagram (geomFact) {\n const vorCells = this.getVoronoiCellPolygons(geomFact)\n return geomFact.createGeometryCollection(GeometryFactory.toGeometryArray(vorCells))\n }\n\n getTriangles (geomFact) {\n const triPtsList = this.getTriangleCoordinates(false)\n const tris = new Array(triPtsList.size()).fill(null)\n let i = 0\n for (let it = triPtsList.iterator(); it.hasNext();) {\n const triPt = it.next()\n tris[i++] = geomFact.createPolygon(geomFact.createLinearRing(triPt))\n }\n return geomFact.createGeometryCollection(tris)\n }\n\n insertSite (v) {\n let e = this.locate(v)\n if (v.equals(e.orig(), this._tolerance) || v.equals(e.dest(), this._tolerance)) {\n return e\n }\n let base = this.makeEdge(e.orig(), v)\n QuadEdge.splice(base, e)\n const startEdge = base\n do {\n base = this.connect(e, base.sym())\n e = base.oPrev()\n } while (e.lNext() !== startEdge)\n return startEdge\n }\n\n locate () {\n if (arguments.length === 1) {\n if (arguments[0] instanceof Vertex) {\n const v = arguments[0]\n return this._locator.locate(v)\n } else if (arguments[0] instanceof Coordinate) {\n const p = arguments[0]\n return this._locator.locate(new Vertex(p))\n }\n } else if (arguments.length === 2) {\n const p0 = arguments[0]; const p1 = arguments[1]\n const e = this._locator.locate(new Vertex(p0))\n if (e === null) return null\n let base = e\n if (e.dest().getCoordinate().equals2D(p0)) base = e.sym()\n let locEdge = base\n do {\n if (locEdge.dest().getCoordinate().equals2D(p1)) return locEdge\n locEdge = locEdge.oNext()\n } while (locEdge !== base)\n return null\n }\n }\n\n getClass () {\n return QuadEdgeSubdivision\n }\n\n get interfaces_ () {\n return []\n }\n}\nclass TriangleCircumcentreVisitor {\n constructor () {\n TriangleCircumcentreVisitor.constructor_.apply(this, arguments)\n }\n\n visit (triEdges) {\n const a = triEdges[0].orig().getCoordinate()\n const b = triEdges[1].orig().getCoordinate()\n const c = triEdges[2].orig().getCoordinate()\n const cc = Triangle.circumcentre(a, b, c)\n const ccVertex = new Vertex(cc)\n for (let i = 0; i < 3; i++) {\n triEdges[i].rot().setOrig(ccVertex)\n }\n }\n\n getClass () {\n return TriangleCircumcentreVisitor\n }\n\n get interfaces_ () {\n return [TriangleVisitor]\n }\n}\nTriangleCircumcentreVisitor.constructor_ = function () {}\nclass TriangleEdgesListVisitor {\n constructor () {\n TriangleEdgesListVisitor.constructor_.apply(this, arguments)\n }\n\n getTriangleEdges () {\n return this._triList\n }\n\n visit (triEdges) {\n this._triList.add(triEdges)\n }\n\n getClass () {\n return TriangleEdgesListVisitor\n }\n\n get interfaces_ () {\n return [TriangleVisitor]\n }\n}\nTriangleEdgesListVisitor.constructor_ = function () {\n this._triList = new ArrayList()\n}\nclass TriangleVertexListVisitor {\n constructor () {\n TriangleVertexListVisitor.constructor_.apply(this, arguments)\n }\n\n visit (triEdges) {\n this._triList.add([triEdges[0].orig(), triEdges[1].orig(), triEdges[2].orig()])\n }\n\n getTriangleVertices () {\n return this._triList\n }\n\n getClass () {\n return TriangleVertexListVisitor\n }\n\n get interfaces_ () {\n return [TriangleVisitor]\n }\n}\nTriangleVertexListVisitor.constructor_ = function () {\n this._triList = new ArrayList()\n}\nclass TriangleCoordinatesVisitor {\n constructor () {\n TriangleCoordinatesVisitor.constructor_.apply(this, arguments)\n }\n\n checkTriangleSize (pts) {\n let loc = ''\n if (pts.length >= 2) loc = WKTWriter.toLineString(pts[0], pts[1]); else {\n if (pts.length >= 1) loc = WKTWriter.toPoint(pts[0])\n }\n }\n\n visit (triEdges) {\n this._coordList.clear()\n for (let i = 0; i < 3; i++) {\n const v = triEdges[i].orig()\n this._coordList.add(v.getCoordinate())\n }\n if (this._coordList.size() > 0) {\n this._coordList.closeRing()\n const pts = this._coordList.toCoordinateArray()\n if (pts.length !== 4) {\n return null\n }\n this._triCoords.add(pts)\n }\n }\n\n getTriangles () {\n return this._triCoords\n }\n\n getClass () {\n return TriangleCoordinatesVisitor\n }\n\n get interfaces_ () {\n return [TriangleVisitor]\n }\n}\nTriangleCoordinatesVisitor.constructor_ = function () {\n this._coordList = new CoordinateList()\n this._triCoords = new ArrayList()\n}\nQuadEdgeSubdivision.TriangleCircumcentreVisitor = TriangleCircumcentreVisitor\nQuadEdgeSubdivision.TriangleEdgesListVisitor = TriangleEdgesListVisitor\nQuadEdgeSubdivision.TriangleVertexListVisitor = TriangleVertexListVisitor\nQuadEdgeSubdivision.TriangleCoordinatesVisitor = TriangleCoordinatesVisitor\nQuadEdgeSubdivision.constructor_ = function () {\n this._visitedKey = 0\n this._quadEdges = new ArrayList()\n this._startingEdge = null\n this._tolerance = null\n this._edgeCoincidenceTolerance = null\n this._frameVertex = new Array(3).fill(null)\n this._frameEnv = null\n this._locator = null\n this._seg = new LineSegment()\n this._triEdges = new Array(3).fill(null)\n const env = arguments[0]; const tolerance = arguments[1]\n this._tolerance = tolerance\n this._edgeCoincidenceTolerance = tolerance / QuadEdgeSubdivision.EDGE_COINCIDENCE_TOL_FACTOR\n this.createFrame(env)\n this._startingEdge = this.initSubdiv()\n this._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 constructor () {\n Segment.constructor_.apply(this, arguments)\n }\n\n getLineSegment () {\n return this._ls\n }\n\n getEndZ () {\n const p = this._ls.getCoordinate(1)\n return p.z\n }\n\n getStartZ () {\n const p = this._ls.getCoordinate(0)\n return p.z\n }\n\n intersection (s) {\n return this._ls.intersection(s.getLineSegment())\n }\n\n getStart () {\n return this._ls.getCoordinate(0)\n }\n\n getEnd () {\n return this._ls.getCoordinate(1)\n }\n\n getEndY () {\n const p = this._ls.getCoordinate(1)\n return p.y\n }\n\n getStartX () {\n const p = this._ls.getCoordinate(0)\n return p.x\n }\n\n equalsTopo (s) {\n return this._ls.equalsTopo(s.getLineSegment())\n }\n\n getStartY () {\n const p = this._ls.getCoordinate(0)\n return p.y\n }\n\n setData (data) {\n this._data = data\n }\n\n getData () {\n return this._data\n }\n\n getEndX () {\n const p = this._ls.getCoordinate(1)\n return p.x\n }\n\n toString () {\n return this._ls.toString()\n }\n\n getClass () {\n return Segment\n }\n\n get interfaces_ () {\n return []\n }\n}\nSegment.constructor_ = function () {\n this._ls = null\n this._data = null\n if (arguments.length === 2) {\n const p0 = arguments[0]; const p1 = arguments[1]\n this._ls = new LineSegment(p0, p1)\n } else if (arguments.length === 3) {\n const p0 = arguments[0]; const p1 = arguments[1]; const data = arguments[2]\n this._ls = new LineSegment(p0, p1)\n this._data = data\n } else if (arguments.length === 6) {\n const x1 = arguments[0]; const y1 = arguments[1]; const z1 = arguments[2]; const x2 = arguments[3]; const y2 = arguments[4]; const z2 = arguments[5]\n Segment.constructor_.call(this, new Coordinate(x1, y1, z1), new Coordinate(x2, y2, z2))\n } else if (arguments.length === 7) {\n const x1 = arguments[0]; const y1 = arguments[1]; const z1 = arguments[2]; const x2 = arguments[3]; const y2 = arguments[4]; const z2 = arguments[5]; const data = arguments[6]\n Segment.constructor_.call(this, new Coordinate(x1, y1, z1), new Coordinate(x2, y2, z2), data)\n }\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 constructor () {\n ConformingDelaunayTriangulator.constructor_.apply(this, arguments)\n }\n\n static computeVertexEnvelope (vertices) {\n const env = new Envelope()\n for (let i = vertices.iterator(); i.hasNext();) {\n const v = i.next()\n env.expandToInclude(v.getCoordinate())\n }\n return env\n }\n\n getInitialVertices () {\n return this._initialVertices\n }\n\n getKDT () {\n return this._kdt\n }\n\n enforceConstraints () {\n this.addConstraintVertices()\n let count = 0\n let splits = 0\n do {\n splits = this.enforceGabriel(this._segments)\n count++\n } while (splits > 0 && count < ConformingDelaunayTriangulator.MAX_SPLIT_ITER)\n }\n\n insertSites (vertices) {\n for (let i = vertices.iterator(); i.hasNext();) {\n const v = i.next()\n this.insertSite(v)\n }\n }\n\n getVertexFactory () {\n return this._vertexFactory\n }\n\n getPointArray () {\n const pts = new Array(this._initialVertices.size() + this._segVertices.size()).fill(null)\n let index = 0\n for (let i = this._initialVertices.iterator(); i.hasNext();) {\n const v = i.next()\n pts[index++] = v.getCoordinate()\n }\n for (let i2 = this._segVertices.iterator(); i2.hasNext();) {\n const v = i2.next()\n pts[index++] = v.getCoordinate()\n }\n return pts\n }\n\n setConstraints (segments, segVertices) {\n this._segments = segments\n this._segVertices = segVertices\n }\n\n computeConvexHull () {\n const fact = new GeometryFactory()\n const coords = this.getPointArray()\n const hull = new ConvexHull(coords, fact)\n this._convexHull = hull.getConvexHull()\n }\n\n addConstraintVertices () {\n this.computeConvexHull()\n this.insertSites(this._segVertices)\n }\n\n findNonGabrielPoint (seg) {\n const p = seg.getStart()\n const q = seg.getEnd()\n const midPt = new Coordinate((p.x + q.x) / 2.0, (p.y + q.y) / 2.0)\n const segRadius = p.distance(midPt)\n const env = new Envelope(midPt)\n env.expandBy(segRadius)\n const result = this._kdt.query(env)\n let closestNonGabriel = null\n let minDist = Double.MAX_VALUE\n for (let i = result.iterator(); i.hasNext();) {\n const nextNode = i.next()\n const testPt = nextNode.getCoordinate()\n if (testPt.equals2D(p) || testPt.equals2D(q)) continue\n const testRadius = midPt.distance(testPt)\n if (testRadius < segRadius) {\n const testDist = testRadius\n if (closestNonGabriel === null || testDist < minDist) {\n closestNonGabriel = testPt\n minDist = testDist\n }\n }\n }\n return closestNonGabriel\n }\n\n getConstraintSegments () {\n return this._segments\n }\n\n setSplitPointFinder (splitFinder) {\n this._splitFinder = splitFinder\n }\n\n getConvexHull () {\n return this._convexHull\n }\n\n getTolerance () {\n return this._tolerance\n }\n\n enforceGabriel (segsToInsert) {\n const newSegments = new ArrayList()\n let splits = 0\n const segsToRemove = new ArrayList()\n for (let i = segsToInsert.iterator(); i.hasNext();) {\n const seg = i.next()\n const encroachPt = this.findNonGabrielPoint(seg)\n if (encroachPt === null) continue\n this._splitPt = this._splitFinder.findSplitPoint(seg, encroachPt)\n const splitVertex = this.createVertex(this._splitPt, seg)\n const insertedVertex = this.insertSite(splitVertex)\n if (!insertedVertex.getCoordinate().equals2D(this._splitPt)) {}\n const s1 = new Segment(seg.getStartX(), seg.getStartY(), seg.getStartZ(), splitVertex.getX(), splitVertex.getY(), splitVertex.getZ(), seg.getData())\n const s2 = new Segment(splitVertex.getX(), splitVertex.getY(), splitVertex.getZ(), seg.getEndX(), seg.getEndY(), seg.getEndZ(), seg.getData())\n newSegments.add(s1)\n newSegments.add(s2)\n segsToRemove.add(seg)\n splits = splits + 1\n }\n segsToInsert.removeAll(segsToRemove)\n segsToInsert.addAll(newSegments)\n return splits\n }\n\n createVertex () {\n if (arguments.length === 1) {\n const p = arguments[0]\n let v = null\n if (this._vertexFactory !== null) v = this._vertexFactory.createVertex(p, null); else v = new ConstraintVertex(p)\n return v\n } else if (arguments.length === 2) {\n const p = arguments[0]; const seg = arguments[1]\n let v = null\n if (this._vertexFactory !== null) v = this._vertexFactory.createVertex(p, seg); else v = new ConstraintVertex(p)\n v.setOnConstraint(true)\n return v\n }\n }\n\n getSubdivision () {\n return this._subdiv\n }\n\n computeBoundingBox () {\n const vertexEnv = ConformingDelaunayTriangulator.computeVertexEnvelope(this._initialVertices)\n const segEnv = ConformingDelaunayTriangulator.computeVertexEnvelope(this._segVertices)\n const allPointsEnv = new Envelope(vertexEnv)\n allPointsEnv.expandToInclude(segEnv)\n const deltaX = allPointsEnv.getWidth() * 0.2\n const deltaY = allPointsEnv.getHeight() * 0.2\n const delta = Math.max(deltaX, deltaY)\n this._computeAreaEnv = new Envelope(allPointsEnv)\n this._computeAreaEnv.expandBy(delta)\n }\n\n setVertexFactory (vertexFactory) {\n this._vertexFactory = vertexFactory\n }\n\n formInitialDelaunay () {\n this.computeBoundingBox()\n this._subdiv = new QuadEdgeSubdivision(this._computeAreaEnv, this._tolerance)\n this._subdiv.setLocator(new LastFoundQuadEdgeLocator(this._subdiv))\n this._incDel = new IncrementalDelaunayTriangulator(this._subdiv)\n this.insertSites(this._initialVertices)\n }\n\n insertSite () {\n if (arguments[0] instanceof ConstraintVertex) {\n const v = arguments[0]\n const kdnode = this._kdt.insert(v.getCoordinate(), v)\n if (!kdnode.isRepeated()) {\n this._incDel.insertSite(v)\n } else {\n const snappedV = kdnode.getData()\n snappedV.merge(v)\n return snappedV\n }\n return v\n } else if (arguments[0] instanceof Coordinate) {\n const p = arguments[0]\n this.insertSite(this.createVertex(p))\n }\n }\n\n getClass () {\n return ConformingDelaunayTriangulator\n }\n\n get interfaces_ () {\n return []\n }\n}\nConformingDelaunayTriangulator.constructor_ = function () {\n this._initialVertices = null\n this._segVertices = null\n this._segments = new ArrayList()\n this._subdiv = null\n this._incDel = null\n this._convexHull = null\n this._splitFinder = new NonEncroachingSplitPointFinder()\n this._kdt = null\n this._vertexFactory = null\n this._computeAreaEnv = null\n this._splitPt = null\n this._tolerance = null\n const initialVertices = arguments[0]; const tolerance = arguments[1]\n this._initialVertices = new ArrayList(initialVertices)\n this._tolerance = tolerance\n this._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 constructor () {\n DelaunayTriangulationBuilder.constructor_.apply(this, arguments)\n }\n\n static extractUniqueCoordinates (geom) {\n if (geom === null) return new CoordinateList()\n const coords = geom.getCoordinates()\n return DelaunayTriangulationBuilder.unique(coords)\n }\n\n static envelope (coords) {\n const env = new Envelope()\n for (let i = coords.iterator(); i.hasNext();) {\n const coord = i.next()\n env.expandToInclude(coord)\n }\n return env\n }\n\n static unique (coords) {\n const coordsCopy = CoordinateArrays.copyDeep(coords)\n Arrays.sort(coordsCopy)\n const coordList = new CoordinateList(coordsCopy, false)\n return coordList\n }\n\n static toVertices (coords) {\n const verts = new ArrayList()\n for (let i = coords.iterator(); i.hasNext();) {\n const coord = i.next()\n verts.add(new Vertex(coord))\n }\n return verts\n }\n\n create () {\n if (this._subdiv !== null) return null\n const siteEnv = DelaunayTriangulationBuilder.envelope(this._siteCoords)\n const vertices = DelaunayTriangulationBuilder.toVertices(this._siteCoords)\n this._subdiv = new QuadEdgeSubdivision(siteEnv, this._tolerance)\n const triangulator = new IncrementalDelaunayTriangulator(this._subdiv)\n triangulator.insertSites(vertices)\n }\n\n setTolerance (tolerance) {\n this._tolerance = tolerance\n }\n\n setSites () {\n if (arguments[0] instanceof Geometry) {\n const geom = arguments[0]\n this._siteCoords = DelaunayTriangulationBuilder.extractUniqueCoordinates(geom)\n } else if (hasInterface(arguments[0], Collection)) {\n const coords = arguments[0]\n this._siteCoords = DelaunayTriangulationBuilder.unique(CoordinateArrays.toCoordinateArray(coords))\n }\n }\n\n getEdges (geomFact) {\n this.create()\n return this._subdiv.getEdges(geomFact)\n }\n\n getSubdivision () {\n this.create()\n return this._subdiv\n }\n\n getTriangles (geomFact) {\n this.create()\n return this._subdiv.getTriangles(geomFact)\n }\n\n getClass () {\n return DelaunayTriangulationBuilder\n }\n\n get interfaces_ () {\n return []\n }\n}\nDelaunayTriangulationBuilder.constructor_ = function () {\n this._siteCoords = null\n this._tolerance = 0.0\n this._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 constructor () {\n ConformingDelaunayTriangulationBuilder.constructor_.apply(this, arguments)\n }\n\n static createConstraintSegments () {\n if (arguments.length === 1) {\n const geom = arguments[0]\n const lines = LinearComponentExtracter.getLines(geom)\n const constraintSegs = new ArrayList()\n for (let i = lines.iterator(); i.hasNext();) {\n const line = i.next()\n ConformingDelaunayTriangulationBuilder.createConstraintSegments(line, constraintSegs)\n }\n return constraintSegs\n } else if (arguments.length === 2) {\n const line = arguments[0]; const constraintSegs = arguments[1]\n const coords = line.getCoordinates()\n for (let i = 1; i < coords.length; i++) {\n constraintSegs.add(new Segment(coords[i - 1], coords[i]))\n }\n }\n }\n\n createSiteVertices (coords) {\n const verts = new ArrayList()\n for (let i = coords.iterator(); i.hasNext();) {\n const coord = i.next()\n if (this._constraintVertexMap.containsKey(coord)) continue\n verts.add(new ConstraintVertex(coord))\n }\n return verts\n }\n\n create () {\n if (this._subdiv !== null) return null\n const siteEnv = DelaunayTriangulationBuilder.envelope(this._siteCoords)\n let segments = new ArrayList()\n if (this._constraintLines !== null) {\n siteEnv.expandToInclude(this._constraintLines.getEnvelopeInternal())\n this.createVertices(this._constraintLines)\n segments = ConformingDelaunayTriangulationBuilder.createConstraintSegments(this._constraintLines)\n }\n const sites = this.createSiteVertices(this._siteCoords)\n const cdt = new ConformingDelaunayTriangulator(sites, this._tolerance)\n cdt.setConstraints(segments, new ArrayList(this._constraintVertexMap.values()))\n cdt.formInitialDelaunay()\n cdt.enforceConstraints()\n this._subdiv = cdt.getSubdivision()\n }\n\n setTolerance (tolerance) {\n this._tolerance = tolerance\n }\n\n setConstraints (constraintLines) {\n this._constraintLines = constraintLines\n }\n\n setSites (geom) {\n this._siteCoords = DelaunayTriangulationBuilder.extractUniqueCoordinates(geom)\n }\n\n getEdges (geomFact) {\n this.create()\n return this._subdiv.getEdges(geomFact)\n }\n\n getSubdivision () {\n this.create()\n return this._subdiv\n }\n\n getTriangles (geomFact) {\n this.create()\n return this._subdiv.getTriangles(geomFact)\n }\n\n createVertices (geom) {\n const coords = geom.getCoordinates()\n for (let i = 0; i < coords.length; i++) {\n const v = new ConstraintVertex(coords[i])\n this._constraintVertexMap.put(coords[i], v)\n }\n }\n\n getClass () {\n return ConformingDelaunayTriangulationBuilder\n }\n\n get interfaces_ () {\n return []\n }\n}\nConformingDelaunayTriangulationBuilder.constructor_ = function () {\n this._siteCoords = null\n this._constraintLines = null\n this._tolerance = 0.0\n this._subdiv = null\n this._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'\nimport OverlayOp from '../operation/overlay/OverlayOp'\nexport default class VoronoiDiagramBuilder {\n constructor () {\n VoronoiDiagramBuilder.constructor_.apply(this, arguments)\n }\n\n static clipGeometryCollection (geom, clipEnv) {\n const clipPoly = geom.getFactory().toGeometry(clipEnv)\n const clipped = new ArrayList()\n for (let i = 0; i < geom.getNumGeometries(); i++) {\n const g = geom.getGeometryN(i)\n let result = null\n if (clipEnv.contains(g.getEnvelopeInternal())) result = g; else if (clipEnv.intersects(g.getEnvelopeInternal())) {\n result = OverlayOp.intersection(clipPoly, g)\n result.setUserData(g.getUserData())\n }\n if (result !== null && !result.isEmpty()) {\n clipped.add(result)\n }\n }\n return geom.getFactory().createGeometryCollection(GeometryFactory.toGeometryArray(clipped))\n }\n\n create () {\n if (this._subdiv !== null) return null\n const siteEnv = DelaunayTriangulationBuilder.envelope(this._siteCoords)\n this._diagramEnv = siteEnv\n const expandBy = Math.max(this._diagramEnv.getWidth(), this._diagramEnv.getHeight())\n this._diagramEnv.expandBy(expandBy)\n if (this._clipEnv !== null) this._diagramEnv.expandToInclude(this._clipEnv)\n const vertices = DelaunayTriangulationBuilder.toVertices(this._siteCoords)\n this._subdiv = new QuadEdgeSubdivision(siteEnv, this._tolerance)\n const triangulator = new IncrementalDelaunayTriangulator(this._subdiv)\n triangulator.insertSites(vertices)\n }\n\n getDiagram (geomFact) {\n this.create()\n const polys = this._subdiv.getVoronoiDiagram(geomFact)\n return VoronoiDiagramBuilder.clipGeometryCollection(polys, this._diagramEnv)\n }\n\n setTolerance (tolerance) {\n this._tolerance = tolerance\n }\n\n setSites () {\n if (arguments[0] instanceof Geometry) {\n const geom = arguments[0]\n this._siteCoords = DelaunayTriangulationBuilder.extractUniqueCoordinates(geom)\n } else if (hasInterface(arguments[0], Collection)) {\n const coords = arguments[0]\n this._siteCoords = DelaunayTriangulationBuilder.unique(CoordinateArrays.toCoordinateArray(coords))\n }\n }\n\n setClipEnvelope (clipEnv) {\n this._clipEnv = clipEnv\n }\n\n getSubdivision () {\n this.create()\n return this._subdiv\n }\n\n getClass () {\n return VoronoiDiagramBuilder\n }\n\n get interfaces_ () {\n return []\n }\n}\nVoronoiDiagramBuilder.constructor_ = function () {\n this._siteCoords = null\n this._tolerance = 0.0\n this._subdiv = null\n this._clipEnv = null\n this._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 constructor () {\n LinearLocation.constructor_.apply(this, arguments)\n }\n\n static getEndLocation (linear) {\n const loc = new LinearLocation()\n loc.setToEnd(linear)\n return loc\n }\n\n static pointAlongSegmentByFraction (p0, p1, frac) {\n if (frac <= 0.0) return p0\n if (frac >= 1.0) return p1\n const x = (p1.x - p0.x) * frac + p0.x\n const y = (p1.y - p0.y) * frac + p0.y\n const z = (p1.z - p0.z) * frac + p0.z\n return new Coordinate(x, y, z)\n }\n\n static compareLocationValues (componentIndex0, segmentIndex0, segmentFraction0, componentIndex1, segmentIndex1, segmentFraction1) {\n if (componentIndex0 < componentIndex1) return -1\n if (componentIndex0 > componentIndex1) return 1\n if (segmentIndex0 < segmentIndex1) return -1\n if (segmentIndex0 > segmentIndex1) return 1\n if (segmentFraction0 < segmentFraction1) return -1\n if (segmentFraction0 > segmentFraction1) return 1\n return 0\n }\n\n getSegmentIndex () {\n return this._segmentIndex\n }\n\n getComponentIndex () {\n return this._componentIndex\n }\n\n isEndpoint (linearGeom) {\n const lineComp = linearGeom.getGeometryN(this._componentIndex)\n const nseg = lineComp.getNumPoints() - 1\n return this._segmentIndex >= nseg || this._segmentIndex === nseg && this._segmentFraction >= 1.0\n }\n\n isValid (linearGeom) {\n if (this._componentIndex < 0 || this._componentIndex >= linearGeom.getNumGeometries()) return false\n const lineComp = linearGeom.getGeometryN(this._componentIndex)\n if (this._segmentIndex < 0 || this._segmentIndex > lineComp.getNumPoints()) return false\n if (this._segmentIndex === lineComp.getNumPoints() && this._segmentFraction !== 0.0) return false\n if (this._segmentFraction < 0.0 || this._segmentFraction > 1.0) return false\n return true\n }\n\n normalize () {\n if (this._segmentFraction < 0.0) {\n this._segmentFraction = 0.0\n }\n if (this._segmentFraction > 1.0) {\n this._segmentFraction = 1.0\n }\n if (this._componentIndex < 0) {\n this._componentIndex = 0\n this._segmentIndex = 0\n this._segmentFraction = 0.0\n }\n if (this._segmentIndex < 0) {\n this._segmentIndex = 0\n this._segmentFraction = 0.0\n }\n if (this._segmentFraction === 1.0) {\n this._segmentFraction = 0.0\n this._segmentIndex += 1\n }\n }\n\n toLowest (linearGeom) {\n const lineComp = linearGeom.getGeometryN(this._componentIndex)\n const nseg = lineComp.getNumPoints() - 1\n if (this._segmentIndex < nseg) return this\n return new LinearLocation(this._componentIndex, nseg, 1.0, false)\n }\n\n getCoordinate (linearGeom) {\n const lineComp = linearGeom.getGeometryN(this._componentIndex)\n const p0 = lineComp.getCoordinateN(this._segmentIndex)\n if (this._segmentIndex >= lineComp.getNumPoints() - 1) return p0\n const p1 = lineComp.getCoordinateN(this._segmentIndex + 1)\n return LinearLocation.pointAlongSegmentByFraction(p0, p1, this._segmentFraction)\n }\n\n getSegmentFraction () {\n return this._segmentFraction\n }\n\n getSegment (linearGeom) {\n const lineComp = linearGeom.getGeometryN(this._componentIndex)\n const p0 = lineComp.getCoordinateN(this._segmentIndex)\n if (this._segmentIndex >= lineComp.getNumPoints() - 1) {\n const prev = lineComp.getCoordinateN(lineComp.getNumPoints() - 2)\n return new LineSegment(prev, p0)\n }\n const p1 = lineComp.getCoordinateN(this._segmentIndex + 1)\n return new LineSegment(p0, p1)\n }\n\n clamp (linear) {\n if (this._componentIndex >= linear.getNumGeometries()) {\n this.setToEnd(linear)\n return null\n }\n if (this._segmentIndex >= linear.getNumPoints()) {\n const line = linear.getGeometryN(this._componentIndex)\n this._segmentIndex = line.getNumPoints() - 1\n this._segmentFraction = 1.0\n }\n }\n\n setToEnd (linear) {\n this._componentIndex = linear.getNumGeometries() - 1\n const lastLine = linear.getGeometryN(this._componentIndex)\n this._segmentIndex = lastLine.getNumPoints() - 1\n this._segmentFraction = 1.0\n }\n\n compareTo (o) {\n const other = o\n if (this._componentIndex < other._componentIndex) return -1\n if (this._componentIndex > other._componentIndex) return 1\n if (this._segmentIndex < other._segmentIndex) return -1\n if (this._segmentIndex > other._segmentIndex) return 1\n if (this._segmentFraction < other._segmentFraction) return -1\n if (this._segmentFraction > other._segmentFraction) return 1\n return 0\n }\n\n copy () {\n return new LinearLocation(this._componentIndex, this._segmentIndex, this._segmentFraction)\n }\n\n toString () {\n return 'LinearLoc[' + this._componentIndex + ', ' + this._segmentIndex + ', ' + this._segmentFraction + ']'\n }\n\n isOnSameSegment (loc) {\n if (this._componentIndex !== loc._componentIndex) return false\n if (this._segmentIndex === loc._segmentIndex) return true\n if (loc._segmentIndex - this._segmentIndex === 1 && loc._segmentFraction === 0.0) return true\n if (this._segmentIndex - loc._segmentIndex === 1 && this._segmentFraction === 0.0) return true\n return false\n }\n\n snapToVertex (linearGeom, minDistance) {\n if (this._segmentFraction <= 0.0 || this._segmentFraction >= 1.0) return null\n const segLen = this.getSegmentLength(linearGeom)\n const lenToStart = this._segmentFraction * segLen\n const lenToEnd = segLen - lenToStart\n if (lenToStart <= lenToEnd && lenToStart < minDistance) {\n this._segmentFraction = 0.0\n } else if (lenToEnd <= lenToStart && lenToEnd < minDistance) {\n this._segmentFraction = 1.0\n }\n }\n\n compareLocationValues (componentIndex1, segmentIndex1, segmentFraction1) {\n if (this._componentIndex < componentIndex1) return -1\n if (this._componentIndex > componentIndex1) return 1\n if (this._segmentIndex < segmentIndex1) return -1\n if (this._segmentIndex > segmentIndex1) return 1\n if (this._segmentFraction < segmentFraction1) return -1\n if (this._segmentFraction > segmentFraction1) return 1\n return 0\n }\n\n getSegmentLength (linearGeom) {\n const lineComp = linearGeom.getGeometryN(this._componentIndex)\n let segIndex = this._segmentIndex\n if (this._segmentIndex >= lineComp.getNumPoints() - 1) segIndex = lineComp.getNumPoints() - 2\n const p0 = lineComp.getCoordinateN(segIndex)\n const p1 = lineComp.getCoordinateN(segIndex + 1)\n return p0.distance(p1)\n }\n\n isVertex () {\n return this._segmentFraction <= 0.0 || this._segmentFraction >= 1.0\n }\n\n getClass () {\n return LinearLocation\n }\n\n get interfaces_ () {\n return [Comparable]\n }\n}\nLinearLocation.constructor_ = function () {\n this._componentIndex = 0\n this._segmentIndex = 0\n this._segmentFraction = 0.0\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n const loc = arguments[0]\n this._componentIndex = loc._componentIndex\n this._segmentIndex = loc._segmentIndex\n this._segmentFraction = loc._segmentFraction\n } else if (arguments.length === 2) {\n const segmentIndex = arguments[0]; const segmentFraction = arguments[1]\n LinearLocation.constructor_.call(this, 0, segmentIndex, segmentFraction)\n } else if (arguments.length === 3) {\n const componentIndex = arguments[0]; const segmentIndex = arguments[1]; const segmentFraction = arguments[2]\n this._componentIndex = componentIndex\n this._segmentIndex = segmentIndex\n this._segmentFraction = segmentFraction\n this.normalize()\n } else if (arguments.length === 4) {\n const componentIndex = arguments[0]; const segmentIndex = arguments[1]; const segmentFraction = arguments[2]; const doNormalize = arguments[3]\n this._componentIndex = componentIndex\n this._segmentIndex = segmentIndex\n this._segmentFraction = segmentFraction\n if (doNormalize) this.normalize()\n }\n}\n","import hasInterface from '../../../../hasInterface'\nimport IllegalArgumentException from '../../../../java/lang/IllegalArgumentException'\nimport Lineal from '../geom/Lineal'\nexport default class LinearIterator {\n constructor () {\n LinearIterator.constructor_.apply(this, arguments)\n }\n\n static segmentEndVertexIndex (loc) {\n if (loc.getSegmentFraction() > 0.0) return loc.getSegmentIndex() + 1\n return loc.getSegmentIndex()\n }\n\n getComponentIndex () {\n return this._componentIndex\n }\n\n getLine () {\n return this._currentLine\n }\n\n getVertexIndex () {\n return this._vertexIndex\n }\n\n getSegmentEnd () {\n if (this._vertexIndex < this.getLine().getNumPoints() - 1) return this._currentLine.getCoordinateN(this._vertexIndex + 1)\n return null\n }\n\n next () {\n if (!this.hasNext()) return null\n this._vertexIndex++\n if (this._vertexIndex >= this._currentLine.getNumPoints()) {\n this._componentIndex++\n this.loadCurrentLine()\n this._vertexIndex = 0\n }\n }\n\n loadCurrentLine () {\n if (this._componentIndex >= this._numLines) {\n this._currentLine = null\n return null\n }\n this._currentLine = this._linearGeom.getGeometryN(this._componentIndex)\n }\n\n getSegmentStart () {\n return this._currentLine.getCoordinateN(this._vertexIndex)\n }\n\n isEndOfLine () {\n if (this._componentIndex >= this._numLines) return false\n if (this._vertexIndex < this._currentLine.getNumPoints() - 1) return false\n return true\n }\n\n hasNext () {\n if (this._componentIndex >= this._numLines) return false\n if (this._componentIndex === this._numLines - 1 && this._vertexIndex >= this._currentLine.getNumPoints()) return false\n return true\n }\n\n getClass () {\n return LinearIterator\n }\n\n get interfaces_ () {\n return []\n }\n}\nLinearIterator.constructor_ = function () {\n this._linearGeom = null\n this._numLines = null\n this._currentLine = null\n this._componentIndex = 0\n this._vertexIndex = 0\n if (arguments.length === 1) {\n const linear = arguments[0]\n LinearIterator.constructor_.call(this, linear, 0, 0)\n } else if (arguments.length === 2) {\n const linear = arguments[0]; const start = arguments[1]\n LinearIterator.constructor_.call(this, linear, start.getComponentIndex(), LinearIterator.segmentEndVertexIndex(start))\n } else if (arguments.length === 3) {\n const linearGeom = arguments[0]; const componentIndex = arguments[1]; const vertexIndex = arguments[2]\n if (!hasInterface(linearGeom, Lineal)) throw new IllegalArgumentException('Lineal geometry is required')\n this._linearGeom = linearGeom\n this._numLines = linearGeom.getNumGeometries()\n this._componentIndex = componentIndex\n this._vertexIndex = vertexIndex\n this.loadCurrentLine()\n }\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 constructor () {\n LocationIndexOfPoint.constructor_.apply(this, arguments)\n }\n\n static indexOf (linearGeom, inputPt) {\n const locater = new LocationIndexOfPoint(linearGeom)\n return locater.indexOf(inputPt)\n }\n\n static indexOfAfter (linearGeom, inputPt, minIndex) {\n const locater = new LocationIndexOfPoint(linearGeom)\n return locater.indexOfAfter(inputPt, minIndex)\n }\n\n indexOf (inputPt) {\n return this.indexOfFromStart(inputPt, null)\n }\n\n indexOfFromStart (inputPt, minIndex) {\n let minDistance = Double.MAX_VALUE\n let minComponentIndex = 0\n let minSegmentIndex = 0\n let minFrac = -1.0\n const seg = new LineSegment()\n for (let it = new LinearIterator(this._linearGeom); it.hasNext(); it.next()) {\n if (!it.isEndOfLine()) {\n seg.p0 = it.getSegmentStart()\n seg.p1 = it.getSegmentEnd()\n const segDistance = seg.distance(inputPt)\n const segFrac = seg.segmentFraction(inputPt)\n const candidateComponentIndex = it.getComponentIndex()\n const candidateSegmentIndex = it.getVertexIndex()\n if (segDistance < minDistance) {\n if (minIndex === null || minIndex.compareLocationValues(candidateComponentIndex, candidateSegmentIndex, segFrac) < 0) {\n minComponentIndex = candidateComponentIndex\n minSegmentIndex = candidateSegmentIndex\n minFrac = segFrac\n minDistance = segDistance\n }\n }\n }\n }\n if (minDistance === Double.MAX_VALUE) {\n return new LinearLocation(minIndex)\n }\n const loc = new LinearLocation(minComponentIndex, minSegmentIndex, minFrac)\n return loc\n }\n\n indexOfAfter (inputPt, minIndex) {\n if (minIndex === null) return this.indexOf(inputPt)\n const endLoc = LinearLocation.getEndLocation(this._linearGeom)\n if (endLoc.compareTo(minIndex) <= 0) return endLoc\n const closestAfter = this.indexOfFromStart(inputPt, minIndex)\n Assert.isTrue(closestAfter.compareTo(minIndex) >= 0, 'computed location is before specified minimum location')\n return closestAfter\n }\n\n getClass () {\n return LocationIndexOfPoint\n }\n\n get interfaces_ () {\n return []\n }\n}\nLocationIndexOfPoint.constructor_ = function () {\n this._linearGeom = null\n const linearGeom = arguments[0]\n this._linearGeom = linearGeom\n}\n","import LocationIndexOfPoint from './LocationIndexOfPoint'\nexport default class LocationIndexOfLine {\n constructor () {\n LocationIndexOfLine.constructor_.apply(this, arguments)\n }\n\n static indicesOf (linearGeom, subLine) {\n const locater = new LocationIndexOfLine(linearGeom)\n return locater.indicesOf(subLine)\n }\n\n indicesOf (subLine) {\n const startPt = subLine.getGeometryN(0).getCoordinateN(0)\n const lastLine = subLine.getGeometryN(subLine.getNumGeometries() - 1)\n const endPt = lastLine.getCoordinateN(lastLine.getNumPoints() - 1)\n const locPt = new LocationIndexOfPoint(this._linearGeom)\n const subLineLoc = new Array(2).fill(null)\n subLineLoc[0] = locPt.indexOf(startPt)\n if (subLine.getLength() === 0.0) {\n subLineLoc[1] = subLineLoc[0].copy()\n } else {\n subLineLoc[1] = locPt.indexOfAfter(endPt, subLineLoc[0])\n }\n return subLineLoc\n }\n\n getClass () {\n return LocationIndexOfLine\n }\n\n get interfaces_ () {\n return []\n }\n}\nLocationIndexOfLine.constructor_ = function () {\n this._linearGeom = null\n const linearGeom = arguments[0]\n this._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 constructor () {\n LinearGeometryBuilder.constructor_.apply(this, arguments)\n }\n\n getGeometry () {\n this.endLine()\n return this._geomFact.buildGeometry(this._lines)\n }\n\n getLastCoordinate () {\n return this._lastPt\n }\n\n endLine () {\n if (this._coordList === null) {\n return null\n }\n if (this._ignoreInvalidLines && this._coordList.size() < 2) {\n this._coordList = null\n return null\n }\n const rawPts = this._coordList.toCoordinateArray()\n let pts = rawPts\n if (this._fixInvalidLines) pts = this.validCoordinateSequence(rawPts)\n this._coordList = null\n let line = null\n try {\n line = this._geomFact.createLineString(pts)\n } catch (ex) {\n if (ex instanceof IllegalArgumentException) {\n if (!this._ignoreInvalidLines) throw ex\n } else throw ex\n } finally {}\n if (line !== null) this._lines.add(line)\n }\n\n setFixInvalidLines (fixInvalidLines) {\n this._fixInvalidLines = fixInvalidLines\n }\n\n add () {\n if (arguments.length === 1) {\n const pt = arguments[0]\n this.add(pt, true)\n } else if (arguments.length === 2) {\n const pt = arguments[0]; const allowRepeatedPoints = arguments[1]\n if (this._coordList === null) this._coordList = new CoordinateList()\n this._coordList.add(pt, allowRepeatedPoints)\n this._lastPt = pt\n }\n }\n\n setIgnoreInvalidLines (ignoreInvalidLines) {\n this._ignoreInvalidLines = ignoreInvalidLines\n }\n\n validCoordinateSequence (pts) {\n if (pts.length >= 2) return pts\n const validPts = [pts[0], pts[0]]\n return validPts\n }\n\n getClass () {\n return LinearGeometryBuilder\n }\n\n get interfaces_ () {\n return []\n }\n}\nLinearGeometryBuilder.constructor_ = function () {\n this._geomFact = null\n this._lines = new ArrayList()\n this._coordList = null\n this._ignoreInvalidLines = false\n this._fixInvalidLines = false\n this._lastPt = null\n const geomFact = arguments[0]\n this._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 constructor () {\n ExtractLineByLocation.constructor_.apply(this, arguments)\n }\n\n static extract (line, start, end) {\n const ls = new ExtractLineByLocation(line)\n return ls.extract(start, end)\n }\n\n computeLinear (start, end) {\n const builder = new LinearGeometryBuilder(this._line.getFactory())\n builder.setFixInvalidLines(true)\n if (!start.isVertex()) builder.add(start.getCoordinate(this._line))\n for (let it = new LinearIterator(this._line, start); it.hasNext(); it.next()) {\n if (end.compareLocationValues(it.getComponentIndex(), it.getVertexIndex(), 0.0) < 0) break\n const pt = it.getSegmentStart()\n builder.add(pt)\n if (it.isEndOfLine()) builder.endLine()\n }\n if (!end.isVertex()) builder.add(end.getCoordinate(this._line))\n return builder.getGeometry()\n }\n\n computeLine (start, end) {\n const coordinates = this._line.getCoordinates()\n const newCoordinates = new CoordinateList()\n let startSegmentIndex = start.getSegmentIndex()\n if (start.getSegmentFraction() > 0.0) startSegmentIndex += 1\n let lastSegmentIndex = end.getSegmentIndex()\n if (end.getSegmentFraction() === 1.0) lastSegmentIndex += 1\n if (lastSegmentIndex >= coordinates.length) lastSegmentIndex = coordinates.length - 1\n if (!start.isVertex()) newCoordinates.add(start.getCoordinate(this._line))\n for (let i = startSegmentIndex; i <= lastSegmentIndex; i++) {\n newCoordinates.add(coordinates[i])\n }\n if (!end.isVertex()) newCoordinates.add(end.getCoordinate(this._line))\n if (newCoordinates.size() <= 0) newCoordinates.add(start.getCoordinate(this._line))\n let newCoordinateArray = newCoordinates.toCoordinateArray()\n if (newCoordinateArray.length <= 1) {\n newCoordinateArray = [newCoordinateArray[0], newCoordinateArray[0]]\n }\n return this._line.getFactory().createLineString(newCoordinateArray)\n }\n\n extract (start, end) {\n if (end.compareTo(start) < 0) {\n return this.reverse(this.computeLinear(end, start))\n }\n return this.computeLinear(start, end)\n }\n\n reverse (linear) {\n if (linear instanceof LineString) return linear.reverse()\n if (linear instanceof MultiLineString) return linear.reverse()\n Assert.shouldNeverReachHere('non-linear geometry encountered')\n return null\n }\n\n getClass () {\n return ExtractLineByLocation\n }\n\n get interfaces_ () {\n return []\n }\n}\nExtractLineByLocation.constructor_ = function () {\n this._line = null\n const line = arguments[0]\n this._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 constructor () {\n LocationIndexedLine.constructor_.apply(this, arguments)\n }\n\n clampIndex (index) {\n const loc = index.copy()\n loc.clamp(this._linearGeom)\n return loc\n }\n\n project (pt) {\n return LocationIndexOfPoint.indexOf(this._linearGeom, pt)\n }\n\n checkGeometryType () {\n if (!(this._linearGeom instanceof LineString || this._linearGeom instanceof MultiLineString)) throw new IllegalArgumentException('Input geometry must be linear')\n }\n\n extractPoint () {\n if (arguments.length === 1) {\n const index = arguments[0]\n return index.getCoordinate(this._linearGeom)\n } else if (arguments.length === 2) {\n const index = arguments[0]; const offsetDistance = arguments[1]\n const indexLow = index.toLowest(this._linearGeom)\n return indexLow.getSegment(this._linearGeom).pointAlongOffset(indexLow.getSegmentFraction(), offsetDistance)\n }\n }\n\n isValidIndex (index) {\n return index.isValid(this._linearGeom)\n }\n\n getEndIndex () {\n return LinearLocation.getEndLocation(this._linearGeom)\n }\n\n getStartIndex () {\n return new LinearLocation()\n }\n\n indexOfAfter (pt, minIndex) {\n return LocationIndexOfPoint.indexOfAfter(this._linearGeom, pt, minIndex)\n }\n\n extractLine (startIndex, endIndex) {\n return ExtractLineByLocation.extract(this._linearGeom, startIndex, endIndex)\n }\n\n indexOf (pt) {\n return LocationIndexOfPoint.indexOf(this._linearGeom, pt)\n }\n\n indicesOf (subLine) {\n return LocationIndexOfLine.indicesOf(this._linearGeom, subLine)\n }\n\n getClass () {\n return LocationIndexedLine\n }\n\n get interfaces_ () {\n return []\n }\n}\nLocationIndexedLine.constructor_ = function () {\n this._linearGeom = null\n const linearGeom = arguments[0]\n this._linearGeom = linearGeom\n this.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 constructor () {\n LengthIndexOfPoint.constructor_.apply(this, arguments)\n }\n\n static indexOf (linearGeom, inputPt) {\n const locater = new LengthIndexOfPoint(linearGeom)\n return locater.indexOf(inputPt)\n }\n\n static indexOfAfter (linearGeom, inputPt, minIndex) {\n const locater = new LengthIndexOfPoint(linearGeom)\n return locater.indexOfAfter(inputPt, minIndex)\n }\n\n indexOf (inputPt) {\n return this.indexOfFromStart(inputPt, -1.0)\n }\n\n indexOfFromStart (inputPt, minIndex) {\n let minDistance = Double.MAX_VALUE\n let ptMeasure = minIndex\n let segmentStartMeasure = 0.0\n const seg = new LineSegment()\n const it = new LinearIterator(this._linearGeom)\n while (it.hasNext()) {\n if (!it.isEndOfLine()) {\n seg.p0 = it.getSegmentStart()\n seg.p1 = it.getSegmentEnd()\n const segDistance = seg.distance(inputPt)\n const segMeasureToPt = this.segmentNearestMeasure(seg, inputPt, segmentStartMeasure)\n if (segDistance < minDistance && segMeasureToPt > minIndex) {\n ptMeasure = segMeasureToPt\n minDistance = segDistance\n }\n segmentStartMeasure += seg.getLength()\n }\n it.next()\n }\n return ptMeasure\n }\n\n indexOfAfter (inputPt, minIndex) {\n if (minIndex < 0.0) return this.indexOf(inputPt)\n const endIndex = this._linearGeom.getLength()\n if (endIndex < minIndex) return endIndex\n const closestAfter = this.indexOfFromStart(inputPt, minIndex)\n Assert.isTrue(closestAfter >= minIndex, 'computed index is before specified minimum index')\n return closestAfter\n }\n\n segmentNearestMeasure (seg, inputPt, segmentStartMeasure) {\n const projFactor = seg.projectionFactor(inputPt)\n if (projFactor <= 0.0) return segmentStartMeasure\n if (projFactor <= 1.0) return segmentStartMeasure + projFactor * seg.getLength()\n return segmentStartMeasure + seg.getLength()\n }\n\n getClass () {\n return LengthIndexOfPoint\n }\n\n get interfaces_ () {\n return []\n }\n}\nLengthIndexOfPoint.constructor_ = function () {\n this._linearGeom = null\n const linearGeom = arguments[0]\n this._linearGeom = linearGeom\n}\n","import LinearIterator from './LinearIterator'\nimport LinearLocation from './LinearLocation'\nexport default class LengthLocationMap {\n constructor () {\n LengthLocationMap.constructor_.apply(this, arguments)\n }\n\n static getLength (linearGeom, loc) {\n const locater = new LengthLocationMap(linearGeom)\n return locater.getLength(loc)\n }\n\n static getLocation () {\n if (arguments.length === 2) {\n const linearGeom = arguments[0]; const length = arguments[1]\n const locater = new LengthLocationMap(linearGeom)\n return locater.getLocation(length)\n } else if (arguments.length === 3) {\n const linearGeom = arguments[0]; const length = arguments[1]; const resolveLower = arguments[2]\n const locater = new LengthLocationMap(linearGeom)\n return locater.getLocation(length, resolveLower)\n }\n }\n\n getLength (loc) {\n let totalLength = 0.0\n const it = new LinearIterator(this._linearGeom)\n while (it.hasNext()) {\n if (!it.isEndOfLine()) {\n const p0 = it.getSegmentStart()\n const p1 = it.getSegmentEnd()\n const segLen = p1.distance(p0)\n if (loc.getComponentIndex() === it.getComponentIndex() && loc.getSegmentIndex() === it.getVertexIndex()) {\n return totalLength + segLen * loc.getSegmentFraction()\n }\n totalLength += segLen\n }\n it.next()\n }\n return totalLength\n }\n\n resolveHigher (loc) {\n if (!loc.isEndpoint(this._linearGeom)) return loc\n let compIndex = loc.getComponentIndex()\n if (compIndex >= this._linearGeom.getNumGeometries() - 1) return loc\n do {\n compIndex++\n } while (compIndex < this._linearGeom.getNumGeometries() - 1 && this._linearGeom.getGeometryN(compIndex).getLength() === 0)\n return new LinearLocation(compIndex, 0, 0.0)\n }\n\n getLocation () {\n if (arguments.length === 1) {\n const length = arguments[0]\n return this.getLocation(length, true)\n } else if (arguments.length === 2) {\n const length = arguments[0]; const resolveLower = arguments[1]\n let forwardLength = length\n if (length < 0.0) {\n const lineLen = this._linearGeom.getLength()\n forwardLength = lineLen + length\n }\n const loc = this.getLocationForward(forwardLength)\n if (resolveLower) {\n return loc\n }\n return this.resolveHigher(loc)\n }\n }\n\n getLocationForward (length) {\n if (length <= 0.0) return new LinearLocation()\n let totalLength = 0.0\n const it = new LinearIterator(this._linearGeom)\n while (it.hasNext()) {\n if (it.isEndOfLine()) {\n if (totalLength === length) {\n const compIndex = it.getComponentIndex()\n const segIndex = it.getVertexIndex()\n return new LinearLocation(compIndex, segIndex, 0.0)\n }\n } else {\n const p0 = it.getSegmentStart()\n const p1 = it.getSegmentEnd()\n const segLen = p1.distance(p0)\n if (totalLength + segLen > length) {\n const frac = (length - totalLength) / segLen\n const compIndex = it.getComponentIndex()\n const segIndex = it.getVertexIndex()\n return new LinearLocation(compIndex, segIndex, frac)\n }\n totalLength += segLen\n }\n it.next()\n }\n return LinearLocation.getEndLocation(this._linearGeom)\n }\n\n getClass () {\n return LengthLocationMap\n }\n\n get interfaces_ () {\n return []\n }\n}\nLengthLocationMap.constructor_ = function () {\n this._linearGeom = null\n const linearGeom = arguments[0]\n this._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 constructor () {\n LengthIndexedLine.constructor_.apply(this, arguments)\n }\n\n clampIndex (index) {\n const posIndex = this.positiveIndex(index)\n const startIndex = this.getStartIndex()\n if (posIndex < startIndex) return startIndex\n const endIndex = this.getEndIndex()\n if (posIndex > endIndex) return endIndex\n return posIndex\n }\n\n locationOf () {\n if (arguments.length === 1) {\n const index = arguments[0]\n return LengthLocationMap.getLocation(this._linearGeom, index)\n } else if (arguments.length === 2) {\n const index = arguments[0]; const resolveLower = arguments[1]\n return LengthLocationMap.getLocation(this._linearGeom, index, resolveLower)\n }\n }\n\n project (pt) {\n return LengthIndexOfPoint.indexOf(this._linearGeom, pt)\n }\n\n positiveIndex (index) {\n if (index >= 0.0) return index\n return this._linearGeom.getLength() + index\n }\n\n extractPoint () {\n if (arguments.length === 1) {\n const index = arguments[0]\n const loc = LengthLocationMap.getLocation(this._linearGeom, index)\n return loc.getCoordinate(this._linearGeom)\n } else if (arguments.length === 2) {\n const index = arguments[0]; const offsetDistance = arguments[1]\n const loc = LengthLocationMap.getLocation(this._linearGeom, index)\n const locLow = loc.toLowest(this._linearGeom)\n return locLow.getSegment(this._linearGeom).pointAlongOffset(locLow.getSegmentFraction(), offsetDistance)\n }\n }\n\n isValidIndex (index) {\n return index >= this.getStartIndex() && index <= this.getEndIndex()\n }\n\n getEndIndex () {\n return this._linearGeom.getLength()\n }\n\n getStartIndex () {\n return 0.0\n }\n\n indexOfAfter (pt, minIndex) {\n return LengthIndexOfPoint.indexOfAfter(this._linearGeom, pt, minIndex)\n }\n\n extractLine (startIndex, endIndex) {\n const lil = new LocationIndexedLine(this._linearGeom)\n const startIndex2 = this.clampIndex(startIndex)\n const endIndex2 = this.clampIndex(endIndex)\n const resolveStartLower = startIndex2 === endIndex2\n const startLoc = this.locationOf(startIndex2, resolveStartLower)\n const endLoc = this.locationOf(endIndex2)\n return ExtractLineByLocation.extract(this._linearGeom, startLoc, endLoc)\n }\n\n indexOf (pt) {\n return LengthIndexOfPoint.indexOf(this._linearGeom, pt)\n }\n\n indicesOf (subLine) {\n const locIndex = LocationIndexOfLine.indicesOf(this._linearGeom, subLine)\n const index = [LengthLocationMap.getLength(this._linearGeom, locIndex[0]), LengthLocationMap.getLength(this._linearGeom, locIndex[1])]\n return index\n }\n\n getClass () {\n return LengthIndexedLine\n }\n\n get interfaces_ () {\n return []\n }\n}\nLengthIndexedLine.constructor_ = function () {\n this._linearGeom = null\n const linearGeom = arguments[0]\n this._linearGeom = linearGeom\n}\n","import ArrayList from '../../../../java/util/ArrayList'\nexport default class CollectionUtil {\n constructor () {\n CollectionUtil.constructor_.apply(this, arguments)\n }\n\n static transform (coll, func) {\n const result = new ArrayList()\n for (let i = coll.iterator(); i.hasNext();) {\n result.add(func.execute(i.next()))\n }\n return result\n }\n\n static select (collection, func) {\n const result = new ArrayList()\n for (let i = collection.iterator(); i.hasNext();) {\n const item = i.next()\n if (Boolean.TRUE.equals(func.execute(item))) {\n result.add(item)\n }\n }\n return result\n }\n\n static apply (coll, func) {\n for (let i = coll.iterator(); i.hasNext();) {\n func.execute(i.next())\n }\n }\n\n getClass () {\n return CollectionUtil\n }\n\n get interfaces_ () {\n return []\n }\n}\nfunction Function () {}\nCollectionUtil.Function = Function\nCollectionUtil.constructor_ = function () {}\n","import CoordinateFilter from '../geom/CoordinateFilter'\nexport default class CoordinateArrayFilter {\n constructor () {\n CoordinateArrayFilter.constructor_.apply(this, arguments)\n }\n\n filter (coord) {\n this.pts[this.n++] = coord\n }\n\n getCoordinates () {\n return this.pts\n }\n\n getClass () {\n return CoordinateArrayFilter\n }\n\n get interfaces_ () {\n return [CoordinateFilter]\n }\n}\nCoordinateArrayFilter.constructor_ = function () {\n this.pts = null\n this.n = 0\n const size = arguments[0]\n this.pts = new Array(size).fill(null)\n}\n","import CoordinateFilter from '../geom/CoordinateFilter'\nexport default class CoordinateCountFilter {\n constructor () {\n CoordinateCountFilter.constructor_.apply(this, arguments)\n }\n\n filter (coord) {\n this._n++\n }\n\n getCount () {\n return this._n\n }\n\n getClass () {\n return CoordinateCountFilter\n }\n\n get interfaces_ () {\n return [CoordinateFilter]\n }\n}\nCoordinateCountFilter.constructor_ = function () {\n this._n = 0\n}\n","import HashMap from '../../../../java/util/HashMap'\nexport default class ObjectCounter {\n constructor () {\n ObjectCounter.constructor_.apply(this, arguments)\n }\n\n count (o) {\n const counter = this._counts.get(o)\n if (counter === null) return 0; else return counter.count()\n }\n\n add (o) {\n const counter = this._counts.get(o)\n if (counter === null) this._counts.put(o, new Counter(1)); else counter.increment()\n }\n\n getClass () {\n return ObjectCounter\n }\n\n get interfaces_ () {\n return []\n }\n}\nclass Counter {\n constructor () {\n Counter.constructor_.apply(this, arguments)\n }\n\n count () {\n return this.count\n }\n\n increment () {\n this.count++\n }\n\n getClass () {\n return Counter\n }\n\n get interfaces_ () {\n return []\n }\n}\nCounter.constructor_ = function () {\n this.count = 0\n if (arguments.length === 0) {} else if (arguments.length === 1) {\n const count = arguments[0]\n this.count = count\n }\n}\nObjectCounter.Counter = Counter\nObjectCounter.constructor_ = function () {\n this._counts = new HashMap()\n}\n","import SnapIfNeededOverlayOp from '../overlay/snap/SnapIfNeededOverlayOp'\nimport OverlayOp from '../overlay/OverlayOp'\nexport default class UnionOp {\n get interfaces_ () {\n return []\n }\n\n getClass () {\n return UnionOp\n }\n\n static union (g, other) {\n if (g.isEmpty() || other.isEmpty()) {\n if (g.isEmpty() && other.isEmpty()) return OverlayOp.createEmptyResult(OverlayOp.UNION, g, other, g.getFactory())\n if (g.isEmpty()) return other.copy()\n if (other.isEmpty()) return g.copy()\n }\n g.checkNotGeometryCollection(g)\n g.checkNotGeometryCollection(other)\n return SnapIfNeededOverlayOp.overlayOp(g, other, OverlayOp.UNION)\n }\n}\n","import WKTWriter from './io/WKTWriter'\nimport IsValidOp from './operation/valid/IsValidOp'\nimport InteriorPointArea from './algorithm/InteriorPointArea'\nimport UnaryUnionOp from './operation/union/UnaryUnionOp'\nimport UnionOp from './operation/union/UnionOp'\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 return RelateOp.equalsTopo(this, g)\n}\nGeometry.prototype.equals = function (g) {\n if (g instanceof Geometry) {\n if (g === null) return false\n return RelateOp.equalsTopo(this, g)\n } else if (g instanceof Object) {\n if (!(g instanceof Geometry)) return false\n const g = o\n return this.equalsExact(g)\n }\n}\nGeometry.prototype.union = function () {\n if (arguments.length === 0) {\n return UnaryUnionOp.union(this)\n } else if (arguments.length === 1) {\n const other = arguments[0]\n return UnionOp.union(this, other)\n }\n}\nGeometry.prototype.isValid = function () {\n return IsValidOp.isValid(this)\n}\nGeometry.prototype.intersection = function (other) {\n return OverlayOp.intersection(this, other)\n}\nGeometry.prototype.covers = function (g) {\n return RelateOp.covers(this, g)\n}\nGeometry.prototype.coveredBy = function (g) {\n return RelateOp.covers(g, this)\n}\nGeometry.prototype.touches = function (g) {\n return RelateOp.touches(this, g)\n}\nGeometry.prototype.intersects = function (g) {\n return RelateOp.intersects(this, g)\n}\nGeometry.prototype.within = function (g) {\n return RelateOp.contains(g, this)\n}\nGeometry.prototype.overlaps = function (g) {\n return RelateOp.overlaps(this, g)\n}\nGeometry.prototype.disjoint = function (g) {\n return RelateOp.disjoint(this, g)\n}\nGeometry.prototype.crosses = function (g) {\n return RelateOp.crosses(this, g)\n}\nGeometry.prototype.buffer = function () {\n if (arguments.length === 1) {\n const distance = arguments[0]\n return BufferOp.bufferOp(this, distance)\n } else if (arguments.length === 2) {\n const distance = arguments[0]; const quadrantSegments = arguments[1]\n return BufferOp.bufferOp(this, distance, quadrantSegments)\n } else if (arguments.length === 3) {\n const distance = arguments[0]; const quadrantSegments = arguments[1]; const endCapStyle = arguments[2]\n return BufferOp.bufferOp(this, distance, quadrantSegments, endCapStyle)\n }\n}\nGeometry.prototype.convexHull = function () {\n return new ConvexHull(this).getConvexHull()\n}\nGeometry.prototype.relate = function (...args) {\n if (arguments.length === 1) {\n const geometry = arguments[0]\n return RelateOp.relate(this, geometry)\n } else if (arguments.length === 2) {\n const geometry = arguments[0]; const intersectionPattern = arguments[1]\n return RelateOp.relate(this, geometry).matches(intersectionPattern)\n }\n}\nGeometry.prototype.getCentroid = function () {\n if (this.isEmpty()) return this._factory.createPoint()\n const centPt = Centroid.getCentroid(this)\n return this.createPointFromInternalCoord(centPt, this)\n}\nGeometry.prototype.getInteriorPoint = function () {\n if (this.isEmpty()) return this._factory.createPoint()\n let intPt = null\n const dim = this.getDimension()\n if (dim === 0) {\n intPt = new InteriorPointPoint(this)\n } else if (dim === 1) {\n intPt = new InteriorPointLine(this)\n } else {\n intPt = new InteriorPointArea(this)\n }\n const interiorPt = intPt.getInteriorPoint()\n return this.createPointFromInternalCoord(interiorPt, this)\n}\nGeometry.prototype.symDifference = function (other) {\n return OverlayOp.symDifference(this, other)\n}\nGeometry.prototype.createPointFromInternalCoord = function (coord, exemplar) {\n exemplar.getPrecisionModel().makePrecise(coord)\n return exemplar.getFactory().createPoint(coord)\n}\nGeometry.prototype.toText = function () {\n const writer = new WKTWriter()\n return writer.write(this)\n}\nGeometry.prototype.toString = function () {\n this.toText()\n}\nGeometry.prototype.contains = function (g) {\n return RelateOp.contains(this, g)\n}\nGeometry.prototype.difference = function (other) {\n return OverlayOp.difference(this, other)\n}\nGeometry.prototype.isSimple = function () {\n const op = new IsSimpleOp(this)\n return op.isSimple()\n}\nGeometry.prototype.isWithinDistance = function (geom, distance) {\n const envDist = this.getEnvelopeInternal().distance(geom.getEnvelopeInternal())\n if (envDist > distance) return false\n return DistanceOp.isWithinDistance(this, geom, distance)\n}\nGeometry.prototype.distance = function (g) {\n return DistanceOp.distance(this, g)\n}\n","import * 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'\nimport * as util from './org/locationtech/jts/util'\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 util\n}\n"]}