Pendahuluan

Moving Object Database menangani histori pergerakan objek — perubahan kontinu (berbeda dari model spatio-bitemporal pada catatan sebelumnya yang berfokus pada perubahan diskret). Dikembangkan oleh Erwig, Güting, Schneider, dkk. sejak 1999. Moving points dan moving regions dipandang sebagai entitas berdimensi 3 (2D + waktu) atau lebih tinggi, yang struktur dan perilakunya ditangkap dengan memodelkannya sebagai abstract data type (ADT).

  • Moving point: ekstensi (bentuk) objek tidak penting, setiap objek dimodelkan sebagai titik (mis. kendaraan pada sistem transportasi berbasis GIS).
  • Moving region: ekstensi objek penting; region dapat berubah bentuk/ukuran seiring objek bergerak.

Model dibagi menjadi dua level:

  • Abstract model (konseptual) — dibahas pada bagian pertama.
  • Discrete model (logikal/implementasi) — dibahas pada bagian kedua.

Bagian 1: The Abstract Model

Sistem Tipe Abstrak

Type ConstructorSignature
int, real, string, bool→ BASE
point, points, line, region→ SPATIAL
instant→ TIME
rangeBASE ∪ TIME → RANGE
moving, intimeBASE ∪ SPATIAL → TEMPORAL
  • Spatial types: point (titik pada bidang Euclidean), points (himpunan berhingga titik), line (himpunan berhingga kurva kontinu yang tidak self-intersecting kecuali di titik awal/akhir), region (himpunan berhingga bagian yang saling disjoint/faces, masing-masing bisa memiliki hole). Untuk points, line, region: himpunan boleh kosong.
  • Time types: instant merepresentasikan satu titik waktu; waktu dianggap linear dan kontinu (isomorfik ke bilangan real).
  • Range type constructor range(α): mendefinisikan himpunan interval pada tipe . Contoh: range(real) = himpunan interval real; range(instant) = himpunan interval waktu (disebut juga periods).
  • Temporal type constructor moving(α): mendefinisikan himpunan tak-hingga pasangan (instant, nilai bertipe ) — fungsi dari waktu ke nilai. intime(α): mendefinisikan satu pasangan (instant, nilai bertipe ).

Prinsip Desain Operasi

  1. Sedapat mungkin generik: pandangan terpadu terhadap kumpulan tipe; klasifikasi tipe non-temporal menjadi point type (mis. int, real, point) dan point set types (mis. range(int), points, line, region).
  2. Konsistensi antara operasi non-temporal dan temporal: pertama, rancang operasi pada tipe non-temporal secara cermat; kedua, secara sistematis perluas operasi tersebut menjadi varian temporal melalui teknik lifting (lihat bawah).
  3. Menangkap fenomena menarik: selain teori himpunan dan logika orde-pertama, juga penting hubungan urutan, topologi, dan ruang metrik.

Klasifikasi Tipe Non-Temporal

Point TypePoint Set Types
1D discreteIntegerintrange(int)
1D discreteBooleanboolrange(bool)
1D discreteStringstringrange(string)
1D continuousRealrealrange(real)
1D continuousTimeinstantperiods
2D Space—pointpoints, line, region

Operasi pada Tipe Non-Temporal

Notasi: = variabel bertipe point type (nilai ); = variabel bertipe point set type (nilai ).

Predikat

OperasiSignatureSemantik
isempty / Titik tak-terdefinisi () / himpunan kosong ()
=,≠,<,≤,≥,>Perbandingan nilai point type
=,≠Perbandingan himpunan
before
intersects
inside / /
touches
attached
overlaps
on_border
in_interior

Operasi Himpunan

intersection, minus, union — analog operasi himpunan matematika pada point type/point set type, dengan penanganan khusus untuk perbedaan dimensi (hasil bertipe minimum dari kedua argumen menurut urutan point < points < line < region). Khusus untuk line/region: crossings (titik isolasi hasil irisan dua line), touch_points (irisan boundary region/line dalam bentuk points), common_border (irisan boundary region/line dalam bentuk line).

Agregasi, Properti Numerik, Jarak & Arah

