chapter_02_lab.
md 2026-05-01
chapter_02_lab
LAB MANUAL - CHAPTER 2
Mastering SRID, Measurement, and Data Types
Lab Objective: Peserta mampu mendefinisikan tabel dengan aturan SRID yang ketat, memahami perbedaan
hasil kalkulasi antara Geometry dan Geography, serta mahir menggunakan fungsi proyeksi (ST_Transform)
untuk mendapatkan ukuran yang akurat.
Penting - Anti-Error Tip:
Selalu ingat kaidah standar OGC/PostGIS:
X = Longitude (Garis Bujur / Barat-Timur)
Y = Latitude (Garis Lintang / Utara-Selatan)
Koordinat Jakarta adalah -6.2 (Lat), 106.8 (Long). Maka di PostGIS ditulis: POINT(106.8 -6.2) ->
POINT(X Y).
Step 1: Membuat Tabel dengan SRID & Tipe Data yang Ketat
Kita akan membandingkan pendekatan Geometry biasa dengan Geography.
1. Jalankan script ini di DBeaver untuk membuat tabel pengiriman barang (Logistics):
SQL
CREATE TABLE delivery_points (
id SERIAL PRIMARY KEY,
location_name VARCHAR(50),
-- Kolom 1: Geometry standar (WGS 84 / Derajat)
geom_4326 GEOMETRY(Point, 4326),
-- Kolom 2: Geography (Otomatis WGS 84, Kalkulasi Meter)
geog_point GEOGRAPHY(Point, 4326)
);
Instructor Note: Penggunaan GEOMETRY(Point, 4326) adalah best practice untuk memblokir
masuknya tipe data Polygon atau SRID lain yang salah ke dalam kolom titik ini.
Step 2: Insert Data (Simulasi Jarak Jauh)
Kita akan memasukkan titik koordinat Jakarta dan Bandung.
Jakarta: Long 106.8228, Lat -6.1756
1/4
chapter_02_lab.md 2026-05-01
Bandung: Long 107.6191, Lat -6.9175
1. Jalankan perintah INSERT berikut (kita isi kedua kolom spasial dengan data yang sama):
SQL
INSERT INTO delivery_points (location_name, geom_4326, geog_point)
VALUES
('Gudang Jakarta', ST_GeomFromText('POINT(106.8228 -6.1756)', 4326),
ST_GeomFromText('POINT(106.8228 -6.1756)', 4326)),
('Cabang Bandung', ST_GeomFromText('POINT(107.6191 -6.9175)', 4326),
ST_GeomFromText('POINT(107.6191 -6.9175)', 4326));
Step 3: Perangkap Kalkulasi Jarak (Geometry vs Geography)
Sekarang, kita asumsikan manajer operasional bertanya: "Berapa jarak lurus dari Gudang Jakarta ke Cabang
Bandung?"
1. Mari kita hitung menggunakan kolom Geometry terlebih dahulu:
SQL
SELECT
a.location_name AS asal,
b.location_name AS tujuan,
ST_Distance(a.geom_4326, b.geom_4326) AS jarak_geometry
FROM delivery_points a, delivery_points b
WHERE [Link] = 1 AND [Link] = 2;
❌ Hasil/Output: Anda akan mendapat angka 1.08...
Tentu saja jarak Jakarta-Bandung bukan 1 meter atau 1 km. Angka 1.08 itu adalah satuan Derajat
Cartesian. Angka ini tidak berguna untuk business logic.
2. Sekarang mari kita hitung menggunakan kolom Geography:
SQL
SELECT
a.location_name AS asal,
b.location_name AS tujuan,
ST_Distance(a.geog_point, b.geog_point) AS jarak_geography_meter
FROM delivery_points a, delivery_points b
WHERE [Link] = 1 AND [Link] = 2;
✅ Hasil/Output: Anda akan mendapat angka 119854.76...
2/4
chapter_02_lab.md 2026-05-01
Karena tipe Geography otomatis memproyeksikan bumi bulat, hasilnya langsung akurat dalam satuan
Meter (~119 KM).
Step 4: Solusi Transformasi Proyeksi (ST_Transform)
Bagaimana jika arsitektur database kita terlanjur hanya memakai tipe Geometry(Point, 4326) tapi kita
butuh hasil ukuran dalam meter? Solusinya adalah proyeksi on-the-fly menggunakan ST_Transform.
Untuk area Jakarta/Jawa Barat, zona UTM yang akurat adalah UTM Zone 48S (EPSG: 32748).
1. Jalankan kalkulasi menggunakan ST_Transform:
SQL
SELECT
a.location_name AS asal,
b.location_name AS tujuan,
ST_Distance(
ST_Transform(a.geom_4326, 32748), -- Proyeksi Jakarta ke UTM 48S
ST_Transform(b.geom_4326, 32748) -- Proyeksi Bandung ke UTM 48S
) AS jarak_transform_meter
FROM delivery_points a, delivery_points b
WHERE [Link] = 1 AND [Link] = 2;
✅ Hasil/Output: Anda akan mendapat angka sekitar 119782.88... Meter. Angkanya sedikit berbeda
dengan Geography, namun ini sangat valid dan lebih cepat diproses oleh CPU.
Step 5: Fixing Unknown SRID (Troubleshooting)
Sering terjadi aplikasi backend menembak data tanpa menyebutkan SRID-nya (SRID = 0).
1. Buat data dummy tanpa SRID (SRID 0):
SQL
SELECT ST_GeomFromText('POINT(106.0 -6.0)') AS bad_geom;
2. Coba transform data tersebut (Pasti akan ERROR):
SQL
-- INI AKAN ERROR
SELECT ST_Transform(ST_GeomFromText('POINT(106.0 -6.0)'), 32748);
3/4
chapter_02_lab.md 2026-05-01
❌ Error Output: "Input geometry has unknown (0) SRID" (PostGIS tidak tahu titik awalnya WGS 84 atau
sistem lain).
3. Cara Fix (ST_SetSRID): Kita harus beri tahu PostGIS secara paksa bahwa data tersebut adalah 4326
sebelum di-transform.
SQL
-- INI CARA YANG BENAR
SELECT ST_Transform(
ST_SetSRID(ST_GeomFromText('POINT(106.0 -6.0)'), 4326),
32748
);
✅ Hasil: Query berhasil dieksekusi tanpa error.
[End of Lab 2]
4/4