gws.lib.extent

Utilities for extents.

An extent (gws.Extent) is a tuple (x-min, y-min, x-max, y-max) of floats. Extents have no CRS of their own; for a geo-referenced extent, see gws.Bounds and gws.lib.bounds.

This package provides functions to:

  • create extents from strings, lists, points, a center point and size, or a PostGIS BOX,

  • measure extents (center, size, width, height, diagonal),

  • combine extents (intersection, union, buffer, circumscribed square),

  • transform extents between CRSs,

  • validate extents.

Example:

import gws.lib.crs
import gws.lib.extent

ext = gws.lib.extent.from_string('0,0,100,50')
gws.lib.extent.size(ext)  # (100.0, 50.0)
gws.lib.extent.buffer(ext, 10)  # (-10.0, -10.0, 110.0, 60.0)

wgs = gws.lib.extent.transform_to_wgs(ext, gws.lib.crs.WEBMERCATOR)

Source code: gws.lib.extent

Package Contents

gws.lib.extent.buffer(e: gws.Extent, buf: float) → gws.Extent

Create an extent with a buffer around another extent.

Parameters:
  • e – An extent.

  • buf – Buffer added on each side. A positive value makes the extent bigger, a negative one smaller.

Returns:

The buffered extent.

gws.lib.extent.center(e: gws.Extent) → gws.Point

Get the center point of an extent.

Parameters:

e – An extent.

Returns:

The center point.

gws.lib.extent.circumsquare(e: gws.Extent) → gws.Extent

Get the square that circumscribes an extent.

The square has the same center as the extent, and its side equals the extent’s diagonal, so that it contains the extent at any rotation.

Parameters:

e – An extent.

Returns:

The square extent.

gws.lib.extent.diagonal(e: gws.Extent) → float

Get the length of the diagonal of an extent.

Parameters:

e – An extent.

Returns:

The diagonal length.

gws.lib.extent.from_box(box: str) → gws.Extent | None

Create an extent from a PostGIS box.

Parameters:

box – PostGIS box like BOX(minx miny,maxx maxy).

Returns:

An extent, or None if the box is empty or invalid.

gws.lib.extent.from_center(xy: gws.Point, size: gws.Size) → gws.Extent

Create an extent of a given size around a center point.

Parameters:
  • xy – Center point.

  • size – Width and height.

Returns:

An extent.

gws.lib.extent.from_list(ls: list) → gws.Extent | None

Create an extent from a list.

Parameters:

ls – List [x-min, y-min, x-max, y-max] of numbers or numeric strings.

Returns:

An extent, or None if the list is not a valid extent.

gws.lib.extent.from_points(a: gws.Point, b: gws.Point) → gws.Extent

Create an extent from two opposite corner points.

Parameters:
  • a – First point.

  • b – Second point.

Returns:

The smallest extent that contains both points.

gws.lib.extent.from_string(s: str) → gws.Extent | None

Create an extent from a comma-separated string.

Parameters:

s – String like x-min,y-min,x-max,y-max.

Returns:

An extent, or None if the string is not a valid extent.

gws.lib.extent.h(e: gws.Extent) → float

Get the height of an extent.

Parameters:

e – An extent.

Returns:

The height.

gws.lib.extent.intersect(a: gws.Extent, b: gws.Extent) → bool

Check if two extents intersect.

Extents that only touch at the edges are considered intersecting.

Parameters:
  • a – First extent.

  • b – Second extent.

Returns:

True if the extents intersect.

gws.lib.extent.intersection(*exts: gws.Extent) → gws.Extent | None

Create an extent that is the intersection of all given extents.

Parameters:

*exts – Extents.

Returns:

An extent, or None if the extents do not intersect or none are given.

gws.lib.extent.is_valid(e: gws.Extent) → bool

Check if an extent is valid.

A valid extent has four finite values, and its minimum values are less than its maximum values.

Parameters:

e – An extent.

Returns:

True if the extent is valid.

gws.lib.extent.is_valid_wgs(e: gws.Extent) → bool

Check if an extent is valid and lies within the WGS84 bounds.

Parameters:

e – An extent in WGS84.

Returns:

True if the extent is valid and within (-180, -90, 180, 90).

gws.lib.extent.size(e: gws.Extent) → gws.Size

Get the size of an extent.

Parameters:

e – An extent.

Returns:

A (width, height) tuple.

gws.lib.extent.swap_xy(e: gws.Extent) → gws.Extent

Swap the x and y values of an extent.

Parameters:

e – An extent.

Returns:

The extent (y-min, x-min, y-max, x-max).

gws.lib.extent.transform(e: gws.Extent, crs_from: gws.Crs, crs_to: gws.Crs) → gws.Extent

Transform an extent to a different coordinate reference system.

Parameters:
  • e – An extent.

  • crs_from – Source CRS.

  • crs_to – Target CRS.

Returns:

The transformed extent.

gws.lib.extent.transform_from_wgs(e: gws.Extent, crs_to: gws.Crs) → gws.Extent

Transform a WGS84 extent to a different coordinate reference system.

Parameters:
  • e – An extent in WGS84.

  • crs_to – Target CRS.

Returns:

The transformed extent.

gws.lib.extent.transform_to_wgs(e: gws.Extent, crs_from: gws.Crs) → gws.Extent

Transform an extent to WGS84.

Parameters:
  • e – An extent.

  • crs_from – Source CRS.

Returns:

The WGS84 extent.

gws.lib.extent.union(*exts: gws.Extent) → gws.Extent

Create the smallest extent that contains all the given extents.

Parameters:

*exts – Extents, at least one.

Returns:

An extent.

gws.lib.extent.w(e: gws.Extent) → float

Get the width of an extent.

Parameters:

e – An extent.

Returns:

The width.