All Products
Search
Document Center

PolarDB:Model jalur

Last Updated:Aug 25, 2026

Topik ini menjelaskan tujuan, komponen dasar, dan panduan memulai cepat untuk model jalur.

Tujuan model

Pendahuluan

Model jalur adalah struktur graf yang terdiri dari titik dan sisi. Model ini digunakan untuk menyelesaikan permasalahan seperti perencanaan jalur berbasis jaringan jalan, navigasi GPS pada peta digital, dan routing. Model jalur sepenuhnya kompatibel dengan antarmuka PGRouting dan mendukung migrasi lancar aplikasi yang sudah ada. Data jalur membentuk graf jaringan geometris yang terdiri dari sisi dan node, yang terutama digunakan untuk membangun jaringan jalan dan lalu lintas.

GanosBase Networking adalah ekstensi mesin spasial-temporal untuk PolarDB for PostgreSQL. Ekstensi Networking menyediakan fungsi dan prosedur tersimpan untuk menemukan jalur tercepat, terpendek, atau optimal berdasarkan model biaya. Ekstensi ini menawarkan fitur routing geospasial dan mendukung berbagai algoritma analisis jalur dan jaringan, sehingga menambahkan kemampuan analisis jalur dan jaringan ke dalam database.

Ikhtisar fungsi

GanosBase Networking menyediakan serangkaian fungsi perencanaan jalur dan analisis jaringan:

  • Algoritma Johnson.

  • Algoritma Floyd-Warshall.

  • Algoritma jalur terpendek A* dan A* dua arah.

  • Algoritma jalur terpendek Dijkstra dan Dijkstra dua arah.

  • Algoritma Traveling Salesperson.

  • Algoritma Prim.

  • Algoritma Kruskal.

  • Algoritma K-jalur terpendek.

  • Analisis aliran.

  • Operasi topologi graf.

  • Operasi komponen graf.

  • Kontraksi graf.

  • Algoritma Turn Restriction Shortest Path (TRSP).

Beberapa fungsi juga mendukung perhitungan menggunakan biaya atau matriks biaya.

Skenario bisnis utama

GanosBase Networking dapat digunakan dalam berbagai skenario:

  • Perencanaan rute optimal

    Pada industri seperti logistik, pengiriman ekspres, dan layanan taksi, Anda dapat menggunakan GanosBase Networking untuk menghitung jalur terpendek atau tercepat antara dua titik guna perencanaan dan optimasi rute. Untuk jalur non-geografis, seperti koneksi antar node Internet, GanosBase Networking juga membantu menemukan topologi jaringan yang optimal.

  • Analisis geospasial

    Anda dapat menggunakan GanosBase Networking untuk melakukan analisis berbasis jaringan jalan, seperti pencarian tetangga terdekat dan analisis wilayah layanan. Analisis ini membantu Anda memahami distribusi dan hubungan data geospasial guna meningkatkan pengambilan keputusan dan perencanaan.

  • Manajemen arus lalu lintas

    Anda dapat menggabungkan GanosBase Networking dengan data arus lalu lintas untuk menganalisis traffic, memprediksi kemacetan, dan memperoleh saran optimasi. Hal ini bernilai tinggi untuk aplikasi seperti manajemen lalu lintas perkotaan dan sistem transportasi cerdas.

Komponen dasar

Konsep graf

Graf adalah pasangan terurut yang direpresentasikan dengan rumus G = (V, E), di mana:

  • V merepresentasikan himpunan vertex dalam graf. Elemen-elemen dalam V disebut vertex atau node.

  • E ⊆ {( u, v ) | u , v ∈ V }.

Terdapat beberapa jenis graf, seperti Graf tak berarah, graf tak berarah simple, Graf berarah, dan graf berarah simple.

Dalam GanosBase, terdapat dua cara merepresentasikan graf:

  • Graf biaya.

  • Graf biaya maju dan balik.

Anda dapat menentukan jenis graf sebagai berarah atau tak berarah saat menjalankan perhitungan.

Graf biaya

Graf biaya memiliki struktur berikut dalam database:

Kolom

Deskripsi

id

Identifier unik dari sisi.

source

