From tessera
Use when working with TESSERA satellite embeddings — downloading via CLI, sampling via the Python or R library, choosing between point-based and mosaic approaches, or exporting to GeoTIFF/NPY/Zarr.
npx claudepluginhub isaaccorley/geospatial-skills --plugin tesseraThis skill uses the workspace's default tool permissions.
Work with TESSERA satellite embeddings via the `geotessera` CLI, the Python library, or the R library.
Downloads USGS 3DEP LiDAR DEM data for US locations, colorizes points with ESRI satellite imagery, generates CRS-tagged LAS files for Metashape import as laser scan ground truth in photogrammetry projects.
Processes satellite imagery, hyperspectral, SAR data for Earth observation. Applies ML for NDVI, change detection, classification. Guides via reference patterns, diagnostics, validations.
Searches and downloads satellite imagery from Microsoft Planetary Computer STAC catalog using geoai. Browses collections, queries by bbox/time range, lists assets, downloads items.
Share bugs, ideas, or general feedback.
Work with TESSERA satellite embeddings via the geotessera CLI, the Python library, or the R library.
Use this skill when the user needs to:
pip install geotessera # Python library + CLI
remotes::install_github("lassa-sentinel/GeoTessera") # R library
Prefer sample_embeddings_at_points() for most tasks. It only downloads the tiles it needs and returns a compact (N, 128) array. Use it for labeled site extraction, validation, sparse classification, and any workflow where you have specific coordinates.
Use fetch_mosaic_for_region() only when you need dense per-pixel coverage — e.g. wall-to-wall land cover classification or spatial clustering over a contiguous area. Mosaics merge and reproject all tiles in a bbox into a single large array, which is memory-intensive for large regions.
Have specific point locations?
YES → sample_embeddings_at_points()
NO → Need wall-to-wall raster output?
YES → fetch_mosaic_for_region()
NO → CLI download + export
from geotessera import GeoTessera
gt = GeoTessera() # uses default registry and current directory
# --- Point sampling (preferred for most tasks) ---
points = [(0.15, 52.05), (0.25, 52.15), (-1.3, 51.75)]
embeddings = gt.sample_embeddings_at_points(points, year=2024)
# Returns: (N, 128) float32 array, NaN for missing points
# With metadata (tile info, pixel coordinates, CRS)
embeddings, metadata = gt.sample_embeddings_at_points(
points, year=2024, include_metadata=True
)
# --- Mosaic (dense raster analysis only) ---
bbox = (-0.2, 51.4, 0.1, 51.6)
mosaic, transform, crs = gt.fetch_mosaic_for_region(bbox, year=2024)
# Returns: (H, W, 128) float32 array
# --- Single tile ---
embedding, crs, transform = gt.fetch_embedding(lon=0.15, lat=52.05, year=2024)
# Returns: (H, W, 128) float32, CRS, Affine transform
# --- Export ---
gt.export_embedding_geotiff(lon=0.15, lat=52.05, output_path="tile.tif", year=2024)
gt.export_embedding_zarr(lon=0.15, lat=52.05, output_path="tile.zarr", year=2024)
# --- Registry queries ---
gt.registry.get_available_years() # [2017, 2018, ..., 2025]
gt.registry.get_tile_counts_by_year() # {2024: 1234567, ...}
tiles = gt.registry.load_blocks_for_region(bounds=bbox, year=2024)
Point inputs accept list of (lon, lat) tuples, GeoJSON FeatureCollections, or GeoPandas GeoDataFrames.
An R port. Uses R6 classes, sf, terra, and arrow.
remotes::install_github("lassa-sentinel/GeoTessera")
library(GeoTessera)
gt <- geotessera()
tiles <- gt$get_tiles(bbox = c(-0.2, 51.4, 0.1, 51.6), year = 2024)
gt$export_embedding_geotiffs(tiles = tiles, output_dir = "london_tiles")
Full R docs: https://lassa-sentinel.github.io/GeoTessera
geotessera coverage --output coverage_map.png
geotessera coverage --year 2024 --country uk
geotessera download --bbox "-0.2,51.4,0.1,51.6" --year 2024 --output ./tiffs
geotessera download --region-file cambridge.geojson --year 2024 --output ./tiffs
geotessera download --bbox "..." --format tiff --year 2024 --output ./tiffs # GIS-ready
geotessera download --bbox "..." --format npy --year 2024 --output ./arrays # ML-friendly
geotessera download --bbox "..." --format zarr --year 2024 --output ./zarr # cloud-native
geotessera download --bbox "..." --bands "0,1,2" --year 2024 --output ./subset
geotessera visualize ./tiffs --type web --output ./web
geotessera serve ./web --open
sample_embeddings_at_points() over mosaics for sparse locationscoverage before large CLI downloads--format tiff for GIS-ready outputs, --format npy for array-first ML--bands to reduce output size when only a few channels are needed--year explicit — data is available from 2017 to 2025| Mistake | Fix |
|---|---|
| Building a mosaic just to extract a few points | Use sample_embeddings_at_points() instead |
| Downloading all 128 bands when only a few are needed | Use --bands (CLI) or the bands parameter |
| Not checking coverage before a large download | Run geotessera coverage first |
Forgetting --year and getting default year | Always specify --year explicitly |
references/geotessera-cli.md — full CLI flag referencereferences/geotessera-library.md — Python library API reference