Adversarial test-data generator for geospatial systems
Project description
Geobane
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
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file geobane-0.1.2.tar.gz.
File metadata
- Download URL: geobane-0.1.2.tar.gz
- Upload date:
- Size: 12.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7e51fbb3aed509777e4722261b678428132e469b2b965c99c47a25f592b8e1f6
|
|
| MD5 |
3366c97d1baf93d3fa4c3a38f9c20a57
|
|
| BLAKE2b-256 |
758dbc5b15e0b8cc95591f0fbb8697598383f7c7cbe984e663368fda3fbdf85b
|
File details
Details for the file geobane-0.1.2-py3-none-any.whl.
File metadata
- Download URL: geobane-0.1.2-py3-none-any.whl
- Upload date:
- Size: 12.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
305e1a15eefc536ed7e622eaaa5a5f380c3ff90613045499129da94efba01dbc
|
|
| MD5 |
ac71f7bd183129c49c1f6530061e552a
|
|
| BLAKE2b-256 |
10d8860f5ee834e52f1d9c1395ba105e8c579b113edd956296065e96002c03ef
|