Choose data that can carry the question.
Start with one authoritative environmental record, add only the policy and spatial context it needs, and preserve a reproducible route from source to finding.
Recommended default: use open, archival agency data for the research paper and machine learning. Treat Google Maps Platform as an optional visualization or small-API lab—not as the analytical data backbone.
Build one coherent data stack
- Anchor data: repeated measurements of the environmental outcome or policy process.
- Context layer: weather, land cover, demographics, facilities, or boundaries that the design actually needs.
- Policy record: laws, program dates, enforcement actions, plans, or institutional documents needed to interpret the numbers.
Before choosing, inspect coverage, unit of observation, update history, missingness, geographic identifiers, license/terms, and whether the source can be archived or queried reproducibly.
Potential environmental data sources
| Source | Questions it can support | Grain and R route |
|---|---|---|
| EPA AQS Data API / AirData files | PM2.5 and ozone trends, wildfire smoke, pollution-weather relationships, exposure inequality | Monitor × sample period, with hourly/daily/annual products; JSON API or bulk CSV |
| NOAA Climate Data Online API | Heat and precipitation extremes, seasonality, long-run climate patterns | Station × day; token API or bulk Global Historical Climatology Network files |
| USGS Water Data APIs | Flood and drought, streamflow, water temperature, hydrologic response to rain | Gauge × instantaneous reading or daily statistic; OGC APIs and the USGS dataRetrieval R package |
| Water Quality Portal, NYS DEC water data, and Livingston County reports | Nutrients, phosphorus, harmful algal blooms, tributary loading, and watershed interventions—especially around Conesus Lake | Site × sampling activity × analyte/date/depth; REST CSV/GeoJSON, dataRetrieval, and EPA TADA tools |
| USGS Annual NLCD | Urbanization, impervious cover, forest loss, and land-cover effects on water | 30 m raster pixel × year; GeoTIFF/WMS/cloud access; optional terra workflow if selected |
| USDA Cropland Data Layer | Crop rotation, agricultural land conversion, and runoff/nutrient-risk proxies | Annual national raster; CroplandCROS/GeoTIFF; optional terra workflow if selected |
| EPA ECHO downloads | Facility siting, inspections, violations, enforcement, penalties, and community disparities | Facility point plus dated compliance/action records; REST/map services and weekly bulk files |
| EPA CAMPD API | Power-plant emissions, cap-and-trade, seasonal pollution, and plant responses to policy | Plant/unit × hour, day, month, year, or ozone season; REST API and bulk files |
| NOAA Storm Events | Hazard frequency, damages, event classification, and county vulnerability | Event × county/forecast zone; annual bulk CSV, with all event types consistently collected from 1996 onward |
| NYSERDA distributed solar + ACS 5-year API | Renewable-adoption diffusion and equity across New York communities | Project × interconnection/place plus tract or block-group context; Socrata and Census APIs with TIGER boundaries |
| USFWS National Wetlands Inventory | Wetland protection, habitat fragmentation, and proximity to development or pollution | Wetland/deepwater polygons; GeoPackage/shapefile, WMS/REST, and sf |
Strong project combinations
| Research direction | Anchor | Context | Natural visualization / model |
|---|---|---|---|
| Conesus Lake water quality | Water Quality Portal + DEC/local monitoring | NLCD/CDL + NOAA precipitation + watershed boundary | Seasonal nutrient plots, land-use map, blocked prediction of high-risk readings |
| Air-quality inequality | EPA AQS | NOAA weather + ACS/TIGER | Monitor trends and exposure map; baseline versus regularized/tree model |
| Power-sector environmental policy | EPA CAMPD | Plant characteristics + weather + policy dates | Unit-level emissions trajectories; time-aware prediction or classification |
| Solar-adoption equity in New York | NYSERDA solar | ACS/TIGER + utility/service geography | Adoption-rate choropleth; tract/ZIP typology or adoption model |
| Climate hazards and vulnerability | NOAA Storm Events | ACS/TIGER + NLCD | Event/damage map; county risk classification with temporal validation |
| Wetlands and development pressure | National Wetlands Inventory | NLCD + ECHO facilities + local zoning/policy | Proximity/fragmentation maps; spatially blocked comparison |
The Conesus Lake stack is the strongest local starting point: it joins observable environmental outcomes, land-use change, weather, and a concrete watershed-policy history within reach of field knowledge and local institutions.
Google Maps Platform: a bounded extension
Google Maps Platform is not one downloadable “Google Map dataset.” It can play three narrower roles:
- Map presentation: render a basemap and display the class’s own GeoJSON, CSV, or KML with the Maps JavaScript API and data-driven styling.
- Spatial services: geocoding, routes, places, or elevation for a small, clearly motivated task.
- Selected environmental services: current/forecast Air Quality, Weather, Pollen, and specialized Solar endpoints.
Current no-cost monthly usage
As of August 23, 2026, Google’s pay-as-you-go model applies a no-cost allowance separately to each SKU. Usage beyond a cap can generate charges.
| Service | Billable events at no cost each month | Appropriate course role |
|---|---|---|
| Maps Embed API | Unlimited | Simple location map; not an analytical custom map |
| Maps JavaScript API — Dynamic Maps | 10,000 map loads | Interactive map of the class’s own research layer |
| Static Maps | 10,000 requests | Static map image |
| 2D Map Tiles | 100,000 tile requests | Custom renderer; one map view may request many tiles |
| Geocoding | 10,000 requests | Small address-to-coordinate lab |
| Maps Datasets API | No charge | Store the class’s own GeoJSON/CSV/KML for styling |
| Air Quality API | 10,000 requests | Short demonstration; historical access is limited to 30 days |
| Weather API | 10,000 requests | Current/forecast demonstration; historical access is limited |
| Pollen API | 5,000 requests | Short forecast demonstration |
Check the current Google Maps Platform price list before the lab. The former recurring $200 monthly credit was replaced in March 2025 by per-SKU no-cost caps.
Standard use requires a billing account and API key. A no-cost cap is not a guarantee of a zero bill. Google’s current terms also prohibit using Google Maps Content to train, test, validate, or fine-tune machine-learning models. Do not use proprietary Google Maps content for the course ML analysis. Use open agency data instead.
Course guardrails
- Use one instructor-controlled Cloud project for the lab and enable only the required APIs.
- Use separate browser and server keys. Restrict browser keys by website/referrer, server keys by IP, and every key by API.
- Never place a server key in a
.qmdfile, rendered page, or Git repository; read it from an environment variable. - Set hard quotas conservatively below the no-cost caps. Budget alerts notify but do not stop charges, and billing reports may lag.
- Do not scrape or bulk-export Google Maps content, assume it can be cached, or display Places/geocoding content on a non-Google map.
Use Google’s security guidance, cost controls, and platform terms as the authority.
Clean R-to-web-map workflow
- Retrieve open agency data in R with
httr2,readr, or a maintained agency package. - Transform with
dplyr, create vector spatial objects withsf, and fit models with direct, model-specific R packages. Useterraonly if the project actually includes raster data. - Explore and validate with
ggplot2,tmap, orleaflet; map predictions and residuals when geography matters. - Export the final non-Google research layer in WGS84 GeoJSON with
sf::st_write(). - For the optional lab, load that GeoJSON into the Maps JavaScript Data layer and style it by attributes.
This separation preserves a reproducible open-data analysis while still giving the student experience publishing a polished interactive Google map.