OperasiSignatureSemantik
min, maxInfimum/supremum himpunan (tipe 1D)
avgRata-rata (untuk range(α) numerik)
avg/centerTitik pusat untuk points/line/region
singleElemen dari himpunan singleton
no_componentsJumlah komponen terhubung maksimal (face pada region, komponen pada line, interval pada range)
sizeTotal panjang interval (1D) / total panjang kurva (line) / luas (region)
perimeterregionKeliling boundary region
distance / Jarak minimum antarpasangan titik dari kedua argumen
directionpoint×pointSudut garis dari titik pertama ke kedua (derajat, relatif garis horizontal)

Studi Kasus 1: Cities, Countries, Rivers, Highways

City     = (name:string, population:int, center:point)
Country  = (name:string, area:region)
River    = (name:string, route:line)
Highway  = (name:string, route:line)

Contoh query — titik perpotongan highway A1 dan sungai Rhine:

select single(crossings(R.route, H.route))
from River R, Highway H
where R.name = 'Rhine' and H.name = 'A1'

Operasi pada Tipe Temporal

Proyeksi ke Domain dan Range

OperasiSignatureSemantik
deftimemoving(α)Interval waktu ketika fungsi temporal terdefinisi
rangevaluesmoving(α)Proyeksi ke range (untuk tipe 1D)
locationsmoving(point/points)Proyeksi lokasi ke bidang
trajectorymoving(point/points)Proyeksi lintasan ke bidang
routesmoving(line)Proyeksi rute
traversedmoving(line/region)Proyeksi area yang dilalui
inst, valintime(α)Akses komponen instant / nilai dari intime

Interaksi dengan Nilai Domain/Range

OperasiSignatureSemantik
atinstantmoving(α)×instantNilai fungsi pada satu instant (mirip timeslice basis data temporal)
atperiodsmoving(α)×periodsMembatasi fungsi ke himpunan interval waktu tertentu
initial, finalmoving(α)Pasangan (instant, nilai) pertama/terakhir
presentmoving(α)×instant/periodsApakah fungsi terdefinisi pada instant/periode tertentu
atmoving(α)×Membatasi ke nilai/subset range tertentu
atmin, atmaxmoving(α)Membatasi ke waktu saat nilai minimal/maksimal
passesmoving(α)×Apakah fungsi pernah mencapai nilai tertentu

Rate of Change (Laju Perubahan)

OperasiSignatureSemantik
derivativemoving(real)Turunan:
speedmoving(point)Kecepatan pada setiap waktu
mdirectionmoving(point)Arah gerak (sudut tangen lintasan terhadap sumbu-x)
turnmoving(point)Perubahan arah pada setiap waktu
velocitymoving(point)Turunan gerak sebagai fungsi bernilai vektor

Studi Kasus 2: Flight dan Weather

Flight  = (id:string, from:string, to:string, route:mpoint)
Weather = (id:string, kind:string, area:mregion)

(mpoint = moving(point), mregion = moving(region), dst.)

Contoh — area di Prancis yang terdampak badai Lizzy:

select area(intersection(traversed(W.area), C.area))
from Weather W, Country C
where W.id = 'Lizzy' and C.name = 'France'

Operator konstruksi konstanta waktu: year, month, day, hour, minute, second (masing-masing → periods, mengembalikan interval tertutup satu satuan waktu, mis. year(1900) = interval dari awal hingga akhir tahun 1900), dan period(periods,periods)→periods untuk menggabungkan.

Lifting

Teknik sistematis untuk mengubah operasi non-temporal menjadi varian temporalnya. Untuk operasi op dengan signature , versi lifted-nya memiliki signature:

Contoh 1 — operasi kesetaraan real × real → bool memiliki versi lifted: moving(real)×real→moving(bool), real×moving(real)→moving(bool), dan moving(real)×moving(real)→moving(bool).

Contoh 2 — operasi intersection: point×region→point memiliki lifted version: moving(point)×region→moving(point), point×moving(region)→moving(point), dan moving(point)×moving(region)→moving(point).

Operator when

Membatasi nilai temporal (moving object) ke waktu-waktu ketika suatu kondisi arbitrer terpenuhi:

Sintaks: arg1 op[arg2]. Contoh — badai Lizzy hanya ketika ukurannya lebih dari 500 km²:

select W.area when[FUN (r:region) area(r)>500]
from Weather W
where W.id = 'Lizzy'

Operasi pada Kumpulan Objek: decompose

