Observed since 20 Oct, 20:20 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Small, dependency-light geospatial feature primitives: distance, jitter, coordinate validation and normalization.
Small, dependency-light geospatial feature primitives for tabular data: great-circle distance, distance-to-landmark, location-jitter (movement between successive points), coordinate normalization, and coordinate validation. Built on pandas/numpy only - no geopandas, no shapely, no Dask, no network calls.
Status: published on PyPI. This repository is public on GitHub under Apache License 2.0. See the production PyPI project page.
aei-geo-features is a small, general-purpose geospatial feature utility
This project is separate from, and does not include, any part of AID Edge Inc.'s proprietary Velorona telecom and decision-intelligence capabilities. It contains only generic geospatial math and ships with no data beyond three widely-known public landmarks used as illustrative examples - no telecom, network, or detection-specific logic of any kind.
aei-geo-features is intended for developers, data scientists, analysts,
and researchers working with tabular data that includes latitude and
longitude.
It is useful for:
This library is especially suitable when simple, deterministic geospatial utilities are needed, but routing, geocoding, polygon operations, CRS transformation, or spatial databases are out of scope.
Typical use cases include:
pip install aei-geo-features
import pandas as pd
from aei_geo_features import haversine_distance, add_distance_to_landmark
# Single-pair distance
toronto = (43.6426, -79.3871)
paris = (48.8584, 2.2945)
print(round(haversine_distance(*toronto, *paris), 2))
# 5997.88
# DataFrame feature helper
df = pd.DataFrame({"latitude": [43.64], "longitude": [-79.38]})
df = add_distance_to_landmark(df, landmark="CN_TOWER")
print(df)
# latitude longitude dist_to_cn_tower_km
# 0 43.64 -79.38 0.640313
See examples/basic_usage.py for a complete, runnable example.
| Function / value | Purpose |
|---|---|
haversine_distance(lat1, lon1, lat2, lon2, unit="km") | Great-circle distance between two points. |
validate_coordinate(lat, lon) | Raises InvalidCoordinateError for an out-of-range or non-numeric pair; returns True otherwise. |
add_distance_to_landmark(df, landmark=..., ...) | Adds a distance-to-landmark column to a DataFrame. |
add_location_jitter(df, ...) | Adds a distance-from-previous-row column (optionally time-sorted first). |
normalize_coordinates(df, ...) | Clips latitude to [-90, 90], wraps longitude into [-180, 180]. |
validate_dataframe(df, ...) | Validates a DataFrame's coordinate columns exist, are numeric, and are in range. |
REFERENCE_LANDMARKS | Three illustrative public landmarks (CN Tower, Eiffel Tower, Statue of Liberty) - not a claim about any real deployment or dataset. |
GeoFeatureError and subclasses (InvalidCoordinateError, MissingColumnError, UnsupportedUnitError, LandmarkNotFoundError) | Typed, catchable errors - never a bare ValueError/Exception for a domain failure. |
This is deliberately a narrow API. It does not include polygon region
assignment, CRS transformation, spatial indexing, or GeoJSON export - those
are heavier, geopandas/shapely/pyproj-dependent capabilities that were
evaluated and intentionally excluded from this package (see
CHANGELOG.md and the project's internal audit notes) as out of scope for
a small, narrowly-useful public library. They may be reconsidered for a
future major version if there is real external demand.
LICENSE.Runtime: pandas, numpy. Nothing else. See CHANGELOG.md for the full
dependency and license audit.
See SECURITY.md for supported versions and how to report a vulnerability
privately. See docs/PUBLISHING.md for the release process. PyPI releases
use Trusted Publishing with OIDC and no stored API token.
See CONTRIBUTING.md.
Apache License 2.0 - see LICENSE.
Copyright 2026 AID Edge Inc.
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.1.5 | 8 Oct 2026 | 5 |
This describes our collected data; it is not a security assessment.
Shared repository data · GitHub
Observed since 20 Oct, 20:20 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:06dbb1d42bcc2c3b714f05258cc3636f586012c68f7cd3c7ca133b4357ca1275