Jenis Data Spasial
Titik, garis, dan poligon dalam SQL.
Jenis Data Spasial adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
Apa Itu Data Spasial
Data spasial menjelaskan lokasi, bentuk, dan area di dunia nyata. Berbeda dari angka atau teks biasa, nilai spasial memiliki makna geometris — titik pada peta, segmen jalan, atau batas suatu negara.
PostGIS adalah ekstensi PostgreSQL yang menambahkan tipe dan fungsi data spasial yang canggih, sehingga basis data Anda menjadi sistem informasi geografis (GIS) yang lengkap.
-- Enable the PostGIS extension
CREATE EXTENSION IF NOT EXISTS postgis;Tipe GEOMETRY
Tipe spasial inti dalam PostGIS adalah geometri. Tipe ini menyimpan bentuk dalam ruang koordinat datar (Euklides). Anda dapat menentukan subtipe seperti POINT, LINESTRING, atau POLYGON sebagai batasan saat membuat kolom.
Menentukan SRID (ID Referensi Spasial) bersama subtipe memberi tahu PostGIS sistem koordinat yang digunakan oleh data Anda.
CREATE TABLE locations (
id SERIAL PRIMARY KEY,
name TEXT,
geom geometry(POINT, 4326)
);Memasukkan POINT
POINT merepresentasikan satu lokasi dengan koordinat X (bujur) dan Y (lintang). Fungsi ST_GeomFromText mengonversi teks berformat WKT menjadi nilai geometri.
SRID 4326 adalah sistem koordinat WGS 84 yang digunakan perangkat GPS di seluruh dunia.
INSERT INTO locations (name, geom)
VALUES
('Eiffel Tower', ST_GeomFromText('POINT(2.2945 48.8584)', 4326)),
('Big Ben', ST_GeomFromText('POINT(-0.1246 51.5007)', 4326)),
('Colosseum', ST_GeomFromText('POINT(12.4922 41.8902)', 4326));
SELECT name, ST_AsText(geom) AS wkt FROM locations;Tipe LINESTRING
LINESTRING adalah urutan dua titik atau lebih yang dihubungkan oleh segmen lurus. Tipe ini ideal untuk merepresentasikan jalan, sungai, atau fitur linear apa pun.
Setiap pasangan angka dalam WKT merupakan satu titik sudut (bujur lintang). PostGIS menyimpan seluruh jalur sebagai satu nilai geometri.
CREATE TABLE roads (
id SERIAL PRIMARY KEY,
name TEXT,
path geometry(LINESTRING, 4326)
);
INSERT INTO roads (name, path)
VALUES (
'High Street',
ST_GeomFromText(
'LINESTRING(-0.125 51.500, -0.120 51.502, -0.115 51.505)',
4326
)
);
SELECT name, ST_Length(path) AS length_degrees FROM roads;Tipe POLYGON
POLYGON menentukan area tertutup. Batas luarnya adalah sebuah cincin — LINESTRING tertutup dengan titik pertama dan terakhir yang identik. Poligon juga dapat memiliki cincin bagian dalam (lubang) untuk merepresentasikan area seperti danau di dalam taman.
Semua cincin harus tertutup: ulangi koordinat awal di bagian akhir.
CREATE TABLE zones (
id SERIAL PRIMARY KEY,
name TEXT,
area geometry(POLYGON, 4326)
);
INSERT INTO zones (name, area)
VALUES (
'Central Park Approx',
ST_GeomFromText(
'POLYGON((-73.9817 40.7681, -73.9580 40.7681,
-73.9580 40.7964, -73.9817 40.7964,
-73.9817 40.7681))',
4326
)
);
SELECT name, ST_Area(area) AS area_sq_deg FROM zones;GEOGRAPHY vs GEOMETRY
PostGIS menyediakan dua kelompok tipe spasial: geometri menggunakan bidang Kartesius datar, sedangkan geografi memodelkan Bumi sebagai sferoid melengkung.
Gunakan geografi saat Anda memerlukan jarak dunia nyata yang akurat dalam meter di area yang luas. Gunakan geometri saat Anda bekerja dalam sistem koordinat terproyeksi lokal atau memerlukan kinerja maksimum.
CREATE TABLE cities (
id SERIAL PRIMARY KEY,
name TEXT,
geog geography(POINT, 4326)
);
INSERT INTO cities (name, geog) VALUES
('New York', ST_GeogFromText('POINT(-74.0060 40.7128)')),
('London', ST_GeogFromText('POINT(-0.1278 51.5074)'));
-- Distance in metres using geography
SELECT
a.name AS from_city,
b.name AS to_city,
ROUND(ST_Distance(a.geog, b.geog)::NUMERIC) AS distance_m
FROM cities a, cities b
WHERE a.name = 'New York' AND b.name = 'London';Teks yang Dikenal Umum (WKT) dan Biner yang Dikenal Umum (WKB)
Data spasial dapat diserialisasikan dalam dua format standar. Teks yang Dikenal Umum (WKT) mudah dibaca manusia: POINT(2.29 48.86). Biner yang Dikenal Umum (WKB) adalah representasi biner ringkas yang digunakan secara internal dan untuk pemindahan data.
PostGIS menyediakan ST_AsText dan ST_AsBinary untuk mengonversi antara penyimpanan internal dan format-format ini.
SELECT
name,
ST_AsText(geom) AS wkt,
ST_AsEWKT(geom) AS ewkt,
encode(ST_AsBinary(geom), 'hex') AS wkb_hex
FROM locations
LIMIT 2;MULTIPOINT, MULTILINESTRING, MULTIPOLYGON
PostGIS juga mendukung tipe geometri jamak yang mengelompokkan beberapa bentuk sejenis ke dalam satu nilai. Tipe ini berguna ketika satu fitur dunia nyata terdiri atas bagian-bagian terpisah — misalnya kepulauan yang dimodelkan sebagai MULTIPOLYGON.
Semua fungsi spasial standar bekerja dengan cara yang sama pada geometri jamak.
SELECT ST_AsText(
ST_GeomFromText(
'MULTIPOLYGON(
((0 0, 4 0, 4 4, 0 4, 0 0)),
((10 10, 14 10, 14 14, 10 14, 10 10))
)'
)
) AS multi_poly;
SELECT ST_NumGeometries(
ST_GeomFromText(
'MULTIPOLYGON(
((0 0, 4 0, 4 4, 0 4, 0 0)),
((10 10, 14 10, 14 14, 10 14, 10 10))
)'
)
) AS part_count;GEOMETRYCOLLECTION
GEOMETRYCOLLECTION adalah tipe spasial paling umum — tipe ini dapat menampung campuran titik, garis, dan poligon dalam satu nilai. Fleksibilitas ini berguna ketika kumpulan data dapat berisi tipe geometri heterogen yang disimpan dalam kolom yang sama.
Anda dapat mengekstrak anggota individual dengan ST_GeometryN.
SELECT ST_AsText(
ST_GeomFromText(
'GEOMETRYCOLLECTION(
POINT(1 1),
LINESTRING(0 0, 1 1, 2 2),
POLYGON((0 0, 3 0, 3 3, 0 3, 0 0))
)'
)
) AS collection;
SELECT ST_AsText(
ST_GeometryN(
ST_GeomFromText(
'GEOMETRYCOLLECTION(POINT(1 1), LINESTRING(0 0, 1 1))'
),
1
)
) AS first_member;Indeks Spasial dengan GIST
Kueri spasial yang memeriksa ketercakupan atau kedekatan harus membandingkan geometri setiap baris — yang berpotensi memindai jutaan bentuk. Indeks GIST mempercepat proses ini secara drastis dengan mengindeks kotak pembatas geometri, sehingga PostgreSQL dapat melewati baris yang mustahil cocok.
Selalu buat indeks GIST pada kolom geometri atau geografi yang sering Anda kueri.
-- Create a GIST index on a geometry column
CREATE INDEX idx_locations_geom
ON locations
USING GIST (geom);
-- PostgreSQL will now use the index for spatial operators
EXPLAIN ANALYZE
SELECT name
FROM locations
WHERE ST_DWithin(
geom,
ST_GeomFromText('POINT(2.3 48.9)', 4326),
1.0
);Membaca Properti Geometri
PostGIS menyediakan fungsi pengakses untuk mengekstrak properti dari geometri apa pun. ST_X dan ST_Y mengembalikan koordinat sebuah titik, ST_SRID mengembalikan ID referensi spasial, dan ST_GeometryType mengembalikan nama subtipe.
Fungsi-fungsi ini penting untuk memeriksa dan memvalidasi data spasial.
SELECT
name,
ST_X(geom) AS longitude,
ST_Y(geom) AS latitude,
ST_SRID(geom) AS srid,
ST_GeometryType(geom) AS geom_type,
ST_IsValid(geom) AS is_valid
FROM locations;Uji Cepat
Uji pemahaman Anda tentang tipe data spasial PostGIS.
Ringkasan Pelajaran
Dalam pelajaran ini, Anda mempelajari tipe data spasial inti yang disediakan oleh PostGIS. Anda mempelajari bahwa POINT, LINESTRING, dan POLYGON adalah tiga subtipe geometri mendasar, sedangkan varian geometri jamak (MULTIPOINT, MULTILINESTRING, MULTIPOLYGON) dan GEOMETRYCOLLECTION yang serbaguna mencakup bentuk yang lebih kompleks.
Anda melihat perbedaan antara tipe geometri datar dan tipe geografi berbentuk sferoid, serta cara memilih di antara keduanya. Teks yang Dikenal Umum (WKT) memungkinkan Anda membaca dan menulis nilai spasial sebagai teks yang mudah dibaca manusia, sedangkan indeks GIST menjaga kueri spasial tetap cepat dalam skala besar. Fungsi pengakses seperti ST_X, ST_SRID, dan ST_GeometryType memungkinkan Anda memeriksa nilai geometri apa pun secara langsung dalam SQL.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Jenis Data Spasial” gratis?
Ya — teks lengkap “Jenis Data Spasial” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Jenis Data Spasial”?
Titik, garis, dan poligon dalam SQL. Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Academy?
Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Jenis Data Spasial” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Jenis Data Spasial
- Jarak dan Tetangga Terdekat
- Penggabungan dan Pencakupan Spasial
- Indeks Spasial (GiST)