Membuat komponen suatu point set type dapat diakses langsung dalam query (komponen = interval untuk range, titik untuk points, komponen terhubung untuk line, face untuk region, bagian kontinu maksimal untuk temporal type):

Contoh — letusan gunung berapi yang berlangsung lebih dari 2 hari:

select eruption
from Volcano decompose[eruptions, eruption]
where duration(deftime(eruption)) > 2 * duration(day(2000,1,1))

Bagian 2: The Discrete Model

Sistem Tipe Model Diskret

Model diskret adalah implementasi dari abstract model. Karena representasi tepat dari objek tak-hingga (himpunan titik kontinu, kurva) memerlukan pilihan aproksimasi, bisa ada lebih dari satu model diskret yang valid — bagian ini membahas salah satu pilihan yang umum dipakai.

Type ConstructorSignature
int, real, string, bool→ BASE
point, points, line, region→ SPATIAL
instant→ TIME
rangeBASE ∪ TIME → RANGE
intimeBASE ∪ SPATIAL → TEMPORAL
constBASE ∪ SPATIAL → UNIT
ureal, upoint, upoints, uline, uregion→ UNIT
mappingUNIT → TEMPORAL
  • Base types: sama seperti bahasa pemrograman biasa.
  • Discrete line: himpunan berhingga segmen garis (pasangan titik terurut) yang hanya boleh berpotongan di titik ujungnya. Discrete region: himpunan berhingga simple polygon yang mungkin memiliki hole poligonal (aproksimasi linear).
  • range dan intime didefinisikan sama seperti pada abstract model.

Sliced Representation

Representasi tipe temporal pada model diskret memakai sliced representation: mendekomposisi perkembangan nilai sepanjang dimensi waktu menjadi interval-interval fragmen yang disebut slice, sedemikian sehingga pada tiap slice perkembangan nilai dapat direpresentasikan oleh suatu fungsi sederhana.

Type constructor mapping membangun representasi sliced dari berbagai tipe data, disebut unit type (mis. ureal = slice/potongan dari moving(real), upoint = slice dari moving(point)). Nilai bertipe unit disebut unit, berupa pasangan : interval waktu dan representasi fungsi sederhana yang terdefinisi pada interval tersebut.

Untuk nilai yang hanya berubah secara diskret (int/string/bool), digunakan constant function — type constructor const menghasilkan unit yang komponen keduanya berupa konstanta: const(int), const(string), const(bool).

Korespondensi tipe abstrak ↔ diskret:

Abstract TypeDiscrete Type
moving(int/string/bool)mapping(const(int/string/bool))
moving(real)mapping(ureal)
moving(point)mapping(upoint)
moving(points)mapping(upoints)
moving(line)mapping(uline)
moving(region)mapping(uregion)

Struktur mapping merangkai sekumpulan unit dan menjamin interval waktunya saling disjoint.

Predikat dan Perkembangan (Development) Spatio-Temporal

Motivasi

Predikat dan development spatio-temporal esensial untuk spatio-temporal selection dan spatio-temporal join. Pembahasan difokuskan pada predikat antara dua moving point, dua moving region, dan satu moving point dengan satu moving region (moving line dapat diperlakukan serupa).

Objek bergerak mengalami perubahan (gerak, penyusutan, pertumbuhan, split, merge, dsb) yang menyebabkan hubungan topologis di antara mereka berubah seiring waktu — mis. dua objek mula-mula disjoint, kemudian intersect. Ini melandasi konsep spatio-temporal predicate.

Predikat Topologis Spasial (Rekap dan Notasi Matriks)

  • Titik-titik: hanya disjoint atau meet (setara equality).
  • Titik-region: inside (titik di dalam region), disjoint (di luar), meet (di boundary).
  • Region-region: secara teoretis kombinasi, tapi untuk dua simple region hanya 8 konfigurasi bermakna: disjoint, meet, overlap, equal, inside, contains, covers, coveredBy — masing-masing dapat dinyatakan sebagai matriks berisi True/False untuk irisan (boundary/interior/eksterior) dengan (boundary/interior/eksterior) (skema serupa dengan tabel 8 hubungan topologis pada Spatial Data Modeling).

