Files
UAS-SIG-WebGIS-Poverty-Mapping/SKPL_SRS_WebGIS_PovertyMapping.md
2026-06-13 13:38:52 +07:00

20 KiB

SKPL/SRS - WebGIS Poverty Mapping Application

Software Requirements Specification & Project Implementation Plan

Dokumen Spesifikasi Kebutuhan Perangkat Lunak (SKPL)
Versi: 1.0
Tanggal: May 2026
Status: Final


1. RINGKASAN EKSEKUTIF

1.1 Deskripsi Proyek

Aplikasi WebGIS Poverty Mapping adalah sistem informasi berbasis web yang dirancang untuk memetakan dan mengelola data kemiskinan di tingkat kecamatan. Sistem ini memungkinkan pengguna untuk:

  • Memetakan lokasi rumah penduduk miskin
  • Mencatat data rumah ibadah (worship) dengan radius layanan
  • Mengelola data geografis (jalan, parsil)
  • Menganalisis pola kemiskinan berdasarkan lokasi geografis
  • Menghasilkan laporan berbasis data spasial

1.2 Tujuan Sistem

  1. Menyediakan platform terpadu untuk pendataan kemiskinan berbasis GIS
  2. Meningkatkan akurasi dan efisiensi pengumpulan data sosial
  3. Memfasilitasi pengambilan keputusan berbasis data spasial
  4. Menyediakan visualisasi data yang intuitif dan interaktif

1.3 Stakeholder

  • Pemerintah Daerah / Kelurahan
  • Petugas Pendataan Sosial
  • Pejabat Pengambil Keputusan
  • Masyarakat (untuk laporan hasil analisis)

2. KEBUTUHAN SISTEM

2.1 Kebutuhan Fungsional (Functional Requirements)

2.1.1 Manajemen Data Geografis Dasar

FR-001: Tampilkan Peta Interaktif

  • Sistem harus menampilkan peta OpenStreetMap dengan Leaflet.js
  • Fitur zoom dan pan untuk eksplorasi
  • Menampilkan layer administrasi (kecamatan) dari GeoJSON

FR-002: Penambahan Titik Data

  • Pengguna dapat menambahkan tiga tipe titik:
    • Rumah Ibadah (Worship): Lokasi ibadah dengan radius layanan
    • Rumah Penduduk Miskin (Poor House): Lokasi keluarga penerima bantuan sosial
    • Data Umum (Point): Data spasial umum lainnya

FR-003: Input Data Rumah Ibadah

  • Atribut wajib: nama, jenis, alamat
  • Atribut tambahan: kontak, no_wa, kegiatan, kapasitas
  • Radius layanan dapat disesuaikan (default 200m)
  • Visualisasi radius dengan circle pada peta

FR-004: Input Data Rumah Penduduk Miskin

  • Atribut wajib: nama_kepala_keluarga, alamat
  • Atribut sosial: jumlah_anggota, kondisi_rumah, sumber_penghasilan
  • Atribut bantuan: kebutuhan_prioritas, status_bantuan
  • Kategori kondisi rumah: sangat buruk, buruk, sedang, baik

FR-005: Manajemen Jalan & Parsil

  • Input panjang jalan (dalam meter)
  • Input luas parsil/bidang (dalam m²)
  • Pencatatan status jalan/parsil
  • Support untuk geometri LineString dan Polygon

2.1.2 Operasi CRUD

FR-006: Create (Buat Data)

  • Interface form untuk input data baru
  • Validasi input real-time
  • Penyimpanan otomatis ke database
  • Konfirmasi berhasil/gagal

FR-007: Read (Baca Data)

  • Retrieving all data dari database
  • Filtering berdasarkan tipe data
  • Pagination untuk dataset besar
  • Export ke GeoJSON format

FR-008: Update (Ubah Data)

  • Edit data existing dari peta atau form
  • Update geometri dengan drag & drop
  • Pencatatan waktu modifikasi
  • Riwayat perubahan (audit trail)

