Simple
SQL
SQL,
atau
Structured
Query
Language,
adalah
sebuah
fasilitas
untuk
melakukan
kueri
berupa
perintah
untuk
menampilkan,
memutakhirkan
data
dalam
relational
database.
Sebelumnya
kita
sudah
berhasil
memuat
data
spasial
ke
dalam
geo- database,
yang
tersimpan
dalam
PostgreSQL/PostGIS.
Selanjutnya
kita
akan
mendalami
penggunaan
SQL
dalam
mengelola
data
spasial.
Sebagai
contoh,
gunakan
SQL
untuk
menjawab
pertanyaan
berikut
ini:
Tampilkan
nama-nama
kota
tetangga
dari
Kota
New
York?
Untuk
menjawabnya
kita
akan
menggunakan
jendela
SQL
query
yang
terdapat
dalam
aplikasi
PgAdmin.
Buka
aplikasi
PgAdmin
(klik
link
PgAdmin),
kemudian
bukan
jendela
SQL
dengan
menekan
tombol
SQL
.
kemudian
ketik
perintah
SQL
berikut
ini:
SELECT
name
FROM
nyc_neighborhoods;
Dan
klik
tombol
execute
query.
Dan
hasilnya
akan
tampil
sebagai
berikut;
Untuk
memahami
lebih
lanjut
tentang
SQL,
mari
kita
mulai
dengan
4
(empat)
kata
kunci
dalam
SQL,
yakni:
SELECT;
mengembalikan/menyajikan
baris
data
sebagai
respon
dari
kueri
INSERT;
untuk
menyisipkan
baris
data
ke
dalam
sebuah
tabel UPDATE;
memutakhirkan
baris
data
dalam
sebuah
tabel DELETE;
menghapus
baris
data
dari
sebuah
tabel
Kita
akan
banyak
menggunakan
perintah
SELECT
untuk
menjawab
pertanyaaan
terkait
fungsi-fungsi
spasial.
1.1. SELECT
Query
Struktur
perintah
kueri
SELECT,
secara
umum
adalah
sebagai
berikut:
SELECT
[diikuti
nama
field]
FROM
[diikuti
nama
tabel] WHERE
[diikuti
definisi
klausa/syarat/kondisi]
Nama
field
adalah
nama-nama
kolom
dalam
sebuah
tabel
atau
lebih
yang
dihubungkan
melalui
kesamaan
atribut
kunci
atau
kondisi,
sedangkan
kondisi
merupakan
batasan
yang
harus
dipenuhi
oleh
baris
nilai
yang
dikembalikan/disajikan.
Contoh
perintah
SQL
berikut:
Apakah
nama-nama
kota
yang
bertetanggaan
di
New
York
dan
berada
di
wilayah
Brooklyn?
Menterjemahkan
pertanyaan
ini
ke
dalam
SQL
adalah
dengan
menambahkan
kondisi
pada
sintaks
SQL
untuk
menampilkan
nama-nama
kota
di
sekitar
New
York,
sehingga
perintah
SQL
menjadi
sebagai
berikut:
SELECT
name
FROM
nyc_neighborhoods
WHERE
boroname
=
Brooklyn;
Menggunakan
data
nyc_census_blocks,
berikut
contoh-contoh
pertanyaan
yang
dijawab
menggunakan
perintah
SQL.
Berapakah
populasi
Kota
New
York?
SELECT
Sum(popn_total)
AS
population
FROM
nyc_census_blocks;
8008278
Berapakan
popupasi
di
Bronx?
SELECT
Sum(popn_total)
AS
population
FROM
nyc_census_blocks
WHERE
boroname
=
The
Bronx;
1332650
Berapakan
rata-rata
jiwa
yang
tinggal
dalam
setiap
unit
rumah
di
Kota
New
York?
SELECT
Sum(popn_total)/Sum(hous_total)
AS
pop_per_house
FROM
nyc_census_blocks;
2.6503540522400804
Selain
sum,
fungsi
agregasi
lain
yang
juga
dapat
digunakan
dalam
SQL
adalah:
avg()
untuk
memperoleh
nilai
rata-rata,
dan
count()
untuk
menghitung
jumlah
baris
data
(records)
dalam
sebuah
tabel.
1.2. Geometri
Pada
sesi
sebelumnya
kita
telah
berhasil
memuat
data
ke
dalam
geo-database.
Sebelum
lebih
lanjut
bekerja
dengan
data
tersebut,
berikut
akan
dikenalkan
perintah
SQL
untuk
membuat
table
dan
menyisipkan
data
ke
dalam
tabel
tersebut.
Silahkan
salin
perintah
SQL
berikut
ke
dalam
jendela
editor
dalam
PgAdmin.
CREATE TABLE geometries (name varchar, geom geometry); INSERT INTO geometries VALUES ('Point', 'POINT(0
0)'), ('Linestring', 'LINESTRING(0
0,
1
1,
2
1,
2
2)'), ('Polygon', 'POLYGON((0
0,
1
0,
1
1,
0
1,
0
0))'), ('PolygonWithHole', 'POLYGON((0
0,
10
0,
10
10,
0
10,
0
0),(1
1,
1
2,
2
2,
2
1,
1
1))'), ('Collection', 'GEOMETRYCOLLECTION(POINT(2
0),POLYGON((0
0,
1
0,
1
1,
0
1,
0
0)))'); SELECT Populate_Geometry_Columns(); SELECT name, ST_AsText(geom) FROM geometries;
Perintah
di
atas
membuat
tabel
dengan
nama
geometries,
kemudian
dengan
menggunakan
perintah
INSERT,
ditambahkan
data
pada
field
nama
dengan
tipe
data
geometry
;
titik
(Point),
garis
(Linestring),
poligon
(Polygon),
poligon
dengan
poliline
di
tengahnya
(PolygonWithHole)
dan
koleksi
(Collection).
Data
yang
telah
ditambahkan
kemudian
dipanggil
dengan
perintah
SELECT,
sehingga
hasilnya
sebagai
berikut:
1.3. Tabel
Metadata
Mengacu
pada
spesifikasi
Simple
Features
for
SQL
(SFSQL),
PostGIS
menyertakan
dua
tabel
yang
menyimpan
informasi
geometry
dan
referensi
yang
tersedia
dalam
database.
Kedua
tabel
tersebut
adalah:
Mari
kita
lihat
tabel
geometry_columns
dalam
database,
dengan
mengetik
perintah
SQL
berikut
ini
pada
jendela
editor:
SELECT
*
FROM
geometry_columns;
Hasilnya
tampak
seperti
pada
gambar
di
bawah
ini:
Tabel
geometry_columns
mengandung
informasi
penting
diantaranya
mengenai
nama-nama
tabel
yang
menyimpan
data
spasial,
proyeksi,
tipe
serta
dimensi
data
yang
diperlukan
pada
proses
kueri
menggunakan
perintah
SQL.
1.4. Penggambaran
Obyek
Nyata
di
permukaan
Bumi
Spesifikasi
SFSQL
merupakan
acuan
standar
bagi
PosGIS
dalam
menggambarkan
obyek
nyata
di
permukaan
bumi.
Pada
contoh
tabel
geometries
yang
sudah
dibuat
sebelumnya
mengandung
beberapa
obyek
dengan
tipe
geometri
yang
berbeda-beda.
Untuk
menyajikan
informasi
umum
mengenai
masing-masing
obyek
dapat
menggunakan
fungsi-fungsi
sebagai
berikut:
1. ST_GeometryType(geometry)
mengembalikan
tipe
geometri
dari
obyek.
2. ST_NDims(geometry)
mengembalikan
dimensi
dari
obyek.
3. ST_SRID(geometry)
mengembalikan
kode
referensi
spasial
dari
setiap
obyek.
Contoh
perintah
SQL
berikut:
SELECT
name,
ST_GeometryType(geom),
ST_NDims(geom),
ST_SRID(geom)
FROM
geometries;
Name | st_geometrytype | st_ndims | st_srid ----------------+-----------------------+----------+--------Point | ST_Point | 2 | -1 Polygon | ST_Polygon | 2 | -1 PolygonWithHole | ST_Polygon | 2 | -1 Collection | ST_GeometryCollection | 2 | -1 Linestring | ST_LineString | 2 | -1
1.5. Points
Point,
merepresentasikan
sebuah
posisi
tunggal
pada
permukaan
bumi,
yang
digambarkan
sebagai
koordinat
tunggal.
Tipe
geometri
points
digunakan
jika
objek
yang
digambarkan
terlalu
kecil
dalam
sebuah
obyek
yang
memiliki
bentuk
dan
ukuran
seperti
poligon,
yang
sangat
erat
kaitannya
dengan
skala.
Sebagai
ilustrasi,
sebuah
kota
dalam
batasan
skala
tertentu
(skala
kecil),
hanya
dapat
digambarkan
dalam
bentuk
titik
(point),
sedangkan
pada
skala
besar
digambarkan
sebagai
obyek
yang
detil
atau
misalnya
dalam
tipe
geometri
poligon.
Untuk
menampilkan
koordinat
obyek
Point
dari
tabel
geometries,
menggunakan
perintah
SQL
sebagai
berikut:
SELECT
ST_AsText(geom)
FROM
geometries
WHERE
name
=
'Point';
POINT(0
0)
Fungsi
spasial
lainnya
yang
dapat
digunakan
untuk
menampilkan
obyek
berupa
titik
adalah:
ST_X(geometry)
mengembalikan
nilai
ordinat
X
ST_Y(geometry)
mengembalikan
nilai
ordinat
Y
Dengan
demikian,
untuk
menampilkan
koordinat
dari
sebuah
titik,
digunakan
perintah
SQL
sebagai
berikut:
SELECT
ST_X(geom),
ST_Y(geom)
FROM
geometries
WHERE
name
=
'Point';
Silahkan
coba
perintah
SQL
berikut
ini
dan
perhatikan,
hasil
yang
dikembalikan:
SELECT
name,
ST_AsText(the_geom)
FROM
nyc_subway_stations
LIMIT
1;
1.6. Linestrings
Linestring
berupa
lintasan/alur
yang
menghubungkan
beberapa
lokasi
yang
dibentuk
oleh
dua
atau
lebih
titik.
Pada
skala
tertentu,
jalan
dan
sungai
dapat
digambarkan
dengan
tipe
geometri
ini.
Linestring
terdiri
dari
dua
jenis
yakni
closed
jika
titik
awal
dan
akhir
berada
pada
korodinat
yang
sama/bertampalan,
serta
simple,
jika
tidak
saling
memotong
atau
saling
bertampalan.
Berikut
perintah
SQL
untuk
menampilkan
obyek
linestring
dari
tabel
geomtris:
SELECT
ST_AsText(geom)
FROM
geometries
WHERE
name
=
'Linestring';
LINESTRING(0
0,
1
1,
2
1,
2
2)
Beberapa
fungsi
spasial
yang
dapat
digunakan
dalam
perintah
SQL
ketika
kita
bekerja
dengan
obyek
dengan
tipe
geometri
linestring;
ST_Length(geometry)
mengembalikan
panjang
dari
obyek
linestrings
ST_StartPoint(geometry)
menampilkan
koordinat
titik
awal
ST_EndPoint(geometry)
menampilkan
koordinat
titik
akhir
ST_NPoints(geometry)
mengembalikan
jumlah
koordinat
(titik)
yang
membentuk
linestring.
Dengan
demikian
perintah
untuk
menghitung
panjang
dari
sebuah
linestring,
sebagai
berikut:
SELECT
ST_Length(geom)
FROM
geometries
WHERE
name
=
'Linestring';
3.41421356237309
1.7. Polygon
Sebuah
poligon
merepresentasikan
obyek
yang
memiliki
area/luasan.
Wilayah
administrasi,
bangunan,
taman,
tutupan
lahan,
dan
sejenisnya
umumnya
disajikan
sebagai
poligon.
Pada
skala
besar,
jalan
dan
sungai
dapat
disajikan
dalam
poligon
juga.
Perintah
SQL
berikut
akan
menampilkan
obyek
dengan
tipe
geometri
poligon:
SELECT
ST_AsText(geom)
FROM
geometries
WHERE
name
LIKE
'Polygon%';
POLYGON((0 0, 1 0, 1 1, 0 1, 0 0)) POLYGON((0 0, 10 0, 10 10, 0 10, 0 0),(1 1, 1 2, 2 2, 2 1, 1 1))
Beberapa
fungsi
spasial
yang
dapat
digunakan
dalam
SQL,
saat
berasosiasi
dengan
oyek
poligon.
ST_Area(geometry)
mengembalikan
area
ST_NRings(geometry)
mengembalikan
jumlah
ring
(biasanya
1,
kecuali
jika
ada
lubang
di
dalam
poligon
tersebut.)
ST_ExteriorRing(geometry)
mengembalikan
ring
terluar
sebagai
sebuah
linestrings.
ST_InteriorRingN(geometry,n)
mengembalikan
ring
interior
sebagai
sebuah
linestrings.
ST_Perimeter(geometry)
mengembalikan
nilai
panjang
dari
ring,
Contoh
penggunaan
dalam
perintah
SQL:
SELECT name, ST_Area(geom) FROM geometries WHERE name LIKE 'Polygon%';
Polygon PolygonWithHole 1 99
1.8. Collection
Terdapat
empat
tipe
collection,
yakni:
MultiPoint,
koleksi
dari
beberapa
titik
(point)
MultiLineString,
koleksi
dari
beberapa
linestring
MultiPolygon,
koleksi
dari
beberapa
poligon
GeometryCollection,
koleksi
dari
beberapa
tipe
geometri.
Berikut
perintah
SQL
yang
mengembalikan
obyek
dengan
tipe
geometri
collection;
SELECT
name,
ST_AsText(geom)
FROM
geometries
WHERE
name
=
'Collection';
GEOMETRYCOLLECTION(POINT(2
0),POLYGON((0
0,
1
0,
1
1,
0
1,
0
0)))
Beberapa
fungsi
spasial
yang
dapat
digunakan
dalam
SQL,
ketika
bekerja
dengan
collection,
yakni:
ST_NumGeometries(geometry)
mengembalikan
jumlah
bagian-bagian
dari
collection.
ST_GeometryN(geometry,n)
mengembalikan
bagian
tertentu
sesuai
nilai
n
ST_Area(geometry)
mengembalikan
total
area
dari
seluruh
poligon
ST_Length(geometry)
mengembalikan
panjang
dari
dari
semua
bagian
yan
linear
(berbentuk
garis).