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 Coordinateprivate doubleprivate Coordinateprivate Coordinateprivate Coordinateprivate intprivate doubleprivate Coordinate -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate voidAdds a Geometry to the centroid total.private voidprivate voidaddHole(Coordinate[] pts) private voidaddLineSegments(Coordinate[] pts) Adds the line segments defined by an array of coordinates to the linear centroid accumulators.private voidaddPoint(Coordinate pt) Adds a point to the point centroid accumulator.private voidaddShell(Coordinate[] pts) private voidaddTriangle(Coordinate p0, Coordinate p1, Coordinate p2, boolean isPositiveArea) private static doublearea2(Coordinate p1, Coordinate p2, Coordinate p3) Returns twice the signed area of the triangle p1-p2-p3.private static voidcentroid3(Coordinate p1, Coordinate p2, Coordinate p3, Coordinate c) Computes three times the centroid of the triangle p1-p2-p3.Gets the computed centroid.static CoordinategetCentroid(Geometry geom) Computes the centroid point of a geometry.private voidsetAreaBasePoint(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 ofCoordinates
-
addPoint
Adds a point to the point centroid accumulator.- Parameters:
pt- aCoordinate
-