GRASS GIS / Lineární refereční systém

Z FreeGIS portál
Přejít na: navigace, hledání

Ukazkový příklad

Budeme pracovat s autobusovou linkou číslo 1.

g.copy vect=busroute1,route1
g.copy vect=busstopsall,stopsall
v.extract input=stopsall output=stops1 where=ROUTES LIKE '%1%' AND ROUTES NOT LIKE '%11%'

Vytvoříme souvislou linie.

v.build.polylines input=route1 output=route1b cats=first
g.rename vect=route1b,route1

Vytvoření

Přidáme sloupec s id autobusové linie.

v.db.addtable map=route1 column="lid interger"
v.db.update map=route1 column=lid value=1

v.db.addtable map=stops1 column="lid interger"
v.db.update map=stops1 column=lid value=1

Definuje pořadí, vzdálenost autobusových zastávek.

v.db.addcol map=stops1 column="start_mp double precision, \
start_off double precision, \
end_mp double precision, \
end_off double precision"
v.db.update map=stops1 column=start_mp where="cat=7" value=1
v.db.update map=stops1 column=start_mp where="cat=13" value=2
...

Před sestavení LRS posuneme jednu zastávku, která by ve výsledku byla přiřazena nesprávnému segmentu linie.

v.edit map=stops1 tool=move move=18,-12 cats=30

Před vytvořením LRS zjistíme prahovou hodnotu pro přiřazení autobusových zastávek k linii.

v.distance -p --overwrite from=stops1@sqlite to=route1@sqlite upload=dist column=dist
...
24|44.819408
...

v.lrs.create in_lines=route1 out_lines=route1_lrs err=lrs_error \
points=stops1 lidcol=lid pidcol=lid rstable=route1_lrs thresh=45

Dotazování

Vytvoříme bodovou vrstvu s aktuální pozicí. Dotaz na nejbližší autobusovou zastávku.

echo "638632|224857" | v.in.ascii output=position
v.lrs.where lines=route1_lrs points=position rstable=route1_lrs
pcat|lid|mpost|offset
1|1|6.000000+134.532728
v.db.select map=stops1 columns=cat,start_mp where="start_mp=6 or start_mp=7"
cat|start_mp
30|6
55|7

Zjistíme, která ze zastávek je blíže.

db.select sql="select (end_map - start_map) as dist_30_55 from route1_lrs where start_mp=6"
dist_30_55
465.128921

db.select sql="select (end_map - start_map - 134.5) as dist_to_55 from route1_lrs where start_mp=6"
dist_to_55
330.628921

Vizualizace

v.lrs.label input=route1_lrs output=route1_lrs_labels rstable=route1_lrs \
xoffset=100 size=50 color=red