GIS 12 Jul 2026 111 views 0 komentar

Panduan EPSG Code Indonesia - Dari DGN47 sampai WGS 84 untuk Developer GIS

Panduan EPSG Code Indonesia - Dari DGN47 sampai WGS 84 untuk Developer GIS

Pernah buka shapefile di QGIS, titiknya loncat ke Afrika? Atau data dari Dinas PUPR koordinatnya aneh, angkanya ratusan ribu bukan derajat? Saya pernah kena masalah ini pas pertama kali handle data spasial pemerintah. Ternyata, masalahnya bukan di data tapi di EPSG code yang salah dipilih.

Sistem koordinat itu fondasi dari setiap project GIS. Kalau fondasinya salah, semua analisis yang kamu lakuin di atasnya juga salah. Jarak meleset, area tidak akurat, dan overlay layer bisa gagal total. Di Indonesia, masalah ini makin rumit karena kita punya sistem koordinat lokal (DGN47 dan DGN95) yang masih banyak dipake instansi pemerintah.

Kalau kamu mau belajar lebih lanjut tentang GIS, cek tutorial otomasi QGIS dengan Python scripting yang sudah saya tulis sebelumnya. Atau kalau lebih tertarik ke web development, baca juga tentang PostGIS untuk developer web.

Apa Itu EPSG Code dan Kenapa Penting?

EPSG singkatan dari European Petroleum Survey Group sekarang namanya IOGP (International Association of Oil and Gas Producers). Mereka maintain database sistem koordinat yang dipake di seluruh dunia. Setiap sistem koordinat punya kode unik, misalnya:

  • EPSG:4326 WGS 84 (GPS standard, paling umum dipake)
  • EPSG:32748 WGS 84 / UTM zone 48S (untuk Indonesia bagian barat)
  • EPSG:23845 DGN95 / Indonesia TM-3 (sistem koordinat nasional baru)
  • EPSG:32749 WGS 84 / UTM zone 49S (untuk Indonesia bagian tengah)

Bayangkan EPSG code seperti bahasa. Kalau layer A pakai "bahasa Inggris" (WGS 84) dan layer B pakai "bahasa Indonesia" (DGN95), QGIS perlu nerjemahin dulu sebelum bisa nampilin bareng. Proses nerjemahin ini namanya reprojection.

Sistem Koordinat yang Dipake di Indonesia

Di Indonesia, ada beberapa sistem koordinat yang umum dipake. Masing-masing punya konteks penggunaan yang beda:

1. WGS 84 (EPSG:4326)

Ini sistem koordinat global yang dipake GPS. Kalau kamu buka Google Maps, koordinatnya pakai WGS 84. Formatnya derajat desimal, contoh: -6.2088, 106.8456 (Jakarta). Mayoritas data dari OpenStreetMap, Google, dan API modern pakai ini.


# Contoh koordinat WGS 84
lat = -6.2088   # lintang (derajat)
lon = 106.8456  # bujur (derajat)

2. DGN47 (Datum 1947)

Ini sistem koordinat lama yang dipake era kolonial Belanda dan masih banyak dipake di peta-peta lama pemerintah. Datum titik nolnya di New Datum Indies (NDI). EPSG code-nya tergantung proyeksi yang dipake:

  • EPSG:32748 DGN47 / UTM zone 48S
  • EPSG:23866 DGN47 / Indonesia TM-3 105 E

Perbedaan dengan WGS 84 bisa sampai 200-300 meter. Ini yang bikin data peta lama sering "geser" kalau overlay sama data GPS.

3. DGN95 (Datum 1995)

Pengganti DGN47 yang lebih akurat. Ditetapkan BPN (Badan Pertanahan Nasional) sebagai datum resmi Indonesia sejak 1995. EPSG code utamanya:

  • EPSG:23845 DGN95 / Indonesia TM-3 95 E (untuk pusat Jakarta)
  • EPSG:23846 DGN95 / Indonesia TM-3 105 E
  • EPSG:23847 DGN95 / Indonesia TM-3 115 E
  • EPSG:23848 DGN95 / Indonesia TM-3 125 E

Perbedaan DGN95 dengan WGS 84 sekitar 20-30 meter, jauh lebih kecil dibanding DGN47. Untuk project baru, seharusnya pakai DGN95 atau langsung WGS 84.

UTM Zone untuk Indonesia

Indonesia membentang dari 95 BT sampai 141 BT, jadi masuk beberapa zone UTM. UTM (Universal Transransverse Mercator) membagi bumi jadi 60 zone, masing-masing lebar 6 derajat. Indonesia masuk zone 46 sampai 54 (semua selatan, jadi pakai S):

  • Zone 46S (EPSG:32746) Sabang, Aceh Barat
  • Zone 47S (EPSG:32747) Medan, Padang, Palembang
  • Zone 48S (EPSG:32748) Jakarta, Bandung, Semarang, Surabaya (paling umum)
  • Zone 49S (EPSG:32749) Bali, Mataram, Kupang
  • Zone 50S (EPSG:32750) Makassar, Palu
  • Zone 51S (EPSG:32751) Manado, Ambon
  • Zone 52S (EPSG:32752) Jayapura
  • Zone 53S (EPSG:32753) Merauke
  • Zone 54S (EPSG:32754) Pulau terdekat Papua

