Files
UAS_WebGIS_MiaAurelia_D1041…/jalan_tanah/database/db_jalan.sql
2026-06-11 16:40:31 +07:00

119 lines
6.7 KiB
SQL

-- ============================================
-- WebGIS - Manajemen Jalan, Parsil & Laporan Jalan Rusak
-- Database Schema (GeoJSON-based)
-- ============================================
CREATE DATABASE IF NOT EXISTS db_jalan CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE db_jalan;
-- ============================================
-- Tabel Data Jalan (GeoJSON LineString)
-- ============================================
CREATE TABLE IF NOT EXISTS data_jalan (
id INT AUTO_INCREMENT PRIMARY KEY,
nama_jalan VARCHAR(255) NOT NULL,
status_jalan ENUM('Nasional','Provinsi','Kabupaten') NOT NULL,
panjang_meter DOUBLE NOT NULL DEFAULT 0,
keterangan TEXT,
-- GeoJSON LineString: {"type":"LineString","coordinates":[[lng,lat],...]}
geom JSON NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- ============================================
-- Tabel Data Parsil Tanah (GeoJSON Polygon)
-- ============================================
CREATE TABLE IF NOT EXISTS data_parsil (
id INT AUTO_INCREMENT PRIMARY KEY,
nama_parsil VARCHAR(255) NOT NULL,
pemilik VARCHAR(255) NOT NULL,
status_sertifikat ENUM('SHM','HGB','HGU','HP') NOT NULL,
nomor_sertifikat VARCHAR(100),
luas_meter2 DOUBLE NOT NULL DEFAULT 0,
keterangan TEXT,
-- GeoJSON Polygon: {"type":"Polygon","coordinates":[[[lng,lat],...,[lng,lat]]]}
geom JSON NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- ============================================
-- Tabel Laporan Jalan Rusak (GeoJSON Point)
-- ============================================
CREATE TABLE IF NOT EXISTS laporan_jalan_rusak (
id INT AUTO_INCREMENT PRIMARY KEY,
nama_pelapor VARCHAR(255), -- opsional
nama_jalan VARCHAR(255) NOT NULL, -- untuk analisis frekuensi per jalan
deskripsi TEXT,
foto_path VARCHAR(500), -- path relatif file foto
foto_lat DOUBLE, -- dari metadata exif atau manual
foto_lng DOUBLE, -- dari metadata exif atau manual
foto_datetime DATETIME, -- dari metadata exif
-- GeoJSON Point: {"type":"Point","coordinates":[lng,lat]}
geom JSON NOT NULL,
status ENUM('pending','verified','resolved') NOT NULL DEFAULT 'pending',
tanggal_input TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Index untuk query geospasial & analitik
CREATE INDEX idx_laporan_tanggal ON laporan_jalan_rusak(tanggal_input);
CREATE INDEX idx_laporan_nama_jalan ON laporan_jalan_rusak(nama_jalan);
CREATE INDEX idx_laporan_status ON laporan_jalan_rusak(status);
CREATE INDEX idx_jalan_status ON data_jalan(status_jalan);
CREATE INDEX idx_parsil_status ON data_parsil(status_sertifikat);
-- ============================================
-- Sample Data Jalan (GeoJSON)
-- ============================================
INSERT INTO data_jalan (nama_jalan, status_jalan, panjang_meter, keterangan, geom) VALUES
(
'Jalan Trans Kalimantan', 'Nasional', 2500.50,
'Jalan utama lintas Kalimantan',
'{"type":"LineString","coordinates":[[109.3425,0.0263],[109.3500,0.0270],[109.3580,0.0280],[109.3650,0.0290]]}'
),
(
'Jalan Soekarno-Hatta', 'Provinsi', 1800.75,
'Jalan provinsi kawasan kota',
'{"type":"LineString","coordinates":[[109.3300,0.0200],[109.3380,0.0210],[109.3460,0.0225]]}'
),
(
'Jalan Parit Baru', 'Kabupaten', 950.25,
'Jalan kabupaten menuju kawasan industri',
'{"type":"LineString","coordinates":[[109.3200,0.0150],[109.3270,0.0160],[109.3320,0.0175]]}'
);
-- ============================================
-- Sample Data Parsil (GeoJSON)
-- ============================================
INSERT INTO data_parsil (nama_parsil, pemilik, status_sertifikat, nomor_sertifikat, luas_meter2, keterangan, geom) VALUES
(
'Kavling A1', 'Budi Santoso', 'SHM', 'SHM-001/2020', 450.50,
'Kavling perumahan blok A',
'{"type":"Polygon","coordinates":[[[109.3320,0.0230],[109.3330,0.0230],[109.3330,0.0235],[109.3320,0.0235],[109.3320,0.0230]]]}'
),
(
'Kavling B3', 'PT Maju Bersama', 'HGB', 'HGB-023/2019', 1250.00,
'Kavling komersial blok B',
'{"type":"Polygon","coordinates":[[[109.3350,0.0240],[109.3365,0.0240],[109.3365,0.0250],[109.3350,0.0250],[109.3350,0.0240]]]}'
),
(
'Lahan Usaha C1', 'CV Subur Makmur', 'HGU', 'HGU-007/2018', 5800.00,
'Lahan perkebunan',
'{"type":"Polygon","coordinates":[[[109.3270,0.0180],[109.3295,0.0180],[109.3295,0.0195],[109.3270,0.0195],[109.3270,0.0180]]]}'
);
-- ============================================
-- Sample Laporan Jalan Rusak
-- ============================================
INSERT INTO laporan_jalan_rusak (nama_pelapor, nama_jalan, deskripsi, foto_lat, foto_lng, geom, status, tanggal_input) VALUES
('Ahmad Fauzi', 'Jalan Trans Kalimantan', 'Aspal berlubang besar, berbahaya saat hujan', 0.0268, 109.3460, '{"type":"Point","coordinates":[109.3460,0.0268]}', 'pending', NOW() - INTERVAL 5 DAY),
('Siti Rahayu', 'Jalan Trans Kalimantan', 'Jalan retak dan bergelombang', 0.0271, 109.3465, '{"type":"Point","coordinates":[109.3465,0.0271]}', 'pending', NOW() - INTERVAL 8 DAY),
('Budi Hartono', 'Jalan Trans Kalimantan', 'Lubang besar di tengah jalan', 0.0269, 109.3462, '{"type":"Point","coordinates":[109.3462,0.0269]}', 'verified', NOW() - INTERVAL 3 DAY),
('Dewi Lestari', 'Jalan Soekarno-Hatta', 'Marka jalan hilang, genangan air', 0.0215, 109.3385, '{"type":"Point","coordinates":[109.3385,0.0215]}', 'pending', NOW() - INTERVAL 15 DAY),
('Eko Prasetyo', 'Jalan Soekarno-Hatta', 'Bahu jalan rusak', 0.0218, 109.3388, '{"type":"Point","coordinates":[109.3388,0.0218]}', 'pending', NOW() - INTERVAL 20 DAY),
('Fitri Handayani','Jalan Parit Baru', 'Aspal terkelupas', 0.0165, 109.3275, '{"type":"Point","coordinates":[109.3275,0.0165]}', 'resolved', NOW() - INTERVAL 45 DAY),
(NULL, 'Jalan Trans Kalimantan', 'Permukaan jalan sangat rusak parah', 0.0272, 109.3468, '{"type":"Point","coordinates":[109.3468,0.0272]}', 'pending', NOW() - INTERVAL 2 DAY),
('Hendra Wijaya', 'Jalan Trans Kalimantan', 'Lubang dalam di tepi jalan', 0.0266, 109.3458, '{"type":"Point","coordinates":[109.3458,0.0266]}', 'pending', NOW() - INTERVAL 1 DAY);