Upload files to "/"
This commit is contained in:
File diff suppressed because one or more lines are too long
+120
@@ -0,0 +1,120 @@
|
||||
<?php
|
||||
// geojson.php — Baca file JSON & konversi koordinat UTM Zone 49S → WGS84
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
header('Access-Control-Allow-Origin: *');
|
||||
error_reporting(0);
|
||||
|
||||
// ── Hanya file ini yang diizinkan ──
|
||||
$allowed = ['Populasi_Kecamatan.json'];
|
||||
|
||||
$file = $_GET['file'] ?? '';
|
||||
if (!in_array($file, $allowed)) {
|
||||
http_response_code(400);
|
||||
echo json_encode(['error' => 'File tidak diizinkan: ' . $file]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$path = __DIR__ . '/' . $file;
|
||||
if (!file_exists($path)) {
|
||||
http_response_code(404);
|
||||
echo json_encode(['error' => 'File tidak ditemukan: ' . $file]);
|
||||
exit;
|
||||
}
|
||||
|
||||
ini_set('max_execution_time', 120);
|
||||
ini_set('memory_limit', '256M');
|
||||
|
||||
$raw = file_get_contents($path);
|
||||
$gj = json_decode($raw, true);
|
||||
if (!$gj) {
|
||||
http_response_code(500);
|
||||
echo json_encode(['error' => 'JSON tidak valid atau file rusak']);
|
||||
exit;
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────
|
||||
// KONVERSI UTM Zone 49S → WGS84 (lat/lng)
|
||||
// Dipakai untuk koordinat Pontianak (Northing ~9.99 juta)
|
||||
// ─────────────────────────────────────────────────────
|
||||
function utmToLatLng($easting, $northing, $zone = 49, $isSouth = true) {
|
||||
$a = 6378137.0;
|
||||
$e2 = 0.00669437999014;
|
||||
$k0 = 0.9996;
|
||||
|
||||
$x = $easting - 500000.0;
|
||||
$y = $isSouth ? $northing - 10000000.0 : $northing;
|
||||
|
||||
$lon0 = deg2rad(($zone - 1) * 6 - 180 + 3);
|
||||
$e1 = (1 - sqrt(1 - $e2)) / (1 + sqrt(1 - $e2));
|
||||
$M = $y / $k0;
|
||||
$mu = $M / ($a * (1 - $e2/4 - 3*$e2*$e2/64 - 5*$e2*$e2*$e2/256));
|
||||
|
||||
$phi1 = $mu
|
||||
+ (3*$e1/2 - 27*pow($e1,3)/32) * sin(2*$mu)
|
||||
+ (21*$e1*$e1/16 - 55*pow($e1,4)/32) * sin(4*$mu)
|
||||
+ (151*pow($e1,3)/96) * sin(6*$mu)
|
||||
+ (1097*pow($e1,4)/512) * sin(8*$mu);
|
||||
|
||||
$N1 = $a / sqrt(1 - $e2 * pow(sin($phi1), 2));
|
||||
$T1 = pow(tan($phi1), 2);
|
||||
$C1 = $e2 / (1 - $e2) * pow(cos($phi1), 2);
|
||||
$R1 = $a * (1 - $e2) / pow(1 - $e2 * pow(sin($phi1), 2), 1.5);
|
||||
$D = $x / ($N1 * $k0);
|
||||
|
||||
$lat = $phi1 - ($N1 * tan($phi1) / $R1) * (
|
||||
$D*$D/2
|
||||
- (5 + 3*$T1 + 10*$C1 - 4*$C1*$C1 - 9*$e2/(1-$e2)) * pow($D,4)/24
|
||||
+ (61 + 90*$T1 + 298*$C1 + 45*$T1*$T1 - 252*$e2/(1-$e2) - 3*$C1*$C1) * pow($D,6)/720
|
||||
);
|
||||
|
||||
$lon = $lon0 + (
|
||||
$D
|
||||
- (1 + 2*$T1 + $C1) * pow($D,3)/6
|
||||
+ (5 - 2*$C1 + 28*$T1 - 3*$C1*$C1 + 8*$e2/(1-$e2) + 24*$T1*$T1) * pow($D,5)/120
|
||||
) / cos($phi1);
|
||||
|
||||
return [round(rad2deg($lon), 8), round(rad2deg($lat), 8)];
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────
|
||||
// Deteksi apakah koordinat perlu dikonversi
|
||||
// Koordinat UTM Pontianak: Easting ~300000-400000, Northing ~9900000+
|
||||
// Koordinat WGS84: lng ~109, lat ~-0.1
|
||||
// ─────────────────────────────────────────────────────
|
||||
function isUTM($x, $y) {
|
||||
return (abs($x) > 1000 || abs($y) > 1000);
|
||||
}
|
||||
|
||||
function convertCoords($coords) {
|
||||
if (!is_array($coords)) return $coords;
|
||||
|
||||
// Koordinat tunggal [x, y]
|
||||
if (count($coords) >= 2 && is_numeric($coords[0]) && is_numeric($coords[1])) {
|
||||
$x = (float)$coords[0];
|
||||
$y = (float)$coords[1];
|
||||
if (isUTM($x, $y)) {
|
||||
return utmToLatLng($x, $y);
|
||||
}
|
||||
return [$x, $y]; // Sudah WGS84, biarkan
|
||||
}
|
||||
|
||||
// Array of array → rekursif
|
||||
$result = [];
|
||||
foreach ($coords as $item) {
|
||||
if (!is_array($item)) continue;
|
||||
$result[] = convertCoords($item);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
// Proses semua fitur
|
||||
if (isset($gj['features']) && is_array($gj['features'])) {
|
||||
foreach ($gj['features'] as &$feat) {
|
||||
if (isset($feat['geometry']['coordinates']) && is_array($feat['geometry']['coordinates'])) {
|
||||
$feat['geometry']['coordinates'] = convertCoords($feat['geometry']['coordinates']);
|
||||
}
|
||||
}
|
||||
unset($feat);
|
||||
}
|
||||
|
||||
echo json_encode($gj);
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
// koneksi.php
|
||||
define('DB_HOST', 'localhost');
|
||||
define('DB_USER', 'root');
|
||||
define('DB_PASS', ''); // XAMPP default kosong
|
||||
define('DB_NAME', 'webgis_sigma');
|
||||
|
||||
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
|
||||
$conn->set_charset('utf8mb4');
|
||||
|
||||
if ($conn->connect_error) {
|
||||
http_response_code(500);
|
||||
die(json_encode(['status'=>'error','message'=>'Koneksi gagal: '.$conn->connect_error]));
|
||||
}
|
||||
+182
@@ -0,0 +1,182 @@
|
||||
<?php
|
||||
// proses.php — CRUD handler untuk Jalan, Parsil, Point
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
include 'koneksi.php';
|
||||
|
||||
function bersih($s) { return htmlspecialchars(strip_tags(trim($s))); }
|
||||
|
||||
$aksi = $_POST['aksi'] ?? $_GET['aksi'] ?? '';
|
||||
|
||||
// ══════════════════════════════════════════════
|
||||
// READ — ambil semua data per layer
|
||||
// ══════════════════════════════════════════════
|
||||
if ($aksi === 'baca') {
|
||||
$layer = $_GET['layer'] ?? 'jalan';
|
||||
$tabel = ['jalan'=>'data_jalan','parsil'=>'data_parsil','point'=>'data_point'];
|
||||
if (!isset($tabel[$layer])) { echo json_encode(['status'=>'error','message'=>'Layer tidak valid']); exit; }
|
||||
|
||||
$res = $conn->query("SELECT * FROM {$tabel[$layer]} ORDER BY created_at DESC");
|
||||
$data = [];
|
||||
while ($row = $res->fetch_assoc()) $data[] = $row;
|
||||
echo json_encode(['status'=>'ok','data'=>$data]);
|
||||
exit;
|
||||
}
|
||||
|
||||
// ══════════════════════════════════════════════
|
||||
// READ SINGLE
|
||||
// ══════════════════════════════════════════════
|
||||
if ($aksi === 'detail') {
|
||||
$layer = $_GET['layer'] ?? '';
|
||||
$id = intval($_GET['id'] ?? 0);
|
||||
$tabel = ['jalan'=>'data_jalan','parsil'=>'data_parsil','point'=>'data_point'];
|
||||
if (!isset($tabel[$layer])) { echo json_encode(['status'=>'error','message'=>'Layer tidak valid']); exit; }
|
||||
|
||||
$stmt = $conn->prepare("SELECT * FROM {$tabel[$layer]} WHERE id=?");
|
||||
$stmt->bind_param('i', $id);
|
||||
$stmt->execute();
|
||||
$row = $stmt->get_result()->fetch_assoc();
|
||||
echo $row ? json_encode(['status'=>'ok','data'=>$row]) : json_encode(['status'=>'error','message'=>'Tidak ditemukan']);
|
||||
exit;
|
||||
}
|
||||
|
||||
// ══════════════════════════════════════════════
|
||||
// CREATE — simpan data baru
|
||||
// ══════════════════════════════════════════════
|
||||
if ($aksi === 'simpan') {
|
||||
$layer = $_POST['layer'] ?? '';
|
||||
$geojson = $_POST['geojson'] ?? '';
|
||||
|
||||
// Validasi GeoJSON
|
||||
if (!$geojson || json_decode($geojson) === null) {
|
||||
echo json_encode(['status'=>'error','message'=>'GeoJSON tidak valid']); exit;
|
||||
}
|
||||
|
||||
if ($layer === 'jalan') {
|
||||
$nama = bersih($_POST['nama'] ?? '');
|
||||
$status = bersih($_POST['status'] ?? '');
|
||||
$panjang = floatval($_POST['panjang'] ?? 0);
|
||||
$valid = ['Jalan Nasional','Jalan Provinsi','Jalan Kabupaten'];
|
||||
if (!$nama || !in_array($status, $valid)) { echo json_encode(['status'=>'error','message'=>'Data tidak lengkap']); exit; }
|
||||
|
||||
$stmt = $conn->prepare("INSERT INTO data_jalan (nama_jalan,status_jalan,panjang_meter,geojson) VALUES (?,?,?,?)");
|
||||
$stmt->bind_param('ssds', $nama, $status, $panjang, $geojson);
|
||||
|
||||
} elseif ($layer === 'parsil') {
|
||||
$nama = bersih($_POST['nama'] ?? '');
|
||||
$status = bersih($_POST['status'] ?? '');
|
||||
$luas = floatval($_POST['luas'] ?? 0);
|
||||
$valid = ['SHM','HGB','HGU','HP'];
|
||||
if (!$nama || !in_array($status, $valid)) { echo json_encode(['status'=>'error','message'=>'Data tidak lengkap']); exit; }
|
||||
|
||||
$stmt = $conn->prepare("INSERT INTO data_parsil (nama_parsil,status_sertifikat,luas_m2,geojson) VALUES (?,?,?,?)");
|
||||
$stmt->bind_param('ssds', $nama, $status, $luas, $geojson);
|
||||
|
||||
} elseif ($layer === 'point') {
|
||||
$nama = bersih($_POST['nama'] ?? '');
|
||||
$wa = bersih($_POST['wa'] ?? '');
|
||||
$jam = ($_POST['jam'] ?? 'Tidak') === 'Ya' ? 'Ya' : 'Tidak';
|
||||
if (!$nama) { echo json_encode(['status'=>'error','message'=>'Nama wajib diisi']); exit; }
|
||||
|
||||
$stmt = $conn->prepare("INSERT INTO data_point (nama_objek,no_wa,buka_24jam,geojson) VALUES (?,?,?,?)");
|
||||
$stmt->bind_param('ssss', $nama, $wa, $jam, $geojson);
|
||||
|
||||
} else {
|
||||
echo json_encode(['status'=>'error','message'=>'Layer tidak dikenali']); exit;
|
||||
}
|
||||
|
||||
if ($stmt->execute()) {
|
||||
echo json_encode(['status'=>'ok','id'=>$stmt->insert_id,'message'=>'Data berhasil disimpan!']);
|
||||
} else {
|
||||
echo json_encode(['status'=>'error','message'=>'Gagal: '.$stmt->error]);
|
||||
}
|
||||
$stmt->close();
|
||||
exit;
|
||||
}
|
||||
|
||||
// ══════════════════════════════════════════════
|
||||
// UPDATE — perbarui atribut & koordinat
|
||||
// ══════════════════════════════════════════════
|
||||
if ($aksi === 'update') {
|
||||
$layer = $_POST['layer'] ?? '';
|
||||
$id = intval($_POST['id'] ?? 0);
|
||||
$geojson = $_POST['geojson'] ?? null;
|
||||
|
||||
if (!$id) { echo json_encode(['status'=>'error','message'=>'ID tidak valid']); exit; }
|
||||
|
||||
if ($layer === 'jalan') {
|
||||
$nama = bersih($_POST['nama'] ?? '');
|
||||
$status = bersih($_POST['status'] ?? '');
|
||||
$panjang = floatval($_POST['panjang'] ?? 0);
|
||||
$valid = ['Jalan Nasional','Jalan Provinsi','Jalan Kabupaten'];
|
||||
if (!$nama || !in_array($status, $valid)) { echo json_encode(['status'=>'error','message'=>'Data tidak lengkap']); exit; }
|
||||
|
||||
if ($geojson && json_decode($geojson)) {
|
||||
$stmt = $conn->prepare("UPDATE data_jalan SET nama_jalan=?,status_jalan=?,panjang_meter=?,geojson=? WHERE id=?");
|
||||
$stmt->bind_param('ssdsi', $nama, $status, $panjang, $geojson, $id);
|
||||
} else {
|
||||
$stmt = $conn->prepare("UPDATE data_jalan SET nama_jalan=?,status_jalan=?,panjang_meter=? WHERE id=?");
|
||||
$stmt->bind_param('ssdi', $nama, $status, $panjang, $id);
|
||||
}
|
||||
|
||||
} elseif ($layer === 'parsil') {
|
||||
$nama = bersih($_POST['nama'] ?? '');
|
||||
$status = bersih($_POST['status'] ?? '');
|
||||
$luas = floatval($_POST['luas'] ?? 0);
|
||||
$valid = ['SHM','HGB','HGU','HP'];
|
||||
if (!$nama || !in_array($status, $valid)) { echo json_encode(['status'=>'error','message'=>'Data tidak lengkap']); exit; }
|
||||
|
||||
if ($geojson && json_decode($geojson)) {
|
||||
$stmt = $conn->prepare("UPDATE data_parsil SET nama_parsil=?,status_sertifikat=?,luas_m2=?,geojson=? WHERE id=?");
|
||||
$stmt->bind_param('ssdsi', $nama, $status, $luas, $geojson, $id);
|
||||
} else {
|
||||
$stmt = $conn->prepare("UPDATE data_parsil SET nama_parsil=?,status_sertifikat=?,luas_m2=? WHERE id=?");
|
||||
$stmt->bind_param('ssdi', $nama, $status, $luas, $id);
|
||||
}
|
||||
|
||||
} elseif ($layer === 'point') {
|
||||
$nama = bersih($_POST['nama'] ?? '');
|
||||
$wa = bersih($_POST['wa'] ?? '');
|
||||
$jam = ($_POST['jam'] ?? 'Tidak') === 'Ya' ? 'Ya' : 'Tidak';
|
||||
if (!$nama) { echo json_encode(['status'=>'error','message'=>'Nama wajib diisi']); exit; }
|
||||
|
||||
if ($geojson && json_decode($geojson)) {
|
||||
$stmt = $conn->prepare("UPDATE data_point SET nama_objek=?,no_wa=?,buka_24jam=?,geojson=? WHERE id=?");
|
||||
$stmt->bind_param('ssssi', $nama, $wa, $jam, $geojson, $id);
|
||||
} else {
|
||||
$stmt = $conn->prepare("UPDATE data_point SET nama_objek=?,no_wa=?,buka_24jam=? WHERE id=?");
|
||||
$stmt->bind_param('sssi', $nama, $wa, $jam, $id);
|
||||
}
|
||||
|
||||
} else {
|
||||
echo json_encode(['status'=>'error','message'=>'Layer tidak dikenali']); exit;
|
||||
}
|
||||
|
||||
if ($stmt->execute()) {
|
||||
echo json_encode(['status'=>'ok','message'=>'Data berhasil diperbarui!']);
|
||||
} else {
|
||||
echo json_encode(['status'=>'error','message'=>'Gagal: '.$stmt->error]);
|
||||
}
|
||||
$stmt->close();
|
||||
exit;
|
||||
}
|
||||
|
||||
// ══════════════════════════════════════════════
|
||||
// DELETE
|
||||
// ══════════════════════════════════════════════
|
||||
if ($aksi === 'hapus') {
|
||||
$layer = $_POST['layer'] ?? $_GET['layer'] ?? '';
|
||||
$id = intval($_POST['id'] ?? $_GET['id'] ?? 0);
|
||||
$tabel = ['jalan'=>'data_jalan','parsil'=>'data_parsil','point'=>'data_point'];
|
||||
|
||||
if (!$id || !isset($tabel[$layer])) { echo json_encode(['status'=>'error','message'=>'Parameter tidak valid']); exit; }
|
||||
|
||||
$stmt = $conn->prepare("DELETE FROM {$tabel[$layer]} WHERE id=?");
|
||||
$stmt->bind_param('i', $id);
|
||||
echo $stmt->execute()
|
||||
? json_encode(['status'=>'ok','message'=>'Data berhasil dihapus!'])
|
||||
: json_encode(['status'=>'error','message'=>'Gagal: '.$stmt->error]);
|
||||
$stmt->close();
|
||||
exit;
|
||||
}
|
||||
|
||||
echo json_encode(['status'=>'error','message'=>"Aksi '$aksi' tidak dikenali."]);
|
||||
Reference in New Issue
Block a user