Titik awal dari sisi.

target

Titik akhir dari sisi.

cost

Bobot (biaya) dari sisi dari titik awal ke titik akhir.

Graf biaya maju dan balik

Graf biaya maju dan balik memiliki struktur berikut dalam database:

Nama Kolom

Deskripsi

id

Identifier unik dari sisi.

source

Titik awal dari sisi.

target

Titik akhir dari sisi.

cost

Bobot (biaya) dari sisi dari titik awal ke titik akhir.

reverse_cost

Bobot (biaya) dari sisi dari titik akhir ke titik awal.

Struktur badan fungsi

GanosBase Networking kompatibel dengan standar pgRouting. Struktur umum suatu fungsi adalah:

pgr_<name>(Inner_queries, Parameters, [ Optional_parameters ])

Di mana:

  • Inner_queries: Kueri internal. Parameter ini berupa string SQL yang digunakan untuk membangun data yang dibutuhkan fungsi.

  • Parameters: Parameter wajib yang dibutuhkan fungsi.

  • Optional_parameters: Parameter opsional. Parameter ini memiliki nilai default dan dapat diabaikan.

Suatu fungsi dapat memiliki overload yang berbeda. Overload umum meliputi:

  • Satu-ke-satu: Navigasi dari satu titik awal ke satu titik akhir.

  • Satu-ke-banyak: Navigasi dari satu titik awal ke banyak titik akhir.

  • Banyak-ke-satu: Navigasi dari banyak titik awal ke satu titik akhir.

  • Banyak-ke-banyak: Navigasi dari banyak titik awal ke banyak titik akhir.

  • Kombinasi: Navigasi dari berbagai titik awal ke berbagai titik akhir. Setiap tupel menentukan sepasang titik awal dan akhir.

Struktur data untuk kueri internal

Untuk mengirimkan struktur graf ke model fungsi, Anda harus membuat kueri internal. Kueri ini dikategorikan berdasarkan jenis permintaan sebagai berikut:

  • Edge SQL.

  • Kueri sisi umum: Berlaku untuk algoritma jalur terpendek Dijkstra dan Dijkstra dua arah.

  • Kueri sisi umum tanpa ID: Berlaku untuk algoritma All Pairs.

  • Kueri sisi umum dengan nilai X/Y: Berlaku untuk algoritma jalur terpendek A* dan A* dua arah.

  • Combinations SQL.

  • Restrictions SQL.

  • Points SQL.

Kueri sisi umum

Kolom

Type

Default

Deskripsi

id

integer

None

Identifier unik dari sisi.

source

integer

None

Titik awal dari sisi.

target

integer

None

Titik akhir dari sisi.

cost

numeric

None

Bobot dari sisi.

reverse_cost

numeric

-1

Bobot dari sisi dari titik akhir ke titik awal.

Jika nilainya negatif, sisi \((target \rightarrow source)\) tidak ada dalam graf.

Kueri sisi tanpa ID

Kolom

Tipe

Default

Deskripsi

source

integer

None

Titik awal dari sisi.

target

integer

None

Titik akhir dari sisi.

cost

numeric

None

Bobot dari sisi.

reverse_cost

numeric

-1

Bobot dari sisi dari titik akhir ke titik awal.

Jika nilainya negatif, sisi \((target \rightarrow source)\) tidak ada dalam graf.

Kueri sisi dengan nilai X/Y

Kolom

Tipe

Default

Deskripsi

source

integer

None

Titik awal dari sisi.

target

integer

None

Titik akhir dari sisi.

cost

numeric

None

Bobot dari sisi.

Jika nilainya negatif, sisi \((source \rightarrow target)\) tidak ada dalam graf.

reverse_cost

numeric

-1

Bobot dari sisi dari titik akhir ke titik awal.

Jika nilainya negatif, sisi \((target \rightarrow source)\) tidak ada dalam graf.

x1

numeric

None

Koordinat X dari titik awal sisi.

y1

numeric

None

Koordinat Y dari titik awal sisi.

x2

numeric

None

Koordinat X dari titik akhir sisi.

y2

numeric

None

Koordinat Y dari titik akhir sisi.

