GEOS 3.14.0dev
LocationIndexedLine.h
1/**********************************************************************
2 *
3 * GEOS - Geometry Engine Open Source
4 * http://geos.osgeo.org
5 *
6 * Copyright (C) 2011 Sandro Santilli <strk@kbt.io>
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 * Last port: linearref/LocationIndexedLine.java r466
16 *
17 **********************************************************************/
18
19#pragma once
20
21#include <geos/export.h>
22#include <geos/geom/Coordinate.h>
23#include <geos/geom/Geometry.h>
24#include <geos/linearref/ExtractLineByLocation.h>
25#include <geos/linearref/LinearLocation.h>
26#include <geos/linearref/LocationIndexOfPoint.h>
27#include <geos/linearref/LocationIndexOfLine.h>
28#include <geos/util/IllegalArgumentException.h>
29
30namespace geos {
31namespace linearref { // geos::linearref
32
39class GEOS_DLL LocationIndexedLine {
40private:
41 const geom::Geometry* linearGeom;
42
43 void
44 checkGeometryType()
45 {
46 if(!linearGeom->isLineal()) {
47 throw util::IllegalArgumentException("Input geometry must be linear");
48 }
49 }
50
51public:
52
61 : linearGeom(p_linearGeom)
62 {
63 checkGeometryType();
64 }
65
80 extractPoint(const LinearLocation& index) const
81 {
82 return index.getCoordinate(linearGeom);
83 }
84
85
106 double offsetDistance) const
107 {
109 index.getSegment(linearGeom)->pointAlongOffset(
110 index.getSegmentFraction(), offsetDistance, ret
111 );
112 return ret;
113 }
114
127 std::unique_ptr<geom::Geometry>
128 extractLine(const LinearLocation& startIndex,
129 const LinearLocation& endIndex) const
130 {
131 return ExtractLineByLocation::extract(linearGeom, startIndex, endIndex);
132 }
133
134
151 indexOf(const geom::Coordinate& pt) const
152 {
153 return LocationIndexOfPoint::indexOf(linearGeom, pt);
154 }
155
182 const LinearLocation& minIndex) const
183 {
184 return LocationIndexOfPoint::indexOfAfter(linearGeom, pt, &minIndex);
185 }
186
199 indicesOf(const geom::Geometry* subLine) const
200 {
201 return LocationIndexOfLine::indicesOf(linearGeom, subLine);
202 }
203
204
217 project(const geom::Coordinate& pt) const
218 {
219 return LocationIndexOfPoint::indexOf(linearGeom, pt);
220 }
221
230 {
231 return LinearLocation();
232 }
233
242 {
243 return LinearLocation::getEndLocation(linearGeom);
244 }
245
253 bool
254 isValidIndex(const LinearLocation& index) const
255 {
256 return index.isValid(linearGeom);
257 }
258
259
268 clampIndex(const LinearLocation& index) const
269 {
270 LinearLocation loc = index;
271 loc.clamp(linearGeom);
272 return loc;
273 }
274};
275
276} // geos::linearref
277} // geos
Coordinate is the lightweight class used to store coordinates.
Definition Coordinate.h:217
Basic implementation of Geometry, constructed and destructed by GeometryFactory.
Definition Geometry.h:197
Represents a location along a LineString or MultiLineString.
Definition LinearLocation.h:43
std::unique_ptr< geom::LineSegment > getSegment(const geom::Geometry *linearGeom) const
Gets a LineSegment representing the segment of the given linear Geometry which contains this location...
double getSegmentFraction() const
Gets the segment fraction for this location.
geom::Coordinate getCoordinate(const geom::Geometry *linearGeom) const
Gets the Coordinate along the given linear Geometry which is referenced by this location.
bool isValid(const geom::Geometry *linearGeom) const
Tests whether this location refers to a valid location on the given linear Geometry.
void clamp(const geom::Geometry *linear)
Ensures the indexes are valid for a given linear Geometry.
Supports linear referencing along a linear Geometry using LinearLocations as the index.
Definition LocationIndexedLine.h:39
bool isValidIndex(const LinearLocation &index) const
Tests whether an index is in the valid index range for the line.
Definition LocationIndexedLine.h:254
LinearLocation clampIndex(const LinearLocation &index) const
Computes a valid index for this line by clamping the given index to the valid range of index values.
Definition LocationIndexedLine.h:268
LinearLocation indexOf(const geom::Coordinate &pt) const
Computes the index for a given point on the line.
Definition LocationIndexedLine.h:151
LinearLocation indexOfAfter(const geom::Coordinate &pt, const LinearLocation &minIndex) const
Finds the index for a point on the line which is greater than the given index.
Definition LocationIndexedLine.h:181
geom::Coordinate extractPoint(const LinearLocation &index) const
Computes the Coordinate for the point on the line at the given index.
Definition LocationIndexedLine.h:80
geom::Coordinate extractPoint(const LinearLocation &index, double offsetDistance) const
Computes the Coordinate for the point on the line at the given index, offset by the given distance.
Definition LocationIndexedLine.h:105
std::unique_ptr< geom::Geometry > extractLine(const LinearLocation &startIndex, const LinearLocation &endIndex) const
Computes the LineString for the interval on the line between the given indices.
Definition LocationIndexedLine.h:128
LinearLocation getStartIndex() const
Returns the index of the start of the line.
Definition LocationIndexedLine.h:229
LinearLocation getEndIndex() const
Returns the index of the end of the line.
Definition LocationIndexedLine.h:241
LinearLocation * indicesOf(const geom::Geometry *subLine) const
Computes the indices for a subline of the line.
Definition LocationIndexedLine.h:199
LinearLocation project(const geom::Coordinate &pt) const
Computes the index for the closest point on the line to the given point.
Definition LocationIndexedLine.h:217
LocationIndexedLine(const geom::Geometry *p_linearGeom)
Constructs an object which allows linear referencing along a given linear Geometry.
Definition LocationIndexedLine.h:60
Indicates one or more illegal arguments.
Definition IllegalArgumentException.h:33
Basic namespace for all GEOS functionalities.
Definition geos.h:39