Data & Automation Engineer · Geospatial Data Pipelines
Data and automation engineer for a 40-person geospatial department. I built and run the weekly ingestion, consolidation, validation and reporting pipeline the team depends on, cutting turnaround from more than a day to about 15 minutes, plus the Python, Power Query, VBA and SQL tools behind it.
Tools I have used in my work and in the projects on this site, and the roles each skill area supports.
| Skill area | Core tools | Data Engineer | GIS Developer |
|---|---|---|---|
| Data pipelines & automation | Python (pandas, NumPy), Playwright web scraping, Power Query (M), scheduled and batch jobs | Yes | Yes |
| SQL & databases | SQL, SQLite, GeoPackage, Cloudflare D1 | Yes | Yes |
| Data QC & validation | Rule-based validation checks, audit changelogs, pytest, hold-out checks | Yes | Yes |
| Spreadsheet & low-code automation | Excel VBA and add-ins, Power Apps, Power Automate, SharePoint | Yes | Yes |
| Cloud & serverless apps | Cloudflare Workers, Pages and D1, Vercel | Yes | Yes |
| GIS & spatial analysis | QGIS, PyQGIS, GeoPandas, GDAL/OGR, spatial joins, Processing models | No | Yes |
| Remote sensing | Sentinel-2 indices (NDVI, NDBI, MNDWI), drone RGB imagery, Random Forest classification, DEM hydrology | No | Yes |
| Web mapping | Leaflet.js, GeoJSON, interactive dashboards | No | Yes |
| AI-assisted development | AI as a partner for planning, scripting, automation; self-directed AI/GIS/automation experiments and exploration | Yes | Yes |
Tools built for my department, a community organisation, a consultancy client and myself. Company-built tools are described here; their code stays with the company.
Produces all 30 maps per project site (11 map types) in one run. A 125-step model that chains the PyQGIS toolbox, legend labeling, style switching and layout export, at the core of the weekly reporting cycle that went from more than a day to about 15 minutes.
Exports layers as structured KML/KMZ from CSV rule files: features are grouped by a chosen attribute into labeled, nested folders and keep their symbology in Google Earth. Replaces individually exporting and organizing layers by hand.
Includes GeoPackage change detection that logs every changed field with its old and new value for audit, a data-source swap across GeoPackage, Shapefile, GeoJSON and CSV, map theme switching, legend text on symbols, QML-to-CSV rule export, and model helpers.
Turn a municipality's raw mobile field-report exports (KMZ) into one analysis-ready layer: merging reports, parsing embedded attributes, consolidating negotiators and flagged issues into single fields, standardising negotiation dates, and spatially joining each report to its lot and barangay. The two most used cut a 30–60 minute manual process to about 20 seconds.
Parameterised models that compute per-lot affected area along route corridors for acquisition and compensation planning, with supporting models for tower footprint boxes and lot outlines.
Ranks parcels/polygons by their sequential position along a reference corridor line — critical for right-of-way workflows. Uses intersection-aware logic: if a polygon overlaps the line, it uses that point; otherwise it projects perpendicularly. Handles CRS mismatches automatically.
Applies optimized legend-style labeling to rule-based symbology layers. Supports pricing and non-pricing modes, configurable decimal places, unit suffixes, and classification fields. Eliminates manual legend label editing for senior map production workflows.
Transfers all named styles from one GIS layer to another, preserving style names and setting the active style to match the source. Addresses a gap in QGIS's native style management that required manual one-by-one copying.
Generated 131 location-specific mobile data-collection templates (SW Maps) across 14 provinces in one run. Copies a master template per row of a CSV config, renames its layers and pre-sets province, municipality and barangay dropdowns, replacing hand-editing each template in the app.
Locates and loads source databases from a configured folder (skipping lock files), combines them, joins them to tranche, conversion and reclassification reference data, flags consolidation status, and normalises dates and currency.
Packaged as add-ins, it replaced manual database builds, table refreshes and summary pivots, and runs automated data-quality checks on dates, payment terms and owner values that output an exception report for correction before data reaches reports.
Members log daily schedules and leave; supervisors see the whole team on a dashboard. Config-driven scheduling windows, deadlines, holidays, org hierarchy, site assignments and field pullout/deployment rotations, on a serverless Worker with a D1 database.
Forms requests flow into SharePoint with per-province ticket numbers, auto-filed folders and acknowledgment emails. An 11-screen Power Apps workspace handles assignment, parcel entry, review and trends, with Teams adaptive-card notifications and per-province Power Query reports.
Each forwarded liquidation email has its attachments filed into a per-code OneDrive folder, and a row with code, purpose, processor, amount, date and attachment links is appended to an Excel tracker.
A report submission web app with admin review and diff views, where approved changes are written to a Cloudflare D1 (SQL) database with a full before/after audit changelog. Paired with a web map dashboard fed by a Python pipeline that cleans multi-municipality data and joins it to administrative boundaries. Built with Claude Code.
Random Forest land-cover classification on an engineered 11-feature stack, bare-land detection auto-calibrated by IoU grid search against ground-truth samples, per-square-metre vegetation grid analysis, and boundary refinement that snaps rough polygons to spectral edges.
Collects public infrastructure project records page by page, filtered by year and region, flattens the JSON and exports it to Excel; a companion QGIS model processes field inspection KMZs.
A screening map of Cebu City built only from open data: Sentinel-2 land cover, a DEM flood-proneness proxy, OpenStreetMap and Google building footprints, with a tested Python pipeline, sensitivity checks and an interactive map.
I build the data pipelines and tools a geospatial team runs on, so its workflows are faster, more reliable and easier to use. My work sits between GIS and software engineering: I don't just analyze data, I build the systems that ingest, validate and deliver it.
Over the past years I've developed and deployed a full suite of tools — QGIS plugins, Python scripts, web dashboards, and automated processing pipelines — all actively used by colleagues every day. Across them: more than 500 man-hours saved per month and more than 90 active daily users. I supervise 3 Junior GIS Specialists and have trained 12 in total.
I'm strongest at keeping recurring jobs running, tracing data discrepancies to their root cause, reconciling records across source systems and automating away manual effort, and I'm building toward data engineering roles that value technical depth alongside domain expertise.