3.4.3. Membangun Filter Predikat
Filter predikat digunakan untuk menyaring arah perluasan path. Pada penelitian ini perluasan path dibatasi hingga memenuhi syarat umum sebuah node
hanya muncul sekali dalam satu path. Sebuah path terdiri dari serangkaian node. Jika path terdiri dari dua node maka path tersebut hanya memiliki first_node dan
last_node. Jika jumlah node dalam path lebih dari dua node maka dalam path tersebut terdapat sebuah node sebelum last node before_last_node. Ketika
sebuah path diperluas, maka filter predikat akan menyaring node baru mana yang akan ditambahkan ke dalam path. Ilustrasi proses perluasan path disajikan pada
Gambar 41.
Gambar 41. Perluasan Path Filter predikat yang dibangun pada penelitian ini adalah filter predikat arah
direction predicate filter mencakup starlike dan variable_starlike filter. Filter verticalhorizontal variable starlike tidak dikembangkan karena diasumsikan bobot
perluasan path memiliki kecenderungan yang sama ke seluruh arah. Dalam setiap filter predikat arah, arah path sebelum diperluas exact_direction_previous akan
dibandingkan dengan arah path baru jika diperluas exact_direction_new. Yang menjadi pembeda dari kedua filter predikat arah di atas adalah bagaimana
menetapkan node acuan dalam mencari exact_direction_previous serta exact_direction_new. Filter predikat arah starlike menggunakan node terakhir
last_node dan before_last_node sedangkan variable starlike menggunakan node pertama.
First Node Last Node
Before Last Node New Node
? ?
fi lte
r
Path Extended Path
Berikut potongan program filter predikat arah :
switch filter
case starlike
[jarak_new, exact_direction_new] = sdm_read_topology_dbdb,lastnode,newnode;
[jarak_last, exact_direction_previous] = sdm_read_topology_dbdb,before_lastnode,lastnode;
absolute exact direction if
strcmp exact_direction_new , exact_direction_previous;, tf=1; else
if strcmpexact_direction_previous,
timur strcmpexact_direction_new,
tenggara |
strcmpexact_direction_new, timurlaut
, tf=1; elseif
strcmpexact_direction_previous, barat
strcmpexact_direction_new, baratdaya
| strcmpexact_direction_new,
baratlaut , tf=1;
elseif strcmpexact_direction_previous,
selatan strcmpexact_direction_new,
tenggara |
strcmpexact_direction_new , baratdaya
, tf=1; elseif
strcmpexact_direction_previous, utara
strcmpexact_direction_new, baratlaut
| strcmpexact_direction_new ,
timurlaut , tf=1;
else tf=0;
end end if
end end if strcmp
case variable_starlike
[jarak_new, exact_direction_new] = sdm_read_topology_dbdb,firstnode,newnode;
[jarak_last, exact_direction_previous] = sdm_read_topology_dbdb,firstnode,lastnode;
if strcmp exact_direction_new , exact_direction_previous;, tf=1;
else reli is special relation of rel1
if strcmpexact_direction_new ,
tenggara strcmpexact_direction_previous,
timur |strcmpexact_direction_previous,
selatan ; tf=1;
elseif strcmpexact_direction_new ,
baratdaya strcmpexact_direction_previous,
barat |strcmpexact_direction_previous,
selatan ; tf=1;
elseif strcmpexact_direction_new ,
baratlaut strcmpexact_direction_previous,
barat |strcmpexact_direction_previous,
utara ; tf=1;
elseif strcmpexact_direction_new ,
timurlaut strcmpexact_direction_previous,
timur |strcmpexact_direction_previous,
utara ; tf=1;
else tf=0;
end end special relation
end end check direction predicate
end end switch filter
if tf==1;
extendedpath = [path newnode]; extending path
extendedpath =[firstnode]...[before_lastnode][lastnode][newnode] counter = counter +1;
pathkn{counter,1}= extendedpath; end
if tf