PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; $errors = []; $success = ''; $input = [ 'nama_jalan' => '', 'status_jalan' => '', 'panjang_meter' => '', 'koordinat_json' => '', ]; try { $pdo = new PDO($dsn, $dbUser, $dbPass, $options); // Pastikan tabel t_jalan ada. $pdo->exec("CREATE TABLE IF NOT EXISTS t_jalan ( id INT AUTO_INCREMENT PRIMARY KEY, nama_jalan VARCHAR(255) NOT NULL, status_jalan ENUM('nasional','provinsi','kabupaten') NOT NULL, panjang_meter DECIMAL(10,2) NOT NULL, koordinat_json LONGTEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;"); if ($_SERVER['REQUEST_METHOD'] === 'POST') { $input['nama_jalan'] = trim($_POST['nama_jalan'] ?? ''); $input['status_jalan'] = $_POST['status_jalan'] ?? ''; $input['panjang_meter'] = $_POST['panjang_meter'] ?? ''; $input['koordinat_json'] = $_POST['koordinat_json'] ?? ''; if ($input['nama_jalan'] === '') { $errors[] = 'Nama Jalan harus diisi.'; } if (!in_array($input['status_jalan'], ['nasional', 'provinsi', 'kabupaten'], true)) { $errors[] = 'Status Jalan tidak valid.'; } if ($input['panjang_meter'] === '' || !is_numeric($input['panjang_meter']) || (float)$input['panjang_meter'] <= 0) { $errors[] = 'Panjang Jalan harus dihitung otomatis dari peta dan tidak boleh kosong.'; } $coords = json_decode($input['koordinat_json'], true); if (!is_array($coords) || count($coords) < 2) { $errors[] = 'Koordinat JSON tidak valid: minimal 2 titik diperlukan.'; } if (empty($errors)) { $stmt = $pdo->prepare('INSERT INTO t_jalan (nama_jalan, status_jalan, panjang_meter, koordinat_json) VALUES (:nama, :status, :panjang, :koordinat)'); $stmt->execute([ ':nama' => $input['nama_jalan'], ':status' => $input['status_jalan'], ':panjang' => (float)$input['panjang_meter'], ':koordinat' => json_encode($coords, JSON_UNESCAPED_UNICODE), ]); $success = 'Data jalan berhasil disimpan ke database.'; $input = ['nama_jalan' => '', 'status_jalan' => '', 'panjang_meter' => '', 'koordinat_json' => '']; } } $stmt = $pdo->query('SELECT id, nama_jalan, status_jalan, panjang_meter, koordinat_json FROM t_jalan ORDER BY id DESC'); $jalanList = $stmt->fetchAll(); } catch (PDOException $e) { $errors[] = 'Koneksi database gagal: ' . htmlspecialchars($e->getMessage()); $jalanList = []; } ?> WebGIS Manajemen Data Jalan

WebGIS Manajemen Data Jalan

Tambah, simpan, dan tampilkan polyline jalan dengan LeafletJS dan MySQL.

Petunjuk

Klik peta berurutan untuk membuat garis jalan sementara. Sistem akan menghitung panjang otomatis dan menyimpan koordinat JSON ke database.

Terjadi kesalahan:

Form Tambah Jalan

Daftar Jalan Tersimpan

Belum ada data jalan yang tersimpan.
Status: | Panjang: meter