Skip to content

capturegraph.scheduling.distance.location #

Location Distance - Geographic Separation#

Measures the geographic distance between two locations using the Haversine formula. Used to ensure captures are distributed across different locations.

location_distance_km(loc_a, loc_b) #

Compute great-circle distance using the Haversine formula.

Parameters:

Name Type Description Default
loc_a Location

First location with longitude and latitude attributes.

required
loc_b Location

Second location with longitude and latitude attributes.

required

Returns:

Type Description
float

Distance in kilometers.

Source code in capturegraph-lib/capturegraph/scheduling/distance/location.py
def location_distance_km(loc_a: cg.Location, loc_b: cg.Location) -> float:
    """Compute great-circle distance using the Haversine formula.

    Args:
        loc_a: First location with longitude and latitude attributes.
        loc_b: Second location with longitude and latitude attributes.

    Returns:
        Distance in kilometers.
    """
    # Convert to radians
    lon1, lat1 = np.radians(loc_a.longitude), np.radians(loc_a.latitude)
    lon2, lat2 = np.radians(loc_b.longitude), np.radians(loc_b.latitude)

    # Haversine formula
    d_lat = lat2 - lat1
    d_lon = lon2 - lon1

    a = np.square(np.sin(d_lat / 2)) + np.cos(lat1) * np.cos(lat2) * np.square(
        np.sin(d_lon / 2)
    )
    c = 2 * np.arcsin(np.sqrt(np.clip(a, 0, 1)))

    return EARTH_RADIUS_KM * c

location(sigma_m=50.0) #

Create a distance function based on geographic separation.

Uses the Haversine formula to compute great-circle distance between locations on Earth.

Parameters:

Name Type Description Default
sigma_m float

Normalization factor in meters. The returned distance is distance_m / sigma_m, so sessions within sigma_m have distance < 1.0. Default is 50m.

50.0

Returns:

Type Description
LocationDistanceFunction

A distance function with batch support: (session_a, session_b) -> float

Source code in capturegraph-lib/capturegraph/scheduling/distance/location.py
def location(sigma_m: float = 50.0) -> LocationDistanceFunction:
    """Create a distance function based on geographic separation.

    Uses the Haversine formula to compute great-circle distance between
    locations on Earth.

    Args:
        sigma_m: Normalization factor in meters. The returned distance is
            `distance_m / sigma_m`, so sessions within sigma_m have
            distance < 1.0. Default is 50m.

    Returns:
        A distance function with batch support: `(session_a, session_b) -> float`
    """
    return LocationDistanceFunction(sigma_m)