Kueri pembatasan

Kolom

Tipe

Default

Deskripsi

path

array integer

None

Urutan ID dari semua sisi yang tidak dapat dilewati.

cost

numeric

None

Biaya untuk melewati sisi yang tidak dapat dilewati.

Kueri titik

Kolom

Tipe

Default

Deskripsi

pid

integer

auto value

Identifier unik dari titik.

edge_id

integer

None

Identifier unik dari sisi terdekat dengan titik tersebut.

fraction

numeric

None

Posisi relatif titik pada sisi. Nilainya harus antara 0 dan 1.

side

char

b

Posisi titik saat ini. Nilainya harus salah satu dari berikut: b (both), r (right), atau l (left). Jika nilainya NULL, maka dianggap sebagai b.

Struktur data kolom hasil

Kolom yang dikembalikan bervariasi tergantung fungsi yang digunakan.

Hasil untuk satu jalur

Kolom

Type

Deskripsi

seq

integer

Nilai berurutan yang dimulai dari 1.

path_seq

integer

Posisi relatif dalam keseluruhan jalur. Ini adalah nilai berurutan yang dimulai dari 1.

[start_vid]

big integer

Identifier unik untuk vertex awal. Kolom ini hanya dikembalikan jika kueri memiliki beberapa vertex awal.

[end_vid]

big integer

Identifier unik untuk vertex akhir. Kolom ini hanya dikembalikan jika kueri memiliki beberapa vertex akhir.

node

big integer

Identifier dari node dalam jalur dari "start_vid" ke "end_vid".

edge

big integer

Identifier dari sisi dari node saat ini ke node berikutnya dalam urutan jalur. Nilai -1 menunjukkan node terakhir dari jalur.

cost

float

Biaya dari node saat ini ke node berikutnya dalam urutan jalur.

agg_cost

float

Total biaya dari "start_vid" ke "node".

Berlaku untuk fungsi pgr_withPoints:

Kolom

Tipe

Deskripsi

seq

integer

Nilai berurutan yang dimulai dari 1.

path_seq

integer

Posisi relatif dalam keseluruhan jalur. Ini adalah nilai berurutan yang dimulai dari 1.

[start_vid]

big integer

Identifier unik untuk vertex atau titik awal. Kolom ini hanya dikembalikan jika kueri memiliki beberapa vertex awal.

  • Nilai positif adalah identifier dari vertex awal.

  • Nilai negatif adalah identifier dari titik awal.

[end_vid]

big integer

Identifier unik dari vertex atau titik akhir hanya dikembalikan jika kueri berisi beberapa vertex awal.

  • Nilai positif adalah identifier dari vertex akhir.

  • Nilai negatif adalah identifier dari titik akhir.

node

big integer

Identifier dari node dalam jalur dari "start_vid" ke "end_vid".

  • Nilai positif adalah identifier dari vertex.

  • Nilai negatif adalah identifier dari titik.

edge

big integer

Identifier dari sisi dari node saat ini ke node berikutnya dalam urutan jalur. Nilai -1 menunjukkan node terakhir dari jalur.

cost

float

Biaya dari node saat ini ke node berikutnya dalam urutan jalur.

agg_cost

float

Total biaya dari "start_vid" ke "node". Nilai 0 menunjukkan catatan pertama dari jalur.

Berlaku untuk fungsi pgr_dijkstraNear:

Kolom

Tipe

Deskripsi

seq

integer

Nilai berurutan yang dimulai dari 1.

path_seq

integer

Posisi relatif dalam keseluruhan jalur. Ini adalah nilai berurutan yang dimulai dari 1.

start_vid

big integer

Identifier unik dari vertex awal jalur saat ini.

end_vid

big integer

Identifier unik dari vertex akhir jalur saat ini.

node

big integer

Identifier dari node dalam jalur dari "start_vid" ke "end_vid".

edge

big integer

Identifier dari sisi dari node saat ini ke node berikutnya dalam urutan jalur. Nilai -1 menunjukkan node terakhir dari jalur.

cost

float

Biaya dari node saat ini ke node berikutnya dalam urutan jalur.

agg_cost

float

Total biaya dari "start_vid" ke "node".

