Professional Documents
Culture Documents
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?
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).