Deploy WebGIS 01-05 dengan Docker

This commit is contained in:
2026-06-12 17:58:06 +07:00
commit 1bf000979c
76 changed files with 12301 additions and 0 deletions
+143
View File
@@ -0,0 +1,143 @@
-- phpMyAdmin SQL Dump
-- version 5.2.3
-- https://www.phpmyadmin.net/
--
-- Host: localhost:3306
-- Generation Time: Jun 11, 2026 at 11:13 AM
-- Server version: 8.4.3
-- PHP Version: 8.3.30
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Database: `02_spbudb`
--
-- --------------------------------------------------------
--
-- Table structure for table `polygon`
--
CREATE TABLE `polygon` (
`id` int NOT NULL,
`nama_polygon` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`keterangan` text COLLATE utf8mb4_unicode_ci,
`warna` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '#22c55e',
`koordinat` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
--
-- Dumping data for table `polygon`
--
INSERT INTO `polygon` (`id`, `nama_polygon`, `keterangan`, `warna`, `koordinat`, `created_at`, `updated_at`) VALUES
(1, 'Rumah A', 'Rumah A di tepi jalan imbon', '#c42170', '[[-0.04619857363388995,109.35349255800249],[-0.04609122197957324,109.35370445251466],[-0.046228095338798736,109.35379564762117],[-0.04634349836696752,109.35357302427295]]', '2026-06-08 09:59:46', '2026-06-08 09:59:46');
-- --------------------------------------------------------
--
-- Table structure for table `polyline`
--
CREATE TABLE `polyline` (
`id` int NOT NULL,
`nama_line` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`keterangan` text COLLATE utf8mb4_unicode_ci,
`warna` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '#3b82f6',
`koordinat` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
--
-- Dumping data for table `polyline`
--
INSERT INTO `polyline` (`id`, `nama_line`, `keterangan`, `warna`, `koordinat`, `created_at`, `updated_at`) VALUES
(1, 'Jl Tanjung Sari', 'Jalan tembusan \'TanSar\", dari mulut di ImBon dan dari mulut Jl. Jend. Ayani', '#3b82f6', '[[-0.052839376622127024,109.34751927852632],[-0.05137402667155636,109.34858143329622],[-0.050509845915652725,109.34916079044343],[-0.04923236129902831,109.35004591941835],[-0.04847016458323742,109.35060918331146],[-0.04772943818927965,109.35115635395051],[-0.04757377829389879,109.35129046440126],[-0.047589881041730155,109.35139775276186],[-0.04771333544149917,109.35161232948305],[-0.04650562934709907,109.3523955345154],[-0.045646816111789314,109.35296952724458],[-0.0457756380977098,109.35312509536745]]', '2026-06-08 10:03:20', '2026-06-08 10:03:20');
-- --------------------------------------------------------
--
-- Table structure for table `spbu`
--
CREATE TABLE `spbu` (
`id` int NOT NULL,
`nama_spbu` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`status_ramai` enum('ramai','tidak_ramai') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'tidak_ramai',
`buka_24_jam` enum('ya','tidak') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'tidak',
`status_operasional` enum('buka','tutup') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'buka',
`nomor_hp` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`latitude` double NOT NULL,
`longitude` double NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
--
-- Dumping data for table `spbu`
--
INSERT INTO `spbu` (`id`, `nama_spbu`, `status_ramai`, `buka_24_jam`, `status_operasional`, `nomor_hp`, `latitude`, `longitude`, `created_at`, `updated_at`) VALUES
(4, 'SPBU Imbon', 'ramai', 'ya', 'buka', '0812345678913', -0.046981865484009226, 109.35455471277238, '2026-06-08 09:58:55', '2026-06-08 09:58:55');
--
-- Indexes for dumped tables
--
--
-- Indexes for table `polygon`
--
ALTER TABLE `polygon`
ADD PRIMARY KEY (`id`);
--
-- Indexes for table `polyline`
--
ALTER TABLE `polyline`
ADD PRIMARY KEY (`id`);
--
-- Indexes for table `spbu`
--
ALTER TABLE `spbu`
ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `polygon`
--
ALTER TABLE `polygon`
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
--
-- AUTO_INCREMENT for table `polyline`
--
ALTER TABLE `polyline`
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;
--
-- AUTO_INCREMENT for table `spbu`
--
ALTER TABLE `spbu`
MODIFY `id` int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+69
View File
@@ -0,0 +1,69 @@
<?php
/**
* ambil_data.php
* Mengambil semua data SPBU, polyline, dan polygon dari database.
* Response dalam format JSON.
*/
header('Content-Type: application/json');
require_once 'koneksi.php';
$result = [
'status' => 'success',
'spbu' => [],
'polyline' => [],
'polygon' => [],
];
// ─── Ambil data SPBU ─────────────────────────────────────────────────────────
$query_spbu = "SELECT id, nama_spbu, status_ramai, buka_24_jam, status_operasional, nomor_hp, latitude, longitude FROM spbu ORDER BY id ASC";
$res = $koneksi->query($query_spbu);
if ($res) {
while ($row = $res->fetch_assoc()) {
// Cast tipe data numerik
$row['id'] = (int)$row['id'];
$row['latitude'] = (float)$row['latitude'];
$row['longitude'] = (float)$row['longitude'];
$result['spbu'][] = $row;
}
$res->free();
} else {
$result['status'] = 'partial_error';
$result['error_spbu'] = $koneksi->error;
}
// ─── Ambil data Polyline ──────────────────────────────────────────────────────
$query_poly = "SELECT id, nama_line, keterangan, warna, koordinat FROM polyline ORDER BY id ASC";
$res = $koneksi->query($query_poly);
if ($res) {
while ($row = $res->fetch_assoc()) {
$row['id'] = (int)$row['id'];
// Decode koordinat JSON → array, kembalikan sebagai array PHP (akan di-encode ulang ke JSON)
$row['koordinat'] = json_decode($row['koordinat'], true);
$result['polyline'][] = $row;
}
$res->free();
} else {
$result['status'] = 'partial_error';
$result['error_polyline'] = $koneksi->error;
}
// ─── Ambil data Polygon ───────────────────────────────────────────────────────
$query_pgon = "SELECT id, nama_polygon, keterangan, warna, koordinat FROM polygon ORDER BY id ASC";
$res = $koneksi->query($query_pgon);
if ($res) {
while ($row = $res->fetch_assoc()) {
$row['id'] = (int)$row['id'];
$row['koordinat'] = json_decode($row['koordinat'], true);
$result['polygon'][] = $row;
}
$res->free();
} else {
$result['status'] = 'partial_error';
$result['error_polygon'] = $koneksi->error;
}
$koneksi->close();
echo json_encode($result);
+82
View File
@@ -0,0 +1,82 @@
<?php
/**
* edit.php
* Menangani edit data SPBU.
* Latitude dan longitude TIDAK bisa diubah melalui endpoint ini.
*/
header('Content-Type: application/json');
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
echo json_encode(['status' => 'error', 'message' => 'Method tidak diizinkan.']);
exit;
}
require_once 'koneksi.php';
$tipe = isset($_POST['tipe']) ? trim($_POST['tipe']) : '';
// Saat ini hanya menangani edit SPBU
if ($tipe === 'spbu') {
$id = isset($_POST['id']) ? intval($_POST['id']) : 0;
$nama_spbu = isset($_POST['nama_spbu']) ? trim($_POST['nama_spbu']) : '';
$status_ramai = isset($_POST['status_ramai']) ? trim($_POST['status_ramai']) : '';
$buka_24_jam = isset($_POST['buka_24_jam']) ? trim($_POST['buka_24_jam']) : '';
$status_operasional = isset($_POST['status_operasional']) ? trim($_POST['status_operasional']) : '';
$nomor_hp = isset($_POST['nomor_hp']) ? trim($_POST['nomor_hp']) : '';
// Validasi
if ($id <= 0 || empty($nama_spbu) || empty($status_ramai) || empty($buka_24_jam) || empty($status_operasional)) {
echo json_encode(['status' => 'error', 'message' => 'Data tidak lengkap atau ID tidak valid.']);
exit;
}
$valid_ramai = ['ramai', 'tidak_ramai'];
$valid_24 = ['ya', 'tidak'];
$valid_ops = ['buka', 'tutup'];
if (!in_array($status_ramai, $valid_ramai) || !in_array($buka_24_jam, $valid_24) || !in_array($status_operasional, $valid_ops)) {
echo json_encode(['status' => 'error', 'message' => 'Nilai enum tidak valid.']);
exit;
}
// Update — latitude & longitude sengaja tidak diubah
$stmt = $koneksi->prepare(
"UPDATE spbu SET nama_spbu=?, status_ramai=?, buka_24_jam=?, status_operasional=?, nomor_hp=?
WHERE id=?"
);
$stmt->bind_param('sssssi', $nama_spbu, $status_ramai, $buka_24_jam, $status_operasional, $nomor_hp, $id);
if ($stmt->execute()) {
if ($stmt->affected_rows >= 0) {
// Ambil data lengkap (termasuk lat/lng) untuk dikembalikan ke JS
$sel = $koneksi->prepare("SELECT id, nama_spbu, status_ramai, buka_24_jam, status_operasional, nomor_hp, latitude, longitude FROM spbu WHERE id=?");
$sel->bind_param('i', $id);
$sel->execute();
$res = $sel->get_result();
$data = $res->fetch_assoc();
$sel->close();
$data['id'] = (int)$data['id'];
$data['latitude'] = (float)$data['latitude'];
$data['longitude'] = (float)$data['longitude'];
echo json_encode([
'status' => 'success',
'message' => 'Data SPBU berhasil diupdate.',
'data' => $data
]);
} else {
echo json_encode(['status' => 'error', 'message' => 'Data tidak ditemukan.']);
}
} else {
echo json_encode(['status' => 'error', 'message' => 'Gagal update: ' . $stmt->error]);
}
$stmt->close();
} else {
echo json_encode(['status' => 'error', 'message' => 'Tipe tidak dikenali untuk edit.']);
}
$koneksi->close();
+60
View File
@@ -0,0 +1,60 @@
<?php
/**
* hapus.php
* Menangani hapus data SPBU, polyline, dan polygon.
* Gunakan parameter 'tipe' untuk membedakan jenis data.
*/
header('Content-Type: application/json');
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
echo json_encode(['status' => 'error', 'message' => 'Method tidak diizinkan.']);
exit;
}
require_once 'koneksi.php';
$tipe = isset($_POST['tipe']) ? trim($_POST['tipe']) : '';
$id = isset($_POST['id']) ? intval($_POST['id']) : 0;
if ($id <= 0) {
echo json_encode(['status' => 'error', 'message' => 'ID tidak valid.']);
exit;
}
// Mapping tipe ke nama tabel
$tabel_map = [
'spbu' => 'spbu',
'polyline' => 'polyline',
'polygon' => 'polygon',
];
if (!array_key_exists($tipe, $tabel_map)) {
echo json_encode(['status' => 'error', 'message' => 'Tipe tidak dikenali.']);
exit;
}
$tabel = $tabel_map[$tipe];
// Prepared statement hapus berdasarkan tipe dan id
$stmt = $koneksi->prepare("DELETE FROM `{$tabel}` WHERE id = ?");
$stmt->bind_param('i', $id);
if ($stmt->execute()) {
if ($stmt->affected_rows > 0) {
echo json_encode([
'status' => 'success',
'message' => ucfirst($tipe) . ' berhasil dihapus.',
'id' => $id,
'tipe' => $tipe
]);
} else {
echo json_encode(['status' => 'error', 'message' => 'Data tidak ditemukan.']);
}
} else {
echo json_encode(['status' => 'error', 'message' => 'Gagal menghapus: ' . $stmt->error]);
}
$stmt->close();
$koneksi->close();
+1136
View File
File diff suppressed because it is too large Load Diff
+23
View File
@@ -0,0 +1,23 @@
<?php
/**
* Koneksi database Project 02.
*/
$host = getenv('DB_HOST') ?: 'db';
$user = getenv('DB_USER') ?: 'root';
$password = getenv('DB_PASSWORD') ?: 'webgisidolapass';
$database = '02_spbudb';
$koneksi = new mysqli($host, $user, $password, $database);
if ($koneksi->connect_error) {
http_response_code(500);
header('Content-Type: application/json');
echo json_encode([
'status' => 'error',
'message' => 'Koneksi database gagal: ' . $koneksi->connect_error
]);
exit;
}
$koneksi->set_charset('utf8mb4');
?>
+70
View File
@@ -0,0 +1,70 @@
-- ═══════════════════════════════════════════════════════════════════
-- setup_database.sql
-- Jalankan query ini di phpMyAdmin (Laragon) atau MySQL CLI
-- untuk membuat database dan tabel yang diperlukan.
-- ═══════════════════════════════════════════════════════════════════
-- 1. Buat dan gunakan database
CREATE DATABASE IF NOT EXISTS `02_spbudb`
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
USE `02_spbudb`;
-- ─────────────────────────────────────────────────────────────────────
-- 2. Tabel SPBU (marker titik lokasi)
-- ─────────────────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS `spbu` (
`id` INT NOT NULL AUTO_INCREMENT,
`nama_spbu` VARCHAR(100) NOT NULL,
`status_ramai` ENUM('ramai','tidak_ramai') NOT NULL DEFAULT 'tidak_ramai',
`buka_24_jam` ENUM('ya','tidak') NOT NULL DEFAULT 'tidak',
`status_operasional` ENUM('buka','tutup') NOT NULL DEFAULT 'buka',
`nomor_hp` VARCHAR(20) NOT NULL DEFAULT '',
`latitude` DOUBLE NOT NULL,
`longitude` DOUBLE NOT NULL,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ─────────────────────────────────────────────────────────────────────
-- 3. Tabel Polyline (garis)
-- Kolom koordinat menyimpan JSON array of [lat, lng]
-- Contoh: [[-0.055, 109.348], [-0.056, 109.349]]
-- ─────────────────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS `polyline` (
`id` INT NOT NULL AUTO_INCREMENT,
`nama_line` VARCHAR(100) NOT NULL,
`keterangan` TEXT,
`warna` VARCHAR(20) NOT NULL DEFAULT '#3b82f6',
`koordinat` LONGTEXT NOT NULL,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ─────────────────────────────────────────────────────────────────────
-- 4. Tabel Polygon (area)
-- Kolom koordinat menyimpan JSON array of [lat, lng]
-- Contoh: [[-0.055, 109.348], [-0.056, 109.349], [-0.055, 109.350]]
-- ─────────────────────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS `polygon` (
`id` INT NOT NULL AUTO_INCREMENT,
`nama_polygon` VARCHAR(100) NOT NULL,
`keterangan` TEXT,
`warna` VARCHAR(20) NOT NULL DEFAULT '#22c55e',
`koordinat` LONGTEXT NOT NULL,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ─────────────────────────────────────────────────────────────────────
-- 5. (Opsional) Data contoh untuk testing awal
-- ─────────────────────────────────────────────────────────────────────
INSERT INTO `spbu` (nama_spbu, status_ramai, buka_24_jam, status_operasional, nomor_hp, latitude, longitude)
VALUES
('SPBU Contoh A', 'ramai', 'ya', 'buka', '08123456789', -0.05566, 109.34854),
('SPBU Contoh B', 'tidak_ramai', 'tidak', 'buka', '08129876543', -0.05700, 109.34900),
('SPBU Contoh C', 'ramai', 'tidak', 'tutup', '', -0.05400, 109.34800);
+163
View File
@@ -0,0 +1,163 @@
<?php
/**
* tambah.php
* Menangani tambah data SPBU, polyline, dan polygon.
* Menerima POST dengan parameter 'tipe' untuk membedakan jenis data.
*/
header('Content-Type: application/json');
// Hanya terima method POST
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
echo json_encode(['status' => 'error', 'message' => 'Method tidak diizinkan.']);
exit;
}
require_once 'koneksi.php';
$tipe = isset($_POST['tipe']) ? trim($_POST['tipe']) : '';
// ─── TAMBAH SPBU ────────────────────────────────────────────────────────────
if ($tipe === 'spbu') {
$nama_spbu = isset($_POST['nama_spbu']) ? trim($_POST['nama_spbu']) : '';
$status_ramai = isset($_POST['status_ramai']) ? trim($_POST['status_ramai']) : '';
$buka_24_jam = isset($_POST['buka_24_jam']) ? trim($_POST['buka_24_jam']) : '';
$status_operasional = isset($_POST['status_operasional']) ? trim($_POST['status_operasional']) : '';
$nomor_hp = isset($_POST['nomor_hp']) ? trim($_POST['nomor_hp']) : '';
$latitude = isset($_POST['latitude']) ? floatval($_POST['latitude']) : null;
$longitude = isset($_POST['longitude']) ? floatval($_POST['longitude']) : null;
// Validasi server-side
if (empty($nama_spbu) || empty($status_ramai) || empty($buka_24_jam) || empty($status_operasional) || $latitude === null || $longitude === null) {
echo json_encode(['status' => 'error', 'message' => 'Data tidak lengkap.']);
exit;
}
$valid_ramai = ['ramai', 'tidak_ramai'];
$valid_24 = ['ya', 'tidak'];
$valid_ops = ['buka', 'tutup'];
if (!in_array($status_ramai, $valid_ramai) || !in_array($buka_24_jam, $valid_24) || !in_array($status_operasional, $valid_ops)) {
echo json_encode(['status' => 'error', 'message' => 'Nilai enum tidak valid.']);
exit;
}
$stmt = $koneksi->prepare(
"INSERT INTO spbu (nama_spbu, status_ramai, buka_24_jam, status_operasional, nomor_hp, latitude, longitude)
VALUES (?, ?, ?, ?, ?, ?, ?)"
);
$stmt->bind_param('sssssdd', $nama_spbu, $status_ramai, $buka_24_jam, $status_operasional, $nomor_hp, $latitude, $longitude);
if ($stmt->execute()) {
$id = $koneksi->insert_id;
echo json_encode([
'status' => 'success',
'message' => 'SPBU berhasil ditambahkan.',
'id' => $id,
'data' => [
'id' => $id,
'nama_spbu' => $nama_spbu,
'status_ramai' => $status_ramai,
'buka_24_jam' => $buka_24_jam,
'status_operasional' => $status_operasional,
'nomor_hp' => $nomor_hp,
'latitude' => $latitude,
'longitude' => $longitude,
]
]);
} else {
echo json_encode(['status' => 'error', 'message' => 'Gagal menyimpan SPBU: ' . $stmt->error]);
}
$stmt->close();
// ─── TAMBAH POLYLINE ─────────────────────────────────────────────────────────
} elseif ($tipe === 'polyline') {
$nama_line = isset($_POST['nama_line']) ? trim($_POST['nama_line']) : '';
$keterangan = isset($_POST['keterangan']) ? trim($_POST['keterangan']) : '';
$warna = isset($_POST['warna']) ? trim($_POST['warna']) : '#3b82f6';
$koordinat = isset($_POST['koordinat']) ? trim($_POST['koordinat']) : '';
if (empty($nama_line) || empty($koordinat)) {
echo json_encode(['status' => 'error', 'message' => 'Nama line dan koordinat wajib diisi.']);
exit;
}
// Validasi JSON koordinat
$decoded = json_decode($koordinat, true);
if (json_last_error() !== JSON_ERROR_NONE || !is_array($decoded)) {
echo json_encode(['status' => 'error', 'message' => 'Format koordinat tidak valid.']);
exit;
}
$stmt = $koneksi->prepare(
"INSERT INTO polyline (nama_line, keterangan, warna, koordinat) VALUES (?, ?, ?, ?)"
);
$stmt->bind_param('ssss', $nama_line, $keterangan, $warna, $koordinat);
if ($stmt->execute()) {
$id = $koneksi->insert_id;
echo json_encode([
'status' => 'success',
'message' => 'Polyline berhasil ditambahkan.',
'id' => $id,
'data' => [
'id' => $id,
'nama_line' => $nama_line,
'keterangan' => $keterangan,
'warna' => $warna,
'koordinat' => $koordinat,
]
]);
} else {
echo json_encode(['status' => 'error', 'message' => 'Gagal menyimpan polyline: ' . $stmt->error]);
}
$stmt->close();
// ─── TAMBAH POLYGON ──────────────────────────────────────────────────────────
} elseif ($tipe === 'polygon') {
$nama_polygon = isset($_POST['nama_polygon']) ? trim($_POST['nama_polygon']) : '';
$keterangan = isset($_POST['keterangan']) ? trim($_POST['keterangan']) : '';
$warna = isset($_POST['warna']) ? trim($_POST['warna']) : '#22c55e';
$koordinat = isset($_POST['koordinat']) ? trim($_POST['koordinat']) : '';
if (empty($nama_polygon) || empty($koordinat)) {
echo json_encode(['status' => 'error', 'message' => 'Nama polygon dan koordinat wajib diisi.']);
exit;
}
$decoded = json_decode($koordinat, true);
if (json_last_error() !== JSON_ERROR_NONE || !is_array($decoded)) {
echo json_encode(['status' => 'error', 'message' => 'Format koordinat tidak valid.']);
exit;
}
$stmt = $koneksi->prepare(
"INSERT INTO polygon (nama_polygon, keterangan, warna, koordinat) VALUES (?, ?, ?, ?)"
);
$stmt->bind_param('ssss', $nama_polygon, $keterangan, $warna, $koordinat);
if ($stmt->execute()) {
$id = $koneksi->insert_id;
echo json_encode([
'status' => 'success',
'message' => 'Polygon berhasil ditambahkan.',
'id' => $id,
'data' => [
'id' => $id,
'nama_polygon' => $nama_polygon,
'keterangan' => $keterangan,
'warna' => $warna,
'koordinat' => $koordinat,
]
]);
} else {
echo json_encode(['status' => 'error', 'message' => 'Gagal menyimpan polygon: ' . $stmt->error]);
}
$stmt->close();
} else {
echo json_encode(['status' => 'error', 'message' => 'Tipe tidak dikenali.']);
}
$koneksi->close();