139 lines
3.5 KiB
Markdown
139 lines
3.5 KiB
Markdown
|
|
# 🛰️ FastAPI Backend — Sistem Referensi & Validasi Data Geospasial
|
|||
|
|
|
|||
|
|
Proyek ini adalah backend berbasis **FastAPI** yang menangani proses **pembacaan data spasial (Shapefile, GeoJSON)**, **ekstraksi PDF**, serta **validasi dan sinkronisasi data** terhadap referensi basis data menggunakan **PostgreSQL/PostGIS** dan **RapidFuzz** untuk pencocokan string.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ⚙️ Fitur Utama
|
|||
|
|
|
|||
|
|
✅ Upload dan ekstrak file `.zip` berisi `.shp` atau `.gdb`
|
|||
|
|
✅ Parsing PDF menggunakan `pdfplumber`
|
|||
|
|
✅ Konversi dan validasi geometri (Shapely + GeoPandas)
|
|||
|
|
✅ Pencocokan fuzzy string terhadap referensi DB (`RapidFuzz`)
|
|||
|
|
✅ Integrasi PostgreSQL / PostGIS melalui SQLAlchemy
|
|||
|
|
✅ Middleware CORS untuk komunikasi dengan frontend
|
|||
|
|
✅ Dukungan konfigurasi `.env` (via `python-dotenv`)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🧱 Struktur Proyek
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
project-root/
|
|||
|
|
│
|
|||
|
|
├── core/
|
|||
|
|
│ ├── config.py # Konfigurasi environment & DB URL
|
|||
|
|
│ └── utils/ # Fungsi tambahan (opsional)
|
|||
|
|
│
|
|||
|
|
├── routes/
|
|||
|
|
│ └── upload_routes.py # Endpoint untuk upload & validasi
|
|||
|
|
│
|
|||
|
|
├── services/
|
|||
|
|
│ └── pdf_service.py # Parser PDF
|
|||
|
|
│ └── shapefile_service.py # Pembaca dan validator shapefile
|
|||
|
|
│
|
|||
|
|
├── main.py # Entry point FastAPI
|
|||
|
|
├── requirements.txt # Daftar dependensi
|
|||
|
|
├── .env # File konfigurasi (DB_URL, schema, dll)
|
|||
|
|
└── README.md # Dokumentasi proyek ini
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔧 Instalasi dan Setup
|
|||
|
|
|
|||
|
|
### 1️⃣ Clone Repository
|
|||
|
|
```bash
|
|||
|
|
git clone https://git.labmu.ac.id/username/nama-proyek.git
|
|||
|
|
cd nama-proyek
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2️⃣ Buat Virtual Environment
|
|||
|
|
```bash
|
|||
|
|
python -m venv venv
|
|||
|
|
source venv/bin/activate # (Linux/Mac)
|
|||
|
|
venv\Scripts\activate # (Windows)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3️⃣ Instal Dependensi
|
|||
|
|
```bash
|
|||
|
|
pip install -r requirements.txt
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4️⃣ Konfigurasi File `.env`
|
|||
|
|
Buat file `.env` di root proyek:
|
|||
|
|
|
|||
|
|
```env
|
|||
|
|
REFERENCE_DB_URL=postgresql+psycopg2://user:password@localhost:5432/nama_db
|
|||
|
|
REFERENCE_SCHEMA=public
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 Menjalankan Server
|
|||
|
|
|
|||
|
|
Jalankan server FastAPI menggunakan **Uvicorn**:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
uvicorn main:app --reload
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Server akan berjalan di:
|
|||
|
|
👉 http://127.0.0.1:8000
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🧠 Contoh Endpoint
|
|||
|
|
|
|||
|
|
| Method | Endpoint | Deskripsi |
|
|||
|
|
|--------|-----------|-----------|
|
|||
|
|
| `POST` | `/upload/shapefile` | Upload file `.zip` berisi `.shp` |
|
|||
|
|
| `POST` | `/upload/pdf` | Ekstrak tabel dari file PDF |
|
|||
|
|
| `GET` | `/reference/check` | Validasi data terhadap referensi DB |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🧩 Teknologi yang Digunakan
|
|||
|
|
|
|||
|
|
| Kategori | Library |
|
|||
|
|
|-----------|----------|
|
|||
|
|
| Framework | FastAPI, Starlette |
|
|||
|
|
| Database | SQLAlchemy, psycopg2, PostgreSQL/PostGIS |
|
|||
|
|
| Data & Geo | Pandas, GeoPandas, Shapely, Fiona, PyProj |
|
|||
|
|
| Parsing | pdfplumber |
|
|||
|
|
| Matching | RapidFuzz |
|
|||
|
|
| Utilitas | python-dotenv, pathlib, zipfile |
|
|||
|
|
| Server | Uvicorn |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🧪 Testing
|
|||
|
|
|
|||
|
|
Jalankan server dan uji dengan **Swagger UI**:
|
|||
|
|
```
|
|||
|
|
http://127.0.0.1:8000/docs
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Atau gunakan **cURL / Postman** untuk pengujian manual.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🧰 Tips Penggunaan
|
|||
|
|
|
|||
|
|
- Pastikan `GDAL`, `GEOS`, dan `PROJ` sudah terinstal di sistem jika menggunakan `GeoPandas` / `Fiona`.
|
|||
|
|
- Gunakan `pip freeze > requirements.txt` untuk memperbarui dependensi.
|
|||
|
|
- Gunakan `.gitignore` agar file sensitif seperti `.env` tidak ikut ter-push.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 👨💻 Pengembang
|
|||
|
|
**Nama:** Dimas Anhar
|
|||
|
|
**Lab / Organisasi:** [Nama Lab atau Institusi]
|
|||
|
|
**Email:** (opsional)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📄 Lisensi
|
|||
|
|
Proyek ini dikembangkan untuk keperluan penelitian dan pengembangan internal.
|
|||
|
|
Lisensi dapat disesuaikan sesuai kebijakan lab atau institusi.
|