Feat: Add parcel tile generation workflow and scripts#18
Merged
the-snesler merged 2 commits intomainfrom Mar 11, 2026
Merged
Conversation
- Introduced a GitHub Actions workflow for building PMTiles from parcel data. - Added SQL script to extract parcel geometries from DuckDB. - Created a Bash script to handle the generation of PMTiles using DuckDB and Tippecanoe. - Updated README with instructions for local builds and GitHub Actions usage. - Updated .gitignore to include generated map tiles.
There was a problem hiding this comment.
Pull request overview
Adds an offline “parcel tiles” pipeline that extracts parcel geometries from GCS via DuckDB, builds a PMTiles archive with tippecanoe, and publishes it via a scheduled GitHub Actions workflow for static hosting alongside the website.
Changes:
- Added a DuckDB SQL extract to produce newline-delimited GeoJSON for parcels.
- Added a Bash script to generate a parcels
.pmtilesfile via tippecanoe. - Added a weekly/manual GitHub Actions workflow to build and upload the PMTiles artifact to Cloudflare R2, plus README/.gitignore updates.
Reviewed changes
Copilot reviewed 4 out of 5 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| scripts/generate_parcel_pmtiles.sh | Orchestrates DuckDB extraction + tippecanoe PMTiles generation. |
| scripts/extract_parcels_geojson.sql | Extracts/normalizes parcel geometries and emits NDJSON features. |
| .github/workflows/parcel-tiles.yml | CI workflow to build, artifact, and upload PMTiles to R2 on a schedule. |
| README.md | Documents local build steps and required CI secrets/variables. |
| .gitignore | Ignores generated tile outputs under build/tiles/. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Contributor
|
@the-snesler I've opened a new pull request, #19, to work on those changes. Once the pull request is ready, I'll request review from you. |
1 task
* Initial plan * Swap tippecanoe and DuckDB CLI installation step order Co-authored-by: the-snesler <78718829+the-snesler@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: the-snesler <78718829+the-snesler@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
We want to be able to display parcels on our map. It doesn't make sense to calculate these dynamically in the backend because our dataset doesn't change often, and it'd be a huge DB query and CPU burn for every pageload. Instead we process them into a ~50mb .pmtiles file that we can host statically alongside the website, and fetch from that instead. It seems to work on my machine so far, but it's difficult to test the S3 component without running CI.