satupeta-main/README.md

137 lines
3.5 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🛰️ 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
---
## 📄 Lisensi
Proyek ini dikembangkan untuk keperluan penelitian dan pengembangan internal.
Lisensi dapat disesuaikan sesuai kebijakan lab atau institusi.