Cara Guna PostGIS dalam ServBay: Tambah Keupayaan Geospatial pada PostgreSQL
PostGIS
ialah ekstensi canggih untuk pangkalan data PostgreSQL yang menambah sokongan terhadap jenis data geospatial, fungsi dan indeksnya. Ini bermakna anda boleh menyimpan maklumat titik, garisan, poligon dan geometri lain serta menjalankan kueri serta analisis spatial kompleks dalam pangkalan data anda. Bagi pembangun web yang perlu mengendalikan peta, perkhidmatan lokasi atau apa-apa aplikasi berkaitan lokasi, PostGIS adalah alat yang wajib ada.
ServBay ialah persekitaran pembangunan web tempatan yang direka khusus untuk macOS, di mana perisian PostgreSQL telah terintegrasi sepenuhnya – termasuklah ekstensi PostGIS yang sudah tersedia. Ini menjadikan proses penggunaan PostGIS di persekitaran tempatan lebih mudah tanpa perlu kompilasi manual atau pemasangan kebergantungan tambahan.
Artikel ini menerangkan langkah demi langkah cara mengaktifkan dan mula menggunakan PostGIS dalam persekitaran ServBay, membantu anda menambah ciri geospatial pada projek anda dengan pantas.
Syarat Asas
Sebelum menggunakan PostGIS, pastikan anda telah mencukupi perkara berikut:
- Pasang dan jalankan ServBay: Pastikan anda telah selesai memasang ServBay pada macOS.
- Aktifkan dan mulakan pakej PostgreSQL: Dalam panel kawalan ServBay, semak bahawa pakej PostgreSQL telah diaktifkan dan sedang berjalan. Jika belum, cari PostgreSQL di panel kawalan ServBay, tandakan aktif, kemudian hidupkan pakej tersebut.
- Akses pangkalan data PostgreSQL: Ketahui cara menyambung ke pangkalan data PostgreSQL dalam ServBay dengan menggunakan alat baris perintah
psql
atau klien grafik seperti TablePlus/pgAdmin. Secara lalai, anda boleh sambung ke pangkalan data tempatan dengan perintahpsql -U postgres
.
Pemasangan & Pengaktifan Ekstensi PostGIS
ServBay sudah pun menyediakan fail ekstensi PostGIS – anda hanya perlu “aktifkan” pada pangkalan data yang ingin digunakan, tanpa perlu muat turun tambahan.
Berikut langkah mengaktifkan ekstensi PostGIS:
Sambung ke pangkalan data PostgreSQL yang dituju: Buka aplikasi terminal dan gunakan perintah
psql
untuk menyambung ke pangkalan data anda. Gantikanyour_username
dengan nama pengguna anda (cth.postgres
), danyour_database
dengan nama pangkalan data sasaran.bashpsql -U your_username -d your_database
1Jika ingin aktifkan pada pengguna dan pangkalan data lalai
postgres
, anda cuma perlu:bashpsql -U postgres
1Cipta ekstensi PostGIS dalam pangkalan data: Setelah berjaya bersambung, jalankan perintah SQL berikut dalam antara muka arahan
psql
:sqlCREATE EXTENSION postgis;
1Perintah ini akan memasang dan mengkonfigurasi semua objek yang diperlukan oleh PostGIS (seperti jenis data baharu, fungsi, operator dan sebagainya) dalam pangkalan data yang sedang digunakan.
Sahkan pemasangan PostGIS: Dalam antara muka
psql
, anda boleh gunakan perintah\dx
untuk menyenaraikan semua ekstensi yang terpasang dalam pangkalan data semasa.sql\dx
1Jika ekstensi PostGIS telah berjaya diaktifkan, anda akan dapat lihat entri
postgis
dan maklumat versinya dalam senarai.List of installed extensions Name | Version | Schema | Description -----------+---------+------------+-------------------------------------------------------------- plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language postgis | 3.3.2 | public | PostGIS geometry and geography spatial types and functions (2 rows)
1
2
3
4
5
6(Perhatian: nombor versi PostGIS mungkin berbeza bergantung versi ServBay)
Sekarang ekstensi PostGIS telah berjaya diaktifkan pada pangkalan data PostgreSQL pilihan anda, dan anda sudah boleh memanfaatkan keupayaan geospatial yang ditawarkan.
Konfigurasi Data PostGIS
Selepas PostGIS diaktifkan, anda bebas untuk mencipta jadual baru dengan lajur geospatial, atau tambah lajur spatial ke jadual sedia ada. PostGIS menyediakan dua jenis utama data spatial: geometry
dan geography
. Tipe geometry
digunakan untuk pengiraan dalam sistem koordinat rata, manakala geography
lebih sesuai bagi koordinat sfera seperti data latitud-longitud.
Cipta Jadual Dengan Lajur Geospatial
Contoh berikut menunjukkan cara mencipta sebuah jadual locations
yang mempunyai lajur spatial jenis titik (point).
Cipta jadual: Jalankan SQL berikut dalam
psql
atau klien grafik:sqlCREATE TABLE locations ( id SERIAL PRIMARY KEY, name VARCHAR(100), geom GEOMETRY(Point, 4326) );
1
2
3
4
5GEOMETRY(Point, 4326)
: Menetapkan lajurgeom
sebagai jenis dataGEOMETRY
dengan geometriPoint
.4326
ialah SRID (Spatial Reference Identifier) bagi sistem koordinat WGS84, iaitu standard untuk GPS dan kebanyakan peta dalam talian (OpenStreetMap, Google Maps dll).- Anda boleh gunakan jenis geometri lain seperti
LineString
,Polygon
,MultiPoint
atau SRID berbeza mengikut keperluan.
Masukkan data contoh: Gunakan fungsi-fungsi PostGIS untuk memasukkan objek geometri. Fungsi biasa ialah
ST_GeomFromText()
bagi membina objek dari teks WKT (Well-Known Text).sqlINSERT INTO locations (name, geom) VALUES ('Ibu Pejabat ServBay', ST_GeomFromText('POINT(116.4074 39.9042)', 4326)), -- Contoh koordinat Beijing ('Pejabat ServBay Shanghai', ST_GeomFromText('POINT(121.4737 31.2304)', 4326)); -- Contoh koordinat Shanghai
1
2
3Perhatian: Urutan pada WKT ialah
POINT(longitud latitud)
.
Cipta Indeks Spatial
Indeks spatial sangat penting untuk prestasi, terutamanya jika anda ada banyak data spatial dan perlu menjalankan kueri julat, inklusi, atau nearest neighbor dengan cekap. Indeks spatial utama dalam PostGIS ialah GiST (Generalized Search Tree).
Bina indeks GiST: Jalankan SQL berikut untuk mencipta indeks pada lajur
geom
:sqlCREATE INDEX idx_locations_geom ON locations USING GIST (geom);
1Arahan ini mewujudkan indeks GiST pada lajur spatial dalam jadual
locations
. PostgreSQL akan menggunakan indeks ini untuk mempercepat kueri spatial secara automatik.
Jalankan Kueri Geospatial Dengan PostGIS
PostGIS menawarkan ratusan fungsi untuk manipulasi dan analisis data spatial. Berikut ialah beberapa contoh kueri biasa untuk pembangunan aplikasi web:
Kira Jarak Antara Dua Titik
Mengira jarak lurus antara dua lokasi pada peta.
sql
SELECT ST_Distance(
ST_GeomFromText('POINT(116.4074 39.9042)', 4326), -- Titik A
ST_GeomFromText('POINT(121.4737 31.2304)', 4326) -- Titik B
);
1
2
3
4
2
3
4
ST_Distance()
: Mengira jarak antara dua objek geometri. Jika guna jenisgeometry
dengan SRID 4326 (koordinat geografi), nilai yang dikembalikan berupa darjah, bukan meter. Untuk ukuran lebih tepat dalam meter, gunakan jenisgeography
atau fungsiST_Distance(geography_a, geography_b, use_spheroid)
.
Semak Hubungan Kemasukan (Inclusion)
Uji adakah sesuatu geometri berada dalam geometri lain, seperti memeriksa adakah titik terletak dalam kawasan poligon tertentu.
sql
SELECT name FROM locations
WHERE ST_Contains(
ST_GeomFromText('POLYGON((116.0 39.0, 117.0 39.0, 117.0 40.0, 116.0 40.0, 116.0 39.0))', 4326), -- Contoh kawasan segi empat
geom
);
1
2
3
4
5
2
3
4
5
ST_Contains(geometry A, geometry B)
: Memulangkan true jika A sepenuhnya mengandungi B.
Cari Lokasi Paling Hampir
Menentukan lokasi terdekat dari sesuatu titik dengan cekap menggunakan indeks GiST.
sql
SELECT name, ST_Distance(geom, ST_GeomFromText('POINT(116.4074 39.9042)', 4326)) AS distance
FROM locations
ORDER BY geom <-> ST_GeomFromText('POINT(116.4074 39.9042)', 4326)
LIMIT 5;
1
2
3
4
2
3
4
- Operator
<->
ialah operator “jarak” khas dalam PostGIS yang memanfaatkan indeks GiST untuk mempercepat proses mencari objek terdekat.
Analisis Geospatial Dengan PostGIS
Selain kueri asas, PostGIS juga menyediakan pelbagai fungsi analitik seperti buffer, intersection, dan union pada geometri.
Analisis Buffer
Mewujudkan kawasan sekeliling (buffer) pada satu geometri dalam jarak tertentu.
sql
SELECT ST_Buffer(geom, 0.01) -- Buffer dalam darjah, 0.01 darjah lebih kurang 1.1km
FROM locations
WHERE name = 'Ibu Pejabat ServBay';
1
2
3
2
3
ST_Buffer(geometry, distance)
: Membina buffer pada jarak tertentu. Untukgeometry
SRID 4326, unit ialah darjah.
Analisis Intersection
Mengira bahagian bertindih antara dua atau lebih geometri dan mengembalikan hasilnya sebagai geometri baru.
sql
SELECT ST_Intersection(
ST_GeomFromText('POLYGON((116.0 39.0, 117.0 39.0, 117.0 40.0, 116.0 40.0, 116.0 39.0))', 4326),
geom
)
FROM locations
WHERE name = 'Ibu Pejabat ServBay';
1
2
3
4
5
6
2
3
4
5
6
ST_Intersection(geometry A, geometry B)
: Kembalikan bahagian bertindih antara dua geometri.
Analisis Union
Gabungkan pelbagai objek geometri menjadi satu objek gabungan.
sql
SELECT ST_Union(geom)
FROM locations;
1
2
2
ST_Union(geometry set)
: Menggabungkan semua objek geometri dalam set yang diberikan.
Visualisasikan Data Geospatial
Visualisasi data spatial pangkalan data PostGIS menjadi satu keperluan lazim dalam pembangunan web. Anda boleh gunakan perisian GIS desktop atau pustaka peta web.
Guna Perisian GIS Desktop (Contoh: QGIS)
QGIS merupakan perisian GIS sumber terbuka popular yang boleh bersambung terus ke pangkalan data PostGIS dan memaparkan data spatial.
Sambung ke PostgreSQL ServBay:
- Buka QGIS.
- Pilih menu
Layer
->Add Layer
->Add PostGIS Layers...
. - Dalam tetingkap pop-up, klik
New
untuk mencipta sambungan baru. - Isi butiran sambungan:
- Name: Beri nama seperti
ServBay PostGIS
. - Host:
localhost
atau127.0.0.1
. - Port: Secara lalai ialah
5432
. - Database: Namakan pangkalan data di mana PostGIS telah diaktifkan.
- Username: Nama pengguna anda (
postgres
sebagai contoh). - Password: Katalaluan pangkalan data anda (jika ada).
- Name: Beri nama seperti
- Klik
Test Connection
untuk memastikan dapat tersambung. - Klik
OK
untuk simpan, kemudian pada tetingkap utama klikConnect
.
Muatkan data spatial:
- Selepas berjaya, anda akan lihat semua jadual dalam pangkalan data.
- Cari jadual yang ada lajur spatial (contoh:
locations
). QGIS mengenal pasti lajur spatial secara automatik. - Pilih jadual berkenaan, klik
Add
dan kemudiannyaClose
. Data spatial anda akan dipaparkan di paparan peta QGIS.
Guna Pustaka Peta Web (Contoh: Leaflet)
Anda boleh gunakan pustaka JavaScript seperti Leaflet, OpenLayers atau Mapbox GL JS untuk paparan peta di web. Data spatial diambil daripada PostGIS melalui perkhidmatan belakang (backend) dan dibekalkan kepada frontend dalam format seperti GeoJSON.
Simpan fail HTML berikut di sub-direktori bawah direktori root servis web ServBay (cth. /Applications/ServBay/www/postgis-map/index.html
), kemudian akses melalui laman demo lokal ServBay (cth. postgis-map.servbay.demo
).
html
<!DOCTYPE html>
<html>
<head>
<title>Contoh Leaflet dengan PostGIS ServBay</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://unpkg.com/leaflet/dist/leaflet.css" />
<script src="https://unpkg.com/leaflet/dist/leaflet.js"></script>
<style>
#map { height: 400px; width: 100%; } /* Tetapkan saiz kontena peta */
</style>
</head>
<body>
<h1>Contoh Visualisasi Data PostGIS (Leaflet)</h1>
<div id="map"></div>
<script>
// Inisialisasi peta dengan titik tengah dan tahap zum
// Titik tengah contoh ditetapkan berhampiran Beijing
var map = L.map('map').setView([39.9042, 116.4074], 10);
// Tambah lapisan OpenStreetMap
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '© OpenStreetMap contributors'
}).addTo(map);
// Contoh: tambah penanda secara manual (dalam aplikasi sebenar data diambil dari PostGIS)
// Lokasi ini bersesuaian dengan 'Ibu Pejabat ServBay' yang dimasukkan sebelum ini
var marker = L.marker([39.9042, 116.4074]).addTo(map)
.bindPopup('<b>Ibu Pejabat ServBay</b><br>Lokasi contoh')
.openPopup();
// Dalam projek sebenar, data akan diambil dari backend PostGIS sebagai GeoJSON
/*
fetch('/api/locations') // Backend anda menyediakan endpoint /api/locations untuk GeoJSON
.then(response => response.json())
.then(data => {
L.geoJSON(data).addTo(map);
});
*/
</script>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Ini cuma asas penggunaan Leaflet. Untuk ambil data dari PostGIS, anda perlu menulis perkhidmatan backend (menggunakan PHP, Node.js, Python — semuanya disokong ServBay), menyambung ke pangkalan data, membuat kueri spatial, memaparkan data sebagai GeoJSON dan menyediakan endpoint HTTP yang boleh dicapai frontend.
Soalan Lazim (FAQ)
S: Dapat ralat semasa
CREATE EXTENSION postgis;
, apa yang perlu dilakukan?- J: Pastikan anda telah berjaya sambung ke pangkalan data PostgreSQL, dan pengguna anda mempunyai hak untuk mencipta ekstensi (biasanya akaun
postgres
ada hak penuh). Juga, pastikan pakej PostgreSQL ServBay sedang berjalan. Jika masih ada isu, semak fail log ServBay dan PostgreSQL untuk maklumat lebih lanjut.
- J: Pastikan anda telah berjaya sambung ke pangkalan data PostgreSQL, dan pengguna anda mempunyai hak untuk mencipta ekstensi (biasanya akaun
S: Apakah SRID 4326? Boleh guna SRID lain?
- J: SRID (Spatial Reference Identifier) ialah kod berangka yang menjadi penanda unik kepada sistem rujukan koordinat. 4326 ialah SRID untuk sistem koordinat WGS84 (latitud-longitud), paling banyak digunakan dalam peta web. Sudah tentu boleh guna SRID lain, contohnya sistem unjuran Web Mercator (SRID 3857). Pilihan SRID bergantung kepada sumber data dan keperluan aplikasi. Jika anda bekerja dengan peta web, 4326 atau 3857 sangat sesuai.
S: Apakah perbezaan antara jenis
geometry
dangeography
?- J:
geometry
adalah untuk data Cartesian rata (pengiraan jarak/luas berdasarkan geometri Euclidean), manakalageography
untuk data sfera (latitud-longitud) dan mengambil kira kelengkungan bumi — pengiraan lebih tepat, terutama untuk kawasan yang luas. Jika anda hanya berurusan dengan kawasan kecil atau tidak perlukan ketepatan tinggi,geometry
lebih mudah dan cepat. Untuk data global dan perlukan ketepatan tinggi, pilihgeography
.
- J:
Rumusan
PostGIS memperkasakan PostgreSQL dengan keupayaan pengurusan data geospatial, menjadi asas pembinaan aplikasi lokasi moden. Dengan ServBay, anda boleh mengaktifkan dan menggunakan PostGIS dengan mudah di persekitaran macOS tanpa konfigurasi rumit.
Artikel ini telah menerangkan cara untuk mengaktifkan ekstensi PostGIS dalam ServBay, mencipta dan mengurus data spatial, menjalankan pelbagai jenis kueri serta analisis, dan juga memperkenalkan kaedah visualisasi. Dengan kemahiran asas ini, anda sudah boleh mula membina aplikasi web berkeupayaan spatial dalam ServBay. Terokai dokumentasi rasmi PostGIS untuk menemui lebih banyak fungsi canggih yang menanti untuk anda gunakan!