Hasil untuk beberapa jalur

Berlaku untuk fungsi yang selektif terhadap beberapa jalur:

Kolom

Tipe

Deskripsi

seq

integer

Nilai berurutan yang dimulai dari 1.

path_id

integer

Identifier unik dari jalur.

ID jalur pertama dari "start_vid" ke "end_vid" adalah 1.

path_seq

integer

Posisi relatif dalam keseluruhan jalur. Ini adalah nilai berurutan yang dimulai dari 1.

[start_vid]

big integer

Identifier unik untuk vertex awal. Kolom ini hanya dikembalikan jika kueri memiliki beberapa vertex awal.

[end_vid]

big integer

Identifier unik untuk vertex akhir. Kolom ini hanya dikembalikan jika kueri memiliki beberapa vertex akhir.

node

big integer

Identifier dari node dalam jalur dari "start_vid" ke "end_vid".

edge

big integer

Identifier dari sisi dari node saat ini ke node berikutnya dalam urutan jalur. Nilai -1 menunjukkan node terakhir dari jalur.

cost

float

Biaya dari node saat ini ke node berikutnya dalam urutan jalur.

agg_cost

float

Total biaya dari "start_vid" ke "node".

Berlaku untuk fungsi yang tidak selektif terhadap beberapa jalur:

Kolom

Tipe

Deskripsi

seq

integer

Nilai berurutan yang dimulai dari 1.

path_id

integer

Identifier unik dari jalur.

ID jalur pertama dari "start_vid" ke "end_vid" adalah 1.

path_seq

integer

Posisi relatif dalam keseluruhan jalur. Ini adalah nilai berurutan yang dimulai dari 1.

start_vid

big integer

Identifier unik dari vertex awal.

end_vid

big integer

Identifier unik dari vertex akhir.

node

big integer

Identifier dari node dalam jalur dari "start_vid" ke "end_vid".

edge

big integer

Identifier dari sisi dari node saat ini ke node berikutnya dalam urutan jalur. Nilai -1 menunjukkan node terakhir dari jalur.

cost

float

Biaya dari node saat ini ke node berikutnya dalam urutan jalur.

agg_cost

float

Total biaya dari "start_vid" ke "node".

Hasil untuk fungsi biaya

Berlaku untuk fungsi yang menggunakan biaya atau matriks biaya:

Nama Kolom

Tipe

Deskripsi

start_vid

big integer

Identifier unik dari vertex awal.

end_vid

big integer

Identifier unik dari vertex akhir.

agg_cost

float

Total biaya jalur dari "start_vid" ke "end_vid".

Panduan Memulai Cepat

Pendahuluan

Panduan memulai cepat ini menjelaskan penggunaan dasar mesin GanosBase Networking, termasuk cara membuat ekstensi, membuat tabel, memasukkan data, memperbarui properti, membuat topologi, dan mengkueri jalur.

