1st commit: Arsitektur WebGis tersentralisasi dan dokumentasi lengkap

This commit is contained in:
2026-06-12 11:20:21 +07:00
commit 7ee3db6d93
43 changed files with 5353 additions and 0 deletions
+1131
View File
File diff suppressed because it is too large Load Diff
+80
View File
@@ -0,0 +1,80 @@
CREATE TABLE spbu_markers (
id INT AUTO_INCREMENT PRIMARY KEY,
nama_spbu VARCHAR(100) NOT NULL,
status_operasional ENUM('Buka 24 Jam', 'Tidak 24 Jam') NOT NULL,
no_telp VARCHAR(20) NOT NULL,
latitude DECIMAL(10, 8) NOT NULL,
longitude DECIMAL(11, 8) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE jalan_polylines (
id INT AUTO_INCREMENT PRIMARY KEY,
nama_jalan VARCHAR(100) NOT NULL,
status_jalan ENUM('Jalan Nasional', 'Jalan Provinsi', 'Jalan Kabupaten') NOT NULL,
jarak_meter INT NOT NULL,
koordinat JSON NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE tanah_polygons (
id INT AUTO_INCREMENT PRIMARY KEY,
nama_pemilik VARCHAR(100) NOT NULL,
status_kepemilikan ENUM('SHM', 'HGB', 'HGU', 'HP') NOT NULL,
luas_meter INT NOT NULL,
koordinat JSON NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
ALTER TABLE spbu_markers
ADD COLUMN alamat TEXT AFTER no_telp;
CREATE TABLE rumah_ibadah (
id INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(150) NOT NULL,
jenis ENUM('Masjid', 'Gereja', 'Vihara', 'Pura', 'Klenteng') NOT NULL,
radius_meter INT NOT NULL,
alamat TEXT,
latitude DOUBLE NOT NULL,
longitude DOUBLE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE rumah_penduduk (
id INT AUTO_INCREMENT PRIMARY KEY,
nama_kk VARCHAR(100) NOT NULL,
agama VARCHAR(50),
jml_tanggungan INT DEFAULT 0,
pengeluaran INT NOT NULL,
pmt_lantai INT DEFAULT 0,
pmt_dinding INT DEFAULT 0,
pmt_sanitasi INT DEFAULT 0,
pmt_penerangan INT DEFAULT 0,
pmt_air INT DEFAULT 0,
pmt_score INT NOT NULL,
status_kemiskinan ENUM('Sangat Miskin', 'Miskin', 'Rentan Miskin', 'Tidak Miskin') NOT NULL,
alamat TEXT,
latitude DOUBLE NOT NULL,
longitude DOUBLE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE log_bantuan (
id INT AUTO_INCREMENT PRIMARY KEY,
id_penduduk INT NOT NULL,
beras_kg INT DEFAULT 0,
minyak_l INT DEFAULT 0,
gula_kg INT DEFAULT 0,
telur_kg INT DEFAULT 0,
susu_kaleng INT DEFAULT 0,
tunai_rp INT DEFAULT 0,
catatan TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (id_penduduk) REFERENCES rumah_penduduk(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS garis_kemiskinan (
id INT AUTO_INCREMENT PRIMARY KEY,
tahun YEAR NOT NULL,
nilai_rupiah INT NOT NULL,
is_active BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
INSERT INTO garis_kemiskinan (tahun, nilai_rupiah, is_active)
VALUES (2026, 700000, TRUE);
+82
View File
@@ -0,0 +1,82 @@
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WebGIS Pontianak V4</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.9.4/leaflet.css" />
<link rel="stylesheet" href="../assets/style.css">
</head>
<body>
<div id="sidebar-container">
<div id="sidebar-header">WebGis-Pontianak</div>
<!-- Tab Navigasi -->
<div class="sidebar-tabs">
<button class="tab-btn active" onclick="switchTab('tab-kemiskinan')">Pemetaan</button>
<button class="tab-btn" onclick="switchTab('tab-filter')">Filter Map</button>
</div>
<!-- TAB 1: KEMISKINAN (BARU) -->
<div id="tab-kemiskinan" class="tab-content active">
<div class="control-panel">
<button class="btn-gps" onclick="lokasiSaya()">📍 Arahkan ke Lokasi Saya</button>
<!-- Input Garis Kemiskinan -->
<div class="add-marker-box" style="margin-bottom: 0; padding: 10px 12px;">
<label>Batas Garis Kemiskinan (Rp):</label>
<div style="display:flex; gap:8px; margin-top:5px;">
<input type="number" id="input-garis-kemiskinan" placeholder="Loading..." class="modern-input">
<button class="btn btn-save" onclick="eksekusiUpdateGaris()" style="padding:8px 12px;">Simpan</button>
</div>
</div>
<!-- Tombol Kelola Program Pelatihan -->
<button class="btn btn-warning" onclick="bukaModalPelatihan()" style="margin-bottom: 10px; width: 100%; display: flex; align-items: center; justify-content: center; gap: 8px;">
<span style="font-size: 1.2rem;">📋</span> Kelola Program Pelatihan
</button>
<!-- Tombol Tambah Marker Modern -->
<div class="modern-action-box">
<label>Mode Penambahan Data:</label>
<select id="pilihan-marker-baru" class="modern-select">
<option value="ibadah">🕌 Pusat Radius (Rumah Ibadah)</option>
<option value="penduduk">🏠 Data Keluarga (Penduduk)</option>
</select>
<button class="btn-modern-add" id="btn-add-kemiskinan" onclick="toggleKemiskinanMode()">
<span class="icon">+</span> Aktifkan Kursor Marker
</button>
</div>
<!-- Legenda Peta -->
<div class="map-legend">
<h4 class="legend-title">Keterangan Marker</h4>
<div class="legend-item"><span class="legend-color" style="background-color: var(--gold); border-radius:4px;"></span> Pusat Radius Ibadah</div>
<div class="legend-item"><span class="legend-color" style="background-color: #3182CE;"></span> Keluarga Bernaung</div>
<div class="legend-item"><span class="legend-color" style="background-color: #805AD5;"></span> Keluarga Luar Naungan</div>
<div class="legend-item"><span class="legend-color" style="background-color: #E53E3E;"></span> Kondisi Darurat (Musibah)</div>
</div>
</div>
<div id="kemiskinan-card-container" class="card-list-area"></div>
</div>
<!-- TAB 2: FILTER & SPBU (LAMA) -->
<div id="tab-filter" class="tab-content">
<div id="filter-bar">
<button class="filter-tool-btn" onclick="bukaModalFilterLayer()">⚙️</button>
<span class="filter-label">Status SPBU:</span>
<button class="filter-tool-btn" onclick="bukaModalFilterSPBU()">🔍</button>
</div>
<div id="card-container" class="card-list-area"></div>
</div>
<button id="toggle-sidebar" onclick="toggleSidebar()">&#10094;</button>
</div>
<?php include '../components/modals.php'; ?>
<button id="btn-selesai-jalan" onclick="selesaiGambarJalan()">✓ Selesai Gambar Jalan</button>
<button id="btn-selesai-tanah" onclick="selesaiGambarTanah()">✓ Selesai Area Tanah</button>
<div id="map"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.9.4/leaflet.js"></script>
<script src="app.js?v=<?= time(); ?>"></script>
</body>
</html>