/********************************************************************** * * GEOS - Geometry Engine Open Source * http://geos.osgeo.org * * Copyright (C) 2020 Paul Ramsey * * 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 #include #include #include #include // Forward declarations namespace geos { namespace geom { class Coordinate; class LineString; class Geometry; class GeometryCollection; } } namespace geos { namespace edgegraph { // geos.edgegraph /** * Builds an edge graph from geometries containing edges. * * @author mdavis * */ class GEOS_DLL EdgeGraphBuilder { private: /* members */ std::unique_ptr graph; public: EdgeGraphBuilder() : graph(new EdgeGraph()) {}; static std::unique_ptr build(const geom::GeometryCollection* geoms); std::unique_ptr getGraph(); /** * Adds the edges of a Geometry to the graph. * May be called multiple times. * Any dimension of Geometry may be added; the constituent edges are * extracted. * * @param geometry geometry to be added */ void add(const geom::Geometry* geometry); void add(const geom::LineString* linestring); /** * Adds the edges in a collection of {@link geom::Geometry} to the graph. * May be called multiple times. * Any dimension of Geometry may be added. * * @param geometries the geometries to be added */ void add(const geom::GeometryCollection* geometries); }; } // namespace geos.edgegraph } // namespace geos