Access Computation¶
Access computation determines when and under what conditions satellites can view, observe, or "access" ground locations. This is fundamental for mission planning, ground station contact scheduling, imaging opportunity planning, and other mission operations planning tasks.
An access occurs when a satellite has a clear geometric line-of-sight to a ground location and meets all constraints (e.g., minimum elevation angle, local time of day, look direction). Brahe's access computation system identifies time windows where all constraints are met and computes relevant properties (e.g., azimuth, elevation, off-nadir angle) for each access window. The system is designed to be flexible, allowing users to define custom locations, constraints, and properties as needed. Access computation is also parallelized by default to efficiently handle large numbers of locations and satellites.
System Architecture¶
Brahe's access computation system is built around four major components:
1. Locations¶
Locations define where to check for access. Brahe supports two primary location types:
PointLocation- Single geodetic point (e.g., ground station, city)PolygonLocation- Closed polygon area (e.g., imaging region, coverage zone)
Both implement the AccessibleLocation trait, which provides coordinate access, property management, and GeoJSON import/export capabilities. Locations can be created from coordinates or loaded from GeoJSON files, and the type supports custom properties for metadata storage.
2. Constraints¶
Constraints define what conditions must be satisfied for an access to occur. Brahe provides several built-in constraint types including:
ElevationConstraint- Minimum/maximum elevation above horizonElevationMaskConstraint- Azimuth-dependent elevation masks (terrain profiles)OffNadirConstraint- Minimum/maximum off-nadir angle (imaging satellites)LocalTimeConstraint- Local solar time windows (e.g., daylight imaging)LookDirectionConstraint- Left/right/either relative to velocity vectorAscDscConstraint- Ascending/descending pass filter
Constraints can be combined using the ConstraintComposite system to express sophisticated requirements like "elevation > 10° AND (daylight OR look-right)". Python users can create custom constraints by implementing the AccessConstraintComputer interface.
Learn more about Constraints →
3. Properties¶
Properties define what information to compute during each access window. Brahe automatically computes six core geometric properties:
azimuth_open,azimuth_close- Azimuth angles at window start/endelevation_min,elevation_max- Minimum/maximum elevation during accessoff_nadir_min,off_nadir_max- Minimum/maximum off-nadir anglelocal_time- Local solar time at access midpointlook_direction- Satellite look direction (Left/Right)asc_dsc- Pass type (Ascending/Descending)
Properties are stored as PropertyValue enums supporting scalar, vector, time-series, boolean, string, and JSON data types. Users can add custom properties or implement AccessPropertyComputer for automated property calculation during access searches.
4. Computation¶
Computation is the algorithm that ties everything together. The primary function location_accesses() performs a two-phase search:
- Coarse search - Evaluate access at regular time steps to identify candidate windows
- Refinement - Use binary search to precisely locate window boundaries
The AccessSearchConfig struct controls algorithm behavior (initial time step, adaptive stepping, etc.) for optimal performance across different scenarios. Results are returned as AccessWindow objects containing start/end times, identifiers, and computed properties.
Learn more about Computation →
Module Catalog¶
This section provides a complete reference of all types, traits, and functions in the access computation module.
Location Types¶
PointLocation - Single geodetic point location
- Create from coordinates:
new(lat, lon, alt) - Load from GeoJSON:
from_geojson(geojson_str) - Access coordinates:
lat(),lon(),alt(),longitude(),latitude(),altitude() - Manage properties:
add_property(name, value) - Export:
to_geojson()
PolygonLocation - Closed polygon area location
- Create from vertices:
new(vertices) - Load from GeoJSON:
from_geojson(geojson_str) - Access geometry:
vertices(),num_vertices(), center vialat(),lon(),alt() - Manage properties:
add_property(name, value) - Export:
to_geojson()
AccessibleLocation trait - Common interface for all location types
- Get center coordinates:
center_geodetic(),center_ecef() - Access properties:
properties(),properties_mut() - Export:
to_geojson()
Constraint Types¶
Built-in Constraints:
ElevationConstraint- Enforce minimum/maximum elevation angles above horizonElevationMaskConstraint- Apply azimuth-dependent elevation masks for terrain modelingOffNadirConstraint- Limit off-nadir viewing angles for imaging payloadsLocalTimeConstraint- Filter by local solar time windows (e.g., daylight-only imaging)LookDirectionConstraint- Require left/right/either look direction relative to velocityAscDscConstraint- Filter by ascending/descending pass typeConstraintComposite- Combine constraints with Boolean logic (All/Any/Not)
Constraint Traits:
AccessConstrainttrait - Interface for evaluating constraints at specific timesevaluate(epoch, location, propagator) -> bool- Check if constraint satisfiedname()- Get constraint name for debugging-
format_string()- Get human-readable constraint description -
AccessConstraintComputertrait - Python interface for custom user-defined constraints evaluate(epoch, location, propagator) -> bool- Custom constraint logicname()- Constraint identifier
Property Types¶
PropertyValue enum - Strongly-typed property values
Scalar(f64)- Single floating-point valueVector(Vec<f64>)- Array of valuesTimeSeries(Vec<(Epoch, f64)>)- Time-indexed measurementsBoolean(bool)- True/false flagString(String)- Text dataJson(String)- Arbitrary JSON data
AccessProperties struct - Container for access window properties
- Core properties:
azimuth_open,azimuth_close,elevation_min,elevation_max,off_nadir_min,off_nadir_max,local_time,look_direction,asc_dsc - Custom properties stored in HashMap
- Methods:
new(),add_property(name, value),get_property(name)
AccessPropertyComputer trait - Python interface for custom property calculation
compute(window, location, propagator) -> HashMap<String, PropertyValue>- Calculate propertiesproperty_names() -> Vec<String>- List computed property names
Window and Configuration Types¶
AccessWindow struct - Represents a single access opportunity
- Time bounds:
window_open,window_close - Identifiers:
location_name/id/uuid,satellite_name/id/uuid,name/id/uuid - Properties:
properties(AccessProperties) - Methods:
new(),start(),end(),midtime(),duration()
AccessSearchConfig struct - Controls access computation algorithm
initial_time_step- Coarse search step size (seconds)adaptive_step- Enable adaptive refinementadaptive_fraction- Refinement step fraction (0.0-1.0)parallel- Enable parallel location/satellite processingnum_threads- Thread pool size (0 = auto)
Enumerations¶
LookDirection - Satellite look direction
Left- Looking left relative to velocity vectorRight- Looking right relative to velocity vectorEither- Either direction acceptable
AscDsc - Pass type classification
Ascending- Satellite moving from south to northDescending- Satellite moving from north to southEither- Either direction acceptable
See Also¶
- Locations - Ground location types and GeoJSON support
- Constraints - Built-in and custom constraint types
- Computation - Access algorithms and property computation
- Example: Predicting Ground Contacts - Complete ground station example
- Example: Computing Imaging Opportunities - Imaging scenario
- API Reference: Access Module - Complete API documentation