Files
2026-06-13 13:38:52 +07:00

9.0 KiB

WebGIS Poverty Mapping - API Documentation

Version: 1.0
Last Updated: May 2026

Table of Contents

  1. Overview
  2. Base URL & Authentication
  3. Endpoints
  4. Error Handling
  5. Examples
  6. 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:

GET /get_improved.php?tipe=worship&status=aktif&limit=100

Response (GeoJSON Format):

{
  "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:

{
  "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):

{
  "success": true,
  "message": "Data saved successfully",
  "data": {
    "id": 123
  },
  "timestamp": "2026-05-20 10:15:00"
}

Response (Error):

{
  "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:

{
  "id": 123,
  "nama": "Masjid Baitussalam (Updated)",
  "kapasitas": 600,
  "status": "aktif"
}

Response (Success):

{
  "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:

{
  "id": 123,
  "method": "soft"
}

Parameters:

  • id (required): Record ID to delete
  • method (optional): "soft" (mark as nonaktif) or "hard" (actually remove)

Response (Success):

{
  "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:

{
  "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

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

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

curl "http://localhost/webgis/get_improved.php?tipe=worship&limit=50"

Example 4: Update Feature

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)

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

{
  "type": "Point",
  "coordinates": [109.3494, -0.0554]
}

LineString Geometry (Jalan)

{
  "type": "LineString",
  "coordinates": [
    [109.3494, -0.0554],
    [109.3500, -0.0560],
    [109.3510, -0.0570]
  ]
}

Polygon Geometry (Parsil)

{
  "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.