GeoEmbed
NetCL-based visual feature encoders for aerial and satellite imagery.
What It Can Do
- 256d L2-Normalized Vectors: Encodes aerial and satellite imagery into compact 256-dimensional unit vectors ($|z|_2 = 1.0$).
- Direct Similarity Measurement: Vector dot product directly yields cosine similarity in $[-1.0, 1.0]$:
$$S(z_1, z_2) = z_1 \cdot z_2$$
- Environmental Invariance: Stable across multi-year temporal drift, seasons, foliage changes, sun angles, and illumination conditions.
- Topological & Semantic Structure: Captures road networks, parcel boundaries, forested areas, water bodies, and built-up patterns.
- Unsupervised Clustering: Latent vectors organically group semantic landscape and terrain types without manual labels:
| Reference Orthophoto | Continuous Latent Field (PCA) | Low Cluster ($k=2$) |
|---|---|---|
| Low Cluster ($k=3$) | Low Cluster ($k=4$) | Cluster Map ($k=6$) |
|---|---|---|
| Cluster Map ($k=8$) | Cluster Map ($k=10$) | Cluster Map ($k=20$) |
|---|---|---|
At low cluster counts ($k=2, 3, 4$), the embedding space separates macroscopic terrain classes (dense forest vs. open agricultural land). As $k$ increases ($k=6, 8, 10, 20$), granular sub-structures such as access roads, parcel boundaries, and built forms emerge organically.
Data source of sample orthophotos: © LGL Baden-Württemberg (www.lgl-bw.de), licensed under dl-de/by-2-0. See ATTRIBUTION.md for details.
- Downstream Applications:
- Unsupervised land-cover segmentation and zone maps
- Parcel and boundary structure delineation
- Temporal change detection across multi-year captures
- Visual localization and map matching against orthophoto databases
What It Expects as Input
- Image Type: Nadir aerial and satellite imagery (orthophotos, top-down perspective).
- Format: File path (
str/Path), PILImage, or NumPy array. - Color Channels: 3-channel RGB (automatically converted and normalized to $[-1.0, 1.0]$).
- Geometry: Square image tiles.
- Preferred Ground Scale / Zoom Level:
z=18Web-Mercator ($\approx 0.5\text{ m/pixel}$ GSD). The encoders are natively calibrated for $z=18$ aerial tiles. Any single, consistent scale works as long as queries and reference index match, but $z=18$ provides optimal feature separation.
Limitations
- No Scale Invariance: The models deliberately do not enforce cross-scale invariance to preserve fine discriminative details. All tiles in an index and query set must share the same ground scale (preferably $z=18$). Mixing different zoom levels (e.g. $z=16$ and $z=18$) leads to scale aliasing and false matches.
- Nadir Perspective Only: Strictly top-down orthophotos. Oblique aerial imagery, perspective drone shots, or street-level photos are not supported.
- RGB Only: Standard 3-channel RGB. Multispectral, near-infrared (NIR), or synthetic-aperture radar (SAR) imagery are not supported without prior conversion.
Code
from geoembed import Model
# Default model (v3)
model = Model()
# Alternative iterations
model = Model.v11()
model = Model.v12()
# Encode a single image -> (256,) L2-normalized vector
vector = model.encode("tile.png")
# Encode a batch of images -> (N, 256) NumPy array
vectors = model.encode(["tile_a.png", "tile_b.png"])
# Cosine similarity between two images -> float in [-1.0, 1.0]
sim = model.similarity("tile_a.png", "tile_b.png")
print(f"Similarity: {sim:.4f}")
Metadata
Release files for geoembed 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| geoembed-1.0.0.tar.gz | 41.9 MB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| geoembed-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 83.7 MB
Release files / geoembed-1.0.0.tar.gz
| Download URL | geoembed-1.0.0.tar.gz |
|---|---|
| Size | 41.9 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cd742b633579233af823bcc694532e15005138e267b7eb0ece71160128f7e267
|
|
BLAKE2b-256 checksum How to use checksums |
a24eee04bdde67f22344fdec6e18b69e9fbec4f10c0ff5678856ba74d5c3adff
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Release files / geoembed-1.0.0-py3-none-any.whl
| Download URL | geoembed-1.0.0-py3-none-any.whl |
|---|---|
| Size | 41.9 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1bddac48f7cd32bd6c8ae83c991167bef2549c0354bb388852d0bb40cab4bf0f
|
|
BLAKE2b-256 checksum How to use checksums |
be3a79602ad925e36ab6db438f7d92ca1c28619e4c9fe7eea51f5de7d43ea845
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Security for geoembed 1.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.