@cpp.js/package-geos 1.0.0-beta.21 → 1.0.0-beta.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/cppjs-package-geos.podspec +1 -1
- package/dist/prebuilt/Android-x86_64/bin/geos-config +79 -0
- package/dist/prebuilt/Android-x86_64/bin/geosop +0 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/Angle.h +247 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/Area.h +82 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/BoundaryNodeRule.h +146 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/CGAlgorithmsDD.h +193 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/CentralEndpointIntersector.h +161 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/Centroid.h +157 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/CircularArcs.h +37 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/ConvexHull.h +211 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/Distance.h +116 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/HCoordinate.h +100 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/InteriorPointArea.h +110 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/InteriorPointLine.h +79 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/InteriorPointPoint.h +73 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/Interpolate.h +182 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/Intersection.h +84 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/Length.h +50 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/LineIntersector.h +667 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/MinimumAreaRectangle.h +159 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/MinimumBoundingCircle.h +137 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/MinimumDiameter.h +185 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/NotRepresentableException.h +43 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/Orientation.h +122 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/PointInRing.h +40 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/PointLocation.h +107 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/PointLocator.h +108 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/PolygonNodeTopology.h +149 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/RayCrossingCounter.h +173 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/Rectangle.h +96 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/RobustDeterminant.h +66 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/SimplePointInRing.h +44 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/construct/IndexedDistanceToPoint.h +88 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/construct/IndexedPointInPolygonsLocator.h +79 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/construct/LargestEmptyCircle.h +240 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/construct/MaximumInscribedCircle.h +221 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/distance/DiscreteFrechetDistance.h +175 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/distance/DiscreteHausdorffDistance.h +252 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/distance/DistanceToPoint.h +72 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/distance/PointPairDistance.h +151 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/hull/ConcaveHull.h +309 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/hull/ConcaveHullOfPolygons.h +377 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/hull/HullTri.h +156 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/hull/HullTriangulation.h +139 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/locate/IndexedPointInAreaLocator.h +139 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/locate/PointOnGeometryLocator.h +56 -0
- package/dist/prebuilt/Android-x86_64/include/geos/algorithm/locate/SimplePointInAreaLocator.h +117 -0
- package/dist/prebuilt/Android-x86_64/include/geos/constants.h +49 -0
- package/dist/prebuilt/Android-x86_64/include/geos/coverage/Corner.h +137 -0
- package/dist/prebuilt/Android-x86_64/include/geos/coverage/CoverageBoundarySegmentFinder.h +83 -0
- package/dist/prebuilt/Android-x86_64/include/geos/coverage/CoverageEdge.h +171 -0
- package/dist/prebuilt/Android-x86_64/include/geos/coverage/CoverageGapFinder.h +106 -0
- package/dist/prebuilt/Android-x86_64/include/geos/coverage/CoveragePolygon.h +57 -0
- package/dist/prebuilt/Android-x86_64/include/geos/coverage/CoveragePolygonValidator.h +381 -0
- package/dist/prebuilt/Android-x86_64/include/geos/coverage/CoverageRing.h +205 -0
- package/dist/prebuilt/Android-x86_64/include/geos/coverage/CoverageRingEdges.h +170 -0
- package/dist/prebuilt/Android-x86_64/include/geos/coverage/CoverageSimplifier.h +166 -0
- package/dist/prebuilt/Android-x86_64/include/geos/coverage/CoverageUnion.h +77 -0
- package/dist/prebuilt/Android-x86_64/include/geos/coverage/CoverageValidator.h +159 -0
- package/dist/prebuilt/Android-x86_64/include/geos/coverage/InvalidSegmentDetector.h +133 -0
- package/dist/prebuilt/Android-x86_64/include/geos/coverage/TPVWSimplifier.h +225 -0
- package/dist/prebuilt/Android-x86_64/include/geos/coverage/VertexRingCounter.h +71 -0
- package/dist/prebuilt/Android-x86_64/include/geos/edgegraph/EdgeGraph.h +137 -0
- package/dist/prebuilt/Android-x86_64/include/geos/edgegraph/EdgeGraphBuilder.h +91 -0
- package/dist/prebuilt/Android-x86_64/include/geos/edgegraph/HalfEdge.h +315 -0
- package/dist/prebuilt/Android-x86_64/include/geos/edgegraph/MarkHalfEdge.h +110 -0
- package/dist/prebuilt/Android-x86_64/include/geos/export.h +51 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/CircularArc.h +273 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/CircularString.h +85 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/CompoundCurve.h +121 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/Coordinate.h +627 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/CoordinateFilter.h +134 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/CoordinateList.h +244 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/CoordinateSequence.h +807 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/CoordinateSequenceFilter.h +116 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/CoordinateSequenceIterator.h +126 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/CoordinateSequences.h +76 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/Curve.h +71 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/CurvePolygon.h +58 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/Dimension.h +64 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/Envelope.h +826 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/Geometry.h +1051 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/GeometryCollection.h +256 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/GeometryComponentFilter.h +61 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/GeometryFactory.h +542 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/GeometryFilter.h +74 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/GeometryTypeName.h +110 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/HeuristicOverlay.h +99 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/IntersectionMatrix.h +383 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/LineSegment.h +576 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/LineString.h +151 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/LinearRing.h +128 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/Location.h +64 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/MultiCurve.h +126 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/MultiLineString.h +160 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/MultiPoint.h +150 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/MultiPolygon.h +155 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/MultiSurface.h +94 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/Point.h +221 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/Polygon.h +138 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/Position.h +68 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/PrecisionModel.h +374 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/Quadrant.h +164 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/SimpleCurve.h +142 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/Surface.h +115 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/SurfaceImpl.h +159 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/Triangle.h +230 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/prep/AbstractPreparedPolygonContains.h +144 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/prep/BasicPreparedGeometry.h +214 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/prep/PreparedGeometry.h +260 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/prep/PreparedGeometryFactory.h +93 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/prep/PreparedLineString.h +70 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/prep/PreparedLineStringDistance.h +57 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/prep/PreparedLineStringIntersects.h +97 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/prep/PreparedLineStringNearestPoints.h +54 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/prep/PreparedPoint.h +56 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/prep/PreparedPolygon.h +81 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/prep/PreparedPolygonContains.h +105 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/prep/PreparedPolygonContainsProperly.h +101 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/prep/PreparedPolygonCovers.h +108 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/prep/PreparedPolygonDistance.h +67 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/prep/PreparedPolygonIntersects.h +90 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/prep/PreparedPolygonPredicate.h +141 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/util/ComponentCoordinateExtracter.h +69 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/util/CoordinateOperation.h +70 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/util/Densifier.h +90 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/util/GeometryCombiner.h +151 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/util/GeometryEditor.h +127 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/util/GeometryEditorOperation.h +65 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/util/GeometryExtracter.h +95 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/util/GeometryFixer.h +169 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/util/GeometryLister.h +92 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/util/GeometryMapper.h +115 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/util/GeometryTransformer.h +181 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/util/LinearComponentExtracter.h +65 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/util/NoOpGeometryOperation.h +52 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/util/PointExtracter.h +63 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/util/PolygonExtracter.h +66 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/util/PolygonalExtracter.h +54 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/util/ShortCircuitedGeometryVisitor.h +66 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom/util/SineStarFactory.h +122 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geom.h +146 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/Depth.h +143 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/DirectedEdge.h +236 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/DirectedEdgeStar.h +164 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/Edge.h +285 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/EdgeEnd.h +187 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/EdgeEndStar.h +217 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/EdgeIntersection.h +149 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/EdgeIntersectionList.h +129 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/EdgeList.h +124 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/EdgeNodingValidator.h +113 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/EdgeRing.h +201 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/GeometryGraph.h +251 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/GraphComponent.h +117 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/Label.h +290 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/Node.h +192 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/NodeFactory.h +51 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/NodeMap.h +143 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/PlanarGraph.h +203 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/TopologyLocation.h +238 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/index/EdgeSetIntersector.h +68 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/index/MonotoneChain.h +72 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/index/MonotoneChainEdge.h +85 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/index/MonotoneChainIndexer.h +71 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/index/SegmentIntersector.h +176 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/index/SimpleEdgeSetIntersector.h +64 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/index/SimpleMCSweepLineIntersector.h +108 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/index/SimpleSweepLineIntersector.h +94 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/index/SweepLineEvent.h +136 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/index/SweepLineEventObj.h +38 -0
- package/dist/prebuilt/Android-x86_64/include/geos/geomgraph/index/SweepLineSegment.h +57 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/ItemVisitor.h +38 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/SpatialIndex.h +103 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/VertexSequencePackedRtree.h +153 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/bintree/Bintree.h +129 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/bintree/Interval.h +61 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/bintree/Key.h +71 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/bintree/Node.h +74 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/bintree/NodeBase.h +83 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/bintree/Root.h +77 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/chain/MonotoneChain.h +206 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/chain/MonotoneChainBuilder.h +74 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/chain/MonotoneChainOverlapAction.h +86 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/chain/MonotoneChainSelectAction.h +74 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/intervalrtree/IntervalRTreeBranchNode.h +53 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/intervalrtree/IntervalRTreeLeafNode.h +58 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/intervalrtree/IntervalRTreeNode.h +105 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/intervalrtree/SortedPackedIntervalRTree.h +110 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/kdtree/KdNode.h +64 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/kdtree/KdNodeVisitor.h +45 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/kdtree/KdTree.h +191 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/quadtree/IntervalSize.h +62 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/quadtree/Key.h +87 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/quadtree/Node.h +141 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/quadtree/NodeBase.h +161 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/quadtree/Quadtree.h +200 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/quadtree/Root.h +87 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/strtree/AbstractNode.h +131 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/strtree/AbstractSTRtree.h +324 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/strtree/Boundable.h +49 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/strtree/BoundablePair.h +122 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/strtree/EnvelopeUtil.h +33 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/strtree/GeometryItemDistance.h +44 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/strtree/Interval.h +60 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/strtree/ItemBoundable.h +59 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/strtree/ItemDistance.h +49 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/strtree/SIRtree.h +124 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/strtree/STRtree.h +177 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/strtree/SimpleSTRdistance.h +166 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/strtree/SimpleSTRnode.h +141 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/strtree/SimpleSTRtree.h +189 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/strtree/TemplateSTRNode.h +156 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/strtree/TemplateSTRNodePair.h +74 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/strtree/TemplateSTRtree.h +807 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/strtree/TemplateSTRtreeDistance.h +233 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/sweepline/SweepLineEvent.h +95 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/sweepline/SweepLineIndex.h +87 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/sweepline/SweepLineInterval.h +37 -0
- package/dist/prebuilt/Android-x86_64/include/geos/index/sweepline/SweepLineOverlapAction.h +44 -0
- package/dist/prebuilt/Android-x86_64/include/geos/io/ByteOrderDataInStream.h +125 -0
- package/dist/prebuilt/Android-x86_64/include/geos/io/ByteOrderValues.h +61 -0
- package/dist/prebuilt/Android-x86_64/include/geos/io/CLocalizer.h +53 -0
- package/dist/prebuilt/Android-x86_64/include/geos/io/CheckOrdinatesFilter.h +68 -0
- package/dist/prebuilt/Android-x86_64/include/geos/io/GeoJSON.h +154 -0
- package/dist/prebuilt/Android-x86_64/include/geos/io/GeoJSONReader.h +125 -0
- package/dist/prebuilt/Android-x86_64/include/geos/io/GeoJSONWriter.h +139 -0
- package/dist/prebuilt/Android-x86_64/include/geos/io/OrdinateSet.h +119 -0
- package/dist/prebuilt/Android-x86_64/include/geos/io/ParseException.h +53 -0
- package/dist/prebuilt/Android-x86_64/include/geos/io/StringTokenizer.h +66 -0
- package/dist/prebuilt/Android-x86_64/include/geos/io/WKBConstants.h +57 -0
- package/dist/prebuilt/Android-x86_64/include/geos/io/WKBReader.h +204 -0
- package/dist/prebuilt/Android-x86_64/include/geos/io/WKBStreamReader.h +49 -0
- package/dist/prebuilt/Android-x86_64/include/geos/io/WKBWriter.h +260 -0
- package/dist/prebuilt/Android-x86_64/include/geos/io/WKTFileReader.h +46 -0
- package/dist/prebuilt/Android-x86_64/include/geos/io/WKTReader.h +165 -0
- package/dist/prebuilt/Android-x86_64/include/geos/io/WKTStreamReader.h +48 -0
- package/dist/prebuilt/Android-x86_64/include/geos/io/WKTWriter.h +342 -0
- package/dist/prebuilt/Android-x86_64/include/geos/io/Writer.h +51 -0
- package/dist/prebuilt/Android-x86_64/include/geos/linearref/ExtractLineByLocation.h +88 -0
- package/dist/prebuilt/Android-x86_64/include/geos/linearref/LengthIndexOfPoint.h +87 -0
- package/dist/prebuilt/Android-x86_64/include/geos/linearref/LengthIndexedLine.h +211 -0
- package/dist/prebuilt/Android-x86_64/include/geos/linearref/LengthLocationMap.h +134 -0
- package/dist/prebuilt/Android-x86_64/include/geos/linearref/LinearGeometryBuilder.h +106 -0
- package/dist/prebuilt/Android-x86_64/include/geos/linearref/LinearIterator.h +156 -0
- package/dist/prebuilt/Android-x86_64/include/geos/linearref/LinearLocation.h +248 -0
- package/dist/prebuilt/Android-x86_64/include/geos/linearref/LocationIndexOfLine.h +72 -0
- package/dist/prebuilt/Android-x86_64/include/geos/linearref/LocationIndexOfPoint.h +77 -0
- package/dist/prebuilt/Android-x86_64/include/geos/linearref/LocationIndexedLine.h +276 -0
- package/dist/prebuilt/Android-x86_64/include/geos/math/DD.h +200 -0
- package/dist/prebuilt/Android-x86_64/include/geos/namespaces.h +317 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/BasicSegmentString.h +89 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/BoundaryChainNoder.h +171 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/FastNodingValidator.h +129 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/FastSegmentSetIntersectionFinder.h +80 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/GeometryNoder.h +69 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/IntersectionAdder.h +202 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/IntersectionFinderAdder.h +110 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/IteratedNoder.h +120 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/MCIndexNoder.h +141 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/MCIndexSegmentSetMutualIntersector.h +146 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/NodableSegmentString.h +56 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/NodedSegmentString.h +218 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/Noder.h +79 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/NodingIntersectionFinder.h +262 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/NodingValidator.h +109 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/Octant.h +73 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/OrientedCoordinateArray.h +113 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/ScaledNoder.h +132 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/SegmentExtractingNoder.h +88 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/SegmentIntersectionDetector.h +177 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/SegmentIntersector.h +89 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/SegmentNode.h +161 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/SegmentNodeList.h +253 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/SegmentPointComparator.h +120 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/SegmentSetMutualIntersector.h +80 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/SegmentString.h +199 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/SegmentStringUtil.h +67 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/SimpleNoder.h +70 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/SinglePassNoder.h +96 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/ValidatingNoder.h +74 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/snap/SnappingIntersectionAdder.h +109 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/snap/SnappingNoder.h +121 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/snap/SnappingPointIndex.h +62 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/snapround/HotPixel.h +171 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/snapround/HotPixelIndex.h +116 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/snapround/MCIndexPointSnapper.h +98 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/snapround/MCIndexSnapRounder.h +157 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/snapround/SnapRoundingIntersectionAdder.h +126 -0
- package/dist/prebuilt/Android-x86_64/include/geos/noding/snapround/SnapRoundingNoder.h +167 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/BoundaryOp.h +120 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/GeometryGraphOperation.h +92 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/buffer/BufferBuilder.h +270 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/buffer/BufferCurveSetBuilder.h +296 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/buffer/BufferInputLineSimplifier.h +180 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/buffer/BufferOp.h +307 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/buffer/BufferParameters.h +319 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/buffer/BufferSubgraph.h +202 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/buffer/OffsetCurve.h +328 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/buffer/OffsetCurveBuilder.h +257 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/buffer/OffsetCurveSection.h +111 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/buffer/OffsetSegmentGenerator.h +390 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/buffer/OffsetSegmentString.h +215 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/buffer/RightmostEdgeFinder.h +105 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/buffer/SegmentMCIndex.h +56 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/buffer/SubgraphDepthLocater.h +120 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/cluster/AbstractClusterFinder.h +136 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/cluster/Clusters.h +72 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/cluster/DBSCANClusterFinder.h +59 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/cluster/DisjointOperation.h +73 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/cluster/EnvelopeDistanceClusterFinder.h +53 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/cluster/EnvelopeIntersectsClusterFinder.h +44 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/cluster/GeometryDistanceClusterFinder.h +59 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/cluster/GeometryFlattener.h +46 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/cluster/GeometryIntersectsClusterFinder.h +53 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/cluster/UnionFind.h +137 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/distance/ConnectedElementLocationFilter.h +76 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/distance/ConnectedElementPointFilter.h +73 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/distance/DistanceOp.h +228 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/distance/FacetSequence.h +84 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/distance/FacetSequenceTreeBuilder.h +69 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/distance/GeometryLocation.h +126 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/distance/IndexedFacetDistance.h +124 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/intersection/Rectangle.h +236 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/intersection/RectangleIntersection.h +174 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/intersection/RectangleIntersectionBuilder.h +159 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/linemerge/EdgeString.h +88 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/linemerge/LineMergeDirectedEdge.h +78 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/linemerge/LineMergeEdge.h +62 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/linemerge/LineMergeGraph.h +91 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/linemerge/LineMerger.h +149 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/linemerge/LineSequencer.h +295 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlay/MaximalEdgeRing.h +105 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlay/MinimalEdgeRing.h +80 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlay/OverlayNodeFactory.h +56 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlay/PolygonBuilder.h +210 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlay/snap/GeometrySnapper.h +154 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlay/snap/LineStringSnapper.h +165 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlay/snap/SnapOverlayOp.h +134 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlay/validate/FuzzyPointLocator.h +97 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlay/validate/OffsetPointGenerator.h +87 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlay/validate/OverlayResultValidator.h +131 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/CoverageUnion.h +100 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/Edge.h +345 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/EdgeKey.h +120 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/EdgeMerger.h +81 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/EdgeNodingBuilder.h +255 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/EdgeSourceInfo.h +65 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/ElevationModel.h +170 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/IndexedPointOnLineLocator.h +64 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/InputGeometry.h +103 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/IntersectionPointBuilder.h +113 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/LineBuilder.h +189 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/LineLimiter.h +91 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/MaximalEdgeRing.h +134 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/OverlayEdge.h +279 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/OverlayEdgeRing.h +153 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/OverlayGraph.h +143 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/OverlayLabel.h +404 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/OverlayLabeller.h +207 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/OverlayMixedPoints.h +142 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/OverlayNG.h +410 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/OverlayNGRobust.h +174 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/OverlayPoints.h +120 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/OverlayUtil.h +213 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/PolygonBuilder.h +151 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/PrecisionReducer.h +75 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/PrecisionUtil.h +245 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/RingClipper.h +112 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/RobustClipEnvelopeComputer.h +84 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/overlayng/UnaryUnionNG.h +95 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/polygonize/BuildArea.h +75 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/polygonize/EdgeRing.h +350 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/polygonize/HoleAssigner.h +65 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/polygonize/PolygonizeDirectedEdge.h +127 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/polygonize/PolygonizeEdge.h +58 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/polygonize/PolygonizeGraph.h +214 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/polygonize/Polygonizer.h +260 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/predicate/RectangleContains.h +119 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/predicate/RectangleIntersects.h +98 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/predicate/SegmentIntersectionTester.h +91 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relate/EdgeEndBuilder.h +70 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relate/EdgeEndBundle.h +104 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relate/EdgeEndBundleStar.h +65 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relate/RelateComputer.h +185 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relate/RelateNode.h +67 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relate/RelateNodeFactory.h +55 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relate/RelateNodeGraph.h +98 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relate/RelateOp.h +134 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relateng/AdjacentEdgeLocator.h +124 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relateng/BasicPredicate.h +105 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relateng/DimensionLocation.h +60 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relateng/EdgeSegmentIntersector.h +80 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relateng/EdgeSegmentOverlapAction.h +75 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relateng/EdgeSetIntersector.h +94 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relateng/IMPatternMatcher.h +87 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relateng/IMPredicate.h +131 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relateng/IntersectionMatrixPattern.h +65 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relateng/LineStringExtracter.h +77 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relateng/LinearBoundary.h +88 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relateng/NodeSection.h +166 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relateng/NodeSections.h +102 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relateng/PolygonNodeConverter.h +112 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relateng/RelateEdge.h +176 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relateng/RelateGeometry.h +272 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relateng/RelateMatrixPredicate.h +85 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relateng/RelateNG.h +295 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relateng/RelateNode.h +146 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relateng/RelatePointLocator.h +213 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relateng/RelatePredicate.h +652 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relateng/RelateSegmentString.h +161 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relateng/TopologyComputer.h +236 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/relateng/TopologyPredicate.h +206 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/sharedpaths/SharedPathsOp.h +161 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/union/CascadedPolygonUnion.h +246 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/union/CoverageUnion.h +65 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/union/DisjointSubsetUnion.h +49 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/union/OverlapUnion.h +139 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/union/PointGeometryUnion.h +72 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/union/UnaryUnionOp.h +243 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/union/UnionStrategy.h +73 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/valid/ConsistentAreaTester.h +137 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/valid/IndexedNestedHoleTester.h +83 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/valid/IndexedNestedPolygonTester.h +111 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/valid/IsSimpleOp.h +299 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/valid/IsValidOp.h +307 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/valid/MakeValid.h +76 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/valid/PolygonIntersectionAnalyzer.h +125 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/valid/PolygonRing.h +231 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/valid/PolygonRingSelfNode.h +84 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/valid/PolygonRingTouch.h +65 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/valid/PolygonTopologyAnalyzer.h +211 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/valid/RepeatedPointRemover.h +60 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/valid/RepeatedPointTester.h +66 -0
- package/dist/prebuilt/Android-x86_64/include/geos/operation/valid/TopologyValidationError.h +76 -0
- package/dist/prebuilt/Android-x86_64/include/geos/planargraph/DirectedEdge.h +237 -0
- package/dist/prebuilt/Android-x86_64/include/geos/planargraph/DirectedEdgeStar.h +149 -0
- package/dist/prebuilt/Android-x86_64/include/geos/planargraph/Edge.h +141 -0
- package/dist/prebuilt/Android-x86_64/include/geos/planargraph/GraphComponent.h +182 -0
- package/dist/prebuilt/Android-x86_64/include/geos/planargraph/Node.h +158 -0
- package/dist/prebuilt/Android-x86_64/include/geos/planargraph/NodeMap.h +135 -0
- package/dist/prebuilt/Android-x86_64/include/geos/planargraph/PlanarGraph.h +293 -0
- package/dist/prebuilt/Android-x86_64/include/geos/planargraph/Subgraph.h +181 -0
- package/dist/prebuilt/Android-x86_64/include/geos/planargraph/algorithm/ConnectedSubgraphFinder.h +92 -0
- package/dist/prebuilt/Android-x86_64/include/geos/precision/CommonBits.h +97 -0
- package/dist/prebuilt/Android-x86_64/include/geos/precision/CommonBitsOp.h +172 -0
- package/dist/prebuilt/Android-x86_64/include/geos/precision/CommonBitsRemover.h +92 -0
- package/dist/prebuilt/Android-x86_64/include/geos/precision/EnhancedPrecisionOp.h +105 -0
- package/dist/prebuilt/Android-x86_64/include/geos/precision/GeometryPrecisionReducer.h +202 -0
- package/dist/prebuilt/Android-x86_64/include/geos/precision/MinimumClearance.h +57 -0
- package/dist/prebuilt/Android-x86_64/include/geos/precision/PointwisePrecisionReducerTransformer.h +74 -0
- package/dist/prebuilt/Android-x86_64/include/geos/precision/PrecisionReducerCoordinateOperation.h +65 -0
- package/dist/prebuilt/Android-x86_64/include/geos/precision/PrecisionReducerTransformer.h +95 -0
- package/dist/prebuilt/Android-x86_64/include/geos/precision/SimpleGeometryPrecisionReducer.h +88 -0
- package/dist/prebuilt/Android-x86_64/include/geos/profiler.h +185 -0
- package/dist/prebuilt/Android-x86_64/include/geos/shape/fractal/HilbertCode.h +128 -0
- package/dist/prebuilt/Android-x86_64/include/geos/shape/fractal/HilbertEncoder.h +96 -0
- package/dist/prebuilt/Android-x86_64/include/geos/shape/fractal/MortonCode.h +140 -0
- package/dist/prebuilt/Android-x86_64/include/geos/simplify/ComponentJumpChecker.h +120 -0
- package/dist/prebuilt/Android-x86_64/include/geos/simplify/DouglasPeuckerLineSimplifier.h +103 -0
- package/dist/prebuilt/Android-x86_64/include/geos/simplify/DouglasPeuckerSimplifier.h +84 -0
- package/dist/prebuilt/Android-x86_64/include/geos/simplify/LineSegmentIndex.h +87 -0
- package/dist/prebuilt/Android-x86_64/include/geos/simplify/LinkedLine.h +84 -0
- package/dist/prebuilt/Android-x86_64/include/geos/simplify/LinkedRing.h +69 -0
- package/dist/prebuilt/Android-x86_64/include/geos/simplify/PolygonHullSimplifier.h +232 -0
- package/dist/prebuilt/Android-x86_64/include/geos/simplify/RingHull.h +209 -0
- package/dist/prebuilt/Android-x86_64/include/geos/simplify/RingHullIndex.h +55 -0
- package/dist/prebuilt/Android-x86_64/include/geos/simplify/TaggedLineSegment.h +83 -0
- package/dist/prebuilt/Android-x86_64/include/geos/simplify/TaggedLineString.h +145 -0
- package/dist/prebuilt/Android-x86_64/include/geos/simplify/TaggedLineStringSimplifier.h +178 -0
- package/dist/prebuilt/Android-x86_64/include/geos/simplify/TaggedLinesSimplifier.h +88 -0
- package/dist/prebuilt/Android-x86_64/include/geos/simplify/TopologyPreservingSimplifier.h +93 -0
- package/dist/prebuilt/Android-x86_64/include/geos/triangulate/DelaunayTriangulationBuilder.h +166 -0
- package/dist/prebuilt/Android-x86_64/include/geos/triangulate/IncrementalDelaunayTriangulator.h +106 -0
- package/dist/prebuilt/Android-x86_64/include/geos/triangulate/VoronoiDiagramBuilder.h +157 -0
- package/dist/prebuilt/Android-x86_64/include/geos/triangulate/polygon/ConstrainedDelaunayTriangulator.h +101 -0
- package/dist/prebuilt/Android-x86_64/include/geos/triangulate/polygon/PolygonEarClipper.h +218 -0
- package/dist/prebuilt/Android-x86_64/include/geos/triangulate/polygon/PolygonHoleJoiner.h +267 -0
- package/dist/prebuilt/Android-x86_64/include/geos/triangulate/polygon/PolygonNoder.h +101 -0
- package/dist/prebuilt/Android-x86_64/include/geos/triangulate/polygon/PolygonTriangulator.h +105 -0
- package/dist/prebuilt/Android-x86_64/include/geos/triangulate/polygon/TriDelaunayImprover.h +147 -0
- package/dist/prebuilt/Android-x86_64/include/geos/triangulate/quadedge/LastFoundQuadEdgeLocator.h +63 -0
- package/dist/prebuilt/Android-x86_64/include/geos/triangulate/quadedge/LocateFailureException.h +37 -0
- package/dist/prebuilt/Android-x86_64/include/geos/triangulate/quadedge/QuadEdge.h +443 -0
- package/dist/prebuilt/Android-x86_64/include/geos/triangulate/quadedge/QuadEdgeLocator.h +48 -0
- package/dist/prebuilt/Android-x86_64/include/geos/triangulate/quadedge/QuadEdgeQuartet.h +64 -0
- package/dist/prebuilt/Android-x86_64/include/geos/triangulate/quadedge/QuadEdgeSubdivision.h +514 -0
- package/dist/prebuilt/Android-x86_64/include/geos/triangulate/quadedge/TrianglePredicate.h +124 -0
- package/dist/prebuilt/Android-x86_64/include/geos/triangulate/quadedge/TriangleVisitor.h +48 -0
- package/dist/prebuilt/Android-x86_64/include/geos/triangulate/quadedge/Vertex.h +312 -0
- package/dist/prebuilt/Android-x86_64/include/geos/triangulate/tri/Tri.h +186 -0
- package/dist/prebuilt/Android-x86_64/include/geos/triangulate/tri/TriEdge.h +80 -0
- package/dist/prebuilt/Android-x86_64/include/geos/triangulate/tri/TriList.h +182 -0
- package/dist/prebuilt/Android-x86_64/include/geos/triangulate/tri/TriangulationBuilder.h +86 -0
- package/dist/prebuilt/Android-x86_64/include/geos/unload.h +33 -0
- package/dist/prebuilt/Android-x86_64/include/geos/util/Assert.h +66 -0
- package/dist/prebuilt/Android-x86_64/include/geos/util/AssertionFailedException.h +48 -0
- package/dist/prebuilt/Android-x86_64/include/geos/util/CoordinateArrayFilter.h +85 -0
- package/dist/prebuilt/Android-x86_64/include/geos/util/GEOSException.h +64 -0
- package/dist/prebuilt/Android-x86_64/include/geos/util/GeometricShapeFactory.h +198 -0
- package/dist/prebuilt/Android-x86_64/include/geos/util/IllegalArgumentException.h +50 -0
- package/dist/prebuilt/Android-x86_64/include/geos/util/IllegalStateException.h +42 -0
- package/dist/prebuilt/Android-x86_64/include/geos/util/Interrupt.h +71 -0
- package/dist/prebuilt/Android-x86_64/include/geos/util/Machine.h +26 -0
- package/dist/prebuilt/Android-x86_64/include/geos/util/TopologyException.h +64 -0
- package/dist/prebuilt/Android-x86_64/include/geos/util/UniqueCoordinateArrayFilter.h +114 -0
- package/dist/prebuilt/Android-x86_64/include/geos/util/UnsupportedOperationException.h +52 -0
- package/dist/prebuilt/Android-x86_64/include/geos/util/math.h +45 -0
- package/dist/prebuilt/Android-x86_64/include/geos/util/string.h +31 -0
- package/dist/prebuilt/Android-x86_64/include/geos/util.h +86 -0
- package/dist/prebuilt/Android-x86_64/include/geos/vend/include_nlohmann_json.hpp +24 -0
- package/dist/prebuilt/Android-x86_64/include/geos/vend/json.hpp +25597 -0
- package/dist/prebuilt/Android-x86_64/include/geos/version.h +37 -0
- package/dist/prebuilt/Android-x86_64/include/geos.h +40 -0
- package/dist/prebuilt/Android-x86_64/include/geos_c.h +6121 -0
- package/dist/prebuilt/Android-x86_64/lib/cmake/GEOS/geos-config-version.cmake +43 -0
- package/dist/prebuilt/Android-x86_64/lib/cmake/GEOS/geos-config.cmake +11 -0
- package/dist/prebuilt/Android-x86_64/lib/cmake/GEOS/geos-targets-release.cmake +30 -0
- package/dist/prebuilt/Android-x86_64/lib/cmake/GEOS/geos-targets.cmake +124 -0
- package/dist/prebuilt/Android-x86_64/lib/libgeos.so +0 -0
- package/dist/prebuilt/Android-x86_64/lib/libgeos_c.so +0 -0
- package/dist/prebuilt/Android-x86_64/lib/pkgconfig/geos.pc +12 -0
- package/dist/prebuilt/iOS-iphoneos/bin/geosop.app/Info.plist +0 -0
- package/dist/prebuilt/iOS-iphoneos/bin/geosop.app/_CodeSignature/CodeResources +1 -1
- package/dist/prebuilt/iOS-iphoneos/bin/geosop.app/geosop +0 -0
- package/dist/prebuilt/iOS-iphoneos/lib/libgeos.a +0 -0
- package/dist/prebuilt/iOS-iphoneos/lib/libgeos_c.a +0 -0
- package/dist/prebuilt/iOS-iphonesimulator/bin/geosop.app/Info.plist +0 -0
- package/dist/prebuilt/iOS-iphonesimulator/bin/geosop.app/_CodeSignature/CodeResources +1 -1
- package/dist/prebuilt/iOS-iphonesimulator/bin/geosop.app/geosop +0 -0
- package/dist/prebuilt/iOS-iphonesimulator/lib/libgeos.a +0 -0
- package/dist/prebuilt/iOS-iphonesimulator/lib/libgeos_c.a +0 -0
- package/geos.xcframework/ios-arm64_arm64e/libgeos.a +0 -0
- package/geos.xcframework/ios-arm64_arm64e_x86_64-simulator/libgeos.a +0 -0
- package/geos_c.xcframework/ios-arm64_arm64e/libgeos_c.a +0 -0
- package/geos_c.xcframework/ios-arm64_arm64e_x86_64-simulator/libgeos_c.a +0 -0
- package/package.json +2 -2
|
@@ -0,0 +1,807 @@
|
|
|
1
|
+
/**********************************************************************
|
|
2
|
+
*
|
|
3
|
+
* GEOS - Geometry Engine Open Source
|
|
4
|
+
* http://geos.osgeo.org
|
|
5
|
+
*
|
|
6
|
+
* Copyright (C) 2020-2021 Daniel Baston
|
|
7
|
+
*
|
|
8
|
+
* This is free software; you can redistribute and/or modify it under
|
|
9
|
+
* the terms of the GNU Lesser General Public Licence as published
|
|
10
|
+
* by the Free Software Foundation.
|
|
11
|
+
* See the COPYING file for more information.
|
|
12
|
+
*
|
|
13
|
+
**********************************************************************/
|
|
14
|
+
|
|
15
|
+
#pragma once
|
|
16
|
+
|
|
17
|
+
#include <geos/geom/Geometry.h>
|
|
18
|
+
#include <geos/index/SpatialIndex.h> // for inheritance
|
|
19
|
+
#include <geos/index/chain/MonotoneChain.h>
|
|
20
|
+
#include <geos/index/ItemVisitor.h>
|
|
21
|
+
#include <geos/util.h>
|
|
22
|
+
|
|
23
|
+
#include <geos/index/strtree/TemplateSTRNode.h>
|
|
24
|
+
#include <geos/index/strtree/TemplateSTRNodePair.h>
|
|
25
|
+
#include <geos/index/strtree/TemplateSTRtreeDistance.h>
|
|
26
|
+
#include <geos/index/strtree/Interval.h>
|
|
27
|
+
|
|
28
|
+
#include <vector>
|
|
29
|
+
#include <queue>
|
|
30
|
+
#include <mutex>
|
|
31
|
+
|
|
32
|
+
namespace geos {
|
|
33
|
+
namespace index {
|
|
34
|
+
namespace strtree {
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* \brief
|
|
38
|
+
* A query-only R-tree created using the Sort-Tile-Recursive (STR) algorithm.
|
|
39
|
+
* For one- or two-dimensional spatial data.
|
|
40
|
+
*
|
|
41
|
+
* The STR packed R-tree is simple to implement and maximizes space
|
|
42
|
+
* utilization; that is, as many leaves as possible are filled to capacity.
|
|
43
|
+
* Overlap between nodes is far less than in a basic R-tree. However, once the
|
|
44
|
+
* tree has been built (explicitly or on the first call to `query`), items may
|
|
45
|
+
* not be added or removed.
|
|
46
|
+
*
|
|
47
|
+
* A user will instantiate `TemplateSTRtree` instead of `TemplateSTRtreeImpl`;
|
|
48
|
+
* this structure is used so that `TemplateSTRtree` can implement the
|
|
49
|
+
* requirements of the `SpatialIndex` interface, which is only possible when
|
|
50
|
+
* `ItemType` is a pointer.
|
|
51
|
+
*
|
|
52
|
+
* Described in: P. Rigaux, Michel Scholl and Agnes Voisard. Spatial
|
|
53
|
+
* Databases With Application To GIS. Morgan Kaufmann, San Francisco, 2002.
|
|
54
|
+
*
|
|
55
|
+
*/
|
|
56
|
+
template<typename ItemType, typename BoundsTraits>
|
|
57
|
+
class TemplateSTRtreeImpl {
|
|
58
|
+
public:
|
|
59
|
+
using Node = TemplateSTRNode<ItemType, BoundsTraits>;
|
|
60
|
+
using NodeList = std::vector<Node>;
|
|
61
|
+
using NodeListIterator = typename NodeList::iterator;
|
|
62
|
+
using BoundsType = typename BoundsTraits::BoundsType;
|
|
63
|
+
|
|
64
|
+
class Iterator {
|
|
65
|
+
public:
|
|
66
|
+
using iterator_category = std::forward_iterator_tag;
|
|
67
|
+
using value_type = ItemType;
|
|
68
|
+
using difference_type = typename NodeList::const_iterator::difference_type;
|
|
69
|
+
using pointer = ItemType*;
|
|
70
|
+
using reference = ItemType&;
|
|
71
|
+
|
|
72
|
+
Iterator(typename NodeList::const_iterator&& iter,
|
|
73
|
+
typename NodeList::const_iterator&& end) : m_iter(iter), m_end(end) {
|
|
74
|
+
skipDeleted();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const ItemType& operator*() const {
|
|
78
|
+
return m_iter->getItem();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
Iterator& operator++() {
|
|
82
|
+
m_iter++;
|
|
83
|
+
skipDeleted();
|
|
84
|
+
return *this;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
friend bool operator==(const Iterator& a, const Iterator& b) {
|
|
88
|
+
return a.m_iter == b.m_iter;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
friend bool operator!=(const Iterator& a, const Iterator& b) {
|
|
92
|
+
return a.m_iter != b.m_iter;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
private:
|
|
96
|
+
void skipDeleted() {
|
|
97
|
+
while(m_iter != m_end && m_iter->isDeleted()) {
|
|
98
|
+
m_iter++;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
typename NodeList::const_iterator m_iter;
|
|
103
|
+
typename NodeList::const_iterator m_end;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
class Items {
|
|
107
|
+
public:
|
|
108
|
+
explicit Items(TemplateSTRtreeImpl& tree) : m_tree(tree) {}
|
|
109
|
+
|
|
110
|
+
Iterator begin() {
|
|
111
|
+
return Iterator(m_tree.nodes.cbegin(),
|
|
112
|
+
std::next(m_tree.nodes.cbegin(), static_cast<long>(m_tree.numItems)));
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
Iterator end() {
|
|
116
|
+
return Iterator(std::next(m_tree.nodes.cbegin(), static_cast<long>(m_tree.numItems)),
|
|
117
|
+
std::next(m_tree.nodes.cbegin(), static_cast<long>(m_tree.numItems)));
|
|
118
|
+
}
|
|
119
|
+
private:
|
|
120
|
+
TemplateSTRtreeImpl& m_tree;
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
/// \defgroup construct Constructors
|
|
124
|
+
/// @{
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Constructs a tree with the given maximum number of child nodes that
|
|
128
|
+
* a node may have.
|
|
129
|
+
*/
|
|
130
|
+
explicit TemplateSTRtreeImpl(size_t p_nodeCapacity = 10) :
|
|
131
|
+
root(nullptr),
|
|
132
|
+
nodeCapacity(p_nodeCapacity),
|
|
133
|
+
numItems(0)
|
|
134
|
+
{}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Constructs a tree with the given maximum number of child nodes that
|
|
138
|
+
* a node may have, with the expected total number of items in the tree used
|
|
139
|
+
* to pre-allocate storage.
|
|
140
|
+
*/
|
|
141
|
+
TemplateSTRtreeImpl(size_t p_nodeCapacity, size_t itemCapacity) :
|
|
142
|
+
root(nullptr),
|
|
143
|
+
nodeCapacity(p_nodeCapacity),
|
|
144
|
+
numItems(0) {
|
|
145
|
+
auto finalSize = treeSize(itemCapacity);
|
|
146
|
+
nodes.reserve(finalSize);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Copy constructor, needed because mutex is not copyable
|
|
151
|
+
*/
|
|
152
|
+
TemplateSTRtreeImpl(const TemplateSTRtreeImpl& other) :
|
|
153
|
+
root(other.root),
|
|
154
|
+
nodeCapacity(other.nodeCapacity),
|
|
155
|
+
numItems(other.numItems) {
|
|
156
|
+
nodes = other.nodes;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
TemplateSTRtreeImpl& operator=(TemplateSTRtreeImpl other)
|
|
160
|
+
{
|
|
161
|
+
root = other.root;
|
|
162
|
+
nodeCapacity = other.nodeCapacity;
|
|
163
|
+
numItems = other.numItems;
|
|
164
|
+
nodes = other.nodes;
|
|
165
|
+
return *this;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/// @}
|
|
169
|
+
/// \defgroup insert Insertion
|
|
170
|
+
/// @{
|
|
171
|
+
|
|
172
|
+
/** Move the given item into the tree */
|
|
173
|
+
void insert(ItemType&& item) {
|
|
174
|
+
insert(BoundsTraits::fromItem(item), std::forward<ItemType>(item));
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/** Insert a copy of the given item into the tree */
|
|
178
|
+
void insert(const ItemType& item) {
|
|
179
|
+
insert(BoundsTraits::fromItem(item), item);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/** Move the given item into the tree */
|
|
183
|
+
void insert(const BoundsType& itemEnv, ItemType&& item) {
|
|
184
|
+
if (!BoundsTraits::isNull(itemEnv)) {
|
|
185
|
+
createLeafNode(std::forward<ItemType>(item), itemEnv);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/** Insert a copy of the given item into the tree */
|
|
190
|
+
void insert(const BoundsType& itemEnv, const ItemType& item) {
|
|
191
|
+
if (!BoundsTraits::isNull(itemEnv)) {
|
|
192
|
+
createLeafNode(item, itemEnv);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/// @}
|
|
197
|
+
/// \defgroup NN Nearest-neighbor
|
|
198
|
+
/// @{
|
|
199
|
+
|
|
200
|
+
/** Determine the two closest items in the tree using distance metric `distance`. */
|
|
201
|
+
template<typename ItemDistance>
|
|
202
|
+
std::pair<ItemType, ItemType> nearestNeighbour(ItemDistance& distance) {
|
|
203
|
+
return nearestNeighbour(*this, distance);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/** Determine the two closest items in the tree using distance metric `ItemDistance`. */
|
|
207
|
+
template<typename ItemDistance>
|
|
208
|
+
std::pair<ItemType, ItemType> nearestNeighbour() {
|
|
209
|
+
return nearestNeighbour(*this);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/** Determine the two closest items this tree and `other` tree using distance metric `distance`. */
|
|
213
|
+
template<typename ItemDistance>
|
|
214
|
+
std::pair<ItemType, ItemType> nearestNeighbour(TemplateSTRtreeImpl<ItemType, BoundsTraits> & other,
|
|
215
|
+
ItemDistance & distance) {
|
|
216
|
+
if (!getRoot() || !other.getRoot()) {
|
|
217
|
+
return { nullptr, nullptr };
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
TemplateSTRtreeDistance<ItemType, BoundsTraits, ItemDistance> td(distance);
|
|
221
|
+
return td.nearestNeighbour(*root, *other.root);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/** Determine the two closest items this tree and `other` tree using distance metric `ItemDistance`. */
|
|
225
|
+
template<typename ItemDistance>
|
|
226
|
+
std::pair<ItemType, ItemType> nearestNeighbour(TemplateSTRtreeImpl<ItemType, BoundsTraits>& other) {
|
|
227
|
+
ItemDistance id;
|
|
228
|
+
return nearestNeighbour(other, id);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
template<typename ItemDistance>
|
|
232
|
+
ItemType nearestNeighbour(const BoundsType& env, const ItemType& item, ItemDistance& itemDist) {
|
|
233
|
+
build();
|
|
234
|
+
|
|
235
|
+
if (getRoot() == nullptr) {
|
|
236
|
+
return nullptr;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
TemplateSTRNode<ItemType, BoundsTraits> bnd(item, env);
|
|
240
|
+
TemplateSTRNodePair<ItemType, BoundsTraits, ItemDistance> pair(*getRoot(), bnd, itemDist);
|
|
241
|
+
|
|
242
|
+
TemplateSTRtreeDistance<ItemType, BoundsTraits, ItemDistance> td(itemDist);
|
|
243
|
+
return td.nearestNeighbour(pair).first;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
template<typename ItemDistance>
|
|
247
|
+
ItemType nearestNeighbour(const BoundsType& env, const ItemType& item) {
|
|
248
|
+
ItemDistance id;
|
|
249
|
+
return nearestNeighbour(env, item, id);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
template<typename ItemDistance>
|
|
253
|
+
bool isWithinDistance(TemplateSTRtreeImpl<ItemType, BoundsTraits>& other, double maxDistance) {
|
|
254
|
+
ItemDistance itemDist;
|
|
255
|
+
|
|
256
|
+
if (!getRoot() || !other.getRoot()) {
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
TemplateSTRtreeDistance<ItemType, BoundsTraits, ItemDistance> td(itemDist);
|
|
261
|
+
return td.isWithinDistance(*root, *other.root, maxDistance);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/// @}
|
|
265
|
+
/// \defgroup query Query
|
|
266
|
+
/// @{
|
|
267
|
+
|
|
268
|
+
// Query the tree using the specified visitor. The visitor must be callable
|
|
269
|
+
// either with a single argument of `const ItemType&` or with the
|
|
270
|
+
// arguments `(const BoundsType&, const ItemType&).
|
|
271
|
+
// The visitor need not return a value, but if it does return a value,
|
|
272
|
+
// false values will be taken as a signal to stop the query.
|
|
273
|
+
template<typename Visitor>
|
|
274
|
+
void query(const BoundsType& queryEnv, Visitor &&visitor) {
|
|
275
|
+
if (!built()) {
|
|
276
|
+
build();
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
if (root && root->boundsIntersect(queryEnv)) {
|
|
280
|
+
if (root->isLeaf()) {
|
|
281
|
+
visitLeaf(visitor, *root);
|
|
282
|
+
} else {
|
|
283
|
+
query(queryEnv, *root, visitor);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// Query the tree for all pairs whose bounds intersect. The visitor must
|
|
289
|
+
// be callable with arguments (const ItemType&, const ItemType&).
|
|
290
|
+
// The visitor will be called for each pair once, with first-inserted
|
|
291
|
+
// item used for the first argument.
|
|
292
|
+
// The visitor need not return a value, but if it does return a value,
|
|
293
|
+
// false values will be taken as a signal to stop the query.
|
|
294
|
+
template<typename Visitor>
|
|
295
|
+
void queryPairs(Visitor&& visitor) {
|
|
296
|
+
if (!built()) {
|
|
297
|
+
build();
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
if (numItems < 2) {
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
for (std::size_t i = 0; i < numItems; i++) {
|
|
305
|
+
queryPairs(nodes[i], *root, visitor);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// Query the tree and collect items in the provided vector.
|
|
310
|
+
void query(const BoundsType& queryEnv, std::vector<ItemType>& results) {
|
|
311
|
+
query(queryEnv, [&results](const ItemType& x) {
|
|
312
|
+
results.push_back(x);
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Returns a depth-first iterator over all items in the tree.
|
|
318
|
+
*/
|
|
319
|
+
Items items() {
|
|
320
|
+
build();
|
|
321
|
+
return Items(*this);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* Iterate over all items added thus far. Explicitly does not build
|
|
326
|
+
* the tree.
|
|
327
|
+
*/
|
|
328
|
+
template<typename F>
|
|
329
|
+
void iterate(F&& func) {
|
|
330
|
+
auto n = built() ? numItems : nodes.size();
|
|
331
|
+
for (size_t i = 0; i < n; i++) {
|
|
332
|
+
if (!nodes[i].isDeleted()) {
|
|
333
|
+
func(nodes[i].getItem());
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/// @}
|
|
339
|
+
/// \defgroup remove Item removal
|
|
340
|
+
/// @{
|
|
341
|
+
|
|
342
|
+
bool remove(const BoundsType& itemEnv, const ItemType& item) {
|
|
343
|
+
build();
|
|
344
|
+
|
|
345
|
+
if (root == nullptr) {
|
|
346
|
+
return false;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
if (root->isLeaf()) {
|
|
350
|
+
if (!root->isDeleted() && root->getItem() == item) {
|
|
351
|
+
root->removeItem();
|
|
352
|
+
return true;
|
|
353
|
+
}
|
|
354
|
+
return false;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
return remove(itemEnv, *root, item);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/// @}
|
|
361
|
+
/// \defgroup introspect Introspection
|
|
362
|
+
/// @{
|
|
363
|
+
|
|
364
|
+
/** Determine whether the tree has been built, and no more items may be added. */
|
|
365
|
+
bool built() const {
|
|
366
|
+
return root != nullptr;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
/** Determine whether the tree has been built, and no more items may be added. */
|
|
370
|
+
const Node* getRoot() {
|
|
371
|
+
build();
|
|
372
|
+
return root;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/// @}
|
|
376
|
+
|
|
377
|
+
/** Build the tree if it has not already been built. */
|
|
378
|
+
void build() {
|
|
379
|
+
std::lock_guard<std::mutex> lock(lock_);
|
|
380
|
+
|
|
381
|
+
if (built()) {
|
|
382
|
+
return;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
if (nodes.empty()) {
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
numItems = nodes.size();
|
|
390
|
+
|
|
391
|
+
// compute final size of tree and set it aside in a single
|
|
392
|
+
// block of memory
|
|
393
|
+
auto finalSize = treeSize(numItems);
|
|
394
|
+
nodes.reserve(finalSize);
|
|
395
|
+
|
|
396
|
+
// begin and end define a range of nodes needing parents
|
|
397
|
+
auto begin = nodes.begin();
|
|
398
|
+
auto number = static_cast<size_t>(std::distance(begin, nodes.end()));
|
|
399
|
+
|
|
400
|
+
while (number > 1) {
|
|
401
|
+
createParentNodes(begin, number);
|
|
402
|
+
std::advance(begin, static_cast<long>(number)); // parents just added become children in the next round
|
|
403
|
+
number = static_cast<size_t>(std::distance(begin, nodes.end()));
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
assert(finalSize == nodes.size());
|
|
407
|
+
|
|
408
|
+
root = &nodes.back();
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
protected:
|
|
412
|
+
std::mutex lock_;
|
|
413
|
+
NodeList nodes; //**< a list of all leaf and branch nodes in the tree. */
|
|
414
|
+
Node* root; //**< a pointer to the root node, if the tree has been built. */
|
|
415
|
+
size_t nodeCapacity; //*< maximum number of children of each node */
|
|
416
|
+
size_t numItems; //*< total number of items in the tree, if it has been built. */
|
|
417
|
+
|
|
418
|
+
// Prevent instantiation of base class.
|
|
419
|
+
// ~TemplateSTRtreeImpl() = default;
|
|
420
|
+
|
|
421
|
+
void createLeafNode(ItemType&& item, const BoundsType& env) {
|
|
422
|
+
nodes.emplace_back(std::forward<ItemType>(item), env);
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
void createLeafNode(const ItemType& item, const BoundsType& env) {
|
|
426
|
+
nodes.emplace_back(item, env);
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
void createBranchNode(const Node *begin, const Node *end) {
|
|
430
|
+
assert(nodes.size() < nodes.capacity());
|
|
431
|
+
nodes.emplace_back(begin, end);
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
// calculate what the tree size will be when it is build. This is simply
|
|
435
|
+
// a version of createParentNodes that doesn't actually create anything.
|
|
436
|
+
size_t treeSize(size_t numLeafNodes) {
|
|
437
|
+
size_t nodesInTree = numLeafNodes;
|
|
438
|
+
|
|
439
|
+
size_t nodesWithoutParents = numLeafNodes;
|
|
440
|
+
while (nodesWithoutParents > 1) {
|
|
441
|
+
auto numSlices = sliceCount(nodesWithoutParents);
|
|
442
|
+
auto nodesPerSlice = sliceCapacity(nodesWithoutParents, numSlices);
|
|
443
|
+
|
|
444
|
+
size_t parentNodesAdded = 0;
|
|
445
|
+
for (size_t j = 0; j < numSlices; j++) {
|
|
446
|
+
auto nodesInSlice = std::min(nodesWithoutParents, nodesPerSlice);
|
|
447
|
+
nodesWithoutParents -= nodesInSlice;
|
|
448
|
+
|
|
449
|
+
parentNodesAdded += static_cast<size_t>(std::ceil(
|
|
450
|
+
static_cast<double>(nodesInSlice) / static_cast<double>(nodeCapacity)));
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
nodesInTree += parentNodesAdded;
|
|
454
|
+
nodesWithoutParents = parentNodesAdded;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
return nodesInTree;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
void createParentNodes(const NodeListIterator& begin, size_t number) {
|
|
461
|
+
// Arrange child nodes in two dimensions.
|
|
462
|
+
// First, divide them into vertical slices of a given size (left-to-right)
|
|
463
|
+
// Then create nodes within those slices (bottom-to-top)
|
|
464
|
+
auto numSlices = sliceCount(number);
|
|
465
|
+
std::size_t nodesPerSlice = sliceCapacity(number, numSlices);
|
|
466
|
+
|
|
467
|
+
// We could sort all of the nodes here, but we don't actually need them to be
|
|
468
|
+
// completely sorted. They need to be sorted enough for each node to end up
|
|
469
|
+
// in the right vertical slice, but their relative position within the slice
|
|
470
|
+
// doesn't matter. So we do a partial sort for each slice below instead.
|
|
471
|
+
auto end = begin + static_cast<long>(number);
|
|
472
|
+
sortNodesX(begin, end);
|
|
473
|
+
|
|
474
|
+
auto startOfSlice = begin;
|
|
475
|
+
for (decltype(numSlices) j = 0; j < numSlices; j++) {
|
|
476
|
+
// end iterator is being invalidated at each iteration
|
|
477
|
+
end = begin + static_cast<long>(number);
|
|
478
|
+
auto nodesRemaining = static_cast<size_t>(std::distance(startOfSlice, end));
|
|
479
|
+
auto nodesInSlice = std::min(nodesRemaining, nodesPerSlice);
|
|
480
|
+
auto endOfSlice = std::next(startOfSlice, static_cast<long>(nodesInSlice));
|
|
481
|
+
|
|
482
|
+
// Make sure that every node that should be in this slice ends up somewhere
|
|
483
|
+
// between startOfSlice and endOfSlice. We don't require any ordering among
|
|
484
|
+
// nodes between startOfSlice and endOfSlice.
|
|
485
|
+
//partialSortNodes(startOfSlice, endOfSlice, end);
|
|
486
|
+
|
|
487
|
+
addParentNodesFromVerticalSlice(startOfSlice, endOfSlice);
|
|
488
|
+
|
|
489
|
+
startOfSlice = endOfSlice;
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
void addParentNodesFromVerticalSlice(const NodeListIterator& begin, const NodeListIterator& end) {
|
|
494
|
+
if (BoundsTraits::TwoDimensional::value) {
|
|
495
|
+
sortNodesY(begin, end);
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
// Arrange the nodes vertically and full up parent nodes sequentially until they're full.
|
|
499
|
+
// A possible improvement would be to rework this such so that if we have 81 nodes we
|
|
500
|
+
// put 9 into each parent instead of 10 or 1.
|
|
501
|
+
auto firstChild = begin;
|
|
502
|
+
while (firstChild != end) {
|
|
503
|
+
auto childrenRemaining = static_cast<size_t>(std::distance(firstChild, end));
|
|
504
|
+
auto childrenForNode = std::min(nodeCapacity, childrenRemaining);
|
|
505
|
+
auto lastChild = std::next(firstChild, static_cast<long>(childrenForNode));
|
|
506
|
+
|
|
507
|
+
//partialSortNodes(firstChild, lastChild, end);
|
|
508
|
+
|
|
509
|
+
// Ideally we would be able to store firstChild and lastChild instead of
|
|
510
|
+
// having to convert them to pointers, but I wasn't sure how to access
|
|
511
|
+
// the NodeListIterator type from within Node without creating some weird
|
|
512
|
+
// circular dependency.
|
|
513
|
+
const Node *ptr_first = &*firstChild;
|
|
514
|
+
const Node *ptr_end = ptr_first + childrenForNode;
|
|
515
|
+
|
|
516
|
+
createBranchNode(ptr_first, ptr_end);
|
|
517
|
+
firstChild = lastChild;
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
void sortNodesX(const NodeListIterator& begin, const NodeListIterator& end) {
|
|
522
|
+
std::sort(begin, end, [](const Node &a, const Node &b) {
|
|
523
|
+
return BoundsTraits::getX(a.getBounds()) < BoundsTraits::getX(b.getBounds());
|
|
524
|
+
});
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
void sortNodesY(const NodeListIterator& begin, const NodeListIterator& end) {
|
|
528
|
+
std::sort(begin, end, [](const Node &a, const Node &b) {
|
|
529
|
+
return BoundsTraits::getY(a.getBounds()) < BoundsTraits::getY(b.getBounds());
|
|
530
|
+
});
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
// Helper function to visit an item using a visitor that has no return value.
|
|
534
|
+
// In this case, we will always return true, indicating that querying should
|
|
535
|
+
// continue.
|
|
536
|
+
template<typename Visitor,
|
|
537
|
+
typename std::enable_if<std::is_void<decltype(std::declval<Visitor>()(std::declval<ItemType>()))>::value, std::nullptr_t>::type = nullptr >
|
|
538
|
+
bool visitLeaf(Visitor&& visitor, const Node& node)
|
|
539
|
+
{
|
|
540
|
+
visitor(node.getItem());
|
|
541
|
+
return true;
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
template<typename Visitor,
|
|
545
|
+
typename std::enable_if<std::is_void<decltype(std::declval<Visitor>()(std::declval<ItemType>(), std::declval<ItemType>()))>::value, std::nullptr_t>::type = nullptr >
|
|
546
|
+
bool visitLeaves(Visitor&& visitor, const Node& node1, const Node& node2)
|
|
547
|
+
{
|
|
548
|
+
visitor(node1.getItem(), node2.getItem());
|
|
549
|
+
return true;
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
// MSVC 2015 does not implement C++11 expression SFINAE and considers this a
|
|
553
|
+
// redefinition of a previous method
|
|
554
|
+
#if !defined(_MSC_VER) || _MSC_VER >= 1910
|
|
555
|
+
template<typename Visitor,
|
|
556
|
+
typename std::enable_if<std::is_void<decltype(std::declval<Visitor>()(std::declval<BoundsType>(), std::declval<ItemType>()))>::value, std::nullptr_t>::type = nullptr >
|
|
557
|
+
bool visitLeaf(Visitor&& visitor, const Node& node)
|
|
558
|
+
{
|
|
559
|
+
visitor(node.getBounds(), node.getItem());
|
|
560
|
+
return true;
|
|
561
|
+
}
|
|
562
|
+
#endif
|
|
563
|
+
|
|
564
|
+
// If the visitor function does return a value, we will use this to indicate
|
|
565
|
+
// that querying should continue.
|
|
566
|
+
template<typename Visitor,
|
|
567
|
+
typename std::enable_if<!std::is_void<decltype(std::declval<Visitor>()(std::declval<ItemType>()))>::value, std::nullptr_t>::type = nullptr>
|
|
568
|
+
bool visitLeaf(Visitor&& visitor, const Node& node)
|
|
569
|
+
{
|
|
570
|
+
return visitor(node.getItem());
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
template<typename Visitor,
|
|
574
|
+
typename std::enable_if<!std::is_void<decltype(std::declval<Visitor>()(std::declval<ItemType>(), std::declval<ItemType>()))>::value, std::nullptr_t>::type = nullptr >
|
|
575
|
+
bool visitLeaves(Visitor&& visitor, const Node& node1, const Node& node2)
|
|
576
|
+
{
|
|
577
|
+
return visitor(node1.getItem(), node2.getItem());
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
// MSVC 2015 does not implement C++11 expression SFINAE and considers this a
|
|
581
|
+
// redefinition of a previous method
|
|
582
|
+
#if !defined(_MSC_VER) || _MSC_VER >= 1910
|
|
583
|
+
template<typename Visitor,
|
|
584
|
+
typename std::enable_if<!std::is_void<decltype(std::declval<Visitor>()(std::declval<BoundsType>(), std::declval<ItemType>()))>::value, std::nullptr_t>::type = nullptr>
|
|
585
|
+
bool visitLeaf(Visitor&& visitor, const Node& node)
|
|
586
|
+
{
|
|
587
|
+
return visitor(node.getBounds(), node.getItem());
|
|
588
|
+
}
|
|
589
|
+
#endif
|
|
590
|
+
|
|
591
|
+
template<typename Visitor>
|
|
592
|
+
bool query(const BoundsType& queryEnv,
|
|
593
|
+
const Node& node,
|
|
594
|
+
Visitor&& visitor) {
|
|
595
|
+
|
|
596
|
+
assert(!node.isLeaf());
|
|
597
|
+
|
|
598
|
+
for (auto *child = node.beginChildren(); child < node.endChildren(); ++child) {
|
|
599
|
+
if (child->boundsIntersect(queryEnv)) {
|
|
600
|
+
if (child->isLeaf()) {
|
|
601
|
+
if (!child->isDeleted()) {
|
|
602
|
+
if (!visitLeaf(visitor, *child)) {
|
|
603
|
+
return false; // abort query
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
} else {
|
|
607
|
+
if (!query(queryEnv, *child, visitor)) {
|
|
608
|
+
return false; // abort query
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
return true; // continue searching
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
template<typename Visitor>
|
|
617
|
+
bool queryPairs(const Node& queryNode,
|
|
618
|
+
const Node& searchNode,
|
|
619
|
+
Visitor&& visitor) {
|
|
620
|
+
|
|
621
|
+
assert(!searchNode.isLeaf());
|
|
622
|
+
|
|
623
|
+
for (auto* child = searchNode.beginChildren(); child < searchNode.endChildren(); ++child) {
|
|
624
|
+
if (child->isLeaf()) {
|
|
625
|
+
// Only visit leaf nodes if they have a higher address than the query node,
|
|
626
|
+
// to avoid processing the same pairs twice.
|
|
627
|
+
if (child > &queryNode && !child->isDeleted() && child->boundsIntersect(queryNode.getBounds())) {
|
|
628
|
+
if (!visitLeaves(visitor, queryNode, *child)) {
|
|
629
|
+
return false; // abort query
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
} else {
|
|
633
|
+
if (child->boundsIntersect(queryNode.getBounds())) {
|
|
634
|
+
if (!queryPairs(queryNode, *child, visitor)) {
|
|
635
|
+
return false; // abort query
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
return true; // continue searching
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
bool remove(const BoundsType& queryEnv,
|
|
645
|
+
const Node& node,
|
|
646
|
+
const ItemType& item) {
|
|
647
|
+
|
|
648
|
+
assert(!node.isLeaf());
|
|
649
|
+
|
|
650
|
+
for (auto *child = node.beginChildren(); child < node.endChildren(); ++child) {
|
|
651
|
+
if (child->boundsIntersect(queryEnv)) {
|
|
652
|
+
if (child->isLeaf()) {
|
|
653
|
+
if (!child->isDeleted() && child->getItem() == item) {
|
|
654
|
+
// const cast is ugly, but alternative seems to be to remove all
|
|
655
|
+
// const qualifiers in Node and open up mutability everywhere?
|
|
656
|
+
auto mutableChild = const_cast<Node*>(child);
|
|
657
|
+
mutableChild->removeItem();
|
|
658
|
+
return true;
|
|
659
|
+
}
|
|
660
|
+
} else {
|
|
661
|
+
bool removed = remove(queryEnv, *child, item);
|
|
662
|
+
if (removed) {
|
|
663
|
+
return true;
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
return false;
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
size_t sliceCount(size_t numNodes) const {
|
|
673
|
+
double minLeafCount = std::ceil(static_cast<double>(numNodes) / static_cast<double>(nodeCapacity));
|
|
674
|
+
|
|
675
|
+
return static_cast<size_t>(std::ceil(std::sqrt(minLeafCount)));
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
static size_t sliceCapacity(size_t numNodes, size_t numSlices) {
|
|
679
|
+
return static_cast<size_t>(std::ceil(static_cast<double>(numNodes) / static_cast<double>(numSlices)));
|
|
680
|
+
}
|
|
681
|
+
};
|
|
682
|
+
|
|
683
|
+
struct EnvelopeTraits {
|
|
684
|
+
using BoundsType = geom::Envelope;
|
|
685
|
+
using TwoDimensional = std::true_type;
|
|
686
|
+
|
|
687
|
+
static bool intersects(const BoundsType& a, const BoundsType& b) {
|
|
688
|
+
return a.intersects(b);
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
static double size(const BoundsType& a) {
|
|
692
|
+
return a.getArea();
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
static double distance(const BoundsType& a, const BoundsType& b) {
|
|
696
|
+
return a.distance(b);
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
static double maxDistance(const BoundsType& a, const BoundsType& b) {
|
|
700
|
+
return a.maxDistance(b);
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
static BoundsType empty() {
|
|
704
|
+
return {};
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
template<typename ItemType>
|
|
708
|
+
static const BoundsType& fromItem(const ItemType& i) {
|
|
709
|
+
return *(i->getEnvelopeInternal());
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
template<typename ItemType>
|
|
713
|
+
static const BoundsType& fromItem(ItemType&& i) {
|
|
714
|
+
return *(i->getEnvelopeInternal());
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
static double getX(const BoundsType& a) {
|
|
718
|
+
return a.getMinX() + a.getMaxX();
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
static double getY(const BoundsType& a) {
|
|
722
|
+
return a.getMinY() + a.getMaxY();
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
static void expandToInclude(BoundsType& a, const BoundsType& b) {
|
|
726
|
+
a.expandToInclude(b);
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
static bool isNull(const BoundsType& a) {
|
|
730
|
+
return a.isNull();
|
|
731
|
+
}
|
|
732
|
+
};
|
|
733
|
+
|
|
734
|
+
struct IntervalTraits {
|
|
735
|
+
using BoundsType = Interval;
|
|
736
|
+
using TwoDimensional = std::false_type;
|
|
737
|
+
|
|
738
|
+
static bool intersects(const BoundsType& a, const BoundsType& b) {
|
|
739
|
+
return a.intersects(&b);
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
static double size(const BoundsType& a) {
|
|
743
|
+
return a.getWidth();
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
static double getX(const BoundsType& a) {
|
|
747
|
+
return a.getMin() + a.getMax();
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
static double getY(const BoundsType& a) {
|
|
751
|
+
return a.getMin() + a.getMax();
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
static void expandToInclude(BoundsType& a, const BoundsType& b) {
|
|
755
|
+
a.expandToInclude(&b);
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
static bool isNull(const BoundsType& a) {
|
|
759
|
+
(void) a;
|
|
760
|
+
return false;
|
|
761
|
+
}
|
|
762
|
+
};
|
|
763
|
+
|
|
764
|
+
|
|
765
|
+
template<typename ItemType, typename BoundsTraits = EnvelopeTraits>
|
|
766
|
+
class TemplateSTRtree : public TemplateSTRtreeImpl<ItemType, BoundsTraits> {
|
|
767
|
+
public:
|
|
768
|
+
using TemplateSTRtreeImpl<ItemType, BoundsTraits>::TemplateSTRtreeImpl;
|
|
769
|
+
};
|
|
770
|
+
|
|
771
|
+
// When ItemType is a pointer and our bounds are geom::Envelope, adopt
|
|
772
|
+
// the SpatialIndex interface which requires queries via an envelope
|
|
773
|
+
// and items to be representable as void*.
|
|
774
|
+
template<typename ItemType>
|
|
775
|
+
class TemplateSTRtree<ItemType*, EnvelopeTraits> : public TemplateSTRtreeImpl<ItemType*, EnvelopeTraits>, public SpatialIndex {
|
|
776
|
+
public:
|
|
777
|
+
using TemplateSTRtreeImpl<ItemType*, EnvelopeTraits>::TemplateSTRtreeImpl;
|
|
778
|
+
using TemplateSTRtreeImpl<ItemType*, EnvelopeTraits>::insert;
|
|
779
|
+
using TemplateSTRtreeImpl<ItemType*, EnvelopeTraits>::query;
|
|
780
|
+
using TemplateSTRtreeImpl<ItemType*, EnvelopeTraits>::remove;
|
|
781
|
+
|
|
782
|
+
// The SpatialIndex methods only work when we are storing a pointer type.
|
|
783
|
+
void query(const geom::Envelope* queryEnv, std::vector<void*>& results) override {
|
|
784
|
+
query(*queryEnv, [&results](const ItemType* x) {
|
|
785
|
+
results.push_back(const_cast<void*>(static_cast<const void*>(x)));
|
|
786
|
+
});
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
void query(const geom::Envelope* queryEnv, ItemVisitor& visitor) override {
|
|
790
|
+
query(*queryEnv, [&visitor](const ItemType* x) {
|
|
791
|
+
visitor.visitItem(const_cast<void*>(static_cast<const void*>(x)));
|
|
792
|
+
});
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
bool remove(const geom::Envelope* itemEnv, void* item) override {
|
|
796
|
+
return remove(*itemEnv, static_cast<ItemType*>(item));
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
void insert(const geom::Envelope* itemEnv, void* item) override {
|
|
800
|
+
insert(*itemEnv, std::move(static_cast<ItemType*>(item)));
|
|
801
|
+
}
|
|
802
|
+
};
|
|
803
|
+
|
|
804
|
+
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
}
|