Cara gampang tentuin zone: bagi bujur dengan 6, lalu bulatkan ke bawah. Tambah 30 (karena selatan). Contoh Jakarta (106.8 BT): 106.8 / 6 = 17.8, dibulatkan ke bawah = 17. 17 + 30 = 47... wait, itu salah. Rumusnya: zone = floor(bujur / 6) + 31. Jadi 106.8 / 6 = 17.8, floor = 17, 17 + 31 = 48. Jakarta = zone 48S.

Indonesia TM-3 (Transverse Mercator 3 Derajat)

Selain UTM yang pakai lebar zone 6 derajat, Indonesia juga punya sistem TM-3 yang pakai lebar zone 3 derajat. Ini lebih akurat untuk wilayah yang luas karena distorsinya lebih kecil. Zona TM-3 untuk DGN95:

  • EPSG:23845 95 E (Banda Aceh, Sumatera Barat)
  • EPSG:23846 105 E (Jakarta, Jawa Barat)
  • EPSG:23847 115 E (Kalimantan Selatan, Bali)
  • EPSG:23848 125 E (Sulawesi, Maluku)

Data dari BPN dan instansi pertanahan biasanya pakai TM-3. Koordinatnya berupa angka besar, misal: X=680000, Y=9310000. Ini bukan derajat, tapi meter dari titik pusat zone.

Cara Reprojection di QGIS

Di QGIS, ada beberapa cara buat ganti sistem koordinat:

Cara 1: Save As dengan CRS Berbeda


# Klik kanan layer -> Export -> Save Features As
# Format: GeoJSON / Shapefile
# CRS: pilih EPSG yang diinginkan
# Contoh: dari DGN47 (EPSG:23866) ke WGS 84 (EPSG:4326)

Cara ini bikin file baru dengan CRS yang benar. Data asli tidak berubah.

Cara 2: Reproject Layer (Processing Toolbox)


# Buka Processing Toolbox -> Vector general -> Reproject layer
# Input layer: pilih layer yang mau di-reproject
# Target CRS: pilih CRS tujuan
# Output: simpan ke file baru

Cara ini sama-sama bikin file baru, tapi bisa dipake di batch processing atau model builder.

Cara 3: Set Project CRS (On-the-fly)

Di QGIS 3.x, reprojection on-the-fly aktif secara default. Artinya, kamu bisa set project CRS ke WGS 84, lalu tambah layer dengan CRS berbeda QGIS otomatis nampilin semuanya di CRS yang sama. Tapi ini cuma untuk tampilan, bukan mengubah data asli.

Reprojection dengan Python (pyproj)

Untuk automasi atau integrasi di aplikasi web, kamu bisa pakai library pyproj di Python:


from pyproj import Transformer

# Dari DGN47 TM-3 (EPSG:23866) ke WGS 84 (EPSG:4326)
transformer = Transformer.from_crs("EPSG:23866", "EPSG:4326", always_xy=True)

# Contoh koordinat DGN47 (dalam meter)
x_dgn47 = 500000.0
y_dgn47 = 9250000.0

# Transform ke WGS 84 (derajat)
lon, lat = transformer.transform(x_dgn47, y_dgn47)
print(f"Longitude: {lon:.6f}, Latitude: {lat:.6f}")
# Output: Longitude: 105.xx, Latitude: -6.xx

Kalau kamu pakai PostGIS, reprojection bisa langsung di query SQL:


-- Reprojection dari DGN95 TM-3 ke WGS 84
SELECT 
    ST_AsText(
        ST_Transform(
            ST_SetSRID(ST_MakePoint(680000, 9310000), 23846),
            4326
        )
    ) AS wgs84_point;

-- Hasil: POINT(106.845... -6.208...)

Kalau kamu tertarik lebih dalam tentang PostGIS dan query spasial, baca juga tutorial PostGIS spatial query untuk aplikasi web.

Cara Cek EPSG Code dari File Data

Sering nemu file shapefile atau GeoJSON tanpa info CRS? Ini cara ngeceknya:

Pakai QGIS


# Klik kanan layer -> Properties -> Information tab
# Lihat "CRS"   akan tampil EPSG code dan nama sistem koordinat
# Kalau tampil "USER:100001" berarti CRS custom, bukan standar EPSG

Pakai ogrinfo (GDAL)


# Install GDAL kalau belum
sudo apt install gdal-bin

# Cek CRS dari shapefile
ogrinfo -al data.shp | grep "Coordinate System"

# Cek CRS dari GeoJSON
ogrinfo -al data.geojson | grep "Coordinate System"

# Contoh output:
# Coordinate System is:
# GEOGCS["WGS 84", DATUM["WGS_1984", ...], AUTHORITY["EPSG","4326"]]

