Resources
50+ GIS Portfolio Project Ideas
A catalog of portfolio projects built on free, public data. Every idea targets at least one skill that appears in real GIS job listings. Difficulty ratings assume you already know basic GIS concepts and have touched Python or JavaScript at least once.
How to use this: Pick 2–3 ideas that match your interests and skill level. Don’t try to do 10. Two strong projects with write-ups beat a dozen half-finished repos.
Time estimates: Beginner ideas: ~1 week. Intermediate: 1–2 weeks. Advanced: 2–4 weeks. Your mileage will vary based on how much of the toolchain is new to you.
On tools: Most projects here use open-source tools (Python, QGIS, PostGIS). If you have ArcGIS Pro access, it can substitute for QGIS in most cases — the Python workflows (GeoPandas, rasterio) are tool-agnostic. We default to free tools because you keep access to them after graduation.
Environment & Climate
1. Urban Heat Island vs. Tree Canopy Equity Analysis
Intermediate
Python
GeoPandas
rasterio
Remote Sensing
Statistical Analysis
Download Landsat 8/9 thermal band imagery and NLCD tree canopy data for a major US city. Calculate land surface temperature per census tract, join with ACS income/race demographics, and quantify the correlation between canopy cover, surface temperature, and neighborhood income. Output: a static report with choropleth maps and scatter plots, plus a Jupyter notebook.
Stands out because it crosses raster remote sensing with vector demographic analysis in a single pipeline — most portfolios keep these worlds separate.
2. Wildfire Smoke + Respiratory Health Vulnerability Map
Intermediate
Python
REST APIs
GeoPandas
Spatial Joins
Public Health Data
Data Visualization
Use NASA FIRMS active fire detection data and EPA AirNow AQI station readings to identify areas with elevated particulate matter during fire season. Join with CDC PLACES tract-level asthma and COPD prevalence data. Map census tracts that have both high AQI exposure and above-average respiratory disease rates. Output: a tract-level vulnerability map showing where wildfire smoke hits populations least equipped to handle it.
Stands out because it connects fire detection to air quality to health outcomes in a single pipeline — the kind of cross-domain exposure analysis that public health agencies and disaster management teams actually need.
3. VIIRS Nighttime Lights as an Economic Activity Proxy
Intermediate
Python
rasterio
NumPy
Zonal Statistics
Data Storytelling
Download NASA Black Marble VIIRS nighttime radiance composites for two time periods (e.g., pre/post-COVID or pre/post-natural disaster). Difference the images, mask water and uninhabited areas, and correlate brightness change with BLS employment data at the county level. Output: a writeup arguing where satellite-derived economic signals agree or disagree with official statistics.
Stands out because VIIRS nighttime lights are used extensively in academic research and intelligence analysis but almost never appear in portfolio projects — it signals awareness of non-obvious data sources.
4. Soil Quality + Vacant Lots = Urban Farm Suitability
Intermediate
Python
PostGIS
Multi-criteria Decision Analysis
QGIS
Pull USDA SSURGO soil data and municipal vacant parcel inventories for a Rust Belt city (Detroit, Cleveland, Pittsburgh). Score each vacant lot on soil drainage class, contamination risk (using EPA Brownfields data), lot size, and proximity to food deserts (USDA Food Access Atlas). Output: a ranked list of the 50 best lots for urban agriculture with an interactive map. Optional level-up: add sunlight estimates from 3DEP LiDAR building shadow analysis — this is a significant additional lift but produces a much richer model.
Datasets: USDA SSURGO via Web Soil Survey, EPA Brownfields, USDA Food Access Research Atlas, city open data for parcels. Optional: USGS 3DEP LiDAR
Stands out because it combines four independent datasets into a genuinely useful suitability model — the kind of multi-criteria overlay that planning departments actually commission.
5. NPS Sound Map + Wildlife Corridor Overlap
Intermediate
Python
Raster Analysis
GeoPandas
Cartography
Scientific Communication
Download the NPS Geospatial Sound Modeling data (ambient noise levels across the US) and overlay it with USGS species range polygons or Nature Conservancy resilient land datasets. Identify wildlife corridors where anthropogenic noise exceeds published disturbance thresholds (e.g., 45 dB for songbirds, 60 dB for large mammals). Output: a map series showing “quiet corridors” vs. “noise-impacted corridors” with acreage statistics.
Datasets: NPS Natural Sounds Night Sky Division, USGS GAP Species Ranges, TNC Resilient Land Mapping
Stands out because noise pollution is a genuine and growing concern in conservation biology, but almost nobody maps it — this fills a real analytical gap.
6. Deforestation Hotspots + Commodity Supply Chain Mapping
Intermediate
Python
GeoPandas
Network Analysis
Cartographic Design
QGIS
Use Global Forest Watch tree cover loss data to identify deforestation hotspots in a commodity-producing region (palm oil in Southeast Asia, soy in Brazil, cocoa in West Africa). Overlay with OpenStreetMap road networks and port locations to map proximity — which deforestation hotspots are within 50km of a major road or port, suggesting export-driven clearing vs. subsistence agriculture? Output: a cartographic story with a distance-decay analysis showing how forest loss clusters around transport infrastructure.
Datasets: Global Forest Watch / Hansen tree cover loss, OpenStreetMap via Geofabrik, NGA World Port Index
Stands out because it connects environmental change to economic geography — the kind of supply-chain risk analysis that ESG teams at major firms now pay for.
7. Coral Bleaching + Sea Surface Temperature Time Series
Intermediate
Python
xarray
NetCDF
Time-Series Analysis
matplotlib Animation
Download NOAA Coral Reef Watch 5km SST and Bleaching Alert Area data for a reef system (Great Barrier Reef, Florida Keys, or Caribbean). Build a time-series analysis showing cumulative heat stress (Degree Heating Weeks) over 10+ years. Correlate with documented bleaching events from NOAA’s NCRMP survey data. Output: an animated map and line charts showing thermal stress trends.
Stands out because marine/climate time-series analysis is a growing field with relatively few portfolio examples, and the animated output is visually striking for interviews.
Urban Planning & Cities
8. 15-Minute City Score Calculator
Intermediate
Python
OSMnx
Network Analysis
Overture Maps
Leaflet / Folium
For a chosen city, download Overture Maps building footprints and POI data. Using a network-based walking distance analysis (via OSMnx), calculate what percentage of residents can reach a grocery store, pharmacy, park, school, transit stop, and restaurant within a 15-minute walk. Score each neighborhood on a 0–100 scale. Output: an interactive map with per-neighborhood scorecards.
Stands out because the 15-minute city concept gets constant media attention, and a version built on Overture Maps + OSMnx network analysis with a reproducible methodology you can apply to any city is genuinely useful — and publishable.
9. Flood Risk + Housing Price Overlay
Intermediate
Python
GeoPandas
SQL
Statistical Analysis
Data Visualization
Download FEMA National Flood Hazard Layer data and join it with Zillow ZTRAX or Redfin housing price data (or county assessor records) for a metro area. Calculate the premium/discount for homes inside vs. outside 100-year flood zones, controlling for square footage and lot size. Output: a choropleth of flood-risk-adjusted home values with a statistical summary.
Datasets: FEMA NFHL, Redfin Data Center, county assessor open data
Stands out because climate-risk pricing in real estate is a billion-dollar industry — this project directly mirrors what insurers and mortgage lenders are trying to figure out.
10. Commuter Flow Visualization with LEHD LODES
Intermediate
Python
pandas
deck.gl / QGIS
Large Dataset Handling
Data Visualization
Download Census LEHD LODES Origin-Destination data for a metro area. Build a flow map showing where workers live vs. where they work, aggregated to census tract. Identify the highest-volume commuter corridors and calculate average commute distance. Output: a deck.gl arc layer visualization or a QGIS flow map with accompanying statistics.
Datasets: Census LEHD LODES, Census TIGER/Line
Stands out because an animated arc map of 500K commuter flows is one of the most visually striking things you can put in a portfolio — and the underlying dataset reveals real economic geography that census demographics alone can’t show.
11. GTFS Transit Frequency Map
Beginner
Python
pandas
GTFS Parsing
Spatial Analysis
QGIS / Leaflet
Download a city’s GTFS static feed. Parse stop_times.txt to calculate service frequency (buses per hour) at every stop for weekday peak vs. off-peak. Map the results as a heat surface or graduated symbols. Identify “transit deserts” where frequency drops below one bus per 30 minutes. Output: a before/after comparison if schedule changes occurred, or a weekday vs. weekend comparison.
Datasets: Transitland Atlas or OpenMobilityData for GTFS feeds
Stands out because transit agencies are major GIS employers, and demonstrating fluency with GTFS — the actual data format they use daily — signals immediate practical value.
12. Sidewalk Completeness Audit
Beginner
Python
OSMnx
Overture Maps
GeoParquet
Spatial Joins
Use OpenStreetMap sidewalk data (highway=footway + footway=sidewalk) and Overture Maps building footprints for a city. Calculate the percentage of streets that have mapped sidewalks within residential areas. Identify gaps — streets with buildings but no sidewalks — and rank neighborhoods by pedestrian infrastructure completeness. Output: a gap map with statistics by neighborhood, suitable for an ADA accessibility audit. Note: OSM sidewalk coverage varies hugely by city — pick a city with active OSM mapping (Portland, Seattle, DC are strong). Finding sparse data is itself a valid finding to document.
Datasets: OpenStreetMap via Overpass API, Overture Maps, city boundary data
Stands out because sidewalk data is a known gap in OSM, and framing the analysis as an accessibility audit makes it directly relevant to municipal planning jobs.
Urban Planning & Cities (continued)
13. Construction Noise Impact Zones
Beginner
Python
GeoPandas
Buffering
Overlay Analysis
Data Scraping
Scrape or download active building permits from a city’s open data portal. Buffer each construction site at standard noise attenuation distances (e.g., 60 dB at 200m, 70 dB at 50m). Overlay with residential parcels, hospitals, and schools to estimate the affected population. Compare permit density across neighborhoods. Output: a map showing cumulative noise exposure zones with a sortable table of most-impacted neighborhoods.
Datasets: City open data portals for building permits, HIFLD hospitals and schools, Census ACS
Stands out because this is a warm-up project — the GIS operations are simple, but the framing matters. Noise impact reports for construction permitting are real consulting deliverables.
14. Parking Lot to Park: Redevelopment Opportunity Finder
Intermediate
Python
Overture Maps
GeoParquet
Multi-criteria Scoring
Folium
Use Overture Maps land use data and building footprints to identify surface parking lots in a city’s downtown core. Calculate each lot’s area, proximity to transit, surrounding land values (from county assessor data), and impervious surface contribution. Rank them by redevelopment potential using a weighted scoring model. Output: an interactive map with a sortable “best candidates” table.
Datasets: Overture Maps land use + buildings, county assessor open data, Transitland GTFS for transit proximity
Stands out because parking reform is one of the hottest topics in urban planning right now, and this project produces a deliverable that city councils would actually review.
Oceans, Coasts & Marine
15. AIS Ship Traffic Density Mapping
Intermediate
Python
H3
pandas
Large Dataset Processing
Maritime Domain Awareness
Download or stream AIS (Automatic Identification System) vessel position data for a coastal region or port area. Grid the positions into hexagonal bins (H3 or custom grid), calculate vessel density and average speed per cell, and classify by vessel type (cargo, tanker, fishing, passenger). Output: a multi-layer density map showing shipping lanes, anchorage zones, and high-traffic corridors.
Datasets: MarineCadastre.gov AIS data, NGA World Port Index
Stands out because AIS analysis is in high demand at defense contractors, shipping companies, and environmental agencies, but almost no portfolio guides even mention it as a data source.
16. Marine Protected Area Vessel Incursion Detector
Advanced
Python
GeoPandas
Spatial Joins
Time-Series Analysis
Data Storytelling
Using historical AIS data from MarineCadastre.gov and NOAA MPA boundaries, identify vessel tracks that enter marine protected areas. Classify incursions by vessel type, duration, and time of day. Build summary statistics: which MPAs get the most traffic, which vessel types are the worst offenders, and whether incursions are increasing over time. Output: a report with maps and time-series charts.
Datasets: MarineCadastre.gov AIS, NOAA MPA Inventory
Stands out because this is literally what organizations like Global Fishing Watch do — building a simplified version demonstrates the exact analytical thinking that marine conservation employers value.
17. Ocean Plastic Accumulation Hypothesis Map
Intermediate
Python
NetCDF / xarray
Ocean Data Processing
Scientific Visualization
Cartographic Storytelling
Download OSCAR ocean surface current data and visualize current vectors for a major ocean basin. Overlay river outflow points scaled by estimated mismanaged plastic waste. Using the current direction and speed, hypothesize accumulation zones where currents converge and compare with known gyre locations and published debris survey data. Output: a map overlaying current convergence zones with river pollution sources and a narrative argument about likely accumulation areas. Optional level-up: Use OceanParcels to run actual particle tracking simulations.
Stands out because ocean current analysis is a rare portfolio skill, and even the hypothesis-mapping version demonstrates you can work with scientific oceanographic data.
18. Coastal Erosion Measurement from Multi-Year Satellite Imagery
Intermediate
Python
rasterio
Shoreline Extraction
Change Detection
QGIS Cartography
Use Sentinel-2 imagery from two dates (5–10 years apart) to extract shoreline positions along an eroding coast using NDWI (Normalized Difference Water Index) thresholding. Calculate retreat rates in meters per year along transects perpendicular to the shore. Compare with USGS Coastal Vulnerability Index data. Output: a transect map showing erosion/accretion rates and a summary report.
Stands out because coastal erosion monitoring is a core deliverable for coastal engineering firms, and demonstrating the full workflow from satellite imagery to measurement shows real professional readiness.
19. Actual vs. Optimal Shipping Routes: AIS Analysis
Advanced
Python
GeoPandas
AIS Data Processing
geopy
Ocean Data (NetCDF)
Maritime Analysis
Download historical AIS vessel tracks from MarineCadastre.gov for cargo ships transiting between two major port pairs (e.g., LA–Shanghai, Rotterdam–New York). Calculate the great-circle distance and compare with actual track distances from AIS data. Overlay OSCAR ocean current vectors along the routes to estimate where currents help or hinder transit. Output: a map comparing theoretical shortest-path vs. actual AIS-derived routes with current vectors, plus statistics on route deviation.
Stands out because using real AIS ship tracks instead of theoretical routes grounds the analysis in reality — this is the kind of empirical approach that maritime logistics companies and defense analysts actually use.
Remote Sensing & Satellite
20. Cloud-Native EO Workflow: STAC + COG Search and Analysis
Intermediate
Python
pystac-client
stackstac
xarray
Cloud-Native Geospatial
Use the NASA CMR-STAC API or Element 84 Earth Search to programmatically discover Sentinel-2 scenes over a study area. Stream Cloud-Optimized GeoTIFFs (COGs) directly without downloading full scenes. Calculate NDVI for a crop region and create a monthly time series. Output: a Jupyter notebook demonstrating the full cloud-native workflow with a time-series chart, plus a writeup explaining why this approach matters (hint: it’s how modern EO platforms work).
Datasets: Earth Search STAC API for Sentinel-2 COGs on AWS
Stands out because cloud-native EO (STAC/COG/zarr) is rapidly becoming the industry standard, but most portfolio projects still show someone downloading TIFFs from USGS — this signals you’re working the way modern teams actually work.
21. SAR-Based Flood Mapping with Sentinel-1
Advanced
Python
SNAP / snappy
SAR Processing
Change Detection
QGIS
Download pre- and post-flood Sentinel-1 SAR imagery for a documented flood event. Apply calibration, speckle filtering, and thresholding to extract flood extent from the radar backscatter difference. Compare your flood map with reported damage assessments. Output: a flood extent map with area statistics and a methodology writeup suitable for a disaster response briefing. Practical note: ESA’s SNAP desktop software is the most reliable processing path — it’s free but clunky. Budget time for setup.
Stands out because SAR processing is a high-value skill that most GIS graduates never touch — radar data works through clouds, making it critical for disaster response.
22. Multi-Year Urban Heat Trend from Landsat Thermal Archive
Intermediate
Python
rasterio
Thermal Remote Sensing
Time-Series Analysis
Change Detection
Download Landsat thermal imagery for the same city across 5+ summer dates (spanning 10–20 years). Convert each scene to land surface temperature. Calculate the mean and trend (warming or cooling) per pixel over time. Identify neighborhoods where temperatures are rising fastest and correlate with new construction, tree removal, or impervious surface change using NLCD time series. Output: a trend map showing where urban heat is intensifying, not just where it’s hot today.
Datasets: Landsat 5/7/8/9 via USGS EarthExplorer, NLCD time series (2001–2021)
Stands out because most UHI analyses are single-date snapshots — showing a temporal trend in urban heating over a decade tells a much richer story and demonstrates time-series remote sensing skills.
23. Multi-Temporal Crop Monitoring with Sentinel-2
Intermediate
Python
STAC
xarray
Zonal Statistics
Agricultural Remote Sensing
Build a monthly NDVI time series for agricultural fields over a full growing season using Sentinel-2. Use field boundary polygons from USDA Cropland Data Layer to extract per-field statistics. Identify fields that show anomalous greenness patterns (drought stress, late planting, abandonment). Output: a dashboard-style report showing field-level phenology curves with annotations.
Stands out because precision agriculture is one of the fastest-growing GIS markets, and per-field phenology monitoring is the actual product that ag-tech companies sell.
24. Satellite-Based Construction Activity Detection
Intermediate
Python
Satellite Imagery
Spectral Indices
Change Detection
Animation
Use bi-monthly Sentinel-2 imagery over a developing area (new subdivision, industrial zone, or solar farm) to track construction progress. Calculate a bare soil index and an impervious surface index at each time step. Animate the change. Output: a GIF or video showing construction progression with area statistics at each time step, plus a comparison with building permit dates if available.
Datasets: Sentinel-2 via Earth Search STAC, city open data for building permits (optional)
Stands out because construction monitoring from satellite imagery is a real commercial product (Planet, Maxar sell it) — building a simplified version shows you understand the business case, not just the technology.
25. Land Cover Classification with Machine Learning
Intermediate
Python
scikit-learn
rasterio
Machine Learning
Accuracy Assessment
Download Sentinel-2 multispectral imagery and training labels from Radiant MLHub (e.g., the LandCoverNet dataset). Train a Random Forest or gradient-boosted classifier on the labeled pixels. Apply the model to a new area and assess accuracy with a confusion matrix. Output: a classified land cover map, accuracy metrics, and a writeup comparing your results to NLCD.
Stands out because ML classification with proper accuracy assessment goes well beyond the “I ran NDVI” projects that dominate portfolios — and machine learning appears in the highest-paying GIS job listings ($185K median).
26. Google Earth Engine Time-Lapse for Environmental Change
Intermediate
JavaScript
Google Earth Engine
Cloud Computing
Image Compositing
Visual Communication
Use Google Earth Engine’s JavaScript API to build a composited annual time-lapse of a location experiencing dramatic change (glacier retreat, reservoir filling/draining, urban sprawl, mine expansion). Apply cloud masking, median compositing, and consistent band stretching across years. Export as an animation. Output: a polished GIF suitable for a conference presentation, plus the GEE script in a GitHub repo. Note: GEE has its own programming model (functional, server-side) that takes some getting used to — budget extra time if this is your first GEE project.
Datasets: Google Earth Engine Data Catalog (Landsat, Sentinel-2, MODIS)
Stands out because GEE proficiency is increasingly listed in remote sensing job descriptions, and a well-made time-lapse is one of the most shareable portfolio pieces — interviewers remember it.
Data Pipelines & Automation
27. Daily Earthquake Map Pipeline
Intermediate
Python
REST APIs
GitHub Actions
Leaflet
CI/CD
Automation
Build a Python script that pulls yesterday’s M2.5+ earthquakes from the USGS Earthquake API, generates a static site with a Leaflet map and a summary table (count, largest event, most seismically active region), and deploys to GitHub Pages. Schedule it to run daily via GitHub Actions. Output: a live, auto-updating earthquake map that runs with zero manual intervention. Note: The Python + API part is beginner-level; the GitHub Actions setup (YAML config, cron syntax, deployment tokens) has its own learning curve.
Datasets: USGS Earthquake Hazards API
Stands out because most portfolio projects are static snapshots — a live, scheduled pipeline demonstrates the automation and DevOps-adjacent thinking that distinguishes a developer from an analyst.
28. Real-Time Fire Perimeter + Population Exposure Pipeline
Intermediate
Python
GeoPandas
REST APIs
GitHub Actions
Spatial Analysis
Automation
Build an automated workflow that downloads current NIFC fire perimeters from the InciWeb/IRWIN API, buffers them at 5km and 10km, intersects with Census block group population data, and publishes a daily exposure estimate. Schedule it with GitHub Actions or cron. Output: a daily-updated dashboard showing which fires threaten the most people.
Stands out because it solves a problem that emergency managers actually face in real time — and it runs autonomously, which is what distinguishes a GIS developer from a GIS analyst.
29. Geocoding Quality Pipeline
Beginner
Python
REST APIs
Data Quality
Address Parsing
ETL
Build a Python pipeline that takes a CSV of addresses, geocodes them using the free Census Geocoder API, validates results against a known-good reference (e.g., OpenAddresses), scores each result by match quality (exact, fuzzy, ZIP-centroid, failed), and flags records that need manual review. Output: a scored CSV with match metadata and a summary report of geocoding success rates.
Datasets: Census Geocoder API (free, no key needed), OpenAddresses
Stands out because geocoding QA is grunt work that every GIS team does regularly — showing you’ve automated it tells a hiring manager you’ll reduce their backlog on day one.
30. GTFS-RT Bus Delay Tracker
Advanced
Python
Protobuf Parsing
PostgreSQL
Time-Series Analysis
Scheduling
Connect to a transit agency’s GTFS-Realtime feed. Record vehicle positions and trip updates every 60 seconds for a week using a lightweight script on a cheap cloud VM or a Raspberry Pi. Compare actual arrival times to the GTFS static schedule. Calculate delay statistics by route, stop, time of day, and day of week. Output: a report identifying the most chronically delayed routes and stops, with heatmaps showing where delays cluster. Important: Choose an agency that publishes TripUpdate messages (not just VehiclePosition).
Datasets: GTFS-Realtime feeds, GTFS static feeds
Stands out because real-time data ingestion over a sustained period demonstrates the infrastructure thinking that separates pipeline builders from one-off analysts — and the delay analysis is something transit agencies would pay for.
31. Weather-Triggered Spatial Alert System
Advanced
Python
REST APIs
GeoPandas
SMTP / Email
Scheduling
Spatial Joins
Build a pipeline that polls the NWS API for active weather alerts, geocodes the affected zones to polygon geometries (using NWS forecast zone shapefiles), intersects them with a user-defined list of assets (schools, warehouses, cell towers from HIFLD), and sends an email summary of which assets are in active alert zones. Schedule it hourly. Output: a running alert system with an email log.
Stands out because asset-exposure alerting is a real product category (insurance, logistics, facilities management) — building a working prototype shows you understand the business problem, not just the GIS part.
32. Automated Satellite Imagery QA Pipeline
Intermediate
Python
STAC
PostgreSQL
Data Quality Validation
Logging
Automation
Build a pipeline that queries STAC for new Sentinel-2 scenes over a study area, downloads the scene metadata, checks cloud cover percentage, calculates spatial coverage of the AOI, validates band alignment, and logs results to a PostgreSQL database. Flag scenes that pass QA for downstream analysis. Output: a database of QA’d scene metadata and a weekly summary report.
Datasets: Earth Search STAC API, Sentinel-2 metadata
Stands out because data QA is 40% of the work in operational remote sensing but 0% of what portfolios show — this proves you understand the unglamorous part of the job that keeps production pipelines running.
Web Apps & Dashboards
33. Full-Stack Spatial Search Application
Advanced
Python
Flask / FastAPI
PostGIS
SQL
JavaScript
Leaflet
Full-Stack
Build a web app where users can search for a location, draw a bounding box or polygon, and query a PostGIS database for features within that area. Use Flask or FastAPI as the backend, PostGIS for spatial queries, and Leaflet for the frontend. Load a real dataset (e.g., EPA facility locations, USGS stream gauges). Output: a deployed web app with draw-to-query, results list, and export-to-GeoJSON functionality.
Datasets: EPA FRS Facility Data or USGS Water Services
Stands out because building a spatial search backend with PostGIS is the most common task in geospatial software engineering — this single project covers the full stack that $140K+ jobs require.
34. 3D Building Visualization with CesiumJS
Intermediate
JavaScript
CesiumJS
3D Visualization
OpenStreetMap Data
Web Development
Download OpenStreetMap building footprints with height attributes for a city center. Extrude them into 3D in CesiumJS. Color buildings by use type (commercial, residential, industrial) or height. Add terrain from Cesium World Terrain. Allow the user to click a building to see attributes. Output: a deployed 3D city viewer that works in a browser.
Datasets: OpenStreetMap via Overpass API, Cesium World Terrain (free tier), Cesium OSM Buildings (free)
Stands out because a 3D city viewer you can spin, zoom, and click on is the kind of demo that makes interviewers say “wait, you built that?” — it’s viscerally impressive in a way flat maps can’t match.
35. Real-Time Air Quality Dashboard
Intermediate
Python
Flask
JavaScript
Leaflet
REST APIs
Spatial Interpolation
Deployment
Build a dashboard that pulls current air quality data from the EPA AirNow API (or OpenAQ), displays station locations on a map with color-coded AQI values, shows a 24-hour trend chart for any selected station, and interpolates an AQI surface using IDW. Auto-refresh every 15 minutes. Output: a live dashboard built with Flask + Leaflet + Chart.js, deployed on a free tier (Render, Railway, or similar).
Datasets: EPA AirNow API or OpenAQ API (global)
Stands out because a live dashboard that auto-refreshes with real data is qualitatively different from a static map — it’s the kind of thing you can pull up during an interview and say “this is running right now.”
36. Collaborative Field Data Collection App
Advanced
Python
FastAPI
PostGIS
JavaScript
Leaflet
Responsive Design
Build a lightweight web app for field data collection. Users open it on their phone, see a map, tap to drop a point, fill in a form (species name, condition, notes), and submit. Data goes to a PostGIS backend. An admin view shows all collected points with filtering and export to GeoJSON/CSV. Output: a working mobile-friendly app suitable for environmental surveys or asset inventories. Optional: Add photo uploads (requires file storage).
Datasets: Self-generated (the app creates the data), base maps from OpenStreetMap
Stands out because field data collection tools (Survey123, Fulcrum, KoboToolbox) are a huge GIS market — building one from scratch demonstrates you understand the product category, not just the end-user workflow.
37. kepler.gl Data Story: Narrating a Spatial Pattern
Beginner
Python (Data Prep)
kepler.gl
Data Visualization
Data Storytelling
Web Hosting
Pick a dataset with a compelling spatial story — NYC taxi pickups by hour to reveal commute vs. nightlife patterns, bike-share trip origins to show neighborhood connectivity, or AIS vessel tracks to reveal shipping lane seasonality. Clean and prepare the data in Python, then build a multi-layer kepler.gl visualization with meaningful filter presets, time playback, and tooltip configuration. Embed it in a hosted page with a written narrative explaining what the visualization reveals. Output: a deployed page where the visualization and the written analysis work together.
Stands out because the data preparation and written narrative elevate this beyond “I dragged a CSV into a tool” — it demonstrates the communication skills that hiring managers value alongside technical ability.
38. Deck.gl Trip Animation Dashboard
Advanced
JavaScript
React
deck.gl
Animation
GPS Data Processing
Take GPS trajectory data (bike-share trip records, transit vehicle tracks, or hurricane paths from NOAA IBTrACS) and build an animated visualization using deck.gl’s TripsLayer. Add a timeline control, speed slider, and summary statistics panel. Output: an animated map that replays movement patterns over time, deployed as a static site.
Stands out because deck.gl is used at Uber, Meta, and other tech companies for geospatial visualization — portfolio familiarity with it signals readiness for high-paying tech-sector GIS roles.
Social Equity & Public Health
39. Internet Access Equity Map: FCC vs. Reality
Intermediate
Python
GeoPandas
Data Comparison Analysis
Choropleth Mapping
Data Storytelling
Download FCC Broadband Map data and Ookla Speedtest Intelligence open data for the same geography. Compare FCC’s claimed coverage with actual measured speeds. Identify areas where the FCC says broadband is available but measured speeds are below the 25/3 Mbps threshold. Overlay with ACS income data. Output: a “broadband gap” map showing where ISP marketing claims diverge from reality, with demographic analysis.
Stands out because the gap between FCC coverage claims and actual speeds is a politically charged and genuinely important issue — this analysis produces findings that are newsworthy, not just technically sound.
40. Opportunity Atlas Deep Dive: Neighborhood Mobility Mapping
Intermediate
Python
GeoPandas
Statistical Analysis
Multi-Dataset Integration
QGIS
Download Opportunity Atlas data (intergenerational income mobility by census tract) and join it with spatial characteristics: school proximity (HIFLD), park access (OSM), transit coverage (GTFS), and environmental hazard exposure (EPA EJScreen). Build a regression or correlation analysis to identify which spatial factors best predict upward mobility. Output: a multi-panel map and statistical summary.
Datasets: Opportunity Atlas, HIFLD schools, EPA EJScreen (note: federal portal has been intermittently offline; the CalEnviroScreen tool covers California with the same methodology), GTFS feeds
Stands out because you’re asking “does living near a park or transit stop actually predict whether kids escape poverty?” — that’s a question with real policy implications, and the regression results will surprise you.
41. Healthcare Desert Identification Tool
Advanced
Python
Routing / Isochrones (OSRM)
Spatial Analysis
Public Health Data
Data Visualization
Download HIFLD hospital locations and HRSA Health Professional Shortage Area designations. Calculate drive-time isochrones (using OSRM or Valhalla — both free and self-hostable) from every hospital. Identify census tracts where the nearest hospital is more than 30 minutes away. Cross-reference with CDC PLACES chronic disease prevalence data. Output: a map of healthcare deserts ranked by combined distance burden and disease prevalence.
Stands out because drive-time analysis (not just straight-line distance) is what real health geography studies use — demonstrating isochrone calculation puts you ahead of candidates who only know buffer analysis.
42. Food Desert Evolution: 10-Year Grocery Store Change
Beginner
Python
GeoPandas
Temporal Analysis
Demographic Data
QGIS Cartography
Download USDA Food Access Research Atlas data for two time periods. Map census tracts that gained or lost food desert status. Overlay with demographic change data from ACS to identify whether gentrification or disinvestment correlates with food access changes. Output: a before/after map with a narrative analysis of which neighborhoods improved or worsened and why.
Datasets: USDA Food Access Research Atlas (multiple years), ACS 5-Year Estimates
Stands out because the temporal angle is what makes this work — most food desert analyses are single-date snapshots, but tracking which tracts gained or lost access over a decade produces genuinely novel findings that policy researchers would cite.
43. School Funding vs. Proximity to Environmental Hazards
Intermediate
Python
GeoPandas
Statistical Testing
Environmental Justice
Data Storytelling
Join NCES school-level data (enrollment, funding per pupil, demographics) with EPA Toxic Release Inventory facility locations. Calculate distance from every public school to the nearest TRI facility. Test whether schools with higher shares of low-income or minority students are systematically closer to pollution sources. Output: a statistical report with maps and a regression analysis.
Stands out because this goes beyond mapping EJScreen (which anyone can do) to actually testing a specific hypothesis with statistical rigor — that combination of spatial analysis and statistical thinking is what research positions require.
44. Housing Displacement Risk Model
Advanced
Python
scikit-learn
GeoPandas
Spatial Modeling
Feature Engineering
Build a predictive model for housing instability using ACS tract-level data: rent burden (% of renters paying >30% of income), vacancy rates, unemployment rates, median household income, and year-over-year rent change. Optionally add Eviction Lab data where available. Train a Random Forest classifier to score tracts by displacement risk. Validate with held-out data. Output: a risk map with model performance metrics and a writeup identifying the strongest spatial predictors.
Datasets: ACS housing data, BLS Local Area Unemployment, Eviction Lab (where available), GTFS for transit access
Stands out because predictive spatial modeling with proper train/test validation is rare in GIS portfolios — this demonstrates the machine learning workflow that data science-adjacent GIS roles demand.
Tools, Open Source & Modern Stack
45. QGIS Plugin: Batch Geoprocessing Tool
Advanced
Python
PyQGIS
Plugin Development
Qt / PyQt
Software Engineering
Build a QGIS plugin (in Python using PyQGIS) that lets users select multiple layers, choose a geoprocessing operation (buffer, clip, intersect, dissolve), set parameters, and run it as a batch across all selected layers. Include a progress bar and error handling. Output: a working .zip plugin installable from QGIS, published to a GitHub repo with documentation.
Datasets: None required (tool works on any data the user loads)
Stands out because building a QGIS plugin that other people can actually install and use demonstrates software engineering skills that go far beyond “proficient in QGIS” — it’s the difference between using tools and building them.
46. DuckDB + GeoParquet Spatial Analysis
Intermediate
SQL
DuckDB
GeoParquet
Python
Modern Data Engineering
Benchmarking
Download Overture Maps data in GeoParquet format. Use DuckDB with the spatial extension to query it — no GIS software required. Perform a complete analysis entirely in SQL: filter buildings by city, calculate area, join with H3 hex bins, aggregate statistics. Output: a Jupyter notebook demonstrating the full workflow, benchmarked against an equivalent GeoPandas workflow to show performance differences.
Datasets: Overture Maps GeoParquet, Source Cooperative datasets
Stands out because DuckDB + GeoParquet is the emerging stack for large-scale geospatial analytics — demonstrating fluency with it signals you’re tracking where the industry is heading, not where it was.
47. H3 Hexagonal Analysis of Urban Phenomena
Intermediate
Python
H3
GeoPandas
Spatial Statistics
Data Visualization
Take a point dataset (311 complaints, bike-share stations, building permits, or restaurant inspections) and aggregate it into Uber’s H3 hexagonal grid at multiple resolutions. Calculate density, temporal trends, and spatial autocorrelation at each resolution. Compare hex-based results with traditional census tract aggregation. Output: a multi-resolution hexagonal map with a writeup on why hex grids produce different insights than administrative boundaries.
Datasets: City open data portals for 311, bike-share, or permits; H3 library
Stands out because the writeup comparing hex vs. census-tract aggregation is the real value — it shows you understand that the choice of spatial unit changes the analytical result, which is a deeper insight than most portfolios demonstrate.
48. PMTiles Serverless Map: Zero-Cost Hosting
Intermediate
JavaScript
MapLibre GL JS
PMTiles
tippecanoe
Serverless Architecture
Convert a large vector dataset (all US national parks, global airport locations, or OSM building footprints for a state) into PMTiles format. Host the single file on GitHub Pages or Cloudflare R2. Build a MapLibre GL JS frontend that reads tiles directly from the static file — no tile server required. Output: a fast, interactive vector tile map hosted for free with zero backend infrastructure.
Stands out because PMTiles eliminates the need for tile servers entirely — demonstrating this approach shows you can build mapping infrastructure at zero operational cost, which is exactly what startups and small teams need.
49. Python Package: Reusable Spatial Analysis Toolkit
Advanced
Python
Software Engineering
Testing
CI/CD
Packaging
Documentation
Build a small, installable Python package (with pyproject.toml, proper project structure, tests, and docs) that solves a specific spatial problem: e.g., batch geocoding with fallback providers, GTFS accessibility scoring, or zonal statistics with multiple aggregation functions. Publish to PyPI or TestPyPI. Output: a pip-installable package with a README, unit tests, and CI via GitHub Actions.
Datasets: Depends on the chosen problem domain
Stands out because publishing a real package to PyPI — with tests and CI — demonstrates professional software engineering practices that 95% of GIS candidates cannot show, and it’s directly relevant to the $136K+ geospatial software engineering track.
50. Docker-Containerized PostGIS Analysis Environment
Advanced
Docker
PostGIS
SQL
Python
Infrastructure-as-Code
Documentation
Create a Docker Compose setup that spins up a PostGIS database, loads a real dataset (Census tracts, OSM data, or USGS stream gauges) via an automated init script, and includes a Jupyter notebook server pre-configured with GeoPandas and SQLAlchemy. Write 5–10 example queries demonstrating spatial SQL (ST_Within, ST_Buffer, ST_Intersection, spatial joins, nearest-neighbor). Output: a GitHub repo where anyone can run
docker compose up and have a fully working spatial analysis environment in 60 seconds.Datasets: Census TIGER/Line or OpenStreetMap via Geofabrik
Stands out because Docker + PostGIS co-appears in the highest-paying GIS job listings ($170K median for Docker skills) — a reproducible containerized environment proves you can set up the infrastructure, not just use it.