
Geospatial Analysis
Build reproducible GeoPandas and satellite-imagery pipelines for land use, change detection, and map-ready geographic intelligence.
Overview
Geospatial Analysis is an agent skill most often used in Build (also Idea/research and Grow/analytics) that runs satellite imagery, GeoPandas GIS, and spatial statistics into reproducible Earth observation pipelines.
Install
npx skills add https://github.com/itallstartedwithaidea/agent-skills --skill geospatial-analysisWhat is this skill?
- End-to-end workflows: satellite imagery (Sentinel, Landsat), GeoPandas GIS, spatial statistics, Earth observation
- Encodes CRS transformations, spatial joins, buffers, raster-vector interoperability, and spatial autocorrelation
- Supports land use classification, urban heat island thermal analysis, and temporal change detection
- Aims at publication-quality cartographic output from reproducible pipelines
- Sentinel and Landsat multispectral imagery workflows
- Spatial autocorrelation and raster-vector interoperability called out in SKILL.md
Adoption & trust: 1 installs on skills.sh; 18 GitHub stars; 2/3 security scanners passed (skills.sh audits); trending (+100% hot-view momentum).
What problem does it solve?
You have raster and vector spatial data but tabular-minded agents mishandle CRS, spatial joins, and autocorrelation so maps and metrics are wrong.
Who is it for?
Indie builders creating environmental, civic, logistics, or climate-adjacent features that need correct GIS and Earth observation workflows.
Skip if: Quick one-off charts without CRS discipline or teams with no Python/GeoPandas environment prepared.
When should I use this skill?
When building reproducible pipelines for satellite imagery, GeoPandas GIS operations, spatial statistics, or Earth observation analysis.
What do I get? / Deliverables
You get reproducible geospatial pipelines from raw imagery and vectors through analysis to actionable geographic intelligence and publication-quality maps.
- Reproducible geospatial analysis scripts or notebooks
- Processed rasters/vectors and summary statistics
- Publication-quality map outputs
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Primary shelf is Build/backend where spatial ETL, raster-vector workflows, and analysis code are implemented. Geospatial pipelines are backend/data engineering work—CRS-safe transforms, spatial joins, and raster processing—not UI polish.
Where it fits
Screen study areas with Landsat/Sentinel change cues before committing to a geo feature on the roadmap.
Prototype land-use or heat-island metrics on a small AOI to prove the dataset supports your pricing story.
Implement CRS-safe ETL, spatial joins, and classification scripts your API or batch job will call.
Refresh spatial statistics and cartographic outputs for customer or stakeholder reporting cycles.
How it compares
Domain GIS and Earth-observation workflow skill—not a generic pandas tutorial or a hosted map SaaS integration.
Common Questions / FAQ
Who is geospatial-analysis for?
Solo developers and analysts building location-based apps, research deliverables, or data products who need Sentinel/Landsat and GeoPandas done correctly.
When should I use geospatial-analysis?
During Build/backend for pipeline implementation, Idea/research when exploring competitor or site geography from imagery, and Grow/analytics when turning spatial metrics into ongoing reporting.
Is geospatial-analysis safe to install?
It may drive large downloads and local compute for imagery—review the Security Audits panel on this page and constrain network and filesystem access to trusted EO sources.
SKILL.md
READMESKILL.md - Geospatial Analysis
# Geospatial Analysis Part of [Agent Skills™](https://github.com/itallstartedwithaidea/agent-skills) by [googleadsagent.ai™](https://googleadsagent.ai) ## Description Geospatial Analysis provides workflows for satellite imagery processing, GIS operations with GeoPandas, spatial statistics, and Earth observation data analysis. The agent builds reproducible geospatial pipelines that transform raw spatial data into actionable geographic intelligence, from raster processing through vector operations to publication-quality cartographic output. Geospatial data is fundamentally different from tabular data: it has coordinate reference systems that must be respected, spatial relationships that affect statistical independence, and scale-dependent patterns that change with resolution. This skill encodes the domain knowledge needed to handle these challenges correctly: CRS transformations, spatial joins, buffer operations, raster-vector interoperability, and spatial autocorrelation tests. The skill integrates satellite imagery analysis (Sentinel, Landsat) with vector data processing (shapefiles, GeoJSON), enabling workflows like land use classification from multispectral imagery, urban heat island analysis from thermal bands, and environmental change detection from temporal image stacks. ## Use When - Processing satellite imagery (Sentinel-2, Landsat, MODIS) - Performing spatial joins, buffers, or overlay operations - Computing spatial statistics (Moran's I, hot spot analysis) - Creating publication-quality maps and cartographic outputs - Analyzing land use, land cover, or environmental change - Working with coordinate reference systems and projections ## How It Works ```mermaid graph TD A[Spatial Data Input] --> B{Data Type} B -->|Raster| C[Satellite Imagery Processing] B -->|Vector| D[GeoPandas Operations] C --> E[Band Math + Indices: NDVI, NDWI] E --> F[Classification / Change Detection] D --> G[Spatial Joins + Overlay] G --> H[Spatial Statistics] F --> I[Raster-Vector Integration] H --> I I --> J[Cartographic Output] J --> K[Publication Map] ``` Raster and vector paths converge at the integration step, where classified imagery is combined with administrative boundaries, point observations, or infrastructure data to produce the final analytical product. ## Implementation ```python import geopandas as gpd import rasterio from rasterio.mask import mask from shapely.geometry import Point import numpy as np from pysal.explore import esda from pysal.lib import weights import matplotlib.pyplot as plt import contextily as cx def load_and_reproject(filepath: str, target_crs: str = "EPSG:4326") -> gpd.GeoDataFrame: gdf = gpd.read_file(filepath) return gdf.to_crs(target_crs) def spatial_join_points_to_polygons( points: gpd.GeoDataFrame, polygons: gpd.GeoDataFrame ) -> gpd.GeoDataFrame: assert points.crs == polygons.crs, "CRS mismatch: reproject before joining" return gpd.sjoin(points, polygons, how="inner", predicate="within") def compute_ndvi(nir_path: str, red_path: str) -> np.ndarray: with rasterio.open(nir_path) as nir_src, rasterio.open(red_path) as red_src: nir = nir_src.read(1).astype(np.float32) red = red_src.read(1).astype(np.float32) ndvi = np.where((nir + red) > 0, (nir - red) / (nir + red), 0) return ndvi def spatial_autocorrelation(gdf: gpd.GeoDataFrame, column: str) -> dict: w = weights.Queen.from_dataframe(gdf) w.transform = "r" moran = esda.Moran(gdf[column], w) return { "morans_i": moran.I, "p_value": moran.p_sim, "z_score": moran.z_sim, "significant": moran.p_sim < 0.05, "interpretation": "Clustered" if moran.I > 0 and moran.p_sim < 0.05 else