94 lines
2.6 KiB
JavaScript
94 lines
2.6 KiB
JavaScript
window.getRoadColor = function (status) {
|
|
if (status === "Jalan Nasional") {
|
|
return "#dc3545";
|
|
}
|
|
|
|
if (status === "Jalan Provinsi") {
|
|
return "#007bff";
|
|
}
|
|
|
|
return "#28a745";
|
|
};
|
|
|
|
window.normalizeRoadStatus = function (value) {
|
|
var normalized = String(value || "").trim().toLowerCase();
|
|
|
|
if (normalized === "jalan nasional" || normalized === "nasional") {
|
|
return "Jalan Nasional";
|
|
}
|
|
|
|
if (normalized === "jalan provinsi" || normalized === "provinsi") {
|
|
return "Jalan Provinsi";
|
|
}
|
|
|
|
if (normalized === "jalan kabupaten" || normalized === "kabupaten") {
|
|
return "Jalan Kabupaten";
|
|
}
|
|
|
|
return "";
|
|
};
|
|
|
|
window.serializeGeometry = function (latlngs) {
|
|
return JSON.stringify(latlngs.map(function (point) {
|
|
return [
|
|
Number(point.lat.toFixed(6)),
|
|
Number(point.lng.toFixed(6))
|
|
];
|
|
}));
|
|
};
|
|
|
|
window.parseGeometry = function (geom) {
|
|
try {
|
|
var parsed = JSON.parse(geom);
|
|
return Array.isArray(parsed) ? parsed : [];
|
|
} catch (error) {
|
|
return [];
|
|
}
|
|
};
|
|
|
|
window.collectRoadData = async function () {
|
|
return window.openEditModal({
|
|
title: "Tambah Jalan",
|
|
subtitle: "Lengkapi atribut jalan untuk garis yang sudah digambar.",
|
|
fields: [
|
|
{ name: "nama", label: "Nama Jalan", value: "", required: true },
|
|
{
|
|
name: "status",
|
|
label: "Status Jalan",
|
|
type: "select",
|
|
value: "Jalan Nasional",
|
|
options: [
|
|
{ value: "Jalan Nasional", label: "Jalan Nasional" },
|
|
{ value: "Jalan Provinsi", label: "Jalan Provinsi" },
|
|
{ value: "Jalan Kabupaten", label: "Jalan Kabupaten" }
|
|
]
|
|
}
|
|
],
|
|
validate: function (data) {
|
|
if (!data.nama || !window.normalizeRoadStatus(data.status)) {
|
|
return "Nama dan status jalan wajib valid.";
|
|
}
|
|
return "";
|
|
}
|
|
});
|
|
};
|
|
|
|
window.buildRoadLayer = function (jalan) {
|
|
var coordinates = window.parseGeometry(jalan.geom).map(function (point) {
|
|
return L.latLng(point[0], point[1]);
|
|
});
|
|
|
|
if (coordinates.length < 2) {
|
|
return null;
|
|
}
|
|
|
|
return L.polyline(coordinates, {
|
|
color: window.getRoadColor(jalan.status),
|
|
weight: 4
|
|
}).bindPopup(
|
|
"<b>" + window.escapeHtml(jalan.nama) + "</b><br>" +
|
|
"Status: " + window.escapeHtml(jalan.status) + "<br>" +
|
|
"Panjang: " + window.formatMeters(jalan.panjang)
|
|
);
|
|
};
|