FR-009: Delete (Hapus Data)

  • Penghapusan data dengan konfirmasi
  • Soft delete atau hard delete sesuai kebijakan
  • Pencatatan penghapus dan waktu penghapusan

2.1.3 Analisis & Pelaporan

FR-010: Analisis Proximity

  • Deteksi rumah miskin dalam radius rumah ibadah
  • Hitung jumlah penduduk miskin per rumah ibadah
  • Identifikasi area dengan konsentrasi kemiskinan tinggi

FR-011: Statistik Spasial

  • Jumlah total penduduk miskin per wilayah
  • Distribusi kemiskinan berdasarkan kondisi rumah
  • Analisis kebutuhan prioritas

FR-012: Export Laporan

  • Export data ke format Excel/CSV
  • Generate report PDF dengan visualisasi peta
  • Summary statistics per distrik/admin area

2.2 Kebutuhan Non-Fungsional (Non-Functional Requirements)

2.2.1 Performa

NFR-001: Response Time

  • Loading peta: < 3 detik
  • Penyimpanan data: < 2 detik
  • Query data: < 5 detik untuk 10,000+ records

NFR-002: Scalability

  • Support minimal 50,000 titik data
  • Handle 100+ pengguna concurrent
  • Database optimization untuk query performa

NFR-003: Browser Compatibility

  • Chrome 90+
  • Firefox 88+
  • Safari 14+
  • Edge 90+

2.2.2 Keamanan

NFR-004: Authentication

  • Implementasi user login (sederhana)
  • Session management
  • Password encryption

NFR-005: Data Validation

  • Server-side validation wajib
  • Client-side validation untuk UX
  • Sanitasi input untuk mencegah SQL injection
  • CSRF protection

NFR-006: Data Privacy

  • HTTPS untuk transmisi data
  • Enkripsi data sensitif di database
  • Access control berbasis user role

2.2.3 Availability & Maintainability

NFR-007: Availability

  • System uptime: 99% (outside maintenance windows)
  • Backup otomatis harian
  • Disaster recovery plan

NFR-008: Maintainability

  • Code modular dan well-documented
  • API documentation lengkap
  • Database backup procedures
  • Version control (Git)

2.2.4 Usability

NFR-009: User Interface

  • Responsive design (mobile-friendly)
  • Intuitive navigation
  • Accessibility compliance (WCAG 2.1 AA)
  • Loading feedback (progress indicators)

NFR-010: Documentation

  • User manual tersedia
  • API documentation
  • Database schema documentation
  • Installation & deployment guide

3. ARSITEKTUR SISTEM

3.1 Arsitektur Keseluruhan

┌─────────────────────────────────────────────────┐
│          Web Browser (Client-Side)              │
│  ┌──────────────────────────────────────────┐   │
│  │   Leaflet.js Map Visualization           │   │
│  │   HTML5 Form Inputs                      │   │
│  │   JavaScript Event Handlers              │   │
│  │   Turf.js Spatial Analysis               │   │
│  └──────────────────────────────────────────┘   │
└──────────────────┬──────────────────────────────┘
                   │ AJAX/Fetch
                   │ JSON
┌──────────────────▼──────────────────────────────┐
│      HTTP/REST API (PHP Backend)               │
│  ┌──────────────────────────────────────────┐   │
│  │   GET    /api/get.php - Retrieve Data   │   │
│  │   GET    /api/get_point.php             │   │
│  │   POST   /api/save.php - Create/Read    │   │
│  │   POST   /api/save_point.php            │   │
│  │   POST   /api/update.php - Update       │   │
│  │   POST   /api/update_point.php          │   │
│  │   POST   /api/delete.php - Delete       │   │
│  │   POST   /api/delete_point.php          │   │
│  └──────────────────────────────────────────┘   │
└──────────────────┬──────────────────────────────┘
                   │ SQL Queries
                   │ MySQLi Extension
