Skip to content

location

location #

Geographic separation between two locations.

Spreads captures across places, over an Earth of mean radius.

LocationDistanceFunction #

Bases: DistanceFunction[Location]

Great-circle distance between locations, normalized by sigma_m.

Source code in capturegraph-lib/capturegraph/scheduling/distance/location.py
class LocationDistanceFunction(DistanceFunction[cg.Location]):
    """Great-circle distance between locations, normalized by ``sigma_m``."""

    def __init__(self, sigma_m: float = 50.0) -> None:
        """Normalize the great-circle distance by ``sigma_m`` meters."""
        self.sigma_km = sigma_m / 1000.0

    def extract(self, values: cg.Array) -> np.ndarray:
        """Each location's latitude and longitude, in radians."""
        return np.radians(numeric(values, "latitude", "longitude"))

    def pairwise(self, features_a: np.ndarray, features_b: np.ndarray) -> np.ndarray:
        """The great-circle distances between two sets of locations."""
        arcs = haversine_radians(
            features_a[:, 0],
            features_a[:, 1],
            features_b[:, 0],
            features_b[:, 1],
        )
        return EARTH_RADIUS_KM * arcs / self.sigma_km

__init__(sigma_m=50.0) #

Normalize the great-circle distance by sigma_m meters.

Source code in capturegraph-lib/capturegraph/scheduling/distance/location.py
def __init__(self, sigma_m: float = 50.0) -> None:
    """Normalize the great-circle distance by ``sigma_m`` meters."""
    self.sigma_km = sigma_m / 1000.0

extract(values) #

Each location's latitude and longitude, in radians.

Source code in capturegraph-lib/capturegraph/scheduling/distance/location.py
def extract(self, values: cg.Array) -> np.ndarray:
    """Each location's latitude and longitude, in radians."""
    return np.radians(numeric(values, "latitude", "longitude"))

pairwise(features_a, features_b) #

The great-circle distances between two sets of locations.

Source code in capturegraph-lib/capturegraph/scheduling/distance/location.py
def pairwise(self, features_a: np.ndarray, features_b: np.ndarray) -> np.ndarray:
    """The great-circle distances between two sets of locations."""
    arcs = haversine_radians(
        features_a[:, 0],
        features_a[:, 1],
        features_b[:, 0],
        features_b[:, 1],
    )
    return EARTH_RADIUS_KM * arcs / self.sigma_km

location(sigma_m=50.0) #

Create a distance function based on geographic separation.

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 (location_a, location_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.

    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 `(location_a, location_b) -> float`.
    """
    return LocationDistanceFunction(sigma_m)