Skip to main content

RANGE 🌎 — Multi-Resolution Geo-Embeddings for Any Location

Retrieval Augmented Neural Fields for Multi-Resolution Geo-Embeddings (CVPR 2025)

📄 Paper (arXiv:2502.19781) · 💻 Code (github.com/mvrl/RANGE) · 🤗 Models & Database (HuggingFace) · 🔬 MVRL Lab

RANGE turns geographic coordinates (longitude, latitude) into rich, general-purpose embedding vectors that you can drop into any downstream model — species distribution, climate, land cover, population, housing prices, or any task where where matters.

RANGE framework

How it works

Location encoders like SatCLIP learn a smooth neural field over the globe, which captures low-frequency spatial patterns but washes out fine detail. RANGE is a retrieval-augmented location encoder: for a query location, it estimates the visual features a satellite image at that location would have, by retrieving from a pre-built database of (location, SatCLIP embedding, image embedding) triplets:

  • RANGE retrieves database entries whose semantic (SatCLIP) embeddings are similar to the query's, and aggregates their high-resolution image embeddings.
  • RANGE+ additionally retrieves by geographic proximity on the sphere and blends the two estimates with a weight β — moving β trades off between smooth, low-frequency embeddings (β→0) and sharp, high-frequency ones (β→1), giving you multi-scale control at inference time.

The final embedding concatenates this estimated high-resolution visual feature (1024-d) with the smooth SatCLIP location feature (256-d) into a 1280-d vector. Across 7 downstream benchmarks (biome, ecoregion, country, temperature, elevation, population, housing), RANGE outperforms state-of-the-art location encoders such as SatCLIP, GeoCLIP, CSP, and SINR — see the paper for full tables.

Installation

pip install rangegeo

Dependencies are minimal: torch, numpy, einops, huggingface_hub.

Usage

from rangegeo import RANGE

# downloads the SatCLIP backbone + RANGE database from HuggingFace on first use
model = RANGE("RANGE+", db="large", beta=0.5)   # or "RANGE"

# coordinates are (longitude, latitude) in degrees
embeddings = model.encode([
    [-90.19, 38.63],   # St. Louis
    [ 85.32, 27.72],   # Kathmandu
])
print(embeddings.shape)  # (2, 1280) numpy float32

That's it — encode() accepts any (N, 2) array-like of (lon, lat) degrees, batches internally (default batch size 10000), and runs on GPU automatically when available.

Options:

argument values meaning
model_name "RANGE+" (default), "RANGE" RANGE+ adds geographic retrieval + β control
db "large" (default), "med" retrieval database (~0.9 GB / ~0.45 GB, cached after first download)
beta 0.0 – 1.0 (default 0.5) RANGE+ smoothness↔detail trade-off
device "cuda", "cpu" default: auto
pretrained_path, db_path local paths use a fine-tuned SatCLIP backbone or a custom/regenerated database

The model is a regular torch.nn.Module: inside a torch pipeline you can call model(coords_tensor) directly with an (N, 2) double tensor of (lon, lat).

For training code, evaluation benchmarks, database generation (generate_db.py), and baseline encoders, see the GitHub repository.

Citation

@article{dhakal2025range,
  title={RANGE: Retrieval Augmented Neural Fields for Multi-Resolution Geo-Embeddings},
  author={Dhakal, Aayush and Sastry, Srikumar and Khanal, Subash and Ahmad, Adeel and Xing, Eric and Jacobs, Nathan},
  booktitle={Computer Vision and Pattern Recognition},
  year={2025},
  organization={IEEE/CVF}
}

License

MIT — © the RANGE authors (MVRL, Washington University in St. Louis).

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rangegeo-0.1.0.tar.gz (2.0 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rangegeo-0.1.0-py3-none-any.whl (2.0 MB view details)

Uploaded Python 3

File details

Details for the file rangegeo-0.1.0.tar.gz.

File metadata

  • Download URL: rangegeo-0.1.0.tar.gz
  • Upload date:
  • Size: 2.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.9

File hashes

Hashes for rangegeo-0.1.0.tar.gz
Algorithm Hash digest
SHA256 f964b0e15089b83b22e696d8d433d062fc04140063f15a570efb4490031f2cfe
MD5 0d8a01a0a468b04f618983a7b7051b3b
BLAKE2b-256 294094fb50fd973f0b2231dba68b016f5f9085aca34cc8cf1bb3c19f917aa2c4

See more details on using hashes here.

File details

Details for the file rangegeo-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: rangegeo-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.9

File hashes

Hashes for rangegeo-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8d22eba787ac754279088094eb05432bed0e5357fb5a55b40c36df88bc9f1167
MD5 3c0c387de4e1bfc421f4ffcd3bd28f35
BLAKE2b-256 c224e2b74654af0a3dd1fffe068ffec80c849ec01f76ac00ec5e4d7585d0b581

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page