map dropdown

This commit is contained in:
='fauz 2025-07-03 00:41:31 +07:00
parent 9d9a23f995
commit 8e84a142c7
4 changed files with 85 additions and 70 deletions

View File

@ -21,7 +21,9 @@ def swap_latlon(coords):
def swap_latlon2(coords): def swap_latlon2(coords):
try: try:
sample = coords[0][0][0] sample = coords[0][0][0]
if not (-180 <= sample[0] <= 180 and -90 <= sample[1] <= 90): lat, lon = sample
# if not (-180 <= sample[0] <= 180 and -90 <= sample[1] <= 90):
if -90 <= lat <= 90 and -180 <= lon <= 180:
return [ return [
[ [
[ [
@ -30,7 +32,6 @@ def swap_latlon2(coords):
] for polygon in coords ] for polygon in coords
] ]
else: else:
# Sudah benar [lon, lat]
return coords return coords
except Exception as e: except Exception as e:
print(f"[swap_latlon] Error during coordinate swap: {e}") print(f"[swap_latlon] Error during coordinate swap: {e}")

View File

@ -119,11 +119,11 @@
<div class="row form-group"> <div class="row form-group">
<div class="col-md-12"> <div class="col-md-12">
<div class="input-group"> <div class="input-group">
<div class="input-group-prepend"> <!-- <div class="input-group-prepend">
<span class="input-group-text" style="width: 150px;"> <span class="input-group-text" style="width: 150px;">
Provinsi Provinsi
</span> </span>
</div> </div> -->
<select class="form-control select2 border border-primary" name="provinsiDropdown" id="provinsiDropdown" <select class="form-control select2 border border-primary" name="provinsiDropdown" id="provinsiDropdown"
data-placeholder="Provinsi ......"> data-placeholder="Provinsi ......">
<option></option> <option></option>
@ -137,11 +137,11 @@
<div class="row form-group"> <div class="row form-group">
<div class="col-md-12"> <div class="col-md-12">
<div class="input-group"> <div class="input-group">
<div class="input-group-prepend"> <!-- <div class="input-group-prepend">
<span class="input-group-text" style="width: 150px;"> <span class="input-group-text" style="width: 150px;">
Kabupaten/Kota Kabupaten/Kota
</span> </span>
</div> </div> -->
<select class="form-control select2" name="kabkotaDropdown" id="kabkotaDropdown" <select class="form-control select2" name="kabkotaDropdown" id="kabkotaDropdown"
data-placeholder="Kabupaten/Kota ....." > data-placeholder="Kabupaten/Kota ....." >
<option></option> <option></option>
@ -154,11 +154,11 @@
<div class="row form-group"> <div class="row form-group">
<div class="col-md-12"> <div class="col-md-12">
<div class="input-group"> <div class="input-group">
<div class="input-group-prepend"> <!-- <div class="input-group-prepend">
<span class="input-group-text" style="width: 150px;"> <span class="input-group-text" style="width: 150px;">
Kecamatan Kecamatan
</span> </span>
</div> </div> -->
<select class="form-control select2" name="kecamatanDropdown" id="kecamatanDropdown" <select class="form-control select2" name="kecamatanDropdown" id="kecamatanDropdown"
data-placeholder="Kecamatan ....."> data-placeholder="Kecamatan .....">
<option></option> <option></option>
@ -274,14 +274,14 @@
if (url.includes("/provinsi")) { if (url.includes("/provinsi")) {
const provinsiId = feature.properties.id; const provinsiId = feature.properties.id;
localStorage.setItem('kode_provinsi', provinsiId); localStorage.setItem('kode_provinsi', provinsiId);
updateDropdown('provinsi',kode)
updateDropdown('provinsi',feature.properties.id)
} else if (currentLevel === 'kabupatenkota') { } else if (currentLevel === 'kabupatenkota') {
let province_id = localStorage.getItem('kode_provinsi')
localStorage.setItem('kode_kabupatenkota',feature.properties.id) localStorage.setItem('kode_kabupatenkota',feature.properties.id)
updateDropdown('kabupatenkota',feature.properties.id) updateDropdown('kabupatenkota',kode)
}else if(currentLevel === 'kecamatan'){ }else if(currentLevel === 'kecamatan'){
localStorage.setItem('kode_kecamatan',feature.properties.id) localStorage.setItem('kode_kecamatan',feature.properties.id)
updateDropdown('kecamatan',feature.properties.id) updateDropdown('kabupatenkota',kode)
} }
} else { } else {
// Single click → Tampilkan popup // Single click → Tampilkan popup
@ -730,61 +730,69 @@
<script> <script>
function updateDropdown(level, kode) { const dropdownMap = {
const dropdownId = { provinsi: '#provinsiDropdown',
'provinsi': '#provinsiDropdown', kabupatenkota: '#kabkotaDropdown',
'kabupatenkota': '#kabkotaDropdown', kecamatan: '#kecamatanDropdown'
'kecamatan': '#kecamatanDropdown' };
}[level];
const nextLevel = { const apiURLMap = {
'provinsi': '#provinsiDropdown', provinsi: "{{ url_for('main.get_master_kabkota') }}",
'kabupatenkota': '#kabkotaDropdown', kabupatenkota: "{{ url_for('main.get_master_kecamatan') }}"
'kecamatan': '#kecamatanDropdown' };
}[level];
if ($(dropdownId).length) { const dataKeyMap = {
provinsi: 'provinsi_id',
kabupatenkota: 'kabkota_id'
};
function getNextLevel(level) {
const order = ['provinsi', 'kabupatenkota', 'kecamatan'];
const index = order.indexOf(level);
return order[index + 1];
}
function capitalize(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
function updateDropdown(level, kode,autoSelectKodeNext = null) {
const dropdownId = dropdownMap[level];
if (!dropdownId || !$(dropdownId).length) return;
// Set value dan trigger select2
$(dropdownId).val(kode).trigger('change.select2'); $(dropdownId).val(kode).trigger('change.select2');
if(level == 'provinsi'){ console.log(dropdownId,kode);
// Ambil kabupaten berdasarkan provinsi // Ambil level berikutnya
const kabkotaURL = "{{ url_for('main.get_master_kabkota') }}"; const nextLevel = getNextLevel(level);
const targetDropdownId = dropdownMap[nextLevel];
// Kalau ada level berikutnya, ambil datanya via AJAX
if (nextLevel && apiURLMap[level]) {
const targetDropdownId = dropdownMap[getNextLevel(level)];
const apiURL = apiURLMap[level];
const paramKey = dataKeyMap[level];
const paramVal = $(dropdownId).val();
$.ajax({ $.ajax({
url: kabkotaURL, url: apiURL,
data: { provinsi_id: $(dropdownId).val() }, data: { [paramKey]: paramVal },
dataType: 'json', dataType: 'json',
success: function (data) { success: function (data) {
const results = data.map(kabupaten => ({ const results = data.map(item => ({
id: kabupaten[0], id: item[0],
text: kabupaten[1] text: item[1]
})); }));
// Tambahkan ke dropdown kabupaten $(targetDropdownId).empty().select2({
$('#kabkotaDropdown').select2({
data: results, data: results,
placeholder: 'Pilih Kabupaten/Kota', placeholder: `Pilih ${capitalize(getNextLevel(level))}`,
allowClear: true
});
}
});
}else if(level == 'kabupatenkota'){
// Ambil kabupaten berdasarkan provinsi
const kabkotaURL = "{{ url_for('main.get_master_kecamatan') }}";
$.ajax({
url: kabkotaURL,
data: { kabkota_id: $(dropdownId).val() },
dataType: 'json',
success: function (data) {
const results = data.map(kecamatan => ({
id: kecamatan[0],
text: kecamatan[1]
}));
// Tambahkan ke dropdown kabupaten
$('#kecamatanDropdown').select2({
data: results,
placeholder: 'Pilih Kecamatan',
allowClear: true allowClear: true
}); });
} }
}); });
if (autoSelectKodeNext) {
$(targetDropdownId).val(autoSelectKodeNext).trigger('change.select2');
} }
} }
} }
@ -833,7 +841,12 @@
fetch(url) fetch(url)
.then(res => res.json()) .then(res => res.json())
.then(data => { .then(data => {
total_dd_container.textContent = parseDanBulatkanKeMiliar(data)
if(typeof (data) == 'object'){
//total_dd_container.textContent = parseDanBulatkanKeMiliar(data.jumlah_per_m)
}else{
//total_dd_container.textContent = parseDanBulatkanKeMiliar(data)
}
}) })
} }
@ -841,8 +854,11 @@
fetch(url) fetch(url)
.then(res => res.json()) .then(res => res.json())
.then(data => { .then(data => {
document.getElementById('tot_sr').textContent = parseDanBulatkanKeMiliar(data['serapan_per_m']) if(data){
document.getElementById('pr_sr').textContent = data['persentage'] + "%" console.log("fetch serapan:", data)
//document.getElementById('tot_sr').textContent = parseDanBulatkanKeMiliar(data['serapan_per_m'])
//document.getElementById('pr_sr').textContent = data['persentage'] + "%"
}
}) })
} }

View File

@ -72,8 +72,6 @@
<div class="report-container"> <div class="report-container">
<div class="report-header"> <div class="report-header">
<!-- <h1 class="recent-Articles">Recent Articles</h1>
<button class="view">View All</button> -->
<div class="box-container"> <div class="box-container">
<div class="box box1"> <div class="box box1">
<div class="text"> <div class="text">