┌──────────────────▼──────────────────────────────┐
│     MySQL Database (webgis_unified)             │
│  ┌──────────────────────────────────────────┐   │
│  │   Table: data_unified                    │   │
│  │   - Point Features (Worship, Poor House) │   │
│  │   - Linear Features (Jalan)              │   │
│  │   - Polygon Features (Parsil)            │   │
│  │   - Attributes (Sosial, Administratif)   │   │
│  └──────────────────────────────────────────┘   │
└─────────────────────────────────────────────────┘

3.2 Tech Stack

Layer Technology Version Purpose
Frontend HTML5 - Markup
CSS3 - Styling
JavaScript ES6+ Interactivity
Leaflet.js 1.9.4 Map Library
Leaflet.Draw 1.0.4 Drawing Tools
Turf.js 6.0+ Spatial Analysis
Backend PHP 7.4+ Server Logic
Database MySQL 5.7+ Data Storage
Server Apache 2.4+ Web Server
Tools Git - Version Control

4. MODEL DATA & SCHEMA DATABASE

4.1 Entity Relationship Diagram

Single Unified Table Model:

data_unified
├── id (PK)
├── tipe (ENUM)
├── nama
├── jenis
├── alamat
├── kontak
├── no_wa
├── kegiatan
├── kapasitas
├── radius_meter
├── nama_kepala_keluarga
├── jumlah_anggota
├── kondisi_rumah
├── sumber_penghasilan
├── kebutuhan_prioritas
├── status_bantuan
├── latitude
├── longitude
├── status
├── panjang (untuk jalan)
├── luas (untuk parsil)
├── geom (GeoJSON)
├── created_at
└── updated_at

4.2 SQL Schema

CREATE TABLE data_unified (
    id INT AUTO_INCREMENT PRIMARY KEY,
    tipe ENUM('point','worship','poor_house','jalan','parsil') NOT NULL DEFAULT 'point',
    
    -- Atribut Umum
    nama VARCHAR(200) NULL,
    jenis VARCHAR(100) NULL,
    alamat VARCHAR(255) NULL,
    kontak VARCHAR(100) NULL,
    no_wa VARCHAR(50) NULL,
    status VARCHAR(50) NULL,
    
    -- Atribut Rumah Ibadah (Worship)
    kegiatan VARCHAR(255) NULL,
    kapasitas INT NULL,
    radius_meter INT NULL,
    
    -- Atribut Rumah Miskin (Poor House)
    nama_kepala_keluarga VARCHAR(200) NULL,
    jumlah_anggota INT NULL,
    kondisi_rumah VARCHAR(100) NULL,
    sumber_penghasilan VARCHAR(255) NULL,
    kebutuhan_prioritas VARCHAR(255) NULL,
    status_bantuan VARCHAR(100) NULL,
    
    -- Atribut Geografis
    latitude DOUBLE NULL,
    longitude DOUBLE NULL,
    
    -- Atribut Jalan & Parsil
    panjang DECIMAL(10,2) NULL,
    luas DECIMAL(10,2) NULL,
    geom TEXT NULL,
    
    -- Audit Trail
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    -- Indexes untuk performa
    KEY idx_tipe (tipe),
    KEY idx_status (status),
    KEY idx_created_at (created_at),
    FULLTEXT KEY ft_nama (nama),
    FULLTEXT KEY ft_alamat (alamat)
);

4.3 Data Dictionary

Field Type Length Null Key Description
id INT - NO PK Unique identifier
tipe ENUM - NO - Data type (worship/poor_house/point/jalan/parsil)
nama VARCHAR 200 YES - Name/label of feature
jenis VARCHAR 100 YES - Category/type (e.g., Masjid, Gereja for worship)
alamat VARCHAR 255 YES - Address/location description
kontak VARCHAR 100 YES - Contact person
no_wa VARCHAR 50 YES - WhatsApp number
kegiatan VARCHAR 255 YES - Activities (for worship places)
kapasitas INT - YES - Capacity (people)
radius_meter INT - YES - Service radius in meters
nama_kepala_keluarga VARCHAR 200 YES - Head of family name
jumlah_anggota INT - YES - Number of family members
kondisi_rumah VARCHAR 100 YES - House condition (sangat buruk/buruk/sedang/baik)
sumber_penghasilan VARCHAR 255 YES - Income source
kebutuhan_prioritas VARCHAR 255 YES - Priority needs for assistance
status_bantuan VARCHAR 100 YES - Assistance status
latitude DOUBLE - YES - Latitude coordinate
longitude DOUBLE - YES - Longitude coordinate
panjang DECIMAL 10,2 YES - Length in meters (roads)
luas DECIMAL 10,2 YES - Area in m² (parcels)
geom TEXT - YES - GeoJSON geometry
status VARCHAR 50 YES - Feature status (aktif/nonaktif/draf)
created_at DATETIME - NO - Record creation timestamp
updated_at DATETIME - NO - Last update timestamp

