Package org.locationtech.jts.algorithm
Class Centroid
java.lang.Object
org.locationtech.jts.algorithm.Centroid
Computes the centroid of a
Geometry
of any dimension.
If the geometry is nominally of higher dimension,
but has lower effective dimension
(i.e. contains only components
having zero length or area),
the centroid will be computed as for the equivalent lower-dimension geometry.
If the input geometry is empty, a
null
Coordinate is returned.
Algorithm
- Dimension 2 - the centroid is computed
as the weighted sum of the centroids
of a decomposition of the area into (possibly overlapping) triangles.
Holes and multipolygons are handled correctly.
See
http://www.faqs.org/faqs/graphics/algorithms-faq/
for further details of the basic approach. - Dimension 1 - Computes the average of the midpoints of all line segments weighted by the segment length. Zero-length lines are treated as points.
- Dimension 0 - Compute the average coordinate for all points. Repeated points are all included in the average.
- Version:
- 1.7
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate Coordinate
private double
private Coordinate
private Coordinate
private Coordinate
private int
private double
private Coordinate
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate void
Adds a Geometry to the centroid total.private void
private void
addHole
(Coordinate[] pts) private void
addLineSegments
(Coordinate[] pts) Adds the line segments defined by an array of coordinates to the linear centroid accumulators.private void
addPoint
(Coordinate pt) Adds a point to the point centroid accumulator.private void
addShell
(Coordinate[] pts) private void
addTriangle
(Coordinate p0, Coordinate p1, Coordinate p2, boolean isPositiveArea) private static double
area2
(Coordinate p1, Coordinate p2, Coordinate p3) Returns twice the signed area of the triangle p1-p2-p3.private static void
centroid3
(Coordinate p1, Coordinate p2, Coordinate p3, Coordinate c) Computes three times the centroid of the triangle p1-p2-p3.Gets the computed centroid.static Coordinate
getCentroid
(Geometry geom) Computes the centroid point of a geometry.private void
setAreaBasePoint
(Coordinate basePt)
-
Field Details
-
areaBasePt
-
triangleCent3
-
areasum2
private double areasum2 -
cg3
-
lineCentSum
-
totalLength
private double totalLength -
ptCount
private int ptCount -
ptCentSum
-
-
Constructor Details
-
Centroid
Creates a new instance for computing the centroid of a geometry
-
-
Method Details
-
getCentroid
Computes the centroid point of a geometry.- Parameters:
geom
- the geometry to use- Returns:
- the centroid point, or null if the geometry is empty
-
add
Adds a Geometry to the centroid total.- Parameters:
geom
- the geometry to add
-
getCentroid
Gets the computed centroid.- Returns:
- the computed centroid, or null if the input is empty
-
setAreaBasePoint
-
add
-
addShell
-
addHole
-
addTriangle
-
centroid3
Computes three times the centroid of the triangle p1-p2-p3. The factor of 3 is left in to permit division to be avoided until later. -
area2
Returns twice the signed area of the triangle p1-p2-p3. The area is positive if the triangle is oriented CCW, and negative if CW. -
addLineSegments
Adds the line segments defined by an array of coordinates to the linear centroid accumulators.- Parameters:
pts
- an array ofCoordinate
s
-
addPoint
Adds a point to the point centroid accumulator.- Parameters:
pt
- aCoordinate
-