Suatu ketika saya dihadapkan pada banyak file geojson. Karena kebutuhan tertentu maka dirasa perlu untuk mengekstrak koordinatnya saja dari file-file tersebut.
Langkah:
- Membuat list file json ke sebuah file "list_json_files.txt"
- Membaca file json dan mendapatkan koordinat
- menyimpan ke database
Membuat file "list_json_files.txt"
<?php
function getJsonFiles($directory, $outputFile) {
$files = [];
// Menggunakan RecursiveDirectoryIterator untuk menelusuri semua folder dan sub-folder
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));
foreach ($iterator as $file) {
if ($file->isFile() && strtolower($file->getExtension()) === 'json') {
$files[] = $file->getPathname();
}
}
// Menyimpan hasil path file JSON ke dalam file teks
file_put_contents($outputFile, implode(PHP_EOL, $files));
echo "Path file JSON telah disimpan di: " . $outputFile . PHP_EOL;
}
// Tentukan folder utama dan file output
$directory = 'geojson'; // Ganti dengan path folder utama jika diperlukan
$outputFile = "list_json_files.txt";
// Panggil fungsi
getJsonFiles($directory, $outputFile);
Membaca file json berdasar file list yang telah dibuat
<?php
//extract.php
$filePath = "list_json_files.txt"; // Nama file yang berisi daftar path JSON
// Pastikan file ada sebelum membaca
if (file_exists($filePath)) {
$lines = file($filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // Baca setiap baris
foreach ($lines as $file) {
$jsonData = file_get_contents($file);
// Decode JSON menjadi array asosiatif
$data = json_decode($jsonData, true);
if ($data && $data['type'] === 'FeatureCollection' && isset($data['features'])) {
$coordinates = $data['features'][0]['geometry']['coordinates'];
} else {
echo "\033[31m [Invalid] \033[0m GeoJSON format - ".$file." \n";
}
if ($coordinates) {
$koordinat = json_encode($coordinates);
$nama_file = $filename = pathinfo($file, PATHINFO_FILENAME);
echo $nama_file;
echo "\033[32m [Berhasil] \033[0m\n";
} else {
echo "\033[31m [Error] \033[0m baca json - ".$file." \n";
}
//exit();
}
} else {
echo "File tidak ditemukan: $filePath" . PHP_EOL;
}
Contoh di atas akan echo nama file json atau kode wilayah, yang akan disimpan ke database bersama geometri batas wilayah
Simpan di supabase
Buat table dengan nama geojson, kemudian buat strukturnya seperti ini. 2 kolom di atas adalah bawaan dari supabase
Jangan lupa bikin policy, disable LRS. biar bisa insert
Berikut script lengkapnya, jangan lupa ganti config supabasenya:
<?php
ini_set('memory_limit', '-1'); // Unlimited (gunakan dengan hati-hati)
// Supabase API Config
$supabaseUrl = 'https://nda5e.supabase.co';
$supabaseKey = 'ndi4s3nda5m03';
$table = "geojson";
$filePath = "list_json_files.txt"; // Nama file yang berisi daftar path JSON
function insertToSupabase($url, $key, $table, $data, $no, $kode) {
$endpoint = "$url/rest/v1/$table";
$headers = [
"Content-Type: application/json",
"apikey: $key",
"Authorization: Bearer $key",
"Prefer: return=minimal" // return=minimal agar tidak mengembalikan response panjang
];
$ch = curl_init($endpoint);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode == 201 || $httpCode == 200) {
echo "\033[32m [ ".$no." Sukses ] kode .$kode. berhasil disimpan ke Supabase.\033[0m\n";
} else {
echo "\033[31m [Gagal] ' .$kode. ' gagal disimpan: \033[0m $response \n";
exit();
}
}
// Pastikan file ada sebelum membaca
if (file_exists($filePath)) {
$lines = file($filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // Baca setiap baris
$no = 0;
foreach ($lines as $file) {
$no++;
$jsonData = file_get_contents($file);
$data = json_decode($jsonData, true);
if ($data && $data['type'] === 'FeatureCollection' && isset($data['features'])) {
$coordinates = $data['features'][0]['geometry']['coordinates'];
} else {
echo "\033[31m [Invalid] \033[0m GeoJSON format - $file \n";
continue;
}
if ($coordinates) {
$koordinat = json_encode($coordinates);
$nama_file = pathinfo($file, PATHINFO_FILENAME);
//echo "\033[32m [Berhasil] Baris ke-$no: $nama_file \033[0m\n";
// Kirim data ke Supabase
$dataInsert = [
"kode" => $nama_file,
"koordinat" => $koordinat
];
insertToSupabase($supabaseUrl, $supabaseKey, $table, $dataInsert, $no, $nama_file);
} else {
echo "\033[31m [Error] \033[0m Gagal membaca JSON - $file \n";
}
unset($jsonData, $data, $koordinat);
}
} else {
echo "\033[31m [ File tidak ditemukan ] \033[0m $filePath" . PHP_EOL;
}
Contoh ketika dijalankan:
Hasil database
Top comments (0)