Merge branch 'main' of https://git.probindo.com/Probindo/database-pertani-web
This commit is contained in:
@@ -26,7 +26,7 @@ class IndeksPetaniController extends Controller
|
||||
$komoditas = Komoditas::where('is_utama', true)->get();
|
||||
|
||||
$petani = Petani::pluck('id');
|
||||
$lahan = Lahan::whereIn('petani_id', $petani)->get();
|
||||
$lahan = Lahan::has('petani')->get();
|
||||
|
||||
$case = "
|
||||
CASE
|
||||
@@ -38,14 +38,13 @@ class IndeksPetaniController extends Controller
|
||||
END
|
||||
";
|
||||
|
||||
$countPetani = Petani::whereIn('id', $petani)->count();
|
||||
$countKomoditas = Petani::whereIn('id', $petani)->whereIn('komoditas_id', $komoditas->pluck('id'))->distinct()->count('komoditas_id');
|
||||
$sumLahan = Lahan::whereIn('petani_id', $petani)->whereIn('komoditas_id', $komoditas->pluck('id'))->sum('luas_lahan');
|
||||
$avgLahan = Lahan::whereIn('petani_id', $petani)->whereIn('komoditas_id', $komoditas->pluck('id'))->avg('luas_lahan');
|
||||
$countPetani = Petani::count();
|
||||
$countKomoditas = Petani::whereIn('komoditas_id', $komoditas->pluck('id'))->distinct()->count('komoditas_id');
|
||||
$sumLahan = Lahan::has('petani')->whereIn('komoditas_id', $komoditas->pluck('id'))->sum('luas_lahan');
|
||||
$avgLahan = Lahan::has('petani')->whereIn('komoditas_id', $komoditas->pluck('id'))->avg('luas_lahan');
|
||||
|
||||
$avgSkor = SkorPetani::query()
|
||||
->join('petani', 'petani_skor.petani_id', '=', 'petani.id')
|
||||
->whereIn('petani_id', $petani)
|
||||
->whereIn('petani.komoditas_id', $komoditas->pluck('id'))
|
||||
->avg('skor_kesiapan_adopsi');
|
||||
|
||||
@@ -61,14 +60,13 @@ class IndeksPetaniController extends Controller
|
||||
$avgSegmen = 'Belum Lengkap';
|
||||
}
|
||||
|
||||
$countDesa = Petani::whereIn('id', $petani)->whereIn('komoditas_id', $komoditas->pluck('id'))->distinct()->count('desa_kelurahan_id');
|
||||
$countKecamatan = Petani::whereIn('petani.id', $petani)
|
||||
$countDesa = Petani::whereIn('komoditas_id', $komoditas->pluck('id'))->distinct()->count('desa_kelurahan_id');
|
||||
$countKecamatan = Petani::query()
|
||||
->join('master_desa_kelurahan', 'petani.desa_kelurahan_id', '=', 'master_desa_kelurahan.id')
|
||||
->join('master_kecamatan', 'master_desa_kelurahan.kecamatan_id', '=', 'master_kecamatan.id')
|
||||
->whereIn('komoditas_id', $komoditas->pluck('id'))->distinct()->count('master_kecamatan.id');
|
||||
|
||||
$countSegmentasi = SkorPetani::selectRaw("$case AS segmen, COUNT(*) AS total")
|
||||
->whereIn('petani_id', $petani)
|
||||
->groupByRaw($case)
|
||||
->get();
|
||||
|
||||
@@ -79,14 +77,12 @@ class IndeksPetaniController extends Controller
|
||||
$case AS segmen,
|
||||
COUNT(petani.id) AS total
|
||||
")
|
||||
->whereIn('petani_skor.petani_id', $petani)
|
||||
->groupBy('petani.komoditas_id')
|
||||
->groupByRaw($case)
|
||||
->get();
|
||||
|
||||
$avgDimensi = SkorPetani::query()
|
||||
->join('petani', 'petani_skor.petani_id', '=', 'petani.id')
|
||||
->whereIn('petani_id', $petani)
|
||||
->whereIn('petani.komoditas_id', $komoditas->pluck('id'))
|
||||
->selectRaw("
|
||||
avg(skor_d2_sistem_praktik_budidaya) as skor_d2_sistem_praktik_budidaya,
|
||||
@@ -96,7 +92,6 @@ class IndeksPetaniController extends Controller
|
||||
|
||||
$avgKomponen = SkorPetani::query()
|
||||
->join('petani', 'petani_skor.petani_id', '=', 'petani.id')
|
||||
->whereIn('petani_id', $petani)
|
||||
->whereIn('petani.komoditas_id', $komoditas->pluck('id'))
|
||||
->selectRaw("avg(skor_komp_1_d4_k3_motivasi_kapasitas_adopsi) as skor_komp_1_d4_k3_motivasi_kapasitas_adopsi,
|
||||
avg(skor_komp_2_d4_k2_ekonomi_rumah_tangga) as skor_komp_2_d4_k2_ekonomi_rumah_tangga,
|
||||
@@ -106,6 +101,56 @@ class IndeksPetaniController extends Controller
|
||||
avg(skor_komp_6_d6_k1_k4_k5_rantai_nilai_akses_pasar) as skor_komp_6_d6_k1_k4_k5_rantai_nilai_akses_pasar")
|
||||
->first();
|
||||
|
||||
$desaKelurahan = Petani::query()
|
||||
->join('master_desa_kelurahan', 'petani.desa_kelurahan_id', '=', 'master_desa_kelurahan.id')
|
||||
->join('master_kecamatan', 'master_desa_kelurahan.kecamatan_id', '=', 'master_kecamatan.id')
|
||||
->join('master_kabupaten_kota', 'master_kecamatan.kabupaten_kota_id', '=', 'master_kabupaten_kota.id')
|
||||
->join('master_provinsi', 'master_kabupaten_kota.provinsi_id', '=', 'master_provinsi.id')
|
||||
->selectRaw("
|
||||
master_desa_kelurahan.id as desa_kelurahan_id,
|
||||
master_desa_kelurahan.nama as desa_kelurahan,
|
||||
master_desa_kelurahan.path as path,
|
||||
master_kecamatan.id as kecamatan_id,
|
||||
master_kecamatan.nama as kecamatan,
|
||||
master_kabupaten_kota.id as kabupaten_id,
|
||||
master_kabupaten_kota.nama as kabupaten,
|
||||
master_provinsi.id as provinsi_id,
|
||||
master_provinsi.nama as provinsi
|
||||
")
|
||||
->whereIn('petani.id', $petani)
|
||||
->distinct()
|
||||
->get();
|
||||
|
||||
$mapSegmentasi = SkorPetani::query()
|
||||
->join('petani', 'petani_skor.petani_id', '=', 'petani.id')
|
||||
->selectRaw("petani.desa_kelurahan_id,
|
||||
$case AS segmen,
|
||||
COUNT(petani.id) AS total
|
||||
")
|
||||
->groupBy('petani.desa_kelurahan_id')
|
||||
->groupByRaw($case)
|
||||
->get();
|
||||
|
||||
$mapAvgSkorSegmentasi = SkorPetani::query()
|
||||
->join('petani', 'petani_skor.petani_id', '=', 'petani.id')
|
||||
->selectRaw("petani.desa_kelurahan_id,
|
||||
COUNT(petani.id) AS jumlah_petani,
|
||||
avg(skor_kesiapan_adopsi) AS skor,
|
||||
CASE
|
||||
WHEN AVG(skor_kesiapan_adopsi) >= 4 THEN 'Penggerak'
|
||||
WHEN AVG(skor_kesiapan_adopsi) >= 3 THEN 'Perintis'
|
||||
WHEN AVG(skor_kesiapan_adopsi) >= 2 THEN 'Pemerhati'
|
||||
WHEN AVG(skor_kesiapan_adopsi) >= 1 THEN 'Pemula'
|
||||
ELSE 'Belum Lengkap'
|
||||
END AS segmen
|
||||
")
|
||||
->groupBy('petani.desa_kelurahan_id')
|
||||
->get();
|
||||
|
||||
$daftarPetani = Petani::query()
|
||||
->whereIn('komoditas_id', $komoditas->pluck('id'))
|
||||
->get();
|
||||
|
||||
return view('dashboard.indeks-petani', compact(
|
||||
'komoditas',
|
||||
'countPetani',
|
||||
@@ -119,7 +164,11 @@ class IndeksPetaniController extends Controller
|
||||
'countSegmentasi',
|
||||
'countSegmentasiByKomoditas',
|
||||
'avgDimensi',
|
||||
'avgKomponen'
|
||||
'avgKomponen',
|
||||
'desaKelurahan',
|
||||
'mapSegmentasi',
|
||||
'mapAvgSkorSegmentasi',
|
||||
'daftarPetani',
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -18,6 +18,7 @@ use App\Enums\KondisiTanaman;
|
||||
use App\Enums\SeranganHama;
|
||||
use App\Enums\PenyakitTanaman;
|
||||
use App\Enums\KeparahanSerangan;
|
||||
use App\Models\Pertanian\Petani;
|
||||
|
||||
class Lahan extends Model
|
||||
{
|
||||
@@ -98,7 +99,7 @@ class Lahan extends Model
|
||||
|
||||
public function petani(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Profile::class, 'petani_id');
|
||||
return $this->belongsTo(Petani::class, 'petani_id');
|
||||
}
|
||||
|
||||
public function komoditas(): BelongsTo
|
||||
|
||||
@@ -339,7 +339,7 @@ class Petani extends Model
|
||||
$skor >= 3.0 => 'Perintis',
|
||||
$skor >= 2.0 => 'Pemerhati',
|
||||
$skor >= 1.0 => 'Pemula',
|
||||
default => 'Belum tersegmentasi',
|
||||
default => 'Belum lengkap',
|
||||
};
|
||||
}
|
||||
|
||||
@@ -365,10 +365,10 @@ class Petani extends Model
|
||||
} elseif ($skor->skor_kesiapan_adopsi >= 1.0) {
|
||||
return 'Pemula';
|
||||
} else {
|
||||
return 'Belum tersegmentasi';
|
||||
return 'Belum lengkap';
|
||||
}
|
||||
|
||||
return 'Belum tersegmentasi';
|
||||
return 'Belum lengkap';
|
||||
}
|
||||
|
||||
public function keteranganSegmen(): ?string
|
||||
|
||||
@@ -4,6 +4,9 @@ namespace App\Models\Pertanian;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
|
||||
use App\Models\Pertanian\Petani;
|
||||
|
||||
class SkorPetani extends Model
|
||||
{
|
||||
@@ -139,4 +142,9 @@ class SkorPetani extends Model
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
public function petani(): BelongsTo
|
||||
{
|
||||
return $this->belongsTo(Petani::class, 'petani_id');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
@extends('layout.main')
|
||||
|
||||
@push('style')
|
||||
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"
|
||||
integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY="
|
||||
crossorigin=""/>
|
||||
@endpush
|
||||
|
||||
@section('content')
|
||||
@php
|
||||
$segments = [
|
||||
@@ -33,6 +39,7 @@ $colors = collect($segments)
|
||||
->pluck('color')
|
||||
->map(fn($c) => "var(--bs-{$c})")
|
||||
->values();
|
||||
$segmentStyles = collect($segments)->keyBy('name');
|
||||
|
||||
$countSegmentasi = $countSegmentasi->keyBy('segmen');
|
||||
$seriesSegmentasi = collect($segments)->map(function ($segment) use ($countSegmentasi) {
|
||||
@@ -55,6 +62,34 @@ $seriesSegmentasiKomoditas = collect($segments)->map(function ($segment) use ($c
|
||||
];
|
||||
|
||||
})->values();
|
||||
|
||||
$segmenDominan = $mapSegmentasi
|
||||
->groupBy('desa_kelurahan_id')
|
||||
->map(function ($items) {
|
||||
return $items->sortByDesc('total')->first();
|
||||
});
|
||||
|
||||
$mapAvgSkorSegmentasi->each(function ($item) use ($segmenDominan) {
|
||||
$dominan = $segmenDominan->get($item->desa_kelurahan_id);
|
||||
|
||||
$item->segmen_dominan = $dominan?->segmen;
|
||||
$item->jumlah_dominan = $dominan?->total;
|
||||
});
|
||||
|
||||
$segmentasiByDesa = $mapAvgSkorSegmentasi->keyBy('desa_kelurahan_id');
|
||||
$desaLookup = $desaKelurahan->keyBy('desa_kelurahan_id');
|
||||
|
||||
$mapDesaSegmentasi = $segmentasiByDesa->map(function ($segmentasi, $desaId) use ($desaLookup) {
|
||||
$desa = $desaLookup->get($desaId);
|
||||
|
||||
if (!$desa) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$desa->segmentasi = $segmentasi;
|
||||
|
||||
return $desa;
|
||||
})->filter()->values();
|
||||
@endphp
|
||||
<div class="container-xxl flex-grow-1 container-p-y">
|
||||
<div class="row g-6">
|
||||
@@ -203,7 +238,7 @@ $seriesSegmentasiKomoditas = collect($segments)->map(function ($segment) use ($c
|
||||
|
||||
<div class="row g-6 py-4">
|
||||
<div class="col-lg-6 col-sm-12">
|
||||
<div class="card h-100">
|
||||
<div class="card card-border-shadow-info h-100">
|
||||
<div class="card-header d-flex justify-content-between align-items-center">
|
||||
<div class="card-title mb-0">
|
||||
<h5 class="m-0 me-2">Rata-rata Dimensi Kesiapan Adopsi</h5>
|
||||
@@ -227,7 +262,7 @@ $seriesSegmentasiKomoditas = collect($segments)->map(function ($segment) use ($c
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6 col-sm-12">
|
||||
<div class="card h-100">
|
||||
<div class="card card-border-shadow-warning h-100">
|
||||
<div class="card-header d-flex justify-content-between align-items-center">
|
||||
<div class="card-title mb-0">
|
||||
<h5 class="m-0 me-2">Rata-rata Komponen Kesiapan Adopsi</h5>
|
||||
@@ -260,12 +295,126 @@ $seriesSegmentasiKomoditas = collect($segments)->map(function ($segment) use ($c
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row g-6 py-4">
|
||||
<div class="col-lg-6 col-sm-12">
|
||||
<div class="card card-border-shadow-danger h-100">
|
||||
<div class="card-header d-flex justify-content-between align-items-center">
|
||||
<div class="card-title mb-0">
|
||||
<h5 class="m-0 me-2">Sebaran Segmentasi Petani</h5>
|
||||
<p class="card-subtitle">berdasarkan sebaran wilayah untuk semua komoditas</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div id="map-sebaran-petani" style="height: 380px;"></div>
|
||||
<span class="small text-muted">*klik pada desa untuk menampilkan detail informasi dan menyaring daftar petani</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6 col-sm-12">
|
||||
<div class="card card-border-shadow-success h-100">
|
||||
<div class="card-header d-flex justify-content-between align-items-center">
|
||||
<div class="card-title mb-0">
|
||||
<h5 class="m-0 me-2">Distribusi Segmentasi Petani</h5>
|
||||
<p class="card-subtitle">berdasarkan sebaran wilayah untuk semua komoditas</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<table id="table-desa" class="table card-table table-border-top-0 table-border-bottom-0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="pe-0">Desa/Kelurahan</th>
|
||||
<th class="text-end pe-0">Petani</th>
|
||||
<th class="pe-0">Segmen Rata-rata</th>
|
||||
<th class="pe-0">Segmen Dominan</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach ($mapDesaSegmentasi as $desa)
|
||||
@php
|
||||
$style = $segmentStyles[$desa->segmentasi->segmen] ?? null;
|
||||
$styleDominan = $segmentStyles[$desa->segmentasi->segmen_dominan] ?? null;
|
||||
@endphp
|
||||
<tr>
|
||||
<td class="pe-0">{{ $desa->desa_kelurahan }}</td>
|
||||
<td class="text-end pe-0">{{ number_format($desa->segmentasi->jumlah_petani) }}</td>
|
||||
<td class="pe-0">
|
||||
<span class="badge bg-{{ $style['color'] ?? 'secondary' }}">
|
||||
{{ $desa->segmentasi->segmen }}
|
||||
</span>
|
||||
({{ number_format($desa->segmentasi->skor, 2, ',', '.') }})
|
||||
</td>
|
||||
<td class="pe-0">
|
||||
<span class="badge bg-{{ $styleDominan['color'] ?? 'secondary' }}">
|
||||
{{ $desa->segmentasi->segmen_dominan }}
|
||||
</span>
|
||||
({{ number_format($desa->segmentasi->jumlah_dominan) }} petani)
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row g-6 py-4">
|
||||
<div class="col-lg-12 col-sm-12">
|
||||
<div class="card card-border-shadow-primary h-100">
|
||||
<div class="card-header d-flex justify-content-between align-items-center">
|
||||
<div class="card-title mb-0">
|
||||
<h5 class="m-0 me-2">Daftar Petani</h5>
|
||||
<p class="card-subtitle">untuk semua komoditas</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<table id="table-petani" class="table card-table table-border-top-0 table-border-bottom-0">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="pe-0">Nama Petani</th>
|
||||
<th class="pe-0">Desa/Kelurahan</th>
|
||||
<th class="pe-0">Komoditas</th>
|
||||
<th class="text-end pe-0">Luas Lahan (ha)</th>
|
||||
<th class="text-end pe-0">Indeks Kesiapan Adopsi</th>
|
||||
<th class="pe-0">Segmen</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach ($daftarPetani as $item)
|
||||
@php
|
||||
$style = $segmentStyles[$item->segmen()] ?? null;
|
||||
@endphp
|
||||
<tr data-desa="{{ $item->desa_kelurahan_id }}">
|
||||
<td class="pe-0">{{ $item->nama }}</td>
|
||||
<td class="pe-0">{{ $item->desaKelurahan?->nama }}</td>
|
||||
<td class="pe-0">{{ $item->komoditas?->nama }}</td>
|
||||
<td class="text-end pe-0">{{ number_format($item->lahans?->sum('luas_lahan'), 2, ',', '.') }}</td>
|
||||
<td class="text-end pe-0">{{ $item->skor ? number_format($item->skor?->skor_kesiapan_adopsi, 2, ',', '.') : '' }}</td>
|
||||
<td class="pe-0">
|
||||
@if ($item->skor)
|
||||
<span class="badge bg-{{ $style['color'] ?? 'secondary' }}">
|
||||
{{ $item->segmen() }}
|
||||
</span>
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
|
||||
@push('scripts')
|
||||
<script src="https://cdn.jsdelivr.net/npm/apexcharts"></script>
|
||||
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"
|
||||
integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo="
|
||||
crossorigin=""></script>
|
||||
|
||||
<script>
|
||||
$('.data-table').DataTable({
|
||||
@@ -279,6 +428,41 @@ $seriesSegmentasiKomoditas = collect($segments)->map(function ($segment) use ($c
|
||||
"scrollX": true
|
||||
});
|
||||
|
||||
var tableDesa = $('#table-desa').DataTable({
|
||||
"paging": true,
|
||||
"lengthChange": false,
|
||||
"searching": false,
|
||||
"ordering": true,
|
||||
"info": false,
|
||||
"autoWidth": false,
|
||||
"responsive": false,
|
||||
"scrollX": true,
|
||||
"pageLength": 5,
|
||||
});
|
||||
|
||||
var tablePetani = $('#table-petani').DataTable({
|
||||
"paging": true,
|
||||
"lengthChange": true,
|
||||
"searching": true,
|
||||
"ordering": true,
|
||||
"info": true,
|
||||
"autoWidth": false,
|
||||
"responsive": false,
|
||||
"scrollX": true
|
||||
});
|
||||
|
||||
let selectedDesa = null;
|
||||
|
||||
$.fn.dataTable.ext.search.push(function(settings, data, dataIndex) {
|
||||
if (!selectedDesa) return true;
|
||||
|
||||
if (settings.nTable.id === 'table-petani') {
|
||||
const row = tablePetani.row(dataIndex).node();
|
||||
return $(row).data('desa') == selectedDesa;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
// Chart Segmentasi Petani
|
||||
var optionsSegmentasiPetani = {
|
||||
series: @json($seriesSegmentasi),
|
||||
@@ -315,7 +499,7 @@ $seriesSegmentasiKomoditas = collect($segments)->map(function ($segment) use ($c
|
||||
},
|
||||
responsive: [
|
||||
{
|
||||
breakpoint: 480,
|
||||
breakpoint: 360,
|
||||
options: {
|
||||
chart: {
|
||||
width: 240,
|
||||
@@ -390,7 +574,7 @@ $seriesSegmentasiKomoditas = collect($segments)->map(function ($segment) use ($c
|
||||
var radarDimensi = new ApexCharts($("#chart-dimensi")[0],
|
||||
options = {
|
||||
chart: {
|
||||
height: 340,
|
||||
height: 240,
|
||||
type: 'radar',
|
||||
toolbar: {
|
||||
show: false
|
||||
@@ -483,7 +667,7 @@ $seriesSegmentasiKomoditas = collect($segments)->map(function ($segment) use ($c
|
||||
var radarKomponen = new ApexCharts($("#chart-komponen")[0],
|
||||
options = {
|
||||
chart: {
|
||||
height: 340,
|
||||
height: 240,
|
||||
type: 'radar',
|
||||
toolbar: {
|
||||
show: false
|
||||
@@ -576,5 +760,57 @@ $seriesSegmentasiKomoditas = collect($segments)->map(function ($segment) use ($c
|
||||
]
|
||||
});
|
||||
radarKomponen.render();
|
||||
|
||||
// Map Sebaran Petani
|
||||
var map = L.map('map-sebaran-petani').setView([-0.789, 113.921], 5);
|
||||
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
|
||||
maxZoom: 19,
|
||||
attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
|
||||
}).addTo(map);
|
||||
|
||||
const desaData = @json($mapDesaSegmentasi);
|
||||
const warnaSegmen = {
|
||||
@foreach($segments as $segment)
|
||||
"{{ $segment['name'] }}": "var(--bs-{{ $segment['color'] }})",
|
||||
@endforeach
|
||||
};
|
||||
const group = L.featureGroup().addTo(map);
|
||||
desaData.forEach(desa => {
|
||||
if (!desa.path) return;
|
||||
|
||||
const coordinates = JSON.parse(desa.path);
|
||||
|
||||
const polygon = L.polygon(coordinates, {
|
||||
color: '#666',
|
||||
weight: 1,
|
||||
fillColor: warnaSegmen[desa.segmentasi.segmen] || '#ccc',
|
||||
fillOpacity: 0.7
|
||||
});
|
||||
|
||||
polygon.desaId = desa.desa_kelurahan_id;
|
||||
polygon.bindPopup(`
|
||||
<b>Desa/Kel.: ${desa.desa_kelurahan}</b><br>
|
||||
Kec.: ${desa.kecamatan}<br>
|
||||
Kab.: ${desa.kabupaten}<br>
|
||||
<hr>
|
||||
Petani: ${desa.segmentasi.jumlah_petani}<br>
|
||||
Indeks: ${Number(desa.segmentasi.skor).toFixed(2)}<br>
|
||||
Segmen: <b>${desa.segmentasi.segmen}</b><br>
|
||||
Segmen Dominan: <b>${desa.segmentasi.segmen_dominan}</b> (${desa.segmentasi.jumlah_dominan} petani)
|
||||
`);
|
||||
polygon.on('click', function () {
|
||||
selectedDesa = desa.desa_kelurahan_id;
|
||||
tablePetani.draw();
|
||||
});
|
||||
|
||||
polygon.addTo(group);
|
||||
});
|
||||
|
||||
if (group.getLayers().length > 0) {
|
||||
map.fitBounds(group.getBounds(), {
|
||||
padding: [20, 20]
|
||||
});
|
||||
}
|
||||
|
||||
</script>
|
||||
@endpush
|
||||
Reference in New Issue
Block a user