Skip to content

Tessellation

Types and functions for dividing geographic locations into satellite-imaging tiles aligned with orbital ground tracks.

OrbitGeometryTessellatorConfig

OrbitGeometryTessellatorConfig

OrbitGeometryTessellatorConfig(image_width: float = 5000.0, image_length: float = 5000.0, crosstrack_overlap: float = 200.0, alongtrack_overlap: float = 200.0, asc_dsc: AscDsc = None, min_image_length: float = 5000.0, max_image_length: float = 5000.0)

Configuration for the orbit geometry tessellator.

Controls tile dimensions, overlaps, and ascending/descending pass selection.

Parameters:

Name Type Description Default
image_width float

Cross-track tile width in meters (default: 5000)

5000.0
image_length float

Along-track tile length in meters (default: 5000)

5000.0
crosstrack_overlap float

Cross-track overlap in meters (default: 200)

200.0
alongtrack_overlap float

Along-track overlap in meters (default: 200)

200.0
asc_dsc AscDsc

Ascending/descending pass selection (default: Either)

None
min_image_length float

Minimum tile length in meters (default: 5000)

5000.0
max_image_length float

Maximum tile length in meters (default: 5000)

5000.0
Example
1
2
3
4
5
6
7
import brahe as bh

config = bh.OrbitGeometryTessellatorConfig(
    image_width=5000,
    image_length=5000,
    asc_dsc=bh.AscDsc.ASCENDING,
)

Initialize instance.

alongtrack_overlap property

alongtrack_overlap: float

Along-track overlap in meters.

Returns:

Name Type Description
float float

Overlap

asc_dsc property

asc_dsc: AscDsc

Ascending/descending pass selection.

Returns:

Name Type Description
AscDsc AscDsc

Pass selection

crosstrack_overlap property

crosstrack_overlap: float

Cross-track overlap in meters.

Returns:

Name Type Description
float float

Overlap

image_length property

image_length: float

Along-track tile length in meters.

Returns:

Name Type Description
float float

Tile length

image_width property

image_width: float

Cross-track tile width in meters.

Returns:

Name Type Description
float float

Tile width

max_image_length property

max_image_length: float

Maximum tile length in meters.

Returns:

Name Type Description
float float

Max tile length

min_image_length property

min_image_length: float

Minimum tile length in meters.

Returns:

Name Type Description
float float

Min tile length

OrbitGeometryTessellator

OrbitGeometryTessellator

OrbitGeometryTessellator(propagator: SGPPropagator, epoch: Epoch, config: OrbitGeometryTessellatorConfig = None, spacecraft_id: str = None)

Tessellator that uses orbital geometry to create rectangular tiles aligned with satellite ground tracks.

Uses the satellite's orbital elements to compute along-track directions at the target latitude, then tiles the area perpendicular and parallel to the ground track. Each output tile is a PolygonLocation with metadata properties:

  • tile_direction: along-track unit ECEF vector [x, y, z]
  • tile_width: cross-track dimension (m)
  • tile_length: along-track dimension (m)
  • tile_area: width * length (m^2)
  • tile_group_id: UUID string shared by tiles in the same tiling direction
  • spacecraft_ids: list of spacecraft identifiers

Parameters:

Name Type Description Default
propagator SGPPropagator

Orbit propagator

required
epoch Epoch

Reference epoch for the propagator

required
config OrbitGeometryTessellatorConfig

Tessellation configuration

None
spacecraft_id str

Optional spacecraft identifier for tile metadata

None
Example
1
2
3
4
5
6
7
8
9
import brahe as bh

prop = bh.SGPPropagator(line1, line2)
config = bh.OrbitGeometryTessellatorConfig(
    image_width=5000, image_length=5000
)
tess = bh.OrbitGeometryTessellator(prop, prop.epoch, config)
point = bh.PointLocation(10.0, 30.0, 0.0)
tiles = tess.tessellate_point(point)

Initialize instance.

config property

Get the tessellator configuration.

Returns:

Name Type Description
OrbitGeometryTessellatorConfig OrbitGeometryTessellatorConfig

Current configuration

name method descriptor

name() -> str

Get the tessellator name.

Returns:

Name Type Description
str str

Tessellator name

tessellate method descriptor

tessellate(location: PointLocation | PolygonLocation) -> list[PolygonLocation]

Tessellate a location (point or polygon) into rectangular tiles.

Dispatches to tessellate_point or tessellate_polygon based on input type.

Parameters:

Name Type Description Default
location PointLocation | PolygonLocation

Location to tessellate

required

Returns:

Type Description
list[PolygonLocation]

list[PolygonLocation]: Tessellated tiles with metadata properties

tessellate_point method descriptor

tessellate_point(point: PointLocation) -> list[PolygonLocation]

Tessellate a point location into rectangular tiles.

Creates one tile per orbital pass direction (ascending, descending, or both) centered on the point. At high latitudes where ascending and descending directions converge, redundant tiles may be automatically merged.

Parameters:

Name Type Description Default
point PointLocation

Point to tessellate

required

Returns:

Type Description
list[PolygonLocation]

list[PolygonLocation]: Tessellated tiles with metadata properties

Example
1
2
3
4
5
6
import brahe as bh

point = bh.PointLocation(10.0, 30.0, 0.0)
tiles = tessellator.tessellate_point(point)
for tile in tiles:
    print(tile.properties)

tessellate_polygon method descriptor

tessellate_polygon(polygon: PolygonLocation) -> list[PolygonLocation]

Tessellate a polygon location into rectangular tiles.

Divides the polygon into cross-track strips aligned with satellite ground tracks, then subdivides each strip along-track into tiles. Handles concave polygons by detecting gaps in the along-track direction.

Parameters:

Name Type Description Default
polygon PolygonLocation

Polygon to tessellate

required

Returns:

Type Description
list[PolygonLocation]

list[PolygonLocation]: Tessellated tiles with metadata properties

Example
import brahe as bh
import numpy as np

vertices = np.array([
    [10.0, 30.0, 0.0],
    [10.1, 30.0, 0.0],
    [10.1, 30.1, 0.0],
    [10.0, 30.1, 0.0],
])
polygon = bh.PolygonLocation(vertices)
tiles = tessellator.tessellate_polygon(polygon)

tile_merge_orbit_geometry

tile_merge_orbit_geometry builtin

tile_merge_orbit_geometry(tiles: list[PolygonLocation], at_overlap: float = 200.0, ct_overlap: float = 200.0, mergable_range_deg: float = 2.0) -> list[PolygonLocation]

Merge tessellation tiles from multiple spacecraft.

When multiple spacecraft can image the same area with similar ground-track directions, tiles from one spacecraft can be merged onto another by adding the alternate spacecraft's ID to the base tile's spacecraft_ids property.

Parameters:

Name Type Description Default
tiles list[PolygonLocation]

All tiles from all spacecraft

required
at_overlap float

Along-track overlap in meters

200.0
ct_overlap float

Cross-track overlap in meters

200.0
mergable_range_deg float

Maximum angular difference in degrees for grouping directions

2.0

Returns:

Type Description
list[PolygonLocation]

list[PolygonLocation]: Reduced set of tiles with merged spacecraft_ids

Example
1
2
3
4
5
6
7
8
9
import brahe as bh

# Tessellate with two spacecraft
tiles_sc1 = tess1.tessellate_point(point)
tiles_sc2 = tess2.tessellate_point(point)
all_tiles = tiles_sc1 + tiles_sc2

# Merge tiles with similar directions
merged = bh.tile_merge_orbit_geometry(all_tiles, 200.0, 200.0, 2.0)

See Also