Area - ObjectVision/GeoDMS GitHub Wiki

Geometric functions area

syntax

  • area(polygon_data_item, valuesunit)
  • area(polygon_data_item)

definition

area(polygon_data_item, valuesunit) calculates the surface of the polygon_data_item argument, in the image the green hatched area.

The resulting values unit is configured as second argument.

Since GeoDMS 20.3.0 that second argument may be left out. area(polygon_data_item) derives the resulting values unit from the coordinates themselves: the square of their metric, so m2 for a coordinate system in metres. Use it when you have no values unit of your own to name; configure the second argument when you do, since only a configured unit can be referred to elsewhere in the model.

Since GeoDMS 20.19.2 the single-argument form also works on coordinates that have a metric, which is the normal case for a projected SpatialReference. Before 20.19.2 it crashed the GeoDMS GUI on exactly those coordinates; only coordinates without a metric, such as a plain grid domain, came through. The two-argument form was never affected.

description

The resulting area values need to be positive; if the values are negative it means the order of points in the polygon geometry is not according to the following rules:

The order of points in a sequence needs to be clockwise for exterior bounds and counter clockwise for holes in polygons (right-hand-rule)

Beware that area(g) < 0 is not a complete check on the point order. It is a single signed sum over the whole sequence, so it only catches a feature whose rings are all in the wrong direction; a multi-polygon where only one lake is turned the wrong way comes out too large rather than negative. Use has_correct_winding to test the point order, and fix_winding_order to repair it.

applies to

  • [data item]] polygon_data_item with fpoint or dpoint [[value type]] and [composition type polygon.

conditions

The metric of the values unit argument must match with the square of the metric of the coordinates in the coordinate system. Since GeoDMS 20.3.0 a matching values unit that is not the same size, such as km2 against coordinates in metres, is converted rather than only relabelled, and a values unit whose metric does not match at all is reported as a warning and still accepted as a label, which is deprecated behaviour.

example

attribute<m2> surface   (district) := area(district/geometry, m2);
attribute<m2> surface_v2 (district) := area(district/geometry); // same values, m2 derived from the coordinates
district/geometry surface
{21: xy(113810; 403025) ... 1003100
{17: xy(113269; 400990) ... 474460
{19: xy(115099; 401238) ... 1246460

domain district, nr of rows = 3