Geobane
See CHANGELOG.md for release history.
Adversarial test-data generator for geospatial systems.
Geobane generates the specific edge cases that silently break geospatial code, not just random coordinates, but the exact failure patterns that cause real bugs: coordinate order confusion, antimeridian crossings, degenerate geometry, CRS mismatches, and floating-point precision issues.
Install
pip install geobane
Why
Most geospatial bugs don't crash, they silently produce wrong results. A swapped lat/lng pair still looks like a valid coordinate. A polygon crossing the date line still parses fine, right up until a bounding-box calculation treats it as spanning the entire globe. Geobane exists to throw these known failure patterns at your code before production does.
Usage
from geobane import coordinate_order, antimeridian, degenerate
from geobane import crs_mismatch, precision
# The single most common real-world geospatial bug
result = coordinate_order.swapped_pair(lat=51.5, lng=-0.12)
print(result["swapped"]) # (-0.12, 51.5) - fed to a system expecting (lat, lng)
# A polygon crossing the antimeridian - breaks naive bounding-box math
tricky_polygon = antimeridian.crossing_polygon()
# A self-intersecting "bowtie" polygon
bad_shape = degenerate.self_intersecting_bowtie()
# Web Mercator coordinates mislabeled as WGS84
wrong_crs = crs_mismatch.mercator_fed_as_wgs84()
# NaN/Infinity injected into a coordinate
broken = precision.nan_infinity_injection()
Every generator returns an explanation field describing the real-world
bug it simulates, useful for understanding why the edge case matters,
not just reproducing it.
Categories
| Module | Covers |
|---|---|
coordinate_order |
lat/lng axis swap bugs |
antimeridian |
date-line crossing polygons, linestrings, bboxes |
degenerate |
zero-area, self-intersecting, unclosed geometry |
crs_mismatch |
WGS84/Web Mercator confusion, missing CRS metadata |
precision |
float32 boundaries, NaN/Infinity, over-precision |
See TAXONOMY.md for the full edge-case reference, including planned categories for future versions.
Contributing
Found a geospatial bug pattern that isn't covered? Open an issue or PR, the taxonomy doc is the place to propose new categories.
License
MIT
Release files for geobane 0.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| geobane-0.1.4.tar.gz | 12.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| geobane-0.1.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 25.1 kB
Release files / geobane-0.1.4.tar.gz
| Download URL | geobane-0.1.4.tar.gz |
|---|---|
| Size | 12.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8acceefc4bd76f05622514b5b410baa987f7361cdd0816297ee625e1a500ba2b
|
|
BLAKE2b-256 checksum How to use checksums |
d1565c79e610139b7ed8bc2c58b4ed415c8a92eb3fb66f013554835afb144701
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|
Release files / geobane-0.1.4-py3-none-any.whl
| Download URL | geobane-0.1.4-py3-none-any.whl |
|---|---|
| Size | 12.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
509d5d3767009c4c95281b976cd3a898e14178afad4f348b9ce473101fa363ef
|
|
BLAKE2b-256 checksum How to use checksums |
b9f8937d4b480479d62284b61bd7b9deb61ca9d0964e55fe60276f0d1abbb22e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|