/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2001-2002 Vivid Solutions Inc. * Copyright (C) 2005-2006 Refractions Research Inc. * Copyright (C) 2019 Nicklas Larsson * * This is free software; you can redistribute and/or modify it under * the terms of the GNU Lesser General Public Licence as published * by the Free Software Foundation. * See the COPYING file for more information. * **********************************************************************/ #pragma once namespace geos { /// \brief /// Contains classes and interfaces implementing fundamental computational /// geometry algorithms. /// /// ### Robustness /// /// Geometrical algorithms involve a combination of combinatorial and numerical /// computation. As with all numerical computation using finite-precision /// numbers, the algorithms chosen are susceptible to problems of robustness. /// A robustness problem occurs when a numerical calculation produces an /// incorrect answer for some inputs due to round-off errors. Robustness /// problems are especially serious in geometric computation, since they can /// result in errors during topology building. /// /// There are many approaches to dealing with the problem of robustness in /// geometrical computation. Not surprisingly, most robust algorithms are /// substantially more complex and less performant than the non-robust /// versions. Fortunately, JTS is sensitive to robustness problems in only a /// few key functions (such as line intersection and the point-in-polygon /// test). There are efficient robust algorithms available for these /// functions, and these algorithms are implemented in JTS. /// /// ### Computational Performance /// /// Runtime performance is an important consideration for a production-quality /// implementation of geometric algorithms. The most computationally intensive /// algorithm used in JTS is intersection detection. JTS methods need to /// determine both all intersection between the line segments in a single /// Geometry (self-intersection) and all intersections between the line /// segments of two different Geometries. /// /// The obvious naive algorithm for intersection detection (comparing every /// segment with every other) has unacceptably slow performance. There is a /// large literature of faster algorithms for intersection detection. /// Unfortunately, many of them involve substantial code complexity. JTS tries /// to balance code simplicity with performance gains. It uses some simple /// techniques to produce substantial performance gains for common types of /// input data. /// /// ### Package Specification /// /// - Java Topology Suite Technical Specifications /// - /// OpenGIS Simple Features Specification for SQL namespace algorithm { // geos::algorithm /// Classes to compute distance metrics between geometries. namespace distance {} /// Classes which determine the Location of points in geometries. namespace locate {} } // namespace geos::algorithm namespace geom { // geos.geom /// \brief /// Contains classes and interfaces implementing algorithms that optimize /// the performance of repeated calls to specific geometric operations. namespace prep {} /// \brief /// Provides classes that parse and modify Geometry objects. namespace util {} } // namespace geos.geom /// \brief /// Contains classes that implement topology graphs. /// /// The Java Topology Suite (JTS) is a Java API that implements a core set of /// spatial data operations using an explicit precision model and robust /// geometric algorithms. JTS is int ended to be used in the development of /// applications that support the validation, cleaning, integration and /// querying of spatial datasets. /// /// JTS attempts to implement the OpenGIS Simple Features Specification (SFS) /// as accurately as possible. In some cases the SFS is unclear or omits a /// specification; in this case JTS attempts to choose a reasonable and /// consistent alternative. Differences from and elaborations of the SFS are /// documented in this specification. /// /// ### Package Specification /// /// - Java Topology Suite Technical Specifications /// - /// OpenGIS Simple Features Specification for SQL namespace geomgraph { // geos.geomgraph /// \brief /// Contains classes that implement indexes for performing noding on /// geometry graph edges. namespace index {} } // namespace geos.geomgraph /// Provides classes for various kinds of spatial indexes. namespace index { // geos.index /// Contains classes that implement a Binary Interval Tree index namespace bintree {} /// Contains classes that implement Monotone Chains namespace chain {} /// \brief Contains classes that implement a static index on a set of /// 1-dimensional intervals, using an R-Tree packed based on the order of /// the interval midpoints. namespace intervalrtree {} /// Contains classes that implement a Quadtree spatial index namespace quadtree {} /// \brief Contains 2-D and 1-D versions of the Sort-Tile-Recursive (STR) /// tree, a query-only R-tree. namespace strtree {} /// \brief Contains classes which implement a sweepline algorithm for /// scanning geometric data structures. namespace sweepline {} } // namespace geos.index /// \brief /// Contains the interfaces for converting JTS objects to and from other /// formats. /// /// The Java Topology Suite (JTS) is a Java API that implements a core set of /// spatial data operations usin g an explicit precision model and robust /// geometric algorithms. JTS is intended to be used in the devel opment of /// applications that support the validation, cleaning, integration and /// querying of spatial data sets. /// /// JTS attempts to implement the OpenGIS Simple Features Specification (SFS) /// as accurately as possible. In some cases the SFS is unclear or omits a /// specification; in this case JTS attempts to choose a reasonable and /// consistent alternative. Differences from and elaborations of the SFS are /// documented in this specification. /// /// ### Package Specification /// /// - Java Topology Suite Technical Specifications /// - /// OpenGIS Simple Features Specification for SQL /// namespace io {} /// \brief Contains classes and interfaces implementing linear referencing on /// linear geometries. namespace linearref {} /// \brief Classes to compute nodings for arrangements of line segments and /// line segment sequences. namespace noding { // geos.noding /// \brief Contains classes to implement the Snap Rounding algorithm for /// noding linestrings. namespace snapround {} } // namespace geos.noding /// Provides classes for implementing operations on geometries. namespace operation { // geos.operation /// Provides classes for computing buffers of geometries namespace buffer {} /// Provides classes for computing the distance between geometries. namespace distance {} /// \brief Provides classes for computing the intersection of a Geometry /// and a clipping Rectangle. namespace intersection {} /// Line merging package. namespace linemerge {} /// \brief /// Contains classes that perform a topological overlay to compute boolean /// spatial functions. /// /// The Overlay Algorithm is used in spatial analysis methods for computing /// set-theoretic operations (boolean combinations) of input /// [Geometrys](\ref geom::Geometry). /// The algorithm for computing the overlay uses the intersection operations /// supported by topology graphs. To compute an overlay it is necessary to /// explicitly compute the resultant graph formed by the computed /// intersections. /// /// The algorithm to compute a set-theoretic spatial analysis method has the /// following steps: /// /// - Build topology graphs of the two input geometries. For each geometry /// all self-intersection nodes are computed and added to the graph. /// - Compute nodes for all intersections between edges and nodes of the /// graphs. /// - Compute the labeling for the computed nodes by merging the labels from /// the input graphs. /// - Compute new edges between the compute intersection nodes. /// Label the edges appropriately. /// - Build the resultant graph from the new nodes and edges. /// - Compute the labeling for isolated components of the graph. Add the /// isolated components to the resultant graph. /// - Compute the result of the boolean combination by selecting the node /// and edges with the appropriate labels. Polygonize areas and sew linear /// geometries together. /// /// ### Package Specification /// /// - Java Topology Suite Technical Specifications /// - /// OpenGIS Simple Features Specification for SQL namespace overlay {} /// An API for polygonizing sets of lines. namespace polygonize {} /// \brief Classes which implement topological predicates optimized for /// particular kinds of geometries. namespace predicate {} /// \brief Contains classes to implement the computation of the spatial /// relationships of `Geometry`s. /// /// The `relate` algorithm computes the `IntersectionMatrix` describing the /// relationship of two `Geometry`s. The algorithm for computing `relate` /// uses the intersection operations supported by topology graphs. Although /// the `relate` result depends on the resultant graph formed by the /// computed intersections, there is no need to explicitly compute the /// entire graph. It is sufficient to compute the local structure of the /// graph at each intersection node. /// /// The algorithm to compute `relate` has the following steps: /// /// - Build topology graphs of the two input geometries. For each geometry /// all self-intersection nodes are computed and added to the graph. /// - Compute nodes for all intersections between edges and nodes of the /// graphs. /// - Compute the labeling for the computed nodes by merging the labels /// from the input graphs. /// - Compute the labeling for isolated components of the graph (see below) /// - Compute the `IntersectionMatrix` from the labels on the nodes and /// edges. /// /// ### Labeling isolated components /// /// Isolated components are components (edges or nodes) of an input /// `Geometry` which do not contain any intersections with the other input /// `Geometry`. The topological relationship of these components to the /// other input `Geometry` must be computed in order to determine the /// complete labeling of the component. This can be done by testing whether /// the component lies in the interior or exterior of the other `Geometry`. /// If the other `Geometry` is 1-dimensional, the isolated component must /// lie in the exterior (since otherwise it would have an intersection with /// an edge of the `Geometry`). If the other `Geometry` is 2-dimensional, /// a Point-In-Polygon test can be used to determine whether the isolated /// component is in the interior or exterior. /// /// ### Package Specification /// /// - Java Topology Suite Technical Specifications /// - /// OpenGIS Simple Features Specification for SQL namespace relate {} /// Find shared paths among two linear Geometry objects. namespace sharedpaths {} /// Classes to perform efficient unioning of collections of geometries. namespace geounion {} /// Provides classes for testing the validity of geometries. namespace valid {} } // namespace geos.operation /// Contains classes to implement a planar graph data structure. namespace planargraph { // geos::planargraph /// Planargraph algorithms. namespace algorithm {} } // namespace geos::planargraph /// Provides classes for manipulating the precision model of Geometries. namespace precision {} /// Classes which implement algorithms for simplifying or generalizing geometries. namespace simplify {} /// Classes to compute Delaunay triangulations. namespace triangulate { // geos.triangulate /// \brief Classes to implement a topological subdivision of quadeges, to /// support creating triangulations and Voronoi diagrams. namespace quadedge {} } // namespace geos.triangulate /// Utility classes for GEOS. namespace util {} } // namespace geos