Conceptual neighbourhood graph (closest topological relationship graph) merepresentasikan transisi topologis yang mungkin terjadi antar-hubungan (disusun agar hubungan yang mirip saling berdekatan pada graf): untuk dua region sederhana, graf ini berbentuk disjoint — meet — overlap — {coveredBy, covers} — {inside, contains} — equal (dengan overlap sebagai simpul pusat yang terhubung ke semua kategori lain).

Masalah “Temporal Lifting” pada Predikat Topologis

Predikat topologis yang di-lifting langsung (mis. inside: moving(point)×moving(region)→moving(bool)) menghasilkan fungsi yang bernilai true pada tiap waktu titik berada di dalam region, false bila tidak, dan undefined () bila salah satu argumen tidak terdefinisi — hasil ini bukan predikat dalam pengertian biasa (predikat harus bernilai true/false, tidak boleh , agar bisa dipakai pada seleksi/join).

Solusi: spatio-temporal predicate adalah fungsi yang mengagregasi nilai boolean dari predikat spasial sepanjang evolusinya, dan tidak pernah mengembalikan :

Agregasi Temporal ( dan )

  • : bernilai true jika predikat spasial true pada beberapa waktu:
  • : bernilai true jika predikat true pada semua waktu dalam rentang yang ditentukan operator terhadap domain kedua objek ():
    • (union domain): kedua objek harus memiliki domain (masa hidup) yang sama.
    • (domain ): hanya dikuantifikasi atas masa hidup — mis. cocok untuk inside: “apakah spesies X selalu berada di area iklim tertentu selama spesies itu hidup?” (tidak peduli area iklim ada lebih lama sebelum/sesudahnya).
    • (domain ): dual dari .
    • (irisan domain): dikuantifikasi hanya pada masa hidup bersama; jika tidak ada irisan, bernilai true (vacuously true).

Delapan Predikat Spatio-Temporal Dasar (Region-Region)

PredikatDefinisi Agregasi
Disjoint disjoint
Meet meet
Overlap overlap
Equal equal
Covers covers
Contains contains
CoveredBy coveredBy
Inside inside

Untuk moving point vs moving region, hanya diperoleh predikat dasar: Disjoint, Meet, Inside. Untuk dua moving point, hanya: Disjoint, Meet.

Development: Rangkaian Predikat Spatio-Temporal

Sebuah development adalah urutan hubungan spasial (predikat spasial “biasa”) yang berlaku pada interval/titik waktu berurutan. Contoh: sebuah moving point disjoint dari moving region , lalu meet pada satu instan, lalu inside, lalu meet lagi, lalu disjoint lagi — rangkaian ini disebut “P crosses R”.

Predicate constriction — membatasi predikat spatio-temporal ke sebuah interval : , dengan aturan komposisi .

Klasifikasi predikat: instant predicates (bisa bernilai true pada satu titik waktu, mis. equal, meet, covers, coveredBy) vs period predicates (hanya bisa bernilai true pada suatu periode, mis. disjoint, overlap, inside, contains).

Temporal composition — menggabungkan predikat spasial dan predikat spatio-temporal :

Komposisi bersifat asosiatif, sehingga rangkaian panjang dapat disingkat dengan operator :

Aljabar predikat spatio-temporal tambahan: temporal alternative (dengan | berpresedensi lebih tinggi dari , dan hukum distributivitas terhadap ), predicate negation , dan predicate reflection (membalik arah waktu objek).

Development Graph

Berdasarkan conceptual neighbourhood graph, dapat dibangun development graph: setiap vertex berlabel predikat spasial atau predikat spatio-temporal dasar, dan setiap edge merepresentasikan operator sekuens . Jalur pada graf ini mendeskripsikan development yang mungkin terjadi antara dua objek spatio-temporal.

Diagram berikut menunjukkan development graph untuk dua moving region (memperluas graf serupa untuk moving point–moving region yang hanya berisi Disjoint — meet — Inside — Meet — Disjoint):

Querying Development pada STQL

Predikat spatio-temporal dan development dapat diintegrasikan ke SQL dengan memperluas 8 predikat dasar dan menyediakan operator kombinator >> (menggantikan ) serta klausa DEFINE ... AS ... untuk menyusun predikat kompleks dari predikat elementer:

