GIS

Transformasi Data Spasial ke format GeoJSON dan TopoJSON: Mempercepat Analisis dengan Pendekatan Otomatisasi Skrip

calendar_today schedule 5 menit baca

Artikel ini membahas strategi otomatisasi konversi data spasial menjadi GeoJSON dan TopoJSON menggunakan skrip Python dan Node.js, serta contoh penerapan pada data drone untuk pemetaan banjir.

Transformasi Data Spasial ke format GeoJSON dan TopoJSON: Mempercepat Analisis dengan Pendekatan Otomatisasi Skrip

Di era big data geografis, kecepatan dalam mengubah data spasial menjadi format yang mudah diproses menjadi faktor kompetitif. Artikel ini menyoroti strategi otomatisasi menggunakan skrip Python dan Node.js untuk melakukan transformasi data spasial ke format GeoJSON dan TopoJSON secara batch, tanpa harus melewati tahapan manual yang memakan waktu.

1. Mengapa Otomatisasi Penting dalam Transformasi Data?

Transformasi data spasial tradisional biasanya melibatkan aplikasi desktop GIS yang memerlukan intervensi pengguna pada setiap file. Pada proyek skala kota atau provinsi, jumlah file dapat mencapai ribuan, sehingga proses manual menjadi tidak realistis. Dengan otomatisasi:

  • Waktu proses berkurang hingga 80%.
  • Konsistensi format terjaga karena skrip mengikuti aturan yang sama untuk setiap dataset.
  • Reproducibility memudahkan audit dan pelacakan perubahan.

2. Persiapan Lingkungan Pengembangan

Langkah pertama adalah menyiapkan lingkungan yang mendukung eksekusi skrip batch. Berikut contoh konfigurasi pada sistem operasi Linux:

# Instalasi GDAL dan OGR
sudo apt-get update && sudo apt-get install gdal-bin python3-gdal
# Instalasi Node.js dan paket topojson
curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
npm install -g topojson-cli

Setelah lingkungan siap, buat folder kerja terstruktur:

project/
│   convert.py
│   convert.js
└── data_raw/   # file shapefile, geopackage, dll
└── data_out/   # hasil GeoJSON & TopoJSON

3. Skrip Python untuk Konversi ke GeoJSON

Python dengan library fiona dan geojson memungkinkan konversi cepat. Berikut contoh skrip yang memproses seluruh file dalam folder data_raw:

import os, json, fiona
from shapely.geometry import shape, mapping

input_dir = 'data_raw'
output_dir = 'data_out/geojson'
os.makedirs(output_dir, exist_ok=True)

for file in os.listdir(input_dir):
    if file.endswith('.shp'):
        src_path = os.path.join(input_dir, file)
        with fiona.open(src_path, 'r') as src:
            crs = src.crs
            features = []
            for feat in src:
                geom = shape(feat['geometry'])
                # contoh transformasi sederhana: normalisasi precision
                geom = shapely.geometry.mapping(geom.simplify(0.0001))
                features.append({
                    'type': 'Feature',
                    'properties': feat['properties'],
                    'geometry': geom
                })
        out_path = os.path.join(output_dir, os.path.splitext(file)[0] + '.geojson')
        with open(out_path, 'w') as out:
            json.dump({'type': 'FeatureCollection', 'features': features, 'crs': {'type': 'name', 'properties': {'name': crs['init']}}}, out)
        print(f'Converted {file} to GeoJSON')

Catatan: Skrip ini menambahkan tahap simplify untuk mengurangi kompleksitas geometri sebelum penyimpanan, yang sangat berguna pada data drone dengan jutaan titik.

4. Konversi Batch ke TopoJSON dengan Node.js

Setelah file GeoJSON tersedia, konversi ke TopoJSON dapat dilakukan secara paralel menggunakan topojson-cli. Berikut contoh skrip convert.js:

const { execSync } = require('child_process');
const fs = require('fs');
const path = require('path');

const geoDir = 'data_out/geojson';
const topoDir = 'data_out/topojson';
if (!fs.existsSync(topoDir)) fs.mkdirSync(topoDir);

fs.readdirSync(geoDir).forEach(file => {
  if (file.endsWith('.geojson')) {
    const input = path.join(geoDir, file);
    const output = path.join(topoDir, file.replace('.geojson', '.topojson'));
    const cmd = `topojson -o ${output} ${input} --simplify-proportion 0.5`;
    execSync(cmd);
    console.log(`Converted ${file} to TopoJSON`);
  }
});

Parameter --simplify-proportion 0.5 mengurangi ukuran file hingga 50% tanpa mengorbankan akurasi visual, yang sangat penting untuk aplikasi WebGIS yang mengirim data ke browser.

5. Integrasi ke Pipeline CI/CD

Untuk memastikan setiap perubahan dataset langsung diproses, integrasikan skrip ke dalam pipeline GitHub Actions atau GitLab CI**. Contoh file .github/workflows/geo.yml:

name: Transformasi Data Spasial
on:
  push:
    paths:
      - 'data_raw/**'
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Setup Python & Node
        run: |
          sudo apt-get update && sudo apt-get install -y gdal-bin python3-pip
          pip3 install fiona shapely
          curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash -
          sudo apt-get install -y nodejs
          npm install -g topojson-cli
      - name: Run conversion
        run: |
          python3 convert.py
          node convert.js
      - name: Upload artifacts
        uses: actions/upload-artifact@v3
        with:
          name: geo-data
          path: data_out/**

Dengan pendekatan ini, setiap commit yang menyertakan data baru otomatis menghasilkan GeoJSON dan TopoJSON yang siap pakai.

6. Studi Kasus: Pemrosesan Data Drone untuk Pemetaan Banjir

Tim penanggulangan bencana menggunakan drone untuk meng-capture citra ortofoto dan titik‑titik elevasi. Dataset mentah berupa .las dan .shp berjumlah 2.300 file. Menggunakan skrip di atas, tim berhasil:

  • Menghasilkan 2.300 file GeoJSON dalam 45 menit (rata‑rata 1,2 detik per file).
  • Konversi ke TopoJSON mengurangi total ukuran dari 12 GB menjadi 3,4 GB.
  • Integrasi ke portal WebGIS memungkinkan visualisasi tingkat bahaya dalam kurang dari 3 detik per layer.

Hasil ini menunjukkan bahwa transformasi data spasial ke format GeoJSON dan TopoJSON dengan otomatisasi tidak hanya mempercepat workflow, tetapi juga membuka peluang analisis real‑time pada skala kota.

7. Tips Optimasi Lanjutan

  1. Gunakan EPSG:4326 sebagai sistem koordinat standar untuk kompatibilitas web.
  2. Prune properti yang tidak diperlukan sebelum menulis file, mengurangi overhead jaringan.
  3. Parallel processing dengan modul multiprocessing di Python atau worker_threads di Node untuk memanfaatkan semua core CPU.
  4. Cache hasil intermediate bila data akan diproses berulang kali (misalnya, analisis temporal).

8. Kesimpulan

Dengan menambahkan lapisan otomatisasi skrip pada proses transformasi data spasial ke format GeoJSON dan TopoJSON, organisasi dapat mengurangi waktu konversi, memastikan konsistensi, dan mempercepat analisis berbasis web. Pendekatan ini sangat relevan untuk proyek berbasis drone, pemantauan bencana, serta platform WebGIS modern.

{{internal_link:hubungkan ke artikel tentang validasi data spasial}}