5. ENDPOINT API DOCUMENTATION

5.1 Base Configuration

  • Base URL: http://localhost/webgis/
  • Content-Type: application/json
  • Response Format: JSON

5.2 API Endpoints

5.2.1 GET Endpoints

GET /get.php - Retrieve All Data

GET /get.php

Response: 
{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": {...},
      "properties": {...}
    }
  ]
}

Status Codes:
- 200: Success
- 500: Server error

GET /get_point.php - Retrieve Specific Point Types

GET /get_point.php?tipe=worship

Query Parameters:
- tipe: worship|poor_house|point

Response: Same as above

5.2.2 POST Endpoints

POST /save.php - Create New Feature

POST /save.php
Content-Type: application/json

Request Body:
{
  "tipe": "worship|poor_house|point|jalan|parsil",
  "nama": "string",
  "jenis": "string",
  "alamat": "string",
  "latitude": number,
  "longitude": number,
  "geom": "GeoJSON string (for line/polygon)",
  ... other attributes based on tipe
}

Response:
{
  "success": true,
  "id": number,
  "message": "Data saved successfully"
}

Status Codes:
- 200: Success
- 400: Bad request (validation error)
- 500: Server error

POST /update.php - Update Existing Feature

POST /update.php
Content-Type: application/json

Request Body:
{
  "id": number,
  "tipe": "string",
  "nama": "string",
  ... other fields to update
}

Response:
{
  "success": true,
  "message": "Data updated successfully"
}

POST /delete.php - Delete Feature

POST /delete.php
Content-Type: application/json

Request Body:
{
  "id": number
}

Response:
{
  "success": true,
  "message": "Data deleted successfully"
}

6. USE CASES

6.1 Use Case Diagram

┌──────────────────────────────┐
│    WebGIS System Actor       │
└────────────┬─────────────────┘
             │
    ┌────────┼────────┐
    │        │        │
    ▼        ▼        ▼
┌─────────────────────────────────┐
│  Petugas Pendataan / Admin      │
│  - View Map                     │
│  - Add Point/Line/Polygon       │
│  - Edit Features                │
│  - Delete Features              │
│  - Export Data                  │
│  - View Analytics               │
└─────────────────────────────────┘

6.2 Use Case Descriptions

UC-001: Menampilkan Peta

  • Actor: Petugas Pendataan
  • Precondition: User membuka aplikasi
  • Main Flow:
    1. System loads map with OSM basemap
    2. Display administrative areas from GeoJSON
    3. Load existing data points from database
    4. Display different markers based on tipe
  • Postcondition: Map displayed with all data

UC-002: Menambahkan Data Rumah Ibadah

  • Actor: Petugas Pendataan
  • Precondition: Map is loaded
  • Main Flow:
    1. User selects "Rumah Ibadah" from type dropdown
    2. Set radius value
    3. Click on map to place marker
    4. Enter data form (nama, jenis, alamat, etc.)
    5. Click Save
    6. System validates data
    7. System saves to database
    8. Update map with new marker
    9. Display success message
  • Alternative: Cancel before save
  • Postcondition: New data saved and displayed

UC-003: Edit Data

  • Actor: Petugas Pendataan
  • Main Flow:
    1. Click on existing marker
    2. View/edit form
    3. Modify values
    4. Optionally drag marker to new location
    5. Click Update
    6. System validates
    7. System updates database
    8. Update map display
  • Postcondition: Data updated