-- Tanpa predikat ST: pesawat yang memasuki badai (verbose)
SELECT Flight.id
FROM Flight, Weather
WHERE kind = 'hurricane'
AND not(val(atinstant(route,start(deftime(route)))) inside
         val(atinstant(extent,start(deftime(route))))))
AND val(atinstant(route,end(deftime(route)))) inside
    val(atinstant(extent,end(deftime(route))))
 
-- Dengan predikat ST bawaan
SELECT Flight.id FROM Flight, Weather
WHERE kind = 'hurricane' AND route Disjoint>>meet>>Inside extent
 
-- Dengan DEFINE untuk predikat kompleks yang dapat dipakai ulang
DEFINE Enters AS Disjoint>>meet>>Inside
DEFINE Leaves AS rev(Enters)
DEFINE Crosses AS Enters>>Leaves
DEFINE Bypass AS Disjoint>>Meet>>Disjoint
 
SELECT Flight.id FROM Flight, Weather
WHERE kind = 'snowstorm' AND route Crosses|Bypass extent

Wildcard _ (mendahului kondisi akhir) berarti “hubungan apa pun mungkin terjadi” (selalu bernilai true), berguna untuk pola “pada suatu titik akhirnya terjadi X, apa pun yang terjadi sebelumnya”:

-- Snowstorm yang akhirnya sepenuhnya menyelimuti fog
SELECT W2.id FROM Weather W1, Weather W2
WHERE W1.kind='fog' AND W2.kind='snowstorm'
AND W1.extent _>>Inside|Equal W2.extent

Sumber

  • R. H. Güting, M. Schneider: “Moving Object Databases”, Chapter 4, Morgan Kaufmann, 2005.

Flashcard

flashcards Apa perbedaan moving point dan moving region? :: Moving point mengabaikan ekstensi/bentuk objek (dimodelkan sebagai titik); moving region memperhitungkan ekstensi objek yang dapat berubah bentuk/ukuran. Apa itu type constructor moving(α) dan intime(α) pada abstract model? :: moving(α) = himpunan tak-hingga pasangan (instant, nilai bertipe α), yaitu fungsi waktu→nilai; intime(α) = satu pasangan (instant, nilai bertipe α). Jelaskan teknik lifting pada moving object data model :: Mengubah operasi non-temporal dengan signature α1×…×αn→β menjadi versi temporal α1’×…×αn’→moving(β), dengan tiap αi’ bisa berupa αi atau moving(αi). Apa itu sliced representation pada discrete model? :: Dekomposisi perkembangan nilai sepanjang waktu menjadi interval-interval (slice) sedemikian sehingga pada tiap slice perkembangan nilai dapat direpresentasikan fungsi sederhana; unit type = pasangan (interval, representasi fungsi). Mengapa hasil lifting langsung predikat topologis (mis. inside) bukan predikat dalam arti biasa? :: Karena hasilnya bertipe moving(bool) yang bisa bernilai undefined (⊥) kapan pun salah satu argumen tidak terdefinisi, padahal predikat harus selalu bernilai true/false untuk dipakai pada seleksi/join. Bagaimana definisi formal spatio-temporal predicate agar bisa dipakai dalam query? :: Fungsi moving(α)×moving(β)→bool{⊥} — mengagregasi nilai boolean predikat spasial sepanjang waktu tanpa pernah mengembalikan undefined. Sebutkan delapan predikat spatio-temporal dasar untuk dua moving region :: Disjoint, Meet, Overlap, Equal, Covers, Contains, CoveredBy, Inside. Apa perbedaan agregasi ∀∪, ∀π1, dan ∀∩ pada spatio-temporal predicate? :: ∀∪ menuntut domain kedua objek sama; ∀π1 hanya dikuantifikasi atas domain objek pertama; ∀∩ dikuantifikasi atas irisan domain kedua objek (vacuously true jika irisan kosong). Apa itu development pada konteks spatio-temporal predicate, beri contoh :: Urutan predikat spasial/spatio-temporal yang berlaku berurutan pada suatu pasangan objek, mis. “P crosses R” = Disjoint▷meet▷Inside▷meet▷Disjoint. Apa fungsi wildcard _ pada STQL development query? :: Merepresentasikan “hubungan apa pun mungkin terjadi” (selalu bernilai true), dipakai untuk menyatakan pola akhir tertentu tanpa memedulikan apa yang terjadi sebelumnya.