Measurement

pygeos.measurement.area(geometry, **kwargs)

Computes the area of a (multi)polygon.

Parameters

geometry : Geometry or array_like

Examples

>>> area(Geometry("POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))"))
100.0
>>> area(Geometry("MULTIPOLYGON (((0 0, 0 10, 10 10, 0 0)), ((0 0, 0 10, 10 10, 0 0)))"))
100.0
>>> area(Geometry("POLYGON EMPTY"))
0.0
>>> area(None)
nan
pygeos.measurement.bounds(geometry, **kwargs)

Computes the bounds (extent) of a geometry.

For each geometry these 4 numbers are returned: min x, min y, max x, max y.

Parameters

geometry : Geometry or array_like

Examples

>>> bounds(Geometry("POINT (2 3)")).tolist()
[2.0, 3.0, 2.0, 3.0]
>>> bounds(Geometry("LINESTRING (0 0, 0 2, 3 2)")).tolist()
[0.0, 0.0, 3.0, 2.0]
>>> bounds(Geometry("POLYGON EMPTY")).tolist()
[nan, nan, nan, nan]
>>> bounds(None).tolist()
[nan, nan, nan, nan]
pygeos.measurement.distance(a, b, **kwargs)

Computes the Cartesian distance between two geometries.

Parameters

a, b : Geometry or array_like

Examples

>>> point = Geometry("POINT (0 0)")
>>> distance(Geometry("POINT (10 0)"), point)
10.0
>>> distance(Geometry("LINESTRING (1 1, 1 -1)"), point)
1.0
>>> distance(Geometry("POLYGON ((3 0, 5 0, 5 5, 3 5, 3 0))"), point)
3.0
>>> distance(Geometry("POINT EMPTY"), point)
nan
>>> distance(None, point)
nan
pygeos.measurement.frechet_distance(a, b, densify=None, **kwargs)

Compute the discrete Fréchet distance between two geometries.

The Fréchet distance is a measure of similarity: it is the greatest distance between any point in A and the closest point in B. The discrete distance is an approximation of this metric: only vertices are considered. The parameter ‘densify’ makes this approximation less coarse by splitting the line segments between vertices before computing the distance.

Fréchet distance sweep continuously along their respective curves and the direction of curves is significant. This makes it a better measure of similarity than Hausdorff distance for curve or surface matching.

Parameters

a, b : Geometry or array_like

densify : float, array_like or None

The value of densify is required to be between 0 and 1.

Examples

>>> line_1 = Geometry("LINESTRING (0 0, 100 0)")
>>> line_2 = Geometry("LINESTRING (0 0, 50 50, 100 0)")
>>> frechet_distance(line_1, line_2)  
70.71...
>>> frechet_distance(line_1, line_2, densify=0.5)
50.0
>>> frechet_distance(line_1, Geometry("LINESTRING EMPTY"))
nan
>>> frechet_distance(line_1, None)
nan
pygeos.measurement.hausdorff_distance(a, b, densify=None, **kwargs)

Compute the discrete Hausdorff distance between two geometries.

The Hausdorff distance is a measure of similarity: it is the greatest distance between any point in A and the closest point in B. The discrete distance is an approximation of this metric: only vertices are considered. The parameter ‘densify’ makes this approximation less coarse by splitting the line segments between vertices before computing the distance.

Parameters

a, b : Geometry or array_like

densify : float, array_like or None

The value of densify is required to be between 0 and 1.

Examples

>>> line_1 = Geometry("LINESTRING (130 0, 0 0, 0 150)")
>>> line_2 = Geometry("LINESTRING (10 10, 10 150, 130 10)")
>>> hausdorff_distance(line_1, line_2)  
14.14...
>>> hausdorff_distance(line_1, line_2, densify=0.5)
70.0
>>> hausdorff_distance(line_1, Geometry("LINESTRING EMPTY"))
nan
>>> hausdorff_distance(line_1, None)
nan
pygeos.measurement.length(geometry, **kwargs)

Computes the length of a (multi)linestring or polygon perimeter.

Parameters

geometry : Geometry or array_like

Examples

>>> length(Geometry("LINESTRING (0 0, 0 2, 3 2)"))
5.0
>>> length(Geometry("MULTILINESTRING ((0 0, 1 0), (0 0, 1 0))"))
2.0
>>> length(Geometry("POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))"))
40.0
>>> length(Geometry("LINESTRING EMPTY"))
0.0
>>> length(None)
nan
pygeos.measurement.total_bounds(geometry, **kwargs)

Computes the total bounds (extent) of the geometry.

Parameters

geometry : Geometry or array_like

Returns

numpy ndarray of [xmin, ymin, xmax, ymax]

>>> total_bounds(Geometry("POINT (2 3)")).tolist()

[2.0, 3.0, 2.0, 3.0]

>>> total_bounds([Geometry("POINT (2 3)"), Geometry("POINT (4 5)")]).tolist()

[2.0, 3.0, 4.0, 5.0]

>>> total_bounds([Geometry("LINESTRING (0 1, 0 2, 3 2)"),Geometry("LINESTRING (4 4, 4 6, 6 7)")]).tolist()

[0.0, 1.0, 6.0, 7.0]

>>> total_bounds(Geometry("POLYGON EMPTY")).tolist()

[nan, nan, nan, nan]

>>> total_bounds([Geometry("POLYGON EMPTY"), Geometry("POINT (2 3)")]).tolist()

[2.0, 3.0, 2.0, 3.0]

>>> total_bounds(None).tolist()

[nan, nan, nan, nan]