get(); $ibadahCount = RumahIbadah::count(); $totalJiwa = $miskin->sum('jumlah_orang'); $totalKK = $miskin->sum('jumlah_kk'); $pdf = Pdf::loadView('exports.laporan-miskin', compact('miskin', 'ibadahCount', 'totalJiwa', 'totalKK')); $pdf->setPaper('a4', 'landscape'); return $pdf->download('laporan-keluarga-miskin.pdf'); } public function radiusMiskinPDF(int $ibadahId, int $radius) { $ibadah = RumahIbadah::findOrFail($ibadahId); $allMiskin = RumahMiskin::all(); $miskin = $allMiskin->filter(fn($m) => $this->haversineDistance( $ibadah->latitude, $ibadah->longitude, $m->latitude, $m->longitude ) <= $radius); $totalJiwa = $miskin->sum('jumlah_orang'); $totalKK = $miskin->sum('jumlah_kk'); $pdf = Pdf::loadView('exports.laporan-radius', compact('ibadah', 'miskin', 'radius', 'totalJiwa', 'totalKK')); $pdf->setPaper('a4', 'portrait'); $filename = 'laporan-radius-' . Str::slug($ibadah->nama) . '-' . $radius . 'm.pdf'; return $pdf->download($filename); } private function haversineDistance(float $lat1, float $lon1, float $lat2, float $lon2): float { $R = 6371000; $dLat = deg2rad($lat2 - $lat1); $dLon = deg2rad($lon2 - $lon1); $a = sin($dLat / 2) ** 2 + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin($dLon / 2) ** 2; return 2 * $R * asin(sqrt($a)); } }