Pakai pyproj


import fiona

# Buka shapefile dan cek CRS
with fiona.open("data.shp") as src:
    print(src.crs)          # {'init': 'epsg:4326'}
    print(src.crs_epsg)     # 4326 (atau None kalau tidak standar)

Kesalahan Umum dan Cara Menghindarinya

1. "Data loncat ke Afrika"

Ini terjadi kalau data pakai projected CRS (misal UTM, koordinat dalam meter) tapi QGIS mengira itu geographic CRS (derajat). Contoh: koordinat X=500000, Y=9250000 (UTM) dianggap sebagai longitude 500000 derajat yang jelas di luar bumi.

Fix: Set CRS layer yang benar (klik kanan layer -> Set CRS).

2. "Data geser 200 meter"

Ini biasanya karena campur DGN47 dengan WGS 84. Offset-nya konsisten sekitar 200-300 meter ke arah tertentu.

Fix: Reproject salah satu layer supaya datumnya sama.

3. "Koordinat negatif untuk Indonesia"

Indonesia ada di belahan selatan (lintang negatif) dan di timur GMT (bujur positif). Kalau kamu lihat latitude positif untuk Jakarta, itu salah. Atau kalau longitude negatif untuk wilayah Indonesia, juga salah.

4. "Unit jadi aneh setelah reproject"

WGS 84 pakai derajat, UTM pakai meter. Kalau kamu hitung jarak pakai koordinat WGS 84 tanpa konversi, hasilnya dalam derajat bukan meter. Pakai ST_Distance_Sphere() di PostGIS atau geopy.distance di Python untuk jarak yang benar.

Panduan Cepat: Pilih EPSG yang Mana?

KebutuhanEPSG yang DipakeAlasan
Data GPS / API modernEPSG:4326 (WGS 84)Standar global, kompatibel semua software
Peta Indonesia skala besarEPSG:32748 (UTM 48S)Akurasi tinggi, unit meter, cocok untuk Jawa
Data pertanahan BPNEPSG:23845-23848 (DGN95 TM-3)Datum resmi Indonesia, sesuai regulasi
Web mapping (Leaflet, Mapbox)EPSG:3857 (Web Mercator)Standar web, kompatibel dengan tile server
Data peta lama (pre-1995)EPSG:23866 (DGN47 TM-3)Datum lama, perlu reprojection ke DGN95/WGS84

Tips untuk Developer Web

Kalau kamu bikin aplikasi webGIS, ada beberapa best practice:

  • Simpan di database pakai WGS 84 (EPSG:4326) kompatibel dengan Leaflet, Mapbox, dan Google Maps tanpa reprojection
  • Tampilkan di Web Mercator (EPSG:3857) ini standar tile server (OpenStreetMap, Google Satellite). Leaflet dan Mapbox otomatis handle ini
  • Lakukan reprojection di database lebih efisien daripada di frontend. PostGIS punya ST_Transform() yang cepat
  • Simpan SRID asli di kolom terpisah biar kamu tahu data aslinya pakai CRS apa sebelum di-reproject

-- Contoh tabel dengan kolom SRID asli
CREATE TABLE spatial_data (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    original_srid INTEGER,
    geom GEOMETRY(Geometry, 4326)  -- selalu simpan sebagai WGS 84
);

-- Insert data dari DGN95 TM-3 dengan reprojection otomatis
INSERT INTO spatial_data (name, original_srid, geom)
VALUES (
    'Kantor Kelurahan',
    23846,
    ST_Transform(
        ST_SetSRID(ST_MakePoint(680000, 9310000), 23846),
        4326
    )
);

Untuk yang mau belajar lebih dalam tentang PostGIS dan spatial database, cek juga tutorial PostGIS untuk developer web.

Kesimpulan

Sistem koordinat itu bukan hal yang bikin pusing kalau kamu paham konsep dasarnya. Intinya ada tiga hal yang perlu diingat:

  • EPSG:4326 (WGS 84) default untuk semua data baru, GPS, dan web mapping
  • UTM zone untuk pengukuran jarak dan area yang akurat (meter, bukan derajat)
  • DGN47/DGN95 datum Indonesia yang masih dipake instansi pemerintah, perlu reprojection kalau mau dicampur dengan data modern

Selalu cek CRS sebelum mulai analisis. Lebih baik spend 5 menit cek EPSG daripada 5 jam debug hasil yang salah. Kalau kamu nemu data tanpa info CRS, coba cek koordinatnya kalau angkanya ratusan ribu, itu kemungkinan projected CRS (UTM atau TM-3). Kalau angkanya di bawah 180, itu geographic CRS (derajat).

Punya pengalaman menarik atau masalah dengan sistem koordinat di project GIS kamu? Share di kolom komentar, siap saya bantu troubleshoot.


Bagikan artikel ini:

Komentar (0)

Belum ada komentar. Jadilah yang pertama memberikan tanggapan!

Tinggalkan Komentar