UC-004: Analisis Proximity

  • Actor: Admin/Pengambil Keputusan
  • Main Flow:
    1. View analysis report
    2. System calculates poor houses within worship radius
    3. Display statistics
    4. Show on map with visual clustering
  • Postcondition: Analysis results displayed

7. KEBUTUHAN DATA & DATABASE

7.1 Data Population

Initial Data Required:

  • Administrative boundaries (Kecamatan level) - GeoJSON
  • Reference data for house conditions
  • Reference data for assistance types
  • Reference data for income sources

Sample Data:

  • 100-1000 test records untuk UAT
  • Mix of all data types
  • Various conditions and statuses

7.2 Database Backup & Recovery

Backup Strategy:

  • Daily automatic backup at 2:00 AM
  • Weekly full backup on Sunday
  • Monthly archive backup
  • Store backups locally and on network drive

Recovery Procedure:

  • Documented restore procedure
  • Test restore monthly
  • RTO: 1 hour
  • RPO: 1 day

8. FASE IMPLEMENTASI

Phase 1: Setup & Database (Week 1)

  • Database design finalization
  • Database creation & migration scripts
  • User management tables (if needed)
  • Initial data loading

Phase 2: API Development (Week 1-2)

  • Implement CRUD endpoints
  • Data validation layer
  • Error handling
  • API testing

Phase 3: Frontend Enhancement (Week 2-3)

  • UI/UX improvements
  • Form validation enhancement
  • Data visualization enhancements
  • Mobile responsiveness

Phase 4: Analysis & Reporting (Week 3)

  • Proximity analysis implementation
  • Statistics calculations
  • Report generation
  • Data export features

Phase 5: Testing & QA (Week 4)

  • Unit testing
  • Integration testing
  • UAT with stakeholders
  • Performance testing

Phase 6: Deployment & Documentation (Week 4-5)

  • Production deployment
  • User training
  • Documentation finalization
  • Knowledge transfer

9. TESTING STRATEGY

9.1 Unit Testing

  • Test individual PHP functions
  • Test validation rules
  • Test data transformations

9.2 Integration Testing

  • Test API endpoints
  • Test database operations
  • Test data flow

9.3 System Testing

  • End-to-end workflows
  • Performance testing (load testing)
  • Security testing

9.4 User Acceptance Testing (UAT)

  • Test with actual users
  • Verify requirements met
  • Collect feedback

9.5 Test Coverage

  • Target: Minimum 80% code coverage
  • Critical paths: 100% coverage
  • Tools: PHPUnit for PHP testing

10. MAINTENANCE & SUPPORT

10.1 Maintenance Plan

Preventive Maintenance:

  • Monthly database optimization
  • Weekly log review
  • Quarterly backup restoration tests

Corrective Maintenance:

  • Bug fixes within 24 hours (critical)
  • Bug fixes within 1 week (normal)
  • Security patches immediately

10.2 Support Levels

Priority Response Time Resolution Target
Critical 1 hour 4 hours
High 4 hours 1 day
Medium 1 day 1 week
Low 3 days 2 weeks

11. CHANGE LOG

Version Date Author Changes
1.0 May 2026 Development Team Initial SKPL/SRS document
- Complete system requirements
- Database schema
- API documentation
- Implementation plan

12. APPENDIX

12.1 Glossary

  • GIS: Geographic Information System
  • Poverty Mapping: Pemetaan Kemiskinan
  • Kecamatan: District (administrative division)
  • Rumah Ibadah: Worship place (mosque, church, etc.)
  • Geom: Geometry (spatial data representation)
  • GeoJSON: JSON format for geographic data

12.2 References

12.3 Approval

Role Name Signature Date
Project Manager - - -
Technical Lead - - -
Client Representative - - -

Document End

Dokumen ini bersifat rahasia dan hanya untuk penggunaan internal. Reproduksi tanpa persetujuan dilarang.