Package org.locationtech.jts.algorithm
Class InteriorPointArea
- java.lang.Object
-
- org.locationtech.jts.algorithm.InteriorPointArea
-
public class InteriorPointArea extends java.lang.Object
Computes a point in the interior of an areal geometry.Algorithm
- Find a Y value which is close to the centre of the geometry's vertical extent but is different to any of it's Y ordinates.
- Create a horizontal bisector line using the Y value and the geometry's horizontal extent
- Find the intersection between the geometry and the horizontal bisector line. The intersection is a collection of lines and points.
- Pick the midpoint of the largest intersection geometry
KNOWN BUGS
- If a fixed precision model is used, in some cases this method may return a point which does not lie in the interior.
- Version:
- 1.7
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
InteriorPointArea.SafeBisectorFinder
Finds a safe bisector Y ordinate by projecting to the Y axis and finding the Y-ordinate interval which contains the centre of the Y extent.
-
Field Summary
Fields Modifier and Type Field Description private GeometryFactory
factory
private Coordinate
interiorPoint
private double
maxWidth
-
Constructor Summary
Constructors Constructor Description InteriorPointArea(Geometry g)
Creates a new interior point finder for an areal geometry.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private void
add(Geometry geom)
Tests the interior vertices (if any) defined by an areal Geometry for the best inside point.private void
addPolygon(Geometry geometry)
Finds an interior point of a Polygon.private static double
avg(double a, double b)
static Coordinate
centre(Envelope envelope)
Returns the centre point of the envelope.Coordinate
getInteriorPoint()
Gets the computed interior point.protected LineString
horizontalBisector(Geometry geometry)
private Geometry
widestGeometry(Geometry geometry)
private Geometry
widestGeometry(GeometryCollection gc)
-
-
-
Field Detail
-
factory
private GeometryFactory factory
-
interiorPoint
private Coordinate interiorPoint
-
maxWidth
private double maxWidth
-
-
Constructor Detail
-
InteriorPointArea
public InteriorPointArea(Geometry g)
Creates a new interior point finder for an areal geometry.- Parameters:
g
- an areal geometry
-
-
Method Detail
-
avg
private static double avg(double a, double b)
-
getInteriorPoint
public Coordinate getInteriorPoint()
Gets the computed interior point.- Returns:
- the coordinate of an interior point
-
add
private void add(Geometry geom)
Tests the interior vertices (if any) defined by an areal Geometry for the best inside point. If a component Geometry is not of dimension 2 it is not tested.- Parameters:
geom
- the geometry to add
-
addPolygon
private void addPolygon(Geometry geometry)
Finds an interior point of a Polygon.- Parameters:
geometry
- the geometry to analyze
-
widestGeometry
private Geometry widestGeometry(GeometryCollection gc)
-
horizontalBisector
protected LineString horizontalBisector(Geometry geometry)
-
centre
public static Coordinate centre(Envelope envelope)
Returns the centre point of the envelope.- Parameters:
envelope
- the envelope to analyze- Returns:
- the centre of the envelope
-
-