Geospatial Analytics Backend
The backend of a provincial government platform for tracking village development: a spatial data API that ingests the multi-indicator Village Development Index (IDM) from bulk spreadsheets, serves village profiles, the IDM score breakdown, and village enterprises statistics, and publishes Mapbox Vector Tile map layers from PostGIS. (Built as a government client project; my role was backend engineering.)
What it does (backend). The platform lets a provincial village-empowerment authority monitor how each village is developing. The backend powers that: it serves village profiles (administrative hierarchy down to province → regency → district → village, plus location and head-of-village data), the IDM — Village Development Index with its component sub-indices (social, economic, ecological, etc.) and the resulting status (Tertinggal / Berkembang / …), Village Enterprise statistics by regency and year, and interactive map layers of the region. Bulk IDM data arrives as per-village Excel files and is ingested into the database for query and ranking.
Village-development monitoring is data-heavy, spatial, and multi-year:
z/x/y tiles per layer directly from
PostGIS (ST_AsMVT/ST_AsMVTGeom/ST_TileEnvelope, Find_SRID, reprojection to 3857) for fast
regional maps.| Layer | Technologies |
|---|---|
| API | FastAPI, Uvicorn, Pydantic, CORS, session middleware |
| Database | PostgreSQL + PostGIS, asyncpg async pool |
| Geospatial | reusable MVT builder — ST_AsMVT / ST_AsMVTGeom / ST_TileEnvelope, Find_SRID, reprojection (3857) |
| Data ingestion | per-village Excel (.xls) IDM parsing/loading |
| Auth | JWT (PyJWT / python-jose), passlib, per-user access scopes |
| Validation | Pydantic + regex constr guards for safe dynamic ordering/filtering |
| Files | aiofiles, multipart, download endpoints |
| Infra | Docker / docker-compose, GitHub Actions CI/CD |
Disclaimer: sample visuals may contain anonymized, simulated, or non-production values for presentation purposes.