Initial commit
This commit is contained in:
@@ -0,0 +1,460 @@
|
||||
# WebGIS Poverty Mapping - API Documentation
|
||||
|
||||
**Version:** 1.0
|
||||
**Last Updated:** May 2026
|
||||
|
||||
## Table of Contents
|
||||
|
||||
1. [Overview](#overview)
|
||||
2. [Base URL & Authentication](#base-url--authentication)
|
||||
3. [Endpoints](#endpoints)
|
||||
4. [Error Handling](#error-handling)
|
||||
5. [Examples](#examples)
|
||||
6. [Data Types](#data-types)
|
||||
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
||||
The WebGIS Poverty Mapping API provides RESTful endpoints to manage geographical data related to poverty mapping, including:
|
||||
- Points of Interest (Rumah Ibadah, Rumah Miskin, etc.)
|
||||
- Linear Features (Jalan)
|
||||
- Polygonal Features (Parsil)
|
||||
|
||||
All responses are in JSON format with GeoJSON support for spatial data.
|
||||
|
||||
---
|
||||
|
||||
## Base URL & Authentication
|
||||
|
||||
**Base URL:** `http://localhost/webgis/`
|
||||
|
||||
**Content-Type:** `application/json`
|
||||
|
||||
**Response Format:** `application/json`
|
||||
|
||||
Authentication is not currently implemented. For production, implement JWT or OAuth2.
|
||||
|
||||
---
|
||||
|
||||
## Endpoints
|
||||
|
||||
### 1. GET /get_improved.php - Retrieve Data
|
||||
|
||||
Get all features or filtered by type and status.
|
||||
|
||||
**Method:** `GET` or `POST`
|
||||
|
||||
**Query Parameters:**
|
||||
```
|
||||
- tipe (optional): point | worship | poor_house | jalan | parsil
|
||||
- status (optional): aktif | nonaktif | draf (default: aktif)
|
||||
- limit (optional): max records to return (default: 1000, max: 5000)
|
||||
- offset (optional): pagination offset (default: 0)
|
||||
- format (optional): geojson | json (default: geojson)
|
||||
```
|
||||
|
||||
**Request Example:**
|
||||
```bash
|
||||
GET /get_improved.php?tipe=worship&status=aktif&limit=100
|
||||
```
|
||||
|
||||
**Response (GeoJSON Format):**
|
||||
```json
|
||||
{
|
||||
"type": "FeatureCollection",
|
||||
"features": [
|
||||
{
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [109.3494, -0.0554]
|
||||
},
|
||||
"properties": {
|
||||
"id": 1,
|
||||
"tipe": "worship",
|
||||
"nama": "Masjid Al-Hidayah",
|
||||
"jenis": "Masjid",
|
||||
"alamat": "Jln Imam Bonjol",
|
||||
"status": "aktif",
|
||||
"radius_meter": 200,
|
||||
"kapasitas": 500,
|
||||
"kegiatan": "Shalat Jum'at, Pengajian",
|
||||
"created_at": "2026-05-20 10:00:00"
|
||||
}
|
||||
}
|
||||
],
|
||||
"pagination": {
|
||||
"total": 150,
|
||||
"count": 100,
|
||||
"limit": 100,
|
||||
"offset": 0
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Status Codes:**
|
||||
- `200 OK` - Success
|
||||
- `400 Bad Request` - Invalid parameters
|
||||
- `500 Internal Server Error` - Server error
|
||||
|
||||
---
|
||||
|
||||
### 2. POST /save_improved.php - Create New Data
|
||||
|
||||
Create a new feature in the database.
|
||||
|
||||
**Method:** `POST`
|
||||
|
||||
**Request Body:**
|
||||
```json
|
||||
{
|
||||
"tipe": "worship",
|
||||
"nama": "Masjid Baitussalam",
|
||||
"jenis": "Masjid",
|
||||
"alamat": "Jln Dipanegara No 45",
|
||||
"kontak": "Imam Haji Syaiful",
|
||||
"no_wa": "+62812345678",
|
||||
"kegiatan": "Shalat Jum'at, Pengajian",
|
||||
"kapasitas": 500,
|
||||
"radius_meter": 200,
|
||||
"latitude": -0.0554,
|
||||
"longitude": 109.3494,
|
||||
"status": "aktif"
|
||||
}
|
||||
```
|
||||
|
||||
**Response (Success):**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"message": "Data saved successfully",
|
||||
"data": {
|
||||
"id": 123
|
||||
},
|
||||
"timestamp": "2026-05-20 10:15:00"
|
||||
}
|
||||
```
|
||||
|
||||
**Response (Error):**
|
||||
```json
|
||||
{
|
||||
"success": false,
|
||||
"message": "Validation failed",
|
||||
"errors": {
|
||||
"tipe": "Field 'tipe' is required",
|
||||
"radius_meter": "Field 'radius_meter' must be >= 1"
|
||||
},
|
||||
"timestamp": "2026-05-20 10:15:00"
|
||||
}
|
||||
```
|
||||
|
||||
**Status Codes:**
|
||||
- `200 OK` - Success
|
||||
- `400 Bad Request` - Validation error
|
||||
- `500 Internal Server Error` - Server error
|
||||
|
||||
**Required Fields by Type:**
|
||||
|
||||
**Type: worship**
|
||||
- nama
|
||||
- tipe
|
||||
- radius_meter (1-500)
|
||||
|
||||
**Type: poor_house**
|
||||
- nama_kepala_keluarga
|
||||
- latitude
|
||||
- longitude
|
||||
|
||||
**Type: jalan**
|
||||
- geom (LineString GeoJSON)
|
||||
- panjang
|
||||
|
||||
**Type: parsil**
|
||||
- geom (Polygon GeoJSON)
|
||||
- luas
|
||||
|
||||
---
|
||||
|
||||
### 3. POST /update_improved.php - Update Data
|
||||
|
||||
Update an existing feature.
|
||||
|
||||
**Method:** `POST`
|
||||
|
||||
**Request Body:**
|
||||
```json
|
||||
{
|
||||
"id": 123,
|
||||
"nama": "Masjid Baitussalam (Updated)",
|
||||
"kapasitas": 600,
|
||||
"status": "aktif"
|
||||
}
|
||||
```
|
||||
|
||||
**Response (Success):**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"message": "Data updated successfully",
|
||||
"data": {
|
||||
"id": 123
|
||||
},
|
||||
"timestamp": "2026-05-20 10:20:00"
|
||||
}
|
||||
```
|
||||
|
||||
**Status Codes:**
|
||||
- `200 OK` - Success
|
||||
- `400 Bad Request` - Validation error
|
||||
- `404 Not Found` - Record not found
|
||||
- `500 Internal Server Error` - Server error
|
||||
|
||||
---
|
||||
|
||||
### 4. POST /delete_improved.php - Delete Data
|
||||
|
||||
Delete or soft-delete a feature.
|
||||
|
||||
**Method:** `POST`
|
||||
|
||||
**Request Body:**
|
||||
```json
|
||||
{
|
||||
"id": 123,
|
||||
"method": "soft"
|
||||
}
|
||||
```
|
||||
|
||||
**Parameters:**
|
||||
- `id` (required): Record ID to delete
|
||||
- `method` (optional): "soft" (mark as nonaktif) or "hard" (actually remove)
|
||||
|
||||
**Response (Success):**
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"message": "Data deleted successfully",
|
||||
"data": {
|
||||
"id": 123
|
||||
},
|
||||
"timestamp": "2026-05-20 10:25:00"
|
||||
}
|
||||
```
|
||||
|
||||
**Status Codes:**
|
||||
- `200 OK` - Success
|
||||
- `404 Not Found` - Record not found
|
||||
- `405 Method Not Allowed` - Wrong HTTP method
|
||||
- `500 Internal Server Error` - Server error
|
||||
|
||||
---
|
||||
|
||||
## Error Handling
|
||||
|
||||
All errors follow this structure:
|
||||
|
||||
```json
|
||||
{
|
||||
"success": false,
|
||||
"message": "Error description",
|
||||
"errors": {
|
||||
"field_name": "Specific error message"
|
||||
},
|
||||
"timestamp": "2026-05-20 10:30:00"
|
||||
}
|
||||
```
|
||||
|
||||
### Common Error Codes
|
||||
|
||||
| Code | Message | Solution |
|
||||
|------|---------|----------|
|
||||
| 400 | Bad Request | Check request format and parameters |
|
||||
| 400 | Invalid JSON input | Ensure JSON is properly formatted |
|
||||
| 400 | Validation failed | Check required fields and data types |
|
||||
| 404 | Record not found | Verify the ID exists |
|
||||
| 405 | Method not allowed | Use correct HTTP method (GET/POST) |
|
||||
| 500 | Server error | Check server logs |
|
||||
|
||||
---
|
||||
|
||||
## Examples
|
||||
|
||||
### Example 1: Add Rumah Ibadah
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost/webgis/save_improved.php \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"tipe": "worship",
|
||||
"nama": "Gereja Pentekosta",
|
||||
"jenis": "Gereja",
|
||||
"alamat": "Jln Achmad Yani",
|
||||
"kontak": "Pdt. Markus",
|
||||
"kegiatan": "Ibadah Minggu, Doa Malam",
|
||||
"kapasitas": 300,
|
||||
"radius_meter": 150,
|
||||
"latitude": -0.0500,
|
||||
"longitude": 109.3500,
|
||||
"status": "aktif"
|
||||
}'
|
||||
```
|
||||
|
||||
### Example 2: Add Poor Household
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost/webgis/save_improved.php \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"tipe": "poor_house",
|
||||
"nama_kepala_keluarga": "Budi Santoso",
|
||||
"alamat": "Jln Cendana RT 05 RW 02",
|
||||
"jumlah_anggota": 5,
|
||||
"kondisi_rumah": "BURUK",
|
||||
"sumber_penghasilan": "Buruh",
|
||||
"kebutuhan_prioritas": "Perbaikan Atap",
|
||||
"status_bantuan": "BELUM",
|
||||
"latitude": -0.0600,
|
||||
"longitude": 109.3400,
|
||||
"status": "aktif"
|
||||
}'
|
||||
```
|
||||
|
||||
### Example 3: Retrieve All Worship Places
|
||||
|
||||
```bash
|
||||
curl "http://localhost/webgis/get_improved.php?tipe=worship&limit=50"
|
||||
```
|
||||
|
||||
### Example 4: Update Feature
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost/webgis/update_improved.php \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"id": 1,
|
||||
"nama": "Masjid Al-Hidayah (Updated)",
|
||||
"status": "aktif"
|
||||
}'
|
||||
```
|
||||
|
||||
### Example 5: Delete Feature (Soft Delete)
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost/webgis/delete_improved.php \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"id": 1,
|
||||
"method": "soft"
|
||||
}'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Data Types
|
||||
|
||||
### Feature Types
|
||||
|
||||
| Type | Description | Key Fields |
|
||||
|------|-------------|-----------|
|
||||
| worship | Rumah Ibadah (Masjid, Gereja, dll) | nama, jenis, radius_meter, kapasitas |
|
||||
| poor_house | Rumah Penduduk Miskin | nama_kepala_keluarga, jumlah_anggota, kondisi_rumah |
|
||||
| point | Data Umum | nama, alamat |
|
||||
| jalan | Ruas Jalan | geom (LineString), panjang |
|
||||
| parsil | Bidang/Parsil | geom (Polygon), luas |
|
||||
|
||||
### House Conditions
|
||||
|
||||
| Code | Description |
|
||||
|------|-------------|
|
||||
| SANGAT_BURUK | Rumah dalam kondisi sangat buruk/rawan roboh |
|
||||
| BURUK | Rumah banyak kerusakan |
|
||||
| SEDANG | Rumah dengan kerusakan ringan |
|
||||
| BAIK | Rumah dalam kondisi baik |
|
||||
|
||||
### Assistance Status
|
||||
|
||||
| Code | Description |
|
||||
|------|-------------|
|
||||
| BELUM | Belum menerima bantuan apapun |
|
||||
| PENERIMA_PKH | Penerima Program Keluarga Harapan |
|
||||
| PENERIMA_BLT | Penerima Bantuan Langsung Tunai |
|
||||
| PENERIMA_BANTSOS | Penerima bantuan sosial lainnya |
|
||||
|
||||
### Income Sources
|
||||
|
||||
| Code | Description |
|
||||
|------|-------------|
|
||||
| PETANI | Petani |
|
||||
| BURUH | Buruh |
|
||||
| PEDAGANG | Pedagang |
|
||||
| PNS | PNS |
|
||||
| SWASTA | Pegawai Swasta |
|
||||
| USAHA_KECIL | Usaha Kecil |
|
||||
| PENSIUN | Pensiun |
|
||||
| TIDAK_BEKERJA | Tidak Bekerja |
|
||||
|
||||
---
|
||||
|
||||
## GeoJSON Reference
|
||||
|
||||
### Point Geometry
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "Point",
|
||||
"coordinates": [109.3494, -0.0554]
|
||||
}
|
||||
```
|
||||
|
||||
### LineString Geometry (Jalan)
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "LineString",
|
||||
"coordinates": [
|
||||
[109.3494, -0.0554],
|
||||
[109.3500, -0.0560],
|
||||
[109.3510, -0.0570]
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Polygon Geometry (Parsil)
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "Polygon",
|
||||
"coordinates": [
|
||||
[
|
||||
[109.3494, -0.0554],
|
||||
[109.3500, -0.0554],
|
||||
[109.3500, -0.0560],
|
||||
[109.3494, -0.0560],
|
||||
[109.3494, -0.0554]
|
||||
]
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Rate Limiting & Performance Tips
|
||||
|
||||
- Maximum 1000 records per request (configurable via `limit` parameter, max 5000)
|
||||
- Use pagination with `offset` for large datasets
|
||||
- Index on commonly filtered fields: `tipe`, `status`, `latitude`, `longitude`
|
||||
- Cache results when possible
|
||||
- Use GeoJSON format for map applications
|
||||
|
||||
---
|
||||
|
||||
## Changelog
|
||||
|
||||
| Version | Date | Changes |
|
||||
|---------|------|---------|
|
||||
| 1.0 | May 2026 | Initial API documentation |
|
||||
|
||||
---
|
||||
|
||||
**For support, contact the development team.**
|
||||
Reference in New Issue
Block a user