generated from MuhammadIqbalMaulana/UAS-SIG
79 lines
3.2 KiB
JavaScript
79 lines
3.2 KiB
JavaScript
const db = require('../config/database');
|
|
|
|
// Mengambil data titik warga dan mengubahnya ke format GeoJSON
|
|
const dapatkan_data_publik = async (req, res) => {
|
|
try {
|
|
// Praktik keamanan: Query secara eksplisit hanya memilih data dengan status 'Verified' agar draf data lapangan tidak bocor ke publik
|
|
const query_publik = `SELECT lat, lng FROM MUSTAHIK WHERE status_validasi = 'Verified'`;
|
|
|
|
db.all(query_publik, [], (err, rows) => {
|
|
if (err) {
|
|
console.error('Gagal mengambil data peta:', err.message);
|
|
return res.status(500).json({ error: 'Kegagalan mengambil titik koordinat' });
|
|
}
|
|
|
|
// Baris kompleks: Melakukan pemetaan array objek dari baris basis data menjadi struktur hierarki GeoJSON standar. Format FeatureCollection ini adalah spesifikasi wajib yang dipahami oleh pustaka LeafletJS untuk merender penanda di atas peta.
|
|
const geojson_data = {
|
|
type: 'FeatureCollection',
|
|
features: rows.map(row => ({
|
|
type: 'Feature',
|
|
geometry: {
|
|
type: 'Point',
|
|
coordinates: [row.lng, row.lat]
|
|
},
|
|
properties: {
|
|
keterangan: 'Lokasi Terverifikasi'
|
|
}
|
|
}))
|
|
};
|
|
|
|
res.status(200).json(geojson_data);
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error('Kesalahan sistem pemetaan:', error);
|
|
res.status(500).json({ error: 'Kegagalan pemrosesan internal server' });
|
|
}
|
|
};
|
|
|
|
// Mengambil data rumah ibadah dan mengubahnya ke format GeoJSON
|
|
const dapatkan_rumah_ibadah = async (req, res) => {
|
|
try {
|
|
const query_rumah_ibadah = `SELECT nama_tempat, jenis_agama, lat, lng, alamat FROM RUMAH_IBADAH`;
|
|
|
|
db.all(query_rumah_ibadah, [], (err, rows) => {
|
|
if (err) {
|
|
console.error('Gagal mengambil data rumah ibadah:', err.message);
|
|
return res.status(500).json({ error: 'Kegagalan mengambil titik koordinat rumah ibadah' });
|
|
}
|
|
|
|
// Baris kompleks: Selain koordinat, kita menyisipkan atribut 'properties' yang berisi nama tempat dan jenis agama agar nantinya antarmuka LeafletJS bisa menampilkan popup informasi (tooltip) saat marker diklik oleh pengguna.
|
|
const geojson_data = {
|
|
type: 'FeatureCollection',
|
|
features: rows.map(row => ({
|
|
type: 'Feature',
|
|
geometry: {
|
|
type: 'Point',
|
|
coordinates: [row.lng, row.lat]
|
|
},
|
|
properties: {
|
|
nama_tempat: row.nama_tempat,
|
|
jenis_agama: row.jenis_agama,
|
|
alamat: row.alamat
|
|
}
|
|
}))
|
|
};
|
|
|
|
res.status(200).json(geojson_data);
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error('Kesalahan sistem pemetaan rumah ibadah:', error);
|
|
res.status(500).json({ error: 'Kegagalan pemrosesan internal server' });
|
|
}
|
|
};
|
|
|
|
module.exports = {
|
|
dapatkan_data_publik,
|
|
dapatkan_rumah_ibadah
|
|
}; |