Penjelasan sintaks

  • Buat ekstensi.

     CREATE Extension Ganos_Networking cascade;
    Catatan

    Instal ekstensi dalam skema public untuk menghindari masalah izin.

    CREATE extension Ganos_Networking WITH schema public cascade;
  • Buat tabel.

     CREATE TABLE edge_table (
         id BIGSERIAL,
         dir character varying,
         source BIGINT,
         target BIGINT,
         cost FLOAT,
         reverse_cost FLOAT,
         capacity BIGINT,
         reverse_capacity BIGINT,
         category_id INTEGER,
         reverse_category_id INTEGER,
         x1 FLOAT,
         y1 FLOAT,
         x2 FLOAT,
         y2 FLOAT,
         the_geom geometry
     );
  • Masukkan catatan.

     INSERT INTO edge_table (
         category_id, reverse_category_id,
         cost, reverse_cost,
         capacity, reverse_capacity,
         x1, y1,
         x2, y2) VALUES
     (3, 1,    1,  1,  80, 130,   2,   0,    2, 1),
     (3, 2,   -1,  1,  -1, 100,   2,   1,    3, 1),
     (2, 1,   -1,  1,  -1, 130,   3,   1,    4, 1),
     (2, 4,    1,  1, 100,  50,   2,   1,    2, 2),
     (1, 4,    1, -1, 130,  -1,   3,   1,    3, 2),
     (4, 2,    1,  1,  50, 100,   0,   2,    1, 2),
     (4, 1,    1,  1,  50, 130,   1,   2,    2, 2),
     (2, 1,    1,  1, 100, 130,   2,   2,    3, 2),
     (1, 3,    1,  1, 130,  80,   3,   2,    4, 2),
     (1, 4,    1,  1, 130,  50,   2,   2,    2, 3),
     (1, 2,    1, -1, 130,  -1,   3,   2,    3, 3),
     (2, 3,    1, -1, 100,  -1,   2,   3,    3, 3),
     (2, 4,    1, -1, 100,  -1,   3,   3,    4, 3),
     (3, 1,    1,  1,  80, 130,   2,   3,    2, 4),
     (3, 4,    1,  1,  80,  50,   4,   2,    4, 3),
     (3, 3,    1,  1,  80,  80,   4,   1,    4, 2),
     (1, 2,    1,  1, 130, 100,   0.5, 3.5,  1.999999999999,3.5),
     (4, 1,    1,  1,  50, 130,   3.5, 2.3,  3.5,4);
  • Perbarui properti tabel.

     UPDATE edge_table SET the_geom = st_makeline(st_point(x1,y1),st_point(x2,y2)),
     dir = CASE WHEN (cost>0 AND reverse_cost>0) THEN 'B'   -- Both ways
                WHEN (cost>0 AND reverse_cost<0) THEN 'FT'  -- In the direction of the LINESTRING
                WHEN (cost<0 AND reverse_cost>0) THEN 'TF'  -- In the reverse direction of the LINESTRING
                ELSE '' END;
  • Buat topologi.

     SELECT pgr_createTopology('edge_table',0.001);
  • Kueri jalur terpendek.

     -- Dijkstra shortest path
     SELECT * FROM pgr_dijkstra(
         'SELECT id, source, target, cost, reverse_cost FROM edge_table',
         2, 3
     );
    
      seq | path_seq | node | edge | cost | agg_cost
     -----+----------+------+------+------+----------
        1 |        1 |    2 |    4 |    1 |        0
        2 |        2 |    5 |    8 |    1 |        1
        3 |        3 |    6 |    9 |    1 |        2
        4 |        4 |    9 |   16 |    1 |        3
        5 |        5 |    4 |    3 |    1 |        4
        6 |        6 |    3 |   -1 |    0 |        5
     (6 rows)
    
     -- A* path algorithm
     SELECT * FROM pgr_astar(
         'SELECT id, source, target, cost, reverse_cost, x1, y1, x2, y2 FROM edge_table',
         2, 12,
         directed := false, heuristic := 2);
    
      seq | path_seq | node | edge | cost | agg_cost
     -----+----------+------+------+------+----------
        1 |        1 |    2 |    2 |    1 |        0
        2 |        2 |    3 |    3 |    1 |        1
        3 |        3 |    4 |   16 |    1 |        2
        4 |        4 |    9 |   15 |    1 |        3
        5 |        5 |   12 |   -1 |    0 |        4
     (5 rows)
    
     -- TRSP path algorithm
     SELECT * FROM pgr_trsp(
             'SELECT id::INTEGER, source::INTEGER, target::INTEGER, cost FROM edge_table',
             2, 7, false, false,
             'SELECT to_cost, target_id::int4,
             from_edge || coalesce('','' || via_path, '''') AS via_path
             FROM restrictions'
         );
    
      seq | id1 | id2 | cost
     -----+-----+-----+------
        0 |   2 |   4 |    1
        1 |   5 |  10 |    1
        2 |  10 |  12 |    1
        3 |  11 |  11 |    1
        4 |   6 |   8 |    1
        5 |   5 |   7 |    1
        6 |   8 |   6 |    1
        7 |   7 |  -1 |    0
     (8 rows)
  • Hapus ekstensi (opsional).

     Drop Extension Ganos_Networking cascade;

Referensi SQL

Untuk manual SQL lengkap, lihat dokumentasi resmi pgRouting.