feat : first commit
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
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
|
||||
};
|
||||
Reference in New Issue
Block a user