NASA World Wind

gov.nasa.worldwind.util.measure
Class AreaMeasurer

java.lang.Object
  extended by gov.nasa.worldwind.util.measure.LengthMeasurer
      extended by gov.nasa.worldwind.util.measure.AreaMeasurer
All Implemented Interfaces:
MeasurableArea, MeasurableLength

public class AreaMeasurer
extends LengthMeasurer
implements MeasurableArea

Utility class to compute approximations of projected and surface (terrain following) area on a globe.

To properly compute surface area the measurer must be provided with a list of positions that describe a closed path - one which last position is equal to the first.

Segments which are longer then the current maxSegmentLength will be subdivided along lines following the current pathType - Polyline.LINEAR, Polyline.RHUMB_LINE or Polyline.GREAT_CIRCLE.

Projected or non terrain following area is computed in a sinusoidal projection which is equivalent or equal area. Surface or terrain following area is approximated by sampling the path bounding sector with square cells along a grid. Cells which center is inside the path have their area estimated and summed according to the overall slope at the cell south-west corner.

See Also:
MeasureTool, LengthMeasurer

Field Summary
protected  double projectedArea
           
protected  double surfaceArea
           
 
Fields inherited from class gov.nasa.worldwind.util.measure.LengthMeasurer
length
 
Constructor Summary
AreaMeasurer()
           
AreaMeasurer(ArrayList<? extends Position> positions)
           
 
Method Summary
protected  void clearCachedValues()
           
protected  double computeProjectedAreaGeometry(Globe globe)
           
protected  double computeSurfaceAreaSampling(Globe globe, double steps)
           
protected  double computeTriangleProjectedArea(Globe globe, float[] verts, int a, int b, int c)
           
 double getArea(Globe globe)
          Get the surface area approximation for the current path or shape.
 double getAreaTerrainSamplingSteps()
          Get the sampling grid maximum number of rows or columns for terrain following surface area approximation.
 double getHeight(Globe globe)
          Returns the latitudanl length of the object in meters.
 double getPerimeter(Globe globe)
          Returns the length of the object's perimeter in meters.
 double getProjectedArea(Globe globe)
           
 double getSurfaceArea(Globe globe)
           
 double getWidth(Globe globe)
          Returns the longitudinal length of the object in meters.
static boolean isLocationInside(LatLon point, ArrayList<? extends LatLon> positions)
          Returns true if a given location (LatLon) is located inside a given polygon
 void setAreaTerrainSamplingSteps(double steps)
          Set the sampling grid maximum number of rows or columns for terrain following surface area approximation.
 void setPositions(ArrayList<? extends Position> positions)
           
 
Methods inherited from class gov.nasa.worldwind.util.measure.LengthMeasurer
computeLength, getBoundingSector, getLength, getLengthTerrainSamplingSteps, getMaxSegmentLength, getPathType, getPositions, isClosedShape, isFollowTerrain, setFollowTerrain, setLengthTerrainSamplingSteps, setMaxSegmentLength, setPathType, setPositions, subdividePositions, subdividePositions
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

projectedArea

protected double projectedArea

surfaceArea

protected double surfaceArea
Constructor Detail

AreaMeasurer

public AreaMeasurer()

AreaMeasurer

public AreaMeasurer(ArrayList<? extends Position> positions)
Method Detail

clearCachedValues

protected void clearCachedValues()
Overrides:
clearCachedValues in class LengthMeasurer

computeProjectedAreaGeometry

protected double computeProjectedAreaGeometry(Globe globe)

computeSurfaceAreaSampling

protected double computeSurfaceAreaSampling(Globe globe,
                                            double steps)

computeTriangleProjectedArea

protected double computeTriangleProjectedArea(Globe globe,
                                              float[] verts,
                                              int a,
                                              int b,
                                              int c)

getArea

public double getArea(Globe globe)
Get the surface area approximation for the current path or shape.

If the measurer is set to follow terrain, the computed area will account for terrain deformations. Otherwise the area is that of the path once projected at sea level - elevation zero.

Specified by:
getArea in interface MeasurableArea
Parameters:
globe - the globe to draw terrain information from.
Returns:
the current shape surface area or -1 if the position list does not describe a closed path or is too short.

getAreaTerrainSamplingSteps

public double getAreaTerrainSamplingSteps()
Get the sampling grid maximum number of rows or columns for terrain following surface area approximation.

Returns:
the sampling grid maximum number of rows or columns.

getHeight

public double getHeight(Globe globe)
Description copied from interface: MeasurableArea
Returns the latitudanl length of the object in meters. The length is the distance from the objects south-most point to its east-most position.

Specified by:
getHeight in interface MeasurableArea
Parameters:
globe - The globe the object is related to.
Returns:
the height of the object in meters.

getPerimeter

public double getPerimeter(Globe globe)
Description copied from interface: MeasurableArea
Returns the length of the object's perimeter in meters. If the object conforms to terrain, the perimeter is that along the terrain, including its hillsides and other undulations.

Specified by:
getPerimeter in interface MeasurableArea
Parameters:
globe - The globe the object is related to.
Returns:
the object's perimeter in meters. Returns -1 if the object does not form an area due to an insufficient number of vertices or any other condition.

getProjectedArea

public double getProjectedArea(Globe globe)

getSurfaceArea

public double getSurfaceArea(Globe globe)

getWidth

public double getWidth(Globe globe)
Description copied from interface: MeasurableArea
Returns the longitudinal length of the object in meters. The length is the distance from the object's west-most point to its east-most. If the object is terrain conforming then the

Specified by:
getWidth in interface MeasurableArea
Parameters:
globe - The globe the object is related to.
Returns:
the width of the object in meters.

isLocationInside

public static boolean isLocationInside(LatLon point,
                                       ArrayList<? extends LatLon> positions)
Returns true if a given location (LatLon) is located inside a given polygon

Parameters:
point - the location
positions - the list of positions describing the polygon. Last one should be the same as the first one.
Returns:
true if the location is inside the polygon.

setAreaTerrainSamplingSteps

public void setAreaTerrainSamplingSteps(double steps)
Set the sampling grid maximum number of rows or columns for terrain following surface area approximation.

Parameters:
steps - the sampling grid maximum number of rows or columns.

setPositions

public void setPositions(ArrayList<? extends Position> positions)
Overrides:
setPositions in class LengthMeasurer

NASA World Wind