RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in...
-
Upload
nguyenkien -
Category
Documents
-
view
214 -
download
0
Transcript of RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in...
![Page 1: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/1.jpg)
Diplomsko delo univerzitetnega študija
Organizacija in management informacijskih sistemov
RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO
EVAKUACIJSKEGA NAČRTA V GOOGLE
EARTH
Mentor: doc. dr. Davorin Kofjač Kandidat: Matic Luznar
Somentor: doc. dr. Andrej Škraba
Kranj, julij 2012
![Page 2: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/2.jpg)
ZAHVALA
Zahvaljujem se mentorju doc. dr. Davorinu Kofjaču in somentorju doc. dr. Andreju
Škrabi za pomoč in nasvete pri izdelavi diplomskega dela.
![Page 3: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/3.jpg)
POVZETEK
V diplomskem delu obravnavamo možnost predstavitve lastnih 3D-objektov v okolju
Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, dostopna
širokemu krogu uporabnikov in je le-tem omogočeno dodajanje lastnih vsebin. V
okviru diplomskega dela smo poustvarili model realnega okolja v 3D, ki služi kot
prototip okolja, kjer bi se zaradi krizne situacije lahko izvajala evakuacija. V
povezavi z označevalnim jezikom KML lahko v Google Earthu dodajamo objekte in
na različne načine označujemo ter opisujemo lokacije. Zaradi zamudnosti ročnega
opisovanja objektov s KML-jem smo raziskali možnost uvoza že generiranih
tridimenzionalnih objektov v Google Earthu. Za potrebe evakuacije smo določili
evakuacijsko pot v izbranem okolju. Ustvarjen je bil vmesnik, ki omogoča kreiranje
oziroma uvoz koordinat evakuacijske poti in vizualizacijo gibanja po tej poti.
KLJUČNE BESEDE - Spletna rešitev
- Objekti
- Evakuacijske poti
- Google Earth
- KML
ABSTRACT
In the thesis we want to show the possibility of own 3D objects presentation using
Google Earth environment, accessible to larger number of users who are enabled to
add their own contents. In this way, we created a model of the real environment in
3D which will serve as prototype of the environment, where, due to crisis situation,
evacuation could be performed. In connection with designated KML language we
can add objects to Google Earth, denoting and describing thus locations in various
ways. Hand description of objects by KML, however, can be time consuming,
therefore we did a research about the possibilities of launching the already generated
3D objects into Google Earth. For the needs of evacuation it is necessary to
determine evacuation path in the selected environment. We created an interface
which enables creating and launching, respectively, the coordinates of evacuation
path and visualisation of moving on this path.
KEYWORDS - Internet solution
- Objects
- Evacuation paths
- Google Earth
- KML
![Page 4: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/4.jpg)
KAZALO
1 UVOD ................................................................................................................... 1
1.1 Opredelitev problema .................................................................................... 1
1.2 Cilji naloge in metodologija .......................................................................... 1
2 OZNAČEVALNI JEZIK KML IN VTIČNIK GOOGLE EARTH ................... 2
2.1 Označevalni jezik KML ................................................................................ 2
2.2 Vtičnik Google Earth .................................................................................. 10
3 ORODJA ZA RAZVOJ SPLETNE REŠITVE .................................................. 16
3.1 Notepad++ ................................................................................................... 16
3.2 WAMP ........................................................................................................ 16
3.3 HTML ......................................................................................................... 16
3.4 CSS .............................................................................................................. 17
3.5 Javascript ..................................................................................................... 17
3.6 PHP ............................................................................................................. 18
4 OPIS VMESNIKA ............................................................................................. 19
4.1 Iskalnik lokacij ............................................................................................ 20
4.2 Glavni meni ................................................................................................. 20
5 PRIMER EVAKUACIJSKEGA OKOLJA ........................................................ 45
6 ZAKLJUČEK ..................................................................................................... 47
LITERATURA IN VIRI ............................................................................................ 48
PRILOGE ................................................................................................................... 50
KAZALO SLIK ......................................................................................................... 51
KAZALO TABEL ..................................................................................................... 52
![Page 5: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/5.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 1
1 UVOD
1.1 Opredelitev problema
V diplomskem delu se bomo ukvarjali z modeliranjem okolja v 3D s pomočjo tehnologije Google Earth (Google Zemlja, 2012). To nam bo služilo kot osnova za izdelavo evakuacijskega okolja in evakuacijskih poti v kriznih situacijah. S tem bo zagotovljen sistem za podporo odločanju v kriznih situacijah (Škraba et al., 2012), ki bo pomembno prispeval k učinkovitejši in hitrejši izvedbi evakuacije, saj bo zagotavljal vizualizacijo prizadetega okolja in najboljše evakuacijske poti. Ker poteka delo ekip, ki rešujejo krizne razmere, na terenu in izven kontroliranega okolja, je potrebno zagotoviti tak virtualni prikaz kriznega okolja, ki je dostopen od kjerkoli. To je možno izvesti s pomočjo spletne aplikacije, saj danes tehnologija omogoča dostop do spleta tudi preko mobilnih naprav in tako nismo omejeni le na nadzorni center kriznega štaba. V ta namen bomo v diplomskem delu prikazali razvoj modeliranja kriznega okolja s pomočjo spletnih tehnologij, kot so WAMP, Javascript, PHP, vtičnik Google Earth, ki so neodvisne od uporabljene platforme.
1.2 Cilji naloge in metodologija
Cilj naloge je razvoj spletne rešitve, ki bo omogočala uvoz in predstavitev tridimenzionalnih objektov v vtičniku Google Earth. Spletna rešitev mora omogočati tudi vnos koordinat poti in gibanje v »prvi osebi« po tej poti. Rezultat naloge bo spletna rešitev, ki bo omogočala predstavitev 3D-objektov in upravljanje s pogledom v vtičniku Google Earth. Predlagane metode in orodja, ki jih bomo uporabili v diplomskem delu, so:
programski paket WAMP, programski jezik Javascript, programski jezik PHP, označevalni jezik KML, vtičnik za internetne brskalnike Google Earth.
![Page 6: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/6.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 2
2 OZNAČEVALNI JEZIK KML IN VTIČNIK
GOOGLE EARTH
2.1 Označevalni jezik KML
KML (Wikipedia KML, 2012) je okrajšava za Keyhole Markup Language in
predstavlja format za prikaz geografskih podatkov v brskalnikih, kot so Google
Earth, Google Maps in Google Maps za mobilne naprave. Primarno je bil razvit za
uporabo z Google Earthom. KML je mednarodni standard, ki ga vodi Open
Geospatial Consortium, Inc (OGC).
Datoteka KML omogoča zapis krajevnih oznak, poligonov, slik, 3D-modelov,
tekstovnih opisov ipd. za prikaz v brskalnikih, ki to omogočajo. Lokacijo teh
objektov določimo z zemljepisno širino in dolžino. Poleg statičnih objektov lahko
prikažemo tudi dinamično dogajanje. Prikažemo lahko razvoj nečesa skozi čas, na
primer prikaz gradnje stanovanjskega naselja skozi čas. Animiramo lahko kamero in
na ta način prikažemo npr. predstavitev izleta tako, da pokažemo turistične točke, ki
si jih bomo ogledali. Animiramo lahko tudi 3D-objekte, ki smo jih uvozili, in
prikažemo npr. dvižni most, kako se dviga. Uveljavlja se tudi v športu, kjer nekateri
kolesarski trenažerji omogočajo virtualno kolesarjenje po Google Earthu, saj so
kolesarske poti narejene s pomočjo KML-ja.
Če vežemo na KML-datoteko slike, 3D-modele, ikone ipd., potem lahko vse datoteke
skupaj zapakiramo v datoteko s končnico .kmz. KMZ je stisnjena datoteka, stisnjena
po standardu ZIP. Datoteko KMZ je možno odpreti v Google Earthu, ne da bi jo
razpakirali (Drnovšček, 2010).
KML je označevalni jezik, ki temelji na XML. Označevalni pomeni, da ima podatke,
ločene z oznakami, kar je povzeto v tabeli 1:
Začetna oznaka <name>
Podatek Objekt
Končna oznaka </name>
Tabela 1: Sestava KML
Oziroma zapisano skupaj: <name>Objekt</name>, kot na primer
<name>Hiša</name>.
2.1.1 Osnovna sestava datoteke KML
Vsaka datoteka KML je sestavljena iz začetne značke, vsebine in končne značke.
Datoteko KML začnemo z naslednjo značko: <kml xmlns="http://www.opengis.net/kml/2.2"
xmlns:gx="http://www.google.com/kml/ext/2.2">
Končamo pa z značko:
![Page 7: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/7.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 3
</kml>
Med ti znački vrinemo vsebino, ki jo lahko postavimo v mape. Glavna mapa v
dokumentu je lahko samo ena, le-ta pa lahko vsebuje več podmap, kot to prikazuje
slika 1.
Slika 1: Podmape KML
Za prikaz teh treh podmap potrebujemo sledečo KML-kodo:
<kml xmlns="http://www.opengis.net/kml/2.2"
xmlns:gx="http://www.google.com/kml/ext/2.2">
<Folder>
<name>KML</name>
<Folder>
<name>Objekti</name>
</Folder>
<Folder>
<name>Poti</name>
</Folder>
<Folder>
<name>Točke</name>
</Folder>
</Folder>
</kml>
V mape lahko z vrivanjem, na podoben način kot smo vrinili mape, dodamo objekte,
poti, točke itd. Da bi prikazali objekte, poti in točke, vrinemo značko <Placemark>,
ki ji dodamo ime <name>. Značke elementov, npr. Placemark, Point ipd., pišemo z
veliko začetnico, njihove lastnosti, npr. name, coordinates ipd., pa z malo, kot je
prikazano na primeru prikaza krajevne označbe (Placemark) z imenom Objekt:
<kml xmlns="http://www.opengis.net/kml/2.2"
xmlns:gx="http://www.google.com/kml/ext/2.2">
<Placemark>
<name>Objekt</name>
</Placemark>
</kml>
Sedaj smo predstavili osnovno strukturo KML-datoteke. V nadaljevanju bomo
predstavili elemente, ki jih lahko prikažemo s KML-jem.
![Page 8: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/8.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 4
2.1.2 Točka
Najosnovnejše, kar lahko prikažemo s KML-jem, je točka. Točko označujemo z
značko <Point>, njene koordinate pa z značko <coordinates>, kot je to prikazano s
spodnjo kodo:
<kml xmlns="http://www.opengis.net/kml/2.2"
xmlns:gx="http://www.google.com/kml/ext/2.2">
<Placemark>
<name>Točka</name>
<Point>
<coordinates>14.379838,46.241829</coordinates>
</Point>
</Placemark>
</kml>
Z vnosom zgornje kode bomo omogočili prikaz točke, kot to prikazuje slika 2.
Slika 2: Prikaz točke
Koordinate točke vpišemo v naslednjem vrstnem redu: zemljepisna dolžina,
zemljepisna širina in nato še višina točke. Višina točke se upošteva samo, če jo
omogočimo.
KML omogoča več načinov prikaza višine: clampToGround, relativeToGround in
absolute. Za izbiro načina prikaza višine uporabimo značko <altitudeMode>,
razlike med načini prikaza višine pa prikazuje slika 3.
V načinu clampToGround se višina ne upošteva. Če je objekt postavljen na neko
lokacijo, bo »prilepljen« na Zemljino površje.
![Page 9: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/9.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 5
V načinu relativeToGround vpišemo višino, ki bo postavila objekt za toliko metrov
nad Zemljino površino. Na primer: če vpišemo vrednost 10, bo objekt prikazan 10
metrov nad Zemljino površino. V primeru, da je površina Zemlje na neki točki 300
metrov nad morsko gladino, bo objekt na tej točki prikazan na 310 metrih nad
morsko gladino.
V načinu absolute vpišemo, kako visoko nad morsko gladino hočemo, da se objekt
postavi. Če je površina Zemlje 300 metrov nad morsko gladino, mi pa hočemo objekt
postaviti 10 metrov nad to površino, moramo vnesti vrednost 310.
Slika 3: Razlika med načini prikaza višine absolute ter relativeToGround
Torej, če želimo na primer prikazati objekt, ki bo na neki koordinati 10 m nad
površino Zemlje, bomo vpisali naslednje:
<Point>
<altitudeMode>relativeToGround</altitudeMode>
<coordinates>14.379838,46.241829,10</coordinates>
</Point>
2.1.3 Animacija kamere
Animacija kamere je premik kamere med dvema ali več točkami. Deluje tako, da
najprej določimo točke, premik med točkami pa je narejen avtomatsko. Pri animaciji
kamere so pomembne tri stvari: pozicija kamere, način prehoda in čas prehoda.
MORJE
KOPNO
absolute
relativeToGround
![Page 10: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/10.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 6
Pozicija kamere <Camera>
Da bi kamero ustrezno pozicionirali, moramo vpisati sledeče lastnosti: zemljepisno
dolžino in širino (longitude in latitude), višino kamere (altitude), njeno usmerjenost
(heading) in pa naklon (tilt).
Z usmerjenostjo določimo, v katero smer bo kamera obrnjena. Če določimo
usmerjenost 0°, bo kamera obrnjena proti severu. Vsaka nadaljnja stopinja jo bo
obrnila v smeri urinega kazalca.
Z naklonom določimo, kako bo kamera obrnjena glede na Zemljino površje (slika 4).
Če je naklon kamere enak 0°, potem je kamera obrnjena proti središču Zemlje. Če pa
je naklon enak 90° pa je kamera obrnjena vzporedno z Zemljinim površjem.
Značke, potrebne za pozicioniranje kamere, prikazuje tabela 2.
Lastnost Značka
Zemljepisna dolžina <longitude>
Zemljepisna širina <latitude>
Višina <altitude>
Usmerjenost <heading>
Naklon <tilt>
Tabela 2: Bistvene značke za postavitev kamere
Slika 4: Naklon kamere
ZEMLJA
Naklon kamere je 0°
Naklon kamere je 90°
![Page 11: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/11.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 7
Način prehoda – <gx:flyToMode>
Način prehoda določa, kako bo kamera prehajala med izbranimi točkami. Izbirati je
možno med dvema načinoma: smooth in bounce.
Če izberemo opcijo smooth, so prehodi med točkami tekoči. Kamera se vmes ne
ustavlja in potuje vedno z enako hitrostjo (slika 5). Kamera točko samo preleti.
Slika 5: Prikaz hitrosti v načinu smooth
V primeru izbire opcije bounce pa kamera točke ne preleti, ampak se na poziciji
točke za kratek čas ustavi (slika 6) in gre potem naprej do naslednje točke.
Slika 6: Prikaz hitrosti v načinu bounce
Čas prehoda – <gx:duration>
Pri času prehoda določimo, koliko časa bo potrebno, da bo kamera prišla od prve do
druge točke. Čas določimo v sekundah.
Sedaj bomo na primeru prikazali, kako bi premikali kamero, da bi premik med
dvema točkama trajal 5 sekund in da bi bil prehod gladek (smooth):
<gx:Tour>
<name>Animacija kamere</name>
<gx:Playlist>
<gx:FlyTo>
<gx:duration>5</gx:duration>
<gx:flyToMode>smooth</gx:flyToMode>
<Camera>
<longitude>14.306607700000038</longitude>
<latitude>46.163984899171254</latitude>
<altitude>106.29177772840164</altitude>
<heading>22</heading>
2 3 1
2 3 1
Konstantna hitrost
![Page 12: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/12.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 8
<tilt>59.99653655321029</tilt>
</Camera>
</gx:FlyTo>
<gx:FlyTo>
.
.
.
</gx:FlyTo>
</gx:Playlist>
</gx:Tour>
Z zgornjo kodo določimo, da bo to animacija kamere <gx:Tour> z imenom
Animacija kamere. Nato ustvarimo seznam <gx:Playlist>, ki bo vseboval točke,
proti katerim bo kamera potovala. Vsako točko označimo z značko <gx:FlyTo> in ji
dodamo lastnosti, kot so: čas prehoda, način prehoda in pozicija kamere.
2.1.4 Modeli
Modeli so različni tridimenzionalni objekti, ki jih lahko prikažemo v brskalniku.
Potrebujemo jih zato, da bolj realno predstavimo okolje, v katerem se bo odvijal nek
določen scenarij. KML podpira 3D COLLADA-modele. To so datoteke s končnico
.dae. Eden izmed programov, ki podpira izvoz 3D COLLADA-modelov, je tudi
Google SketchUp.
Model ima v KML-datoteki značko <Model>. Temu modelu določimo zemljepisno
širino <latitude>, zemljepisno dolžino <longitude>, nadmorsko višino
<altitude>, usmerjenost <heading> in spletni naslov do datoteke modela <href>.
Primer prikaza modela je v sledeči kodi:
<Model>
<altitudeMode>relativeToGround</altitudeMode>
<Location>
<longitude>6.809695243835449</longitude>
<latitude>21.239736557006836</latitude>
<altitude>0</altitude>
</Location>
<Orientation>
<heading>0</heading>
</Orientation>
<Link>
<href>http://localhost/upload/primer.dae</href>
</Link>
</Model>
2.1.5 Poti
Pot je množica povezanih točk. Značka za pot je <LineString>. Najbolj osnovna pot
mora imeti samo koordinate. Koordinate zapišemo v naslednjem vrstnem redu:
zemljepisna dolžina, zemljepisna širina, višina, nato pa dodamo presledek ali pa
gremo v novo vrstico. Če bomo imeli točke na zemljevidu zelo oddaljene, moramo
dodati lastnost <tessallate> z vrednostjo 1. To pomeni, da tudi če bo črta, ki
![Page 13: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/13.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 9
predstavlja pot, zelo dolga, se bo prilegala Zemljinemu površju. V primeru, da tega
ne storimo, se lahko zgodi, da črta ne bo vidna (slika 7 in slika 8). Če hočemo, da
tessellate deluje, moramo altitudeMode nastaviti na clampToGround.
Slika 7: Funkcija Tessellate je izklopljena
Slika 8: Funkcija Tessellate je vklopljena
Vsaka pot ima lahko tudi svoj stil. Stil dodamo z značko <styleUrl>. Oblikujemo
ga čisto neodvisno od naše poti, saj bi ga lahko uporabili tudi za kakšno drugo pot.
Stil ima značko <Style>, da bo pa to stil za pot pa dodamo značko <LineStyle>.
Stilu v našem primeru smo dodali barvo in širino. Barva je zapisana s šestnajstiško
vrednostjo in vsebuje štiri komponente: prosojnost in modro, zeleno ter rdečo barvno
komponento (slika 9).
Slika 9: Zapis barve v KML-formatu
Širina poti je lahko določena s točkami ali pa z metri. Z značko <width> je širina
določena s točkami. V tem primeru bo črta zavzela vedno po širini 12 točk ne glede
na to, koliko bo kamera oddaljena od površja Zemlje. Za širino v metrih moramo
uporabiti značko <gx:physicalWidth>. Bolj ko bo kamera oddaljena, tanjša bo pot.
To uporabimo takrat, ko hočemo, da se pot natančno prilega. Če je neka cesta široka
10 metrov, se bo črta z značko <gx:physicalWidth> prilegala cesti ne glede na
oddaljenost kamere in takrat se lahko zgodi, da se pot ne bo videla, če bo kamera
postavljena zelo visoko. Takrat raje določimo širino poti s točkami.
00 - FF 00 - FF 00 - FF 00 - FF
PROSOJNOST ZELENA MODRA RDEČA
![Page 14: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/14.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 10
Primer KML- kode poti je sledeči:
<Placemark id="path0">
<name>pot 0</name>
<styleUrl>#style0</styleUrl> <LineString>
<altitudeMode>clampToGround</altitudeMode>
<tessellate>1</tessellate>
<coordinates>
14.356391906738281,46.24080276489258,0
14.356213569641113,46.240665435791016,0
14.355985641479492,46.24012756347656,0
14.355876922607422,46.23972702026367,0
14.355703353881836,46.239253997802734,0
14.35634994506836,46.2391242980957,0
</coordinates>
</LineString>
</Placemark>
<Style id="style0">
<LineStyle>
<color>FFFFFFFF</color>
<width>12</width>
</LineStyle>
</Style>
2.2 Vtičnik Google Earth
Vtičnik Google Earth (Google Earth Vtičnik, 2012) je vtičnik za spletne brskalnike.
Uporablja se v navezi s programskim jezikom Javascript in deluje na naslednjih
računalnikih:
- Računalniki z operacijskim sistemom Microsoft Windows (2000, XP, Vista in 7)
o Google Chrome 1.0 in novejši
o Internet Explorer 7 in novejši (32-bitni)
o Firefox 2.0 in novejši
o Flock 1.0 in novejši
- Računalniki z operacijskim sistemom Apple Mac OS X 10.5 in novejši (Intel in
PowerPC)
o Google Chrome 1.0 in novejši
o Safari 3.1 in novejši
o Firefox 3.0 in novejši
Za prikaz vtičnika na spletni strani vpišemo naslednjo kodo:
<html>
<head>
<title>Sample</title>
<script type="text/javascript" src="https://www.google.com/jsapi">
</script>
<script type="text/javascript">
var ge;
google.load("earth", "1");
![Page 15: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/15.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 11
function init() {
google.earth.createInstance('map3d', initCB, failureCB);
}
function initCB(instance) {
ge = instance;
ge.getWindow().setVisibility(true);
}
function failureCB(errorCode) {
}
google.setOnLoadCallback(init);
</script>
</head>
<body>
<div id="map3d" style="height: 400px; width: 600px;"></div>
</body>
</html>
Z vtičnikom upravljamo preko vmesnika za programiranje aplikacij Google Earth
API. Ko naložimo KML-datoteko v vtičnik Google Earth, lahko do objektov, točk,
poti itd. dostopamo preko njihove identifikacije. Če imamo objekt z identifikacijo
objekt12, potem do njega dostopamo na naslednji način:
var objekt = ge.getElementByUrl('#objekt12')
S tem lahko dostopamo do podatkov, ki spadajo pod značko Placemark. Najbolj
osnovna podatka, ki ju lahko pridobimo, sta naziv in opis, kar je povzeto v tabeli 3.
Naziv objekt.getName()
Opis objekt.getDescription()
Tabela 3: Funkcije za pridobitev podatkov o Placemarku
Če želimo pridobiti podatke, kot so koordinate, usmerjenost in višina od elementov,
kot so točke, modeli ali poti, pa vpišemo naslednje:
objekt = objekt.getGeometry();
Kako pridobiti podatke o elementu, bomo prikazali v naslednjih poglavjih.
2.2.1 Točke
Točko v vtičniku ustvarimo na naslednji način.
Ustvarimo placemark: var placemark = ge.createPlacemark('');
Ustvarimo točko: var point = ge.createPoint('');
![Page 16: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/16.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 12
Točki določimo zemljepisno dolžino ter zemljepisno širino, višino: point.setLatitude(12);
point.setLongitude(12);
point.setAltitude(0);
Točko pripnemo na placemark: placemark.setGeometry(point);
Placemark prikažemo v Google Earthu: ge.getFeatures().appendChild(placemark);
Če želimo pridobiti podatke o točki, to storimo na naslednji način (tabela 4):
Zemljepisna širina point.getLatitude()
Zemljepisna dolžina point.getLongitude()
Višina point.getAltitude()
Tabela 4: Pridobitev podatkov o točki
2.2.2 Kamera
Kamera omogoča dva različna pogleda: prvoosebni in tretjeosebni. Pri prvoosebnem
pogledu določimo koordinate kamere. Kamera je primarni objekt in gledamo skozi
njen objektiv. Pri tretjeosebnem pogledu (slika 10) določimo koordinate
opazovanega objekta, kameri pa določimo oddaljenost od tega objekta. Opazovani
objekt je primarni objekt, kamera je namenjena samo za opazovanje tega objekta. Če
bi hoteli gledati vožnjo avtomobila skozi oči voznika, je to prvoosebni pogled. Če bi
hoteli gledati avtomobil tako, da ga vidimo od zadaj, je to tretjeosebni pogled.
Prvoosebni pogled se ustvari na naslednji način:
Najprej ustvarimo kamero: var camera = ge.createCamera('');
Tej kameri določimo lastnosti: camera.set(1,2,3,4,5,6,7);
1 – zemljepisna širina – latitude,
2 – zemljepisna dolžina – longitude,
3 – višina – altitude,
4 – načina prikaza višine – altitudeMode,
5 – usmerjenost – heading,
6 – nagnjenost naprej nazaj – tilt,
7 – nagnjenost levo desno – roll.
Drugi pogled pa je tretjeosebni. Ustvari se na nasledni način:
var lookAt = ge.createLookAt('');
lookAt.set(1,2,3,4,5,6,7);
![Page 17: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/17.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 13
1 – zemljepisna širina gledanega objekta – latitude,
2 – zemljepisna dolžina gledanega objekta – longitude,
3 – višina gledanega objekta – altitude,
4 – načina prikaza višine – altitudeMode,
5 – usmerjenost kamere – heading,
6 – nagnjenost kamere naprej nazaj – tilt,
7 – oddaljenost kamere – range.
Slika 10: Prikaz načina lookAt
(https://developers.google.com/kml/documentation/images/lookAtRevised.gif,
21.7.2012)
S spreminjanjem vrednosti z ukazom .set tako lahko dosežemo premikanje kamere.
Če izhajamo iz objekta kamere, ki ga ustvarimo na naslednji način:
var kamera =
ge.getView().copyAsCamera(ge.ALTITUDE_RELATIVE_TO_GROUND);
potem lahko podatke o poziciji pogleda kamere, ki jo upravlja uporabnik, pridobimo
z naslednjimi ukazi (tabela 5):
Zemljepisna širina kamera.getLatitude()
Zemljepisna dolžina kamera.getLongitude()
Usmerjenost kamera.getHeading()
Nagnjenost levo desno kamera.getTilt()
Višina kamera.getAltitude()
Tabela 5: Pridobitev podatkov o prvoosebnem pogledu
![Page 18: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/18.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 14
2.2.3 Modeli
Za prikaz modela pričnemo podobno kot pri točki.
Ustvarimo placemark: var placemark = ge.createPlacemark('');
Ustvarimo model: var model = ge.createModel('');
Pripnemo model na placemark: placemark.setGeometry(model);
Ustvarimo povezavo do modela: var link = ge.createLink('');
Določimo povezavo do modela: link.setHref('http://localhost/primer.dae');
Pripnemo povezavo na model: model.setLink(link);
Nato ustvarimo lokacijo, določimo njeno zemljepisno širino in dolžino ter pripnemo
lokacijo na model: var location = ge.createLocation('');
location.setLatitude(12);
location.setLongitude(12);
model.setLocation(location);
Prikažemo model v Google Earthu: ge.getFeatures().appendChild(placemark);
Pridobivanje podatkov o modelu nam omogočajo sledeče funkcije (tabela 6):
LOKACIJA
Zemljepisna širina model.getLocation().getLatitude()
Zemljepisna dolžina model.getLocation().getLongitude()
Višina model.getLocation().getAltitude()
ORIENTACIJA
Usmerjenost model.getOrientation.getHeading()
POVEZAVA
Naslov model.getLink.getHref()
Tabela 6: Pridobitev podatkov modela
2.2.4 Poti
Tudi za ustvarjanje poti se držimo podobnega postopka kot pri točki in modelu.
Najprej ustvarimo placemark: var placemark = ge.createPlacemark('');
![Page 19: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/19.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 15
Ustvarimo pot: var lineString = ge.createLineString('');
Pot pripnemo na placemark: placemark.setGeometry(lineString); Dodamo točke, kjer komponente funkcije pushLatLngAlt pomenijo: zemljepisno širino,
zemljepisno dolžino, višino. lineString.getCoordinates().pushLatLngAlt(12, 12, 0);
lineString.getCoordinates().pushLatLngAlt(12.001, 12.001, 0);
lineString.getCoordinates().pushLatLngAlt(12.002, 12.003, 0);
Placemark prikažemo v Google Earthu: ge.getFeatures().appendChild(placemark);
Podatke o poti pa lahko pridobimo na naslednji način (tabela 7):
Zemljepisna širina prve točke lineString.getCoordinates().get(0).getLatitude()
Zemljepisna dolžina prve točke lineString.getCoordinates().get(0).getLongitude()
Višina prve točke lineString.getCoordinates().get(0).getAltitude()
Število vnesenih točk lineString.getCoordinates().getLength()
Tabela 7: Pridobitev podatkov poti
Poti lahko spreminjamo pozicijo. To storimo na naslednji način (tabela 8):
Sprememba
pozicije
prve točke lineString.getCoordinates().setLatLngAlt(0,širina,dolžina,višina)
Tabela 8: Sprememba pozicije poti
![Page 20: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/20.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 16
3 ORODJA ZA RAZVOJ SPLETNE REŠITVE
3.1 Notepad++
Notepad++ (Notepad++, 2012) je prosto dostopen odprtokodni besedilni urejevalnik.
Začetki segajo v leto 2003, ko so novembra izdali prvo različico. Program je napisan
v programskem jeziku C++. Deluje na operacijskih sistemih Windows. Uporablja se
za pisanje, urejanje, pregledovanje kode za več kot 50 različnih programskih in
označevalnih jezikov. Pri delu nam pomaga tako, da z različnimi barvami označuje
dele kode in je zato koda preglednejša in berljivejša. Poleg označevanja kode ima
tudi možnost, da nam pomaga pri pisanju kode tako, da nam ponudi možne besede.
Če na primer napišemo »doc«, nam bo ponudil »document«. Podpira tudi
programska jezik Javascript in PHP.
3.2 WAMP
WAMP (WampServer, 2012) je programski paket, ki nam omogoča postavitev
spletnega strežnika s podatkovno bazo. Je najhitrejša možnost za postavitev
spletnega strežnika, saj je potrebnih samo nekaj klikov, da paket namestimo. Iz spleta
si naložimo celoten paket, ga namestimo, zaženemo in že deluje.
Kratica WAMP je poimenovana po komponentah paketa. Prva črka pomeni
Windows, ostale pa predstavljajo naslednje komponente:
- Apache – spletni strežnik,
- PHP – programski jezik,
- MySQL – podatkovne baze.
Tak paket obstaja tudi za operacijski sistem Mac OS X, in se imenuje MAMP, ter za
operacijski sistem Linux, ki se imenuje LAMP.
Paket vsebuje tudi grafični vmesnik, ki deluje v spletnem brskalniku. Imenuje se
phpMyAdmin. Preko phpMyAdmin lahko upravljamo s podatkovnimi bazami
MySQL. WAMP omogoča tudi nastavitve strežnika, hitro prižiganje in ugašanje
strežnika ter spremljanje strežniškega dnevnika. V meniju lahko izbiramo med več
kot 20 jeziki. V naši spletni rešitvi se bo WAMP uporabljal kot spletni prostor za
COLLADA-modele, do katerih bomo dostopali preko KML-ja.
3.3 HTML
HTML (Wikipedia HTML, 2012) je oznaka za Hyper Text Markup Language. Tako
kot KML je to označevalni jezik in predstavlja osnovo za spletno stran. S HTML-jem
določimo strukturo spletne strani, dodamo besedilo, tabele, slike in še veliko drugih
elementov.
![Page 21: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/21.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 17
Prvi HTML je imel oznako 1.0. Razvil ga je Tim Barners-Lee leta 1990 na inštitutu v
Cernu. Vseboval je najbolj osnovne elemente za postavitev spletne strani. Z
razvojem HTML-ja smo dobili različice 2.0, 3.0, 3.2, 4.0, 4.01 ter zadnjo različico
HTML5. Januarja 1997 je različica 3.2 postala prvi uradni standard, ki ga podpirajo
vsi spletni brskalniki. HTML 4.0 pa je prva različica, ki je podpirala CSS. Z različico
4.01 je prišlo samo nekaj manjših popravkov (HTML Različice jezika HTML, 2012).
Zadnja različica HTML5 (Wikipedia HTML5, 2012) je še vedno v fazi razvoja in
prinaša veliko novih funkcionalnosti. Dodani so multimedijski ter grafični elementi.
Dodamo lahko video in zvočne posnetke. Imamo možnost prikaza platna, na katerem
lahko prikažemo 2D in 3D-vsebino, ki jo je možno tudi animirati.
Za urejanje kode je dovolj najpreprostejši besedilni urejevalnik, kot na primer
Microsoftov Notepad ali pa prej opisani, bolj napredni, Notepad++. Obstajajo tudi
vizualni urejevalniki, pri katerih s pomočjo raznih orodij gradimo stran brez pisanja
kode, saj se koda avtomatsko generira v ozadju. Datoteke HTML imajo končnico
.html ali .htm.
3.4 CSS
CSS (Wikipedia CSS, 2012) je oznaka za Cascading Style Sheets. Uporablja se za
oblikovanje spletnih strani in je izšel leta 1996. Deluje v navezi s HTML in xHTML.
Možno ga je uporabiti tudi skupaj z XML, SVG ter XUL. SVG (Wikipedia SVG,
2012) je baziran na XML ter se uporablja za dvodimenzionalno vektorsko grafiko.
XUL (Wikipedia XUL, 2012) je označevalni jezik, ki omogoča izdelavo grafičnih
uporabniških vmesnikov.
CSS nam omogoča različne stvari. Tako lahko poljubno postavimo elemente na
spletno stran, jim določimo barvo, besedilu pisavo ipd. Sintaksa je zelo preprosta, saj
je sestavljena iz angleških besed, ki opisujejo različne lastnosti. Zadnja različica CSS
se imenuje CSS 4. Problem pri CSS-ju je, da ni popolnoma podprt v vseh
brskalnikih. To privede do tega, da lahko neka spletna stran v enem izmed
brskalnikov izgleda tako, kot smo si zamislili, v drugem brskalniku pa so elementi
lahko postavljeni povsem drugače. Datoteka CSS ima končnico .css.
3.5 Javascript
Javascript (Wikipedia Javascript, 2012; Flanagan, 2006) je objektno orientiran
programski jezik, ki ga je razvil Netscape. Je eden izmed najbolj popularnih
programskih jezikov za splet. V začetkih je imel drugačna imena in se je v razvojni
fazi imenoval Mocha. Ob prvem izidu so ga predstavili kot LiveScript, a zatem se je
pojavilo in obdržalo ime JavaScript.
Ta jezik je zelo pomemben v navezi s HTML in CSS. Omogoča nam, da lahko brez
osveževanja prikažemo stran dinamično. To deluje brez povezave s strežnikom, saj
![Page 22: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/22.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 18
deluje na strani uporabnika v internetnem brskalniku. Zaradi tega so vse funkcije
izvedene hitreje, saj ni potrebe, da se podatki pošiljajo na strežnik in da čakamo na
strežnikov odziv. Najbolj je to opazno takrat, ko imamo počasno internetno
povezavo. Če se polje preveri s programskim jezikom Javascript, bo ta preverba
izvršena takoj, če pa bo preverba narejena s programskim jezikom, ki deluje na strani
strežnika, bomo pa na preverjanje čakali precej dlje časa (Heilmann, 2006).
Da pa ne bi Javascript deloval samo na strani uporabnika, so predstavili tudi nekaj
implementacij, ki delujejo na strani strežnika. Najbolj opazna implementacija v
zadnjem času se imenuje Node.js (Node.js, 2012). Samostojna datoteka Javascript
ima končnico .js.
3.6 PHP
PHP (Wikipedia PHP, 2012) je spletni programski jezik in deluje na strani strežnika.
Je eden izmed prvih programskih jezikov, ki je deloval na strani strežnika in ga lahko
vključimo v HTML-kodo. Razvoj PHP-ja se je začel leta 1994. Izšel je leta 1995 pod
imenom Personal Home Page Tools. Uporabljamo ga lahko za pridobivanje podatkov
iz obrazcev, računanje, delo s podatkovnimi bazami, prenašanje datotek na strežnik
ipd. Uporabili ga bomo za prenos datotek iz uporabnikovega računalnika na strežnik,
kjer bo tekla spletna rešitev. Datoteka PHP ima končnico .php.
![Page 23: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/23.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 19
4 OPIS VMESNIKA
Spletni vmesnik smo razvili s pomočjo vtičnika Google Earth, programskih jezikov
PHP in Javascript ter spletnega strežnika WAMP.
Zaslonski posnetek vmesnika prikazuje slika 11. Sestavni elementi vmesnika so
naslednji:
- Iskalnik lokacij
- Glavni meni, ki je sestavljen iz štirih delov:
o Objekti
o Kamera
o Poti
o Popravi in dodaj
- Prikaz v vtičniku Google Earth
Slika 11: Spletni vmesnik
![Page 24: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/24.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 20
4.1 Iskalnik lokacij
Iskalnik lokacij (slika 12) je namenjen avtomatskemu iskanju le-teh. V iskalnik
vpišemo želeno lokacijo, kot je na primer kraj, naslov, znamenitost ipd. Iskalnik se
nato poveže s storitvijo Google Maps in poišče želeno lokacijo. Storitev Google
Maps vrne zadetek, ki se najbolj ujema z vneseno lokacijo, in ga prikaže na Google
Earthu.
Slika 12: Iskalnik lokacij
4.2 Glavni meni
Glavni meni je sestavljen iz štirih podmenijev, ki so prikazani v obliki zavihkov:
- Objekti
- Kamera
- Poti
- Popravi in dodaj
4.2.1 Objekti
Ta zavihek (slika 13) nam omogoča vnašanje objektov na katerokoli lokacijo. Za
vnos objekta moramo navesti več lastnosti:
- naziv,
- opis,
- zemljepisno širino,
- zemljepisno dolžino,
- usmerjenost,
- datoteko.
Zemljepisno širino in zemljepisno dolžino lahko vnesemo na dva različna načina:
- decimalni način
- način stopinje, minute, sekunde.
Pri decimalnem načinu (slika 14) imamo dve možnosti. Lahko vnesemo ročno z
decimalno vrednostjo, lahko pa poiščemo z iskalnikom želeno lokacijo ter kliknemo
na tisto točko, kamor želimo postaviti objekt. Program tako avtomatično izpiše
koordinate klika v polji zemljepisne širine ter zemljepisne dolžine.
Pri načinu, kjer za lokacijo objekta vnesemo stopinje, minute in sekunde (slika 15),
vpišemo v vsako okno posebej stopinje, minute, sekunde ter izberemo poloblo. Pri
zemljepisni širini lahko izberemo severno ali južno poloblo, pri zemljepisni dolžini
pa vzhodno ali zahodno poloblo.
![Page 25: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/25.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 21
Slika 13: Zavihek Objekti
![Page 26: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/26.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 22
Slika 14: Decimalni vnos lokacije objekta
Slika 15: Vnos lokacije objekta s stopinjami, minutami, sekundami
Usmerjenost objekta določimo z vnosom vrednosti od 0 do 359, kjer vrednost 0
pomeni, da je objekt usmerjen proti severu. Vsaka nadaljnja stopinja obrne objekt v
smeri urinega kazalca.
Pod Datoteka izberemo model, ki ga hočemo prikazati v vtičniku Google Earth. Z
gumbom Izberi datoteko odpremo okno, kjer izberemo model s končnico .dae
(COLLADA-datoteka).
Ko so vsi podatki o objektu izpolnjeni, kliknemo gumb Pošlji, nakar se objekt
prikaže v vtičniku (slika 16) in na seznamu objektov (slika 17).
Slika 16: Prikaz objekta v vtičniku Google Earth
![Page 27: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/27.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 23
Slika 17: Prikaz objekta na seznamu objektov
V primeru, da smo se zmotili pri nazivu ali opisu objekta, to popravimo tako, da
izberemo objekt na seznamu, vnesemo v polji naziv ali opis popravljeno besedilo in
pritisnemo gumb Shrani.
Če hočemo postaviti objekt bolj natančno, to storimo tako, da pritisnemo gumb
Uredi. Tako smo omogočili premikanje objekta s tipkami na tipkovnici. Tipke so
naslednje:
W – naprej
S – nazaj
A – levo
D – desno
E – obrat v smeri urinega kazalca
Q – obrat v obratni smeri urinega kazalca
Ko je objekt postavljen na želenem mestu, pritisnemo gumb Shrani.
Če želimo objekt izbrisati, ga izberemo v seznamu objektov in pritisnemo gumb
Briši.
Primer kode za premikanje objekta:
function premikObjekta() {
try {
if (izbrana >= 0 && !paused) {
heading = model.getOrientation().getHeading();
premikGorDolc = parseFloat(0.000005 * Math.cos((heading / 180) *
Math.PI));
premikGorDols = 0.000005 * Math.sin((heading / 180) * Math.PI);
premikLevoDesnoc = 0.000005 * Math.cos(((heading + 90) / 180) *
Math.PI);
premikLevoDesnos = 0.000005 * Math.sin(((heading + 90) / 180) *
Math.PI);
![Page 28: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/28.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 24
if (keyboard.pressed("q")) {
model.getOrientation().setHeading(model.getOrientation().getHeadin
g() + 1);
}
if (keyboard.pressed("e"))
{model.getOrientation().setHeading(model.getOrientation().getHeadi
ng() - 1);
}
if (keyboard.pressed("w")) {
model.getLocation().setLatitude(model.getLocation().getLatitude()
+ premikGorDolc);
model.getLocation().setLongitude(model.getLocation().getLongitude(
) + premikGorDols);
}
if (keyboard.pressed("s"))
{model.getLocation().setLatitude(model.getLocation().getLatitude()
- premikGorDolc);
model.getLocation().setLongitude(model.getLocation().getLongitude(
) - premikGorDols);
}
if (keyboard.pressed("a")) {
model.getLocation().setLatitude(model.getLocation().getLatitude()
- premikLevoDesnoc);
model.getLocation().setLongitude(model.getLocation().getLongitude(
) - premikLevoDesnos);
}
if (keyboard.pressed("d")) {
model.getLocation().setLatitude(model.getLocation().getLatitude() +
premikLevoDesnoc);
model.getLocation().setLongitude(model.getLocation().getLongitude(
) + premikLevoDesnos);
}
}
} catch (err) {}
setTimeout('premikObjekta()', 10); }
Premik izvedemo tako, da trenutni lokaciji objekta prištejemo premik po x-osi ter
premik po y-osi. Premik po x ter y-osi izračunamo glede na usmerjenost objekta
(slika 18).
![Page 29: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/29.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 25
Slika 18: Skica, premik
Premik naprej, nazaj:
Premik v x (premikGorDols)-smeri potem izrazimo takole:
(
)
Premik v y (premikGorDolc)-smeri:
(
)
Premik levo, desno:
Premik v x (premikLevoDesnos)-smeri izrazimo takole:
(
)
Premik v y (premikLevoDesnoc)-smeri:
(
)
Vrednost x prištejemo zemljepisni dolžini, vrednost y pa zemljepisni širini. V
primeru, da premikamo objekt naprej ali desno, vrednosti x in y prištejemo. Če
objekt premikamo dol ali levo, vrednosti x in y odštejemo.
usmerjenost
premik y
x
OBJEKT
![Page 30: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/30.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 26
4.2.2 Kamera
Drugi zavihek, ki ga lahko izberemo, je Kamera (slika 19). Le-ta nam omogoča
snemanje pozicij kamere z vmesnimi prehodi.
Slika 19: Zavihek Kamera
Kamero v vtičniku Google Earth postavimo na želeno mesto. V polje Čas prehoda
napišemo čas, ki ga kamera potrebuje, da pride do posnetega mesta, ter pritisnemo
gumb Posnemi. Pozicija kamere se nato shrani v seznam pozicij (slika 20).
Slika 20: Seznam pozicij
V primeru, da bi radi spremenili eno izmed pozicij, jo najprej dvakrat kliknemo na
seznamu. Kamera se bo postavila na že posneto pozicijo. Sedaj kamero prestavimo
![Page 31: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/31.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 27
tako, kot se nam zdi primerno, in pritisnemo gumb Shrani. Čas prehoda spremenimo
tako, da zbrišemo prejšnji čas in napišemo novega ter pritisnemo Shrani.
Če hočemo, da kamera stoji nekaj sekund, potem dodamo pavzo. V polje Pavza
vnesemo čas v sekundah, kolikor bo kamera na določeni poziciji mirovala. Nato
pritisnemo gumb Dodaj.
Slika 21 prikazuje točen pomeni prehodov in pavz. Na primer: za prvo točko dodamo
5-sekundni prehod, zatem sledi 5-sekundna pavza in potem 3-sekundni prehod na
naslednjo točko.
Slika 21: Prikaz snemanja animacije
Posneto si lahko ogledamo kadarkoli tako, da vstopimo v način predvajanja v
vtičniku. V delu predvajalnik, kliknemo gumb Vstopi. Na levi strani spodaj v
vtičniku se nam pojavi naslednje okno (slika 22), ki nam omogoča predvajanje poti,
po kateri potuje kamera:
Slika 22: Predvajalnik animacije
Predvajalnik zapremo z gumbom Izstop ali pa s križcem v samem predvajalniku.
Sedaj bomo predstavili programsko kodo, ki posname pozicije kamere in pripravi
KML-datoteko tako, da lahko predvaja animacijo.
PREHOD
Prva točka, ki smo jo posneli
PAVZA
Začetna točka
PREHOD
Druga točka, ki smo jo posneli
5 sekund 5 sekund 3 sekunde
![Page 32: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/32.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 28
Koda za izdelavo animacije:
V tej funkciji zberemo za vsako točko na poti naslednje podatke, ki so potrebni za
animacijo:
- čas prehoda,
- zemljepisno širino,
- zemljepisno dolžino,
- usmerjenost kamere,
- naklon kamere,
- višino kamere.
Te podatke zapišemo v tourPodatki, ki hrani vsak podatek za vsako točko na poti
posebej. V tabelo tourTabela pa zapišemo podatke v jeziku KML. Te podatke bomo
v naslednji funkciji sestavili v KML-datoteko.
function tourAnimacija() {
var cas = document.getElementById("tourCas").value;
var kameraZSirina;
var kameraZDolzina;
var kameraUsmerjenost;
var kameraNaklon;
var kameraVisina;
var kamera =
ge.getView().copyAsCamera(ge.ALTITUDE_RELATIVE_TO_GROUND) var tourTabela = new Array();
var tourPodatki = new Array();
tourPodatki[0] = new Array();
kameraZSirina = kamera.getLatitude();
kameraZDolzina = kamera.getLongitude();
kameraUsmerjenost = kamera.getHeading();
kameraNaklon = kamera.getTilt();
kameraVisina = kamera.getAltitude();
tourPodatki[g][0] = cas;
tourPodatki[g][1] = kameraZSirina;
tourPodatki[g][2] = kameraZDolzina;
tourPodatki[g][3] = kameraUsmerjenost;
tourPodatki[g][4] = kameraNaklon;
tourPodatki[g][5] = kameraVisina;
tourPodatki[g + 1] = new Array();
tourTabela[g] = '<gx:FlyTo>' + '<gx:duration>' + cas +
'</gx:duration>' + '<gx:flyToMode>smooth</gx:flyToMode>' +
'<Camera>' + '<longitude>' + kameraZDolzina + '</longitude>' +
'<latitude>' + kameraZSirina + '</latitude>' + '<altitude>' +
kameraVisina + '</altitude>' + '<heading>' + kameraUsmerjenost +
'</heading>' + '<tilt>' + kameraNaklon + '</tilt>' + '</Camera>' +
'</gx:FlyTo>';
g += 1;
kmlTour();
}
![Page 33: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/33.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 29
Sledeča koda bo sestavila KML-datoteko iz različnih komponent. Na začetek
postavimo začetni del KML-ja:
var kmlTourZacetek = '<?xml version="1.0" encoding="UTF-8"?>' +
'<kml xmlns="http://www.opengis.net/kml/2.2"' + "\r\n" +
'xmlns:gx="http://www.google.com/kml/ext/2.2">' + '<Document>' +
'<name>Animacija</name>' + '<open>1</open>' + '<gx:Tour>' +
'<name>Tour animation</name>' + '<gx:Playlist>';
Nato s funkcijo kmlTour v KML-datoteko po vrsti zapišemo podatke iz tabele
tourTabela.
function kmlTour() {
if (kmlTuraObject) {
ge.getFeatures().removeChild(kmlTuraObject);
kmlTuraObject = null;
}
kmlDatoteka = "";
kmlDatoteka += kmlTourZacetek;
for (j = 0; j <= g; j++) {
kmlDatoteka += tourTabela[j];
}
kmlDatoteka += kmlTourKonec;
kmlTuraObject = ge.parseKml(kmlTura);
ge.getFeatures().appendChild(kmlTuraObject);
walkKmlDom(kmlTuraObject, function () {
if (this.getType() == 'KmlTour') {
tour = this;
return false;
}
});}
Na koncu pa dodamo še ostalo, kar manjka, da bo KML-datoteka popolna: var kmlTourKonec = '</gx:Playlist>' + '</gx:Tour>' + '</Document>' +
'</kml>';
V spremenljivki kmlDatoteka so sedaj vsi potrebni podatki. Sedaj je potrebno te
podatke še razčleniti ter naložiti v vtičnik Google Earth. Na koncu razčlenjene
podatke naložimo v novo spremenljivko tour, ki jo bomo uporabljali za vstop v
predvajalnik.
Na koncu podajmo še primer sestavljene KML-datoteke z dvema vnosoma:
<?xml version="1.0" encoding="UTF-8" ?>
<kml xmlns="http://www.opengis.net/kml/2.2"
xmlns:gx="http://www.google.com/kml/ext/2.2">
<Document>
<name>Primer kamera</name>
<open>1</open>
![Page 34: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/34.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 30
<gx:Tour>
<name>Primer kamera</name>
<gx:Playlist>
<gx:FlyTo>
<gx:duration>2</gx:duration>
<gx:flyToMode>smooth</gx:flyToMode>
<Camera>
<longitude>-30.153120716902443</longitude>
<latitude>21.591904921330926</latitude>
<altitude>25484040.000000056</altitude>
<heading>5.2438994808286585</heading>
<tilt>0</tilt>
</Camera>
</gx:FlyTo>
<gx:FlyTo>
<gx:duration>5</gx:duration>
<gx:flyToMode>smooth</gx:flyToMode>
<Camera>
<longitude>-18.175868188289044</longitude>
<latitude>-8.149395686565772</latitude>
<altitude>25484040.00000005</altitude>
<heading>16.23266385656759</heading>
<tilt>0</tilt>
</Camera>
</gx:FlyTo></gx:Playlist>
</gx:Tour>
</Document>
</kml>
4.2.3 Poti
Pod zavihkom Poti (slika 23) najdemo orodje, s katerim lahko naredimo poljubne
poti v Google Earthu.
Začnemo tako, da kliknemo gumb Nova. S tem smo prižgali opcijo, da lahko v
vtičniku Google Earth rišemo črte. To naredimo tako, da se postavimo na neko
lokacijo in pritisnemo ter držimo tipko CTRL. Medtem ko držimo tipko CTRL,
kliknemo na tisti del zemljevida, kjer bi radi postavili točko poti. Da tvorimo pot, sta
potrebni vsaj dve točki. V primeru, da smo postavili točko na napačno mesto,
pritisnemo gumb Razveljavi. Ko smo končali z risanjem črte, ji lahko dodamo še
ime, izberemo barvo in določimo debelino. Če smo zadovoljni z rezultatom
pritisnemo gumb Dodaj. Primer ustvarjene poti prikazuje slika 24.
![Page 35: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/35.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 31
Slika 23: Zavihek Poti
Slika 24: Prikaz primera poti
![Page 36: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/36.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 32
Če hočemo na določeni poti še kaj spremeniti, kliknemo nanjo na seznamu (slika 25)
in opravimo želene spremembe. Ko smo končali s spremembami, pritisnemo gumb
Shrani spremembo.
Slika 25: Prikaz seznama poti
Naša rešitev omogoča premikanje po izbrani poti. To naredimo tako, da na seznamu
poti dvakrat kliknemo na želeno pot. Zatem v meniju, v razdelku Sledenje poti,
kliknemo gumb Začni. Kamera sedaj sledi poti, ki smo jo narisali (slika 26). Imamo
tudi možnost izbire treh različnih hitrosti premikanja po izbrani poti, kjer se s
pritiskom na 1 premikamo najpočasneje, s pritiskom na 3 pa najhitreje.
Slika 26: Točka se premika po izbrani poti
Sedaj bomo podali in obrazložili kodo, ki omogoča risanje poti. Če hočemo s
klikanjem po zemljevidu narisati pot, moramo najprej vključiti poslušalca klikov
(listener). Ker nočemo, da bi vsak klik sprožil neko funkcijo, moramo držati
pritisnjeno še tipko CTRL. Če kliknemo takrat, ko držimo tipko CTRL, se zapišeta
zemljepisna širina in dolžina v začasno tabelo. Iz te tabele koordinat se tvori skupek
![Page 37: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/37.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 33
koordinat za vsako pot posebej, kjer vsaka pot dobi prostor v drugi tabeli, kjer so te
koordinate zapisane na sledeči način:
14.306721687316895,46.165340423583984,0
14.306774139404297,46.165061950683594,0
14.30695915222168,46.1650276184082,0
14.307188987731934,46.16535949707031,0
14.306876182556152,46.16546630859375,0
14.306966781616211,46.165771484375,0
14.307467460632324,46.165916442871094,0
Ko končamo risanje poti, se koordinate iz začasne tabele pobrišejo tako, da je ta
pripravljena za vnos nove poti. Takrat se tudi postavi števec klikov na 0 ter zmanjša
tabelo tako, da ima samo eno prazno mesto.
Primer kode za risanje poti:
google.earth.addEventListener(ge.getGlobe(), 'click', eventHandler
);
var eventHandler = function (event) {
if (event.getCtrlKey() == true) {
var plong = event.getLongitude();
var plat = event.getLatitude();
tabelaPath[p][0] = plong;
tabelaPath[p][1] = plat;
p += 1;
tabelaPath[p] = new Array();
kmlPot();
event.preventDefault();
setTimeout(function () {}, 0);
}
}
google.earth.removeEventListener(ge.getGlobe(),'click',eventHandler
);
p=0;
tabelaPath.length=1;
Ta skupek koordinat se potem prilepi v KML-datoteko, ki se jo ob vsakem kliku
osveži. KML-datoteko izdelamo tako, da ji dodamo:
- začetni del KML;
- začetni del, ki je potreben, da nam izrisuje pot;
- koordinate poti;
- končni del, ki je potreben, da nam izrisuje pot;
- končni del KML.
![Page 38: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/38.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 34
Koda za ustvarjanje KML-datoteke poti:
function kmlPot() {
var pathZacetekKml = '<?xml version="1.0" encoding="UTF-8"?><kml
xmlns="http://www.opengis.net/kml/2.2"' + '
xmlns:gx="http://www.google.com/kml/ext/2.2">' + '<Document>' ;
var pathPlacemarkZacetek = '<LineString>' + '<tessellate>1
</tessellate>' + '<altitudeMode> clampToGround </altitudeMode>' +
'<coordinates>';
var pathPlacemarkKonec='</coordinates>' + '</LineString>' +
'</Placemark>';
var pathKonecKml = '</Document>' + '</kml>';
if (parsedPathKml) {
ge.getFeatures().removeChild(parsedPathKml);
kmlTuraObject = null;
}
for (j = 0; j < p; j++) {
tabelaKoordinateLine[steviloLineString] += tabelaPath[j][0] + ","
+ tabelaPath[j][1] + ",0 "
}
pathKml = "";
if (tabelaKoordinateLine[0] !=""){
pathKml += pathZacetekKml;
for (k=0;k<=steviloLineString;k++){
pathKml +=<Placemark id="path'+ k +'">';
pathKml +='<name>'pot'</name>'+ pathPlacemarkZacetek;
pathKml +=tabelaKoordinateLine[k];
pathKml +=pathPlacemarkKonec;
}
pathKml += pathKonecKml;
parsedPathKml = ge.parseKml(pathKml);
ge.getFeatures().appendChild(parsedPathKml);
}
Primer datoteke, ki vsebuje eno pot, prikazuje sledeča koda:
<?xml version="1.0" encoding="UTF-8" ?>
<kml xmlns="http://www.opengis.net/kml/2.2"
xmlns:gx="http://www.google.com/kml/ext/2.2">
<Document>
<Placemark id="path">
<name>"pot"</name>
<LineString>
<tessellate>1</tessellate>
<altitudeMode>clampToGround</altitudeMode>
<coordinates>
![Page 39: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/39.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 35
14.306721687316895,46.165340423583984,0
14.306774139404297,46.165061950683594,0
14.30695915222168,46.1650276184082,0
14.307188987731934,46.16535949707031,0
14.306876182556152,46.16546630859375,0
14.306966781616211,46.165771484375,0
14.307467460632324,46.165916442871094,0
</coordinates>
</LineString>
</Placemark>
</Document>
</kml>
Ko je pot določena, lahko izvedemo vizualizacijo gibanja po tej poti. S tem, ko smo
določili pot, imamo podane koordinate točk na tej poti. Glede na te točke najprej
izračunamo usmerjenost. Usmerjenost dobimo z razdaljami med točkama po oseh x
in y (slika 27).
Slika 27: Določanje usmejenosti – poti med dvema točkama
Najprej izračunamo oddaljenost med točkama po x ter y-osi:
Iz tega lahko dobimo usmerjenost s pomočjo enačbe:
Vendar to ne velja v vseh primerih. V primeru, da sta x in y negativna, torej, če je
ciljna točka 2 levo in spodaj glede na začetno točko 1 (slika 28), dobimo isto
usmerjenost kot takrat, ko sta x in y pozitivna. Na primer, če je x √ ter y = –3,
potem je usmerjenost 30°, kar je ista usmerjenost, kot če je x = √ ter y = 3. V obeh
primerih, bi se nam zato objekt premikal od točke 1 do točke 3. To rešimo na
naslednji način:
usmerjenost
1
2
y
x
![Page 40: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/40.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 36
S tem bomo dosegli premik proti točki 2 tudi v primeru, če bosta x in y negativna, saj
smo obrnili smer za 180°.
Slika 28: Sledenje poti, ko sta x in y negativna
Naslednja problematična situacija je, ko je x pozitiven in y negativen (slika 29).
Objekt se nam bo premaknil proti točki 3, saj je usmerjenost enaka, kot če je x
negativen in y pozitiven. Zato naredimo enako kot v prejšnjem primeru:
S tem bomo dosegli premik proti točki 2 tudi v primeru, če bosta x pozitiven in y
negativen, saj smo obrnili smer za 180°.
Slika 29: Sledenje poti, ko je x pozitiven in y negativen
1
2
Y negativen
X negativen 3
X pozitiven
Y pozitiven
1
2
Y negativen
X negativen
3 X pozitiven
Y pozitiven
![Page 41: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/41.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 37
Zadnja problematična situacija je, ko je začetna točka nad končno točko (slika 30). V
obeh primerih dobimo usmerjenost 0, saj delimo ničlo in se zato premikamo proti
točki 3. Zato v primeru, da je x = 0 in y negativen, storimo sledeče:
V primeru, da bi bil x pozitiven ali negativen ter y = 0, pa ni težav. Če je x pozitiven,
dobimo usmerjenost 90°, če pa je x negativen, pa dobimo usmerjenost –90°.
Slika 30: Sledenje poti, ko je x = 0 in je y negativen
Sedaj se lahko premikamo v pravi smeri, vendar smo vezani samo na prvi dve točki
poti. Da se lahko premikamo med poljubnim številom točk, naredimo naslednje:
Izračunamo razdalje med točkami:
| | | |
Ti dve razdalji bomo primerjali s to, ki jo je objekt že prepotoval. Vsakič, ko je
opravljen premik, ta premik prištejemo prepotovani razdalji.
V primeru, da so premiki izvedeni po x in y-osi, nam ni potrebno primerjati obeh
razdalj. Če je usmerjenost 90° ali 270°, potem primerjamo razdaljo X ter
prepotovano razdaljo X. Če je usmerjenost 180°, primerjamo razdaljo Y ter
prepotovano razdaljo Y.
1
2
Y negativen
3
Y pozitiven
![Page 42: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/42.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 38
Ko je prepotovana razdalja večja ali enaka od razdalje med točkama, preskočimo na
naslednjo točko. Ker prepotovana razdalja in dejanska razdalja med dvema točkama
zaradi interpolacije pri premikanju nista vedno natančno enaki, je potrebno takrat, ko
je prepotovana razdalja večja od dejanske razdalje, postaviti objekt točno na točko
(slika 31). Na primer, da se objekt znajde v točki x, ki je dlje od točke 2. V tem
primeru ga moramo prestaviti v točko 2. Če tega ne storimo, pride do odstopanj pri
izračunih in se lahko objekt premika stran od črte.
Slika 31: Odstopanje pri sledenju poti
Na koncu podajmo še kodo, ki omogoča gibanje po izbrani poti.
Primer kode za sledenje poti:
function followPath() {
if (!pathPaused) {
razlikaLongitude = tabelaPath[stevecPath + 1][0]-
tabelaPath[stevecPath][0];
razlikaLatitude = tabelaPath[stevecPath + 1][1]-
tabelaPath[stevecPath][1];
pathHeading = parseFloat(Math.atan(razlikaLongitude /
razlikaLatitude));
if (razlikaLatitude < 0 && razlikaLongitude < 0) {
pathHeading = pathHeading + Math.PI;
}
if (razlikaLatitude < 0 && razlikaLongitude > 0) {
pathHeading = pathHeading + Math.PI;
}
if (razlikaLatitude < 0 && razlikaLongitude == 0) {
pathHeading = pathHeading + Math.PI;
}
point.setLongitude(point.getLongitude() + hitrost *
Math.sin(pathHeading));
point.setLatitude(point.getLatitude() + hitrost *
Math.cos(pathHeading));
nlong += Math.abs(hitrost * Math.sin(pathHeading));
nlat += Math.abs(hitrost * Math.cos(pathHeading));
RAZDALJA
PREMIK PREMIK PREMIK PREMIK
A
A
Odstopanje
1 2 x
![Page 43: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/43.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 39
camera(point.getLongitude(), point.getLatitude(), parseFloat((360
* pathHeading) / (2 * Math.PI)), 4.99999976);
switch (pathHeading) {
case Math.PI / 2:
if (Math.abs(razlikaLongitude) >= nlong) {
setTimeout(followPath, timeout);
}
else {
if ((tabelaPath.length - 2) > stevecPath) {
nlong = 0;
nlat = 0;
point.setLongitude(parseFloat(tabelaPath[stevecPath +
1][0]));
point.setLatitude(parseFloat(tabelaPath[stevecPath +
1][1]));
stevecPath += 1;
setTimeout(followPath, timeout);
}
}
break;
case Math.PI:
if (Math.abs(razlikaLatitude) >= nlat) {
setTimeout(followPath, timeout);
}
else {
if ((tabelaPath.length - 2) > stevecPath) {
nlong = 0;
nlat = 0;
point.setLongitude(parseFloat(tabelaPath[stevecPath +
1][0]));
point.setLatitude(parseFloat(tabelaPath[stevecPath +
1][1]));
stevecPath += 1;
setTimeout(followPath, timeout);
}
}
break;
case - Math.PI / 2:
if (Math.abs(razlikaLongitude) >= nlong) {
setTimeout(followPath, timeout);
}
else {
if ((tabelaPath.length - 2) > stevecPath) {
nlong = 0;
nlat = 0;
point.setLongitude(parseFloat(tabelaPath[stevecPath +
1][0]));
point.setLatitude(parseFloat(tabelaPath[stevecPath +
1][1]));
stevecPath += 1;
setTimeout(followPath, timeout);
}
}
![Page 44: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/44.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 40
break;
break;
default:
if (Math.abs(razlikaLongitude) >= nlong &&
Math.abs(razlikaLatitude) >= nlat) {
setTimeout(followPath, timeout);
}
else {
if ((tabelaPath.length - 3) > stevecPath) {
nlong = 0;
nlat = 0;
point.setLongitude(parseFloat(tabelaPath[stevecPath +
1][0]));
point.setLatitude(parseFloat(tabelaPath[stevecPath + 1][1]));
stevecPath += 1;
setTimeout(followPath, timeout);
}}}}}
4.2.4 Funkcija popravi in dodaj
Slabost vtičnika Google Earth je, da se velikokrat iz različnih razlogov zruši. Takrat
se pojavi sledeča slika (slika 32):
Slika 32: Napaka pri vtičniku Google Earth
Neprijetna posledica napake v vtičniku je lahko, da izgubimo vse dosedanje delo in
moramo začeti znova. V ta namen smo v vmesnik dodali opcijo Popravi in dodaj
(slika 33), ki nam omogoča, da povrnemo zadnje stanje. Povrne nam vse objekte in
vse narejene poti. Ker je vtičnik Google Eart še vedno v razvojni fazi, je povrnitev
![Page 45: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/45.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 41
nastavitev kamere, na način kot je izvedena povrnitev objektov in poti, trenutno še
nemogoča.
Slika 33: Zavihek Popravi in dodaj
Ko pride do težav z vtičnikom Google Earth, kliknemo na gumb Prikaži. V oknu se
prikaže KML-tekst, ki ga kopiramo na odložišče. Spletno stran v brskalniku
osvežimo in počakamo, da se vtičnik Google Earth dokončno naloži. Ko je le-ta
naložen, prilepimo vsebino iz odložišča v isto okno, od koder smo vsebino prej
kopirali. Nato kliknemo gumb Popravi. Prikaže se naslednje okno (slika 34), ki
pokaže uspešnost obnovitve:
Slika 34: Prikaz števila obnovljenih objektov in poti
Pod zavihkom Popravi in dodaj je še opcija Naloži KML datoteko. Naložimo lahko
katerokoli KML-datoteko, ki je na spletu. V URL-okno kopiramo spletni naslov in
pritisnemo gumb Naloži. Če je naslov pravilen, se nam bo na vtičniku Google Earth
prikazala vsebina KML-datoteke.
Sedaj bomo predstavili kodo, s katero povrnemo izgubljeno stanje, če se vtičnik
Google Earth zruši. Za ponastavitev je potrebnih več korakov:
- V vtičnik Google Earth naložimo KML-vsebino.
- Preštejemo, koliko elementov nečesa je naloženega. Na primer, z vsebino
KML smo naložili tri objekte.
![Page 46: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/46.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 42
- Ker smo vsakemu objektu ali poti dali svojo identifikacijsko številko, lahko
na ta način pridobimo podatke od vsakega objekta ali poti posebej.
- Pridobljene podatke naložimo v vse tabele, saj hočemo, da je stanje natančno
tako, kot je bilo preden se je vtičnik Google Earth zrušil. Poleg tega podatke
naložimo tudi v sezname.
- Nastavimo števce poti in objektov. Če imamo tri objekte, nastavimo števec na
tri.
Koda za povrnitev podatkov:
function importKml() {
var kmlVsebina = document.getElementById("textboxPopravi").value;
var ls_stVnosov;
var ls_stTock;
var ls_Ime;
var ls_Barva;
var listboxLine= document.getElementById("lineList");
var vnosLine ;
var model;
var model_stVnosov;
var model_nazivObjekta;
var model_opisObjekta;
var model_Latitude;
var model_Longitude;
var model_Link;
var model_Heading;
var listboxModel = document.getElementById("objectList")
var vnosModel = document.createElement("Option");
var linestring;
var style;
kml = ge.parseKml(kmlVsebina);
ge.getFeatures().appendChild(kml);
Koda za povrnitev stilov:
ls_stVnosov = ge.getElementsByType("kmlLineString").getLength();
for (j=0;j<ls_stVnosov;j++){
linestring = ge.getElementByUrl("#path"+j);
style = ge.getElementByUrl("#style"+j).getLineStyle();
lineStyle[j][0]=style.getColor().get();
lineStyle[j][1]=style.getWidth();
lineStyle[j][2]=linestring.getName();
lineStyle[j+1]=new Array();
vnosLine = document.createElement("Option");
vnosLine.text = linestring.getName();
vnosLine.value = linestring.getName();
![Page 47: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/47.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 43
listboxLine.add(vnosLine);
steviloLineString+=1;
Koda za povrnitev poti:
ls_stTock = linestring.getGeometry().getCoordinates().getLength()
tabelaKoordinateLine[j] ="";
for (k=0;k<ls_stTock;k++){
tabelaPath[k][0]=
linestring.getGeometry().getCoordinates().get(k).getLongitude()
tabelaPath[k][1]=
linestring.getGeometry().getCoordinates().get(k).getLatitude();
tabelaKoordinateLine[j] += tabelaPath[k][0] + "," +
tabelaPath[k][1] + ",0 ";
tabelaPath[k+1] = new Array();
}
}
Koda za povrnitev modelov:
model_stVnosov = ge.getElementsByType("kmlModel").getLength();
for (j=0;j<model_stVnosov;j++){
model = ge.getElementByUrl("#model"+j);
model_nazivObjekta = model.getName();
model_opisObjekta = model.getDescription();
model = model.getGeometry();
model_Latitude = model.getLocation().getLatitude();
model_Longitude = model.getLocation().getLongitude();
model_Link = model.getLink().getHref();
model_Heading = model.getOrientation().getHeading();
vnosModel = document.createElement("Option");
vnosModel.text = model_nazivObjekta;
vnosModel.value = model_nazivObjekta;
listboxModel.add(vnosModel);
i+=1;
ge.getFeatures().removeChild(kml);
KML-podatki modelov:
objektiTabela[j] = '<name>' + model_nazivObjekta + '</name>' +
'<description>' + model_opisObjekta + '</description>' + '<Model>'
+ '<altitudeMode>relativeToGround</altitudeMode>' + '<Location>' +
'<longitude>' + model_Longitude + '</longitude>' + '<latitude>' +
model_Latitude + '</latitude>' + '<altitude>0</altitude>' +
'</Location>' + '<Orientation>' + '<heading>' + model_Heading +
'</heading>' + '</Orientation>' + '<Link>' + '<href>' + model_Link
+ '</href>' + '</Link>' + '</Model>' + '</Placemark>';
}
Združeni KML-podatki poti in stilov:
pathKml = "";
![Page 48: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/48.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 44
if (tabelaKoordinateLine[0] !=""){
pathKml += pathZacetekKml;
for (k=0;k<steviloLineString;k++){
pathKml +='<Style
id="style'+k+'">'+'<LineStyle>'+'<color>'+lineStyle[k][0]+'</co
lor>'+ '<width>'+lineStyle[k][1]+'</width>'+'</LineStyle>' +'
</Style>'+'<Placemark id="path'+ k +'">';
pathKml +='<name>'+lineStyle[k][2]+'</name>' +
'<styleUrl>#style'+k+'</styleUrl>'+ pathPlacemarkZacetek;
pathKml +=tabelaKoordinateLine[k];
pathKml +=pathPlacemarkKonec;
}
pathKml += pathKonecKml;
parsedPathKml = ge.parseKml(pathKml);
ge.getFeatures().appendChild(parsedPathKml);
}
kmlModel = "";
kmlModel += kmlZacetek;
for (j = 0; j < model_stVnosov; j++) {
kmlModel += '<Placemark id="model' + j + '">'
kmlModel += objektiTabela[j];
}
kmlModel += kmlKonec;
parsedkmlModel = ge.parseKml(kmlModel);
ge.getFeatures().appendChild(parsedkmlModel);
alert("Število obnovljenih poti: " + ls_stVnosov + "\n" + "Število
obnovljenih objektov: "+ model_stVnosov);}
![Page 49: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/49.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 45
5 PRIMER EVAKUACIJSKEGA OKOLJA
Do sedaj smo predstavili osnove izdelave 3D-okolja v Google Earthu. S
pridobljenimi osnovami lahko izdelamo preprost primer evakuacijskega okolja, kot
je prikazan iz dveh perspektiv na sledečih slikah (slika 35 in slika 36).
V model okolja smo dodali štiri vrste objektov: stolpnice, nizke bloke in dva tipa
stanovanjskih hiš. Objekte smo razporedili v strnjeno naselje. Med objekti smo
narisali črte, ki predstavljajo možne evakuacijske poti, in vsako pot pobarvali z drugo
barvo, da je takoj razvidno, kje katera pot poteka.
Ko je scenarij postavljen, si lahko za vsako pot posebej ogledamo, kje poteka, tako
da ji sledimo s funkcijo sledenja (slika 37).
Slika 35: Primer evakuacijskega okolja 1
![Page 50: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/50.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 46
Slika 36: Primer evakuacijskega okolja 2
Slika 37: Sledenje med zgradbami
![Page 51: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/51.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 47
6 ZAKLJUČEK
V diplomskem delu smo predstavili razvoj spletne rešitve, ki omogoča poustvarjanje
3D-okolja v vtičniku Google Earth. Spletno rešitev smo razvili s pomočjo
odprtokodne oz. prosto dostopne programske opreme, kar pomeni zelo ekonomično
rešitev. Hkrati je spletna rešitev neodvisna od platforme, saj je dostopna od kjerkoli,
kar je izrednega pomena za ekipe, ki delujejo na kriznih področjih, kjer je po navadi
mogoč dostop do spleta le preko mobilnih naprav.
Razvita spletna rešitev omogoča iskanje lokacij, uvoz in postavitev tridimenzionalnih
COLLADA-objektov, risanje poti in njihovo predstavitev. Uvoz in postavitev
tridimenzionalnih objektov je ključnega pomena za učinkovito vizualizacijo kriznega
okolja, iz katerega je možno razbrati različne evakuacijske poti in na podlagi tega
izbrati optimalno. Hkrati je omogočena še vizualizacija potovanja po izbrani poti, kar
doda še dodatno težo učinkovitosti razvite rešitve, saj lahko na ta način krizna ekipa
predvidi morebitne nevšečnosti, ki bi se lahko pojavile na tej poti.
Nadaljnje delo bo potekalo v smeri integracije spletnega vmesnika v sistem za
podporo odločanju v kriznih situacijah (SPOKS). Potrebno bo ustvariti vmesnik, ki
prebere podatke o kriznem okolju in situaciji iz SPOKS-a in jih pretvori v format
KML, primeren za prikaz v razvitem spletnem vmesniku. S tem bomo pridobili
močno vizualizacijsko orodje, ki bo odločilno pripomoglo pri iskanju optimalnih
evakuacijskih poti na kriznih območjih. Za uporabo v realnih situacijah je poleg
omenjenega potrebno nasloviti tudi dostopnost in avtonomnost rešitve v primeru
izpada omrežja.
![Page 52: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/52.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 48
LITERATURA IN VIRI
Drnovšček, M. (2010). Možnost predstavitve različnih prostorskih podatkov v
Google Earth, diplomsko delo. Univerza v Ljubljani, Fakulteta za gradbeništvo in
geodezijo.
Flanagan, D. (2006). JavaScript – The Definitive Guide. O'Reilly.
Google Code Playground. (21. 7. 2012). Pridobljeno iz
http://code.google.com/apis/ajax/playground/
Google Developers – Google Earth API Developer's Guide. (21. 7. 2012).
Pridobljeno iz https://developers.google.com/earth/documentation/index
Google Developers – Google Earth API Reference. (21. 7. 2012). Pridobljeno iz
https://developers.google.com/earth/documentation/reference/
Google Developers – KML Documentation. (21. 7. 2012). Pridobljeno iz
https://developers.google.com/kml/documentation/
Google Earth Vtičnik. (23. 7. 2012). Pridobljeno iz
http://www.google.com/earth/explore/products/plugin.html
Google Zemlja. (15.7.2012). Pridobljeno iz http://www.google.com/earth/index.html
Heilmann, C. (2006). Beginning JavaScript with Dom Scripting and Ajax: From
Novice to Professional. United States of America: Apress.
Node.js.(1. 8. 2012). Pridobljeno iz http://nodejs.org
Notepad++. (15. 7. 2012). Pridobljeno iz http://notepad-plus-plus.org/
Škraba, A., Stojanović, R., De Amicis, R., Berkowicz, S., Conti, G., Elhanani, D.,
Lekić, N., Dragović, M., Kofjač, D. (2012) Integrating air-pollution dispersion
simulation models and GIS for urban air-pollution emergency management. V:
Breitenecker, F. (ur.), Troch, I. (ur.). 7th Vienna Conference on Mathematical
Modelling, February 15–17, 2012, Vienna University of Technology, Austria.
MATHMOD Vienna 2012: (ARGESIM Report, no. S38). Vienna: ARGESIM, cop.
2012, 4 str. Dostopno
na: http://seth.asc.tuwien.ac.at/proc12/full_paper/Contribution177.pdf (31. 7. 2012).
w3schools CSS. (21. 7. 2012). Pridobljeno iz http://www.w3schools.com/css/
w3schools HTML. (21. 7. 2012). Pridobljeno iz
http://www.w3schools.com/html/default.asp
![Page 53: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/53.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 49
w3schools Learn Javascript. (21. 7. 2012). Pridobljeno iz
http://www.w3schools.com/js/
w3schools PHP file upload. (21. 7. 2012). Pridobljeno iz
http://www.w3schools.com/php/php_file_upload.asp
WampServer. (15. 7. 2012). Pridobljeno iz http://www.wampserver.com/en/
Wikipedia CSS. (25. 7. 2012). Pridobljeno iz http://en.wikipedia.org/wiki/Css
Wikipedia HTML. (25. 7. 2012). Pridobljeno iz http://en.wikipedia.org/wiki/HTML
Wikipedia HTML5. (25. 7. 2012). Pridobljeno iz
http://en.wikipedia.org/wiki/HTML5
Wikipedia KML. (25. 7. 2012). Pridobljeno iz
http://en.wikipedia.org/wiki/Keyhole_Markup_Language
Wikipedia Notepad++. (25. 7. 2012). Pridobljeno iz
http://en.wikipedia.org/wiki/Notepad%2B%2B
Wikipedia PHP. (25. 7. 2012). Pridobljeno iz http://en.wikipedia.org/wiki/PHP
Wikipedia SVG. (25. 7. 2012). Pridobljeno iz
http://en.wikipedia.org/wiki/Scalable_Vector_Graphics
Wikipedia XUL. (25. 7. 2012). Pridobljeno iz http://sl.wikipedia.org/wiki/XUL
Zaveršnik, M. (25. 7. 2012). HTML. Pridobljeno iz http://zaversnik.fmf.uni-
lj.si/gradiva/html/uvod/razlicice.php
![Page 54: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/54.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 50
PRILOGE
- Programska koda.
![Page 55: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/55.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 51
KAZALO SLIK
Slika 1: KML-podmape ............................................................................................... 3
Slika 2: Prikaz točke .................................................................................................... 4
Slika 3: Razlika med načini prikaza višine absolute ter relativeToGround ................. 5
Slika 4: Naklon kamere ................................................................................................ 6
Slika 5: Prikaz hitrosti v načinu smooth ...................................................................... 7
Slika 6: Prikaz hitrosti v načinu bounce ...................................................................... 7
Slika 7: Funkcija Tessellate je izklopljena .................................................................. 9
Slika 8: Funkcija Tessellate je vklopljena ................................................................... 9
Slika 9: Zapis barve v KML-formatu .......................................................................... 9
Slika 10: Prikaz načina lookAt
(https://developers.google.com/kml/documentation/images/lookAtRevised.gif,
(21.7.2012) ................................................................................................................. 13
Slika 11: Spletni vmesnik .......................................................................................... 19
Slika 12: Iskalnik lokacij ........................................................................................... 20
Slika 13: Zavihek Objekti .......................................................................................... 21
Slika 14: Decimalni vnos lokacije objekta ................................................................ 22
Slika 15: Vnos lokacije objekta s stopinjami, minutami, sekundami ........................ 22
Slika 16: Prikaz objekta v vtičniku Google Earth ...................................................... 22
Slika 17: Prikaz objekta na seznamu objektov .......................................................... 23
Slika 18: Skica, premik .............................................................................................. 25
Slika 19: Zavihek Kamera ......................................................................................... 26
Slika 20: Seznam pozicij ............................................................................................ 26
Slika 21: Prikaz snemanja animacije ......................................................................... 27
Slika 22: Predvajalnik animacije ............................................................................... 27
Slika 23: Zavihek Poti ................................................................................................ 31
Slika 24: Prikaz primera poti ..................................................................................... 31
Slika 25: Prikaz seznama poti .................................................................................... 32
Slika 26: Točka se premika po izbrani poti ............................................................... 32
Slika 27: Določanje usmejenosti – poti med dvema točkama ................................... 35
Slika 28: Sledenje poti, ko sta x in y negativna ......................................................... 36
Slika 29: Sledenje poti, ko je x pozitiven in y negativen ........................................... 36
Slika 30: Sledenje poti, ko je x = 0 in je y negativen ................................................ 37
Slika 31: Odstopanje pri sledenju poti ....................................................................... 38
Slika 32: Napaka pri vtičniku Google Earth .............................................................. 40
Slika 33: Zavihek Popravi in dodaj ............................................................................ 41
Slika 34: Prikaz števila obnovljenih objektov in poti ................................................ 41
Slika 35: Primer evakuacijskega okolja 1. ................................................................. 45
Slika 36: Primer evakuacijskega okolja 2. ................................................................. 46
Slika 37: Sledenje med zgradbami ............................................................................. 46
![Page 56: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/56.jpg)
Univerza v Mariboru - Fakulteta za organizacijske vede Diplomsko delo univerzitetnega študija
Matic Luznar: Razvoj sistema za 3d vizualizacijo evakuacijskega načrta
v Google Earth Stran 52
KAZALO TABEL
Tabela 1: Sestava KML .............................................................................................. 2
Tabela 2: Bistvene značke za postavitev kamere ......................................................... 6
Tabela 3: Funkcije za pridobitev podatkov o Placemarku ......................................... 11
Tabela 4: Pridobitev podatkov o točki ....................................................................... 12
Tabela 5: Pridobitev podatkov o prvoosebnem pogledu ........................................... 13
Tabela 6: Pridobitev podatkov modela ...................................................................... 14
Tabela 7: Pridobitev podatkov poti ............................................................................ 15
Tabela 8: Sprememba pozicije poti ........................................................................... 15
![Page 57: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/57.jpg)
Programska koda
<html>
<!--CSS postavitev elementov-->
<style type="text/css">
h1 {
text-align:center;
font-family:"Trebuchet MS";
font-style:oblique
}
label {
font-family:"Trebuchet MS";
float: left;
text-align: left;
margin-top: 3px;
margin-left: 10px;
color: dark grey;
font-style: bold;
font-size: 10;
}
label.c {
font-family:"Trebuchet MS";
font-size:12;
color:black;
}
input.vnos {
width:40px;
height:20;
font-size:10;
margin:0px;
}
input.button:hover {
background-color:#FF9933;
}
![Page 58: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/58.jpg)
input.button {
width:53px;
height:20px;
margin-left:5px;
border-radius:5px;
font-family:"Trebuchet MS";
font-size: 10;
border-color: #000000;
border-width: 1px;
background-color: # F0F0F0;
}
.center {
margin-left: auto;
margin-right: auto;
width: 1280;
font-size: 10;
}
a.linkP {
font-family:"Trebuchet MS";
text-decoration: none;
font-size: 10;
font-weight: bold;
}
a.linkP:link {
color: #000000;
}
a.linkP:visited {
color:#000000;
}
a.linkP:hover {
color: #FF5500;
}
a.linkP:active {
color: #000000;
}
HR {
![Page 59: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/59.jpg)
width: 220px;
align:left;
}
</style>
<!--skripta, ki identificira KML objekt-->
<script src="http://earth-api-samples.googlecode.com/svn/trunk/lib/kmldomwalk.js"
type="text/javascript"></script>
<!--ključ za dostop do Google Maps-->
<script src="http://www.google.com/jsapi?key=AIzaSyACTr7iV7vf2MvpbHQ9Cw4rvX1GuqqzQlo"
type="text/javascript"></script>
<!-- http://jscolor.com/ -->
<script type="text/javascript" src="jscolor/jscolor.js"></script>
<!-- http://learningthreejs.com/data/THREEx/docs/THREEx.KeyboardState.html-->
<script src="THREEx.KeyboardState.js"></script>
<head></head>
<body onLoad="start()">
<div class="center">
<!--Nevidni okvir v katerem se izvede upload datoteke na strežnik-->
<iframe src="upload_file.php" id="okvir" name="okvir" width="0" height="0"
style="hidden" frameborder=0 marginheight=0 marginwidth=0 scrolling=no></iframe>
<!--Iskalnik-->
<label for="naziv" class="c" style="text-align:right; margin-right:10px">Iskalnik:</label>
<input type="text" id="location" />
<input type="button" class="button" style="vertical-align: 1px" onClick="pojdiNaLokacijo()"
value="Najdi" />
<br>
<!--Google Earth vtičnik-->
<div id="map3d" style="float:left; height:800; width:900;"></div>
<!--Zavihki glavnega menija-->
<a href="#" onclick="div_Objekti();podcrtanMeni=0;meniPodcrtan();return false;"
class="linkP" style="margin-left:10px;" id="menuObjects">OBJEKTI</a>
<a href="#" onclick="div_Animacija();podcrtanMeni=1;meniPodcrtan();return false;"
class="linkP" style="margin-left:5px;" id="menuCamera">KAMERA</a>
<a href="#" onclick="div_Poti();podcrtanMeni=2;meniPodcrtan();return false;"
class="linkP" style="margin-left:5px;" id="menuPath">POTI</a>
<a href="#" onclick="div_Popravi();podcrtanMeni=3;meniPodcrtan();return false;"
![Page 60: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/60.jpg)
class="linkP" style="margin-left:5px;" id="menuRepair">POPRAVI in DODAJ</a>
<hr align="left" />
<!--Podmeni objekti-->
<div id="div_objekti">
<input type="button" class="button" value="Nov objekt" onClick="novObjekt()"
style="margin-bottom:5px; width:85px;" id="novObjekt" />
<input type="button" style="width:85px;" onClick="kmlModelParse()" value="Osveži"
class="button" />
<br>
<select name="objekti" id="objectList"
style="margin-left:10px; margin-bottom:5px;width:166px; height:120px"
multiple="multiple" ondblclick="pojdiNaObjekt()" onClick="pridobiPodatke()"></select>
<br>
<input type="button" value="Uredi" class="button" onClick="urediObjekt()"
id="uredi" />
<input type="button" value="Shrani" onClick="shraniKml()" class="button"
id="shrani" />
<input type="button" onClick="brisiKML()" value="Briši" class="button"
id="brisi" />
<div id="div_objektiStart">
<form id="formNaziv">
<br>
<label for="naziv" style="width:50px" class="c">Naziv:</label>
<br>
<br>
<input type="text" id="nazivObjekta" style="width:166px; margin-left:10px"
/>
<br>
<br>
<label for="opis" style="width:50px" class="c">Opis:</label>
<br>
<br>
<textarea style="width:166px; resize:none; margin-left:10px" rows="3"
id="opisObjekta"></textarea>
<br>
</form>
![Page 61: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/61.jpg)
<div id="div_radio">
<hr align="left" width="50%" />
<label for="zs" class="c">Stopinje, minute, sekunde:</label>
<input type="radio" name="sirinaRadio"
id="koorSMS" onClick="skrijDecimal()" />
<br>
<br>
<label for="zs" class="c">Decimalno</label>
<input type="radio" name="sirinaRadio" id="koorDec" onClick="prikaziDecimal()"
/>
<br>
</div>
<hr align="left" width="50%" />
<div id="formSMS">
<form id="formSMS">
<label for="zs" class="c">Zemljepisna širina:</label>
<br>
<br>
<input class="vnos" type="text" id="stopinjes" maxlength=2
onKeyPress="return numbersonly(this, event)"
style="margin-left:10px" />
<input class="vnos" type="text" id="minutes" maxlength=2
onKeyPress="return numbersonly(this, event)"
/>
<input class="vnos" type="text" id="sekundes"
onKeyPress="return numbersonly(this, event)"
/>
<select style="width:40px" id="sirina" name="sirina">
<option value="S">S</option>
<option value="J">J</option>
</select>
<br>
<br>
<label for="zd" class="c">Zempljepisna dolžina:</label>
<br>
<br>
![Page 62: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/62.jpg)
<input class="vnos" type="text" id="stopinjed" maxlength=2
onKeyPress="return numbersonly(this, event)"
style="margin-left:10px" />
<input class="vnos" type="text" id="minuted" maxlength=2
onKeyPress="return numbersonly(this, event)"
/>
<input class="vnos" type="text" id="sekunded"
onKeyPress="return numbersonly(this, event)"
/>
<select style="width:40px" id="dolzina">
<option value="V">V</option>
<option value="Z">Z</option>
</select>
</form>
</div>
<div id="formDecimal">
<form id="formDecimal">
<label for="dec" class="c">Zemljepisna širina:</label>
<br>
<br>
<input class="vnos" type="text" id="sirinaDecimal"
style=" margin-left:10px; width:126px"
onKeyPress="return numbersonly(this, event)">
<br>
<br>
<label for="dec2" class="c">Zemljepisna dolžina:</label>
<br>
<br>
<input class="vnos" type="text" id="dolzinaDecimal"
style=" margin-left:10px; width:126px"
onKeyPress="return numbersonly(this, event)" />
</form>
</div>
<hr align="left" width="50%" />
<label for="usmerjenost" class="c">Usmerjenost:</label>
<br>
![Page 63: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/63.jpg)
<br>
<input type="text" style="margin-left:10px; width:90px" id="heading"
onKeyPress="return numbersonly(this, event)"
/>
</div>
<hr align="left" width="50%" />
<div id="div_poslji">
<form action="upload_file.php" method="post" enctype="multipart/form-data"
target="okvir" id="formUpload">
<label class="c" for="file">Datoteka:</label>
<br>
<br>
<input type="file" name="file" id="file" style="margin-left:10px" />
<br>
<br>
<input class="button" type="submit" value="Pošlji" style="margin-left:10px"
onClick="posljiObjekt()" />
<input type="button" value="Prekliči" class="button" onClick="prekliciNovObjekt()"
/>
<br>
</form>
</div>
</div>
<!--Podmeni popravi-->
<div id="div_popravi">
<textarea style="width:200px; margin-left:10px" rows="8" id="textboxPopravi"></textarea>
<br>
<input type="button" class="button" style="margin-left:10px" value="Prikaži"
onClick="exportKML()" />
<input type="button" class="button" value="Popravi" onClick="importKml()"
/>
<br>
<hr align="left" />
<!--Naloži KML-->
<label for="labelNaloziKml" class="c">Naloži KML datoteko:</label>
<br>
![Page 64: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/64.jpg)
<br>
<label for="naloziKmlLabel" class="c">URL:</label>
<input type="text" style="margin-left:10px" id="kmlFetchUrl"
/>
<br>
<br>
<input type="button" class="button" style="margin-left:10px" value="Naloži"
onClick="naloziKML()" />
</div>
<!--Podmeni poti-->
<div id="div_poti">
<input type="button" value="Razveljavi" class="button" style="font-size:9"
onClick="razveljaviLine()" />
<input type="button" class="button" value="Nova" onClick="prizgiEvent()"
id="novaPot" />
<input type="button" class="button" value="Briši" onClick="brisiPath()"
/>
<br>
<br>
<select name="objekti" id="lineList" multiple="multiple"
onClick="pridobiLine();linePodatki()"
ondblClick="pojdiNaPot()"
style="margin-left:10px; margin-bottom:5px;width:166px; height:120px"></select>
<br>
<input type="button" class="button" value="Dodaj" onClick="potrdiLineString()"
/>
<input type="button" id="prekliciPot" value="Prekliči" onClick="prekliciPot()"
class="button" />
<br>
<hr align="left" />
<div id="div_potiStart">
<label for="imePoti" class="c">Ime Poti:</label>
<br>
<br>
<input type="text" id="potIme" style="margin-left:10px" />
<br>
![Page 65: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/65.jpg)
<br>
<label for="barva" class="c">Barva:</label>
<br>
<br>
<input class="color" onChange="kmlPath();applyPath();" id="barvaPoti"
style="margin-left:10px" />
<br>
<br>
<label for="debelina" class="c">Debelina:</label>
<br>
<br>
<input type="text" id="debelinaCrte" style=" width:36px;margin-left:10px;"
/>
<input type="button" value="-" onClick="debelinaCrteMinus()" style="width:20px;"
class="button" />
<input type="button" value="+" onClick="debelinaCrtePlus()" style="width:20px"
class="button" />
<br>
<br>
<input type="button" class="button" value="Shrani spremembo" style="width:100px"
onClick="applyPath()" />
<br>
<br>
<hr align="left" width="50%" />
<label for="debelina" class="c">Sledenje poti:</label>
<br>
<br>
<input type="button" class="button" value="Začni" onClick="contPath()"
/>
<input type="button" class="button" value="Ustavi" onClick="pausePath()"
/>
<br>
<br>
<label for="debelina" class="c">Hitrost</label>
<br>
<br>
![Page 66: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/66.jpg)
<input type="button" class="button" style="width=30px" value="1"
onClick="hitrost = 0.0000025;"
/>
<input type="button" class="button" style="width=30px" value="2"
onClick="hitrost = 0.000004;"
/>
<input type="button" class="button" style="width=30px" value="3"
onClick="hitrost = 0.000006;"
/>
<br>
<br>
</div>
<label for="narisiPot" id="narisiPot" class="c" style="color:red">Narišite pot!</label>
<br>
<br>
</div>
<!--Podmeni kamera-->
<div id="div_animacija">
<label for="lblcas" class="c">Čas prehoda:</label>
<br>
<br>
<input type="text" id="tourCas" style="width:116px; margin-left:10px"
maxLength="3" onKeyPress="return numbersonly(this, event)" />
<input type="button" class="button" onClick="tourAnimacija()" value="Posnemi"
/>
<br>
<br>
<select name="objekti" id="tourList"
style="margin-left:10px; margin-bottom:5px;width:166px; height:120px"
multiple="multiple" onClick="izberiTour()" ondblClick="pojdiNaTour()"></select>
<br>
<input type="button" class="button" onClick="urediTour()" value="Shrani"
/>
<input type="button" class="button" id="brisiTour" onClick="brisiTour()"
value="Briši" />
<br>
![Page 67: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/67.jpg)
<br>
<hr align="left" width="50%" />
<label for="lblcas" class="c">Pavza:</label>
<br>
<br>
<input type="text" id="tourPause" style="width:116px; margin-left:10px"
maxLength="3" onKeyPress="return numbersonly(this, event)" />
<input type="button" class="button" onClick="tourPavza()" value="Dodaj"
/>
<br>
<hr align="left" width="50%" />
<label for="lblcas" class="c">Predvajalnik:</label>
<br>
<br>
<input type="button" class="button" value="Vstop" id="startTour" onClick="startTour()"
/>
<input type="button" class="button" onClick="stopTour()" value="Izstop"
/>
</div>
</div>
</body>
<title>KML, Google Earth</title>
<script type="text/javascript" src="https://www.google.com/jsapi">
</script>
<script type="text/javascript">
//zagon Google Earth vtičnika
var ge;
google.load("earth", "1");
function init() {
google.earth.createInstance('map3d', initCB, failureCB);
}
function initCB(instance) {
ge = instance;
![Page 68: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/68.jpg)
ge.getWindow().setVisibility(true);
google.earth.addEventListener(ge.getGlobe(), 'click', eventLokacija);
}
function failureCB(errorCode) {}
google.setOnLoadCallback(init);
</script>
<script type="text/javascript">
//prikaže polje za vnos koordinat z decimalnimi vrednostmi
function prikaziDecimal() {
document.getElementById("formSMS").style.display = "none";
document.getElementById("formDecimal").style.display = "block";
}
//skrije polje za vnos koordinat z decimalnimi vrednostmi
function skrijDecimal() {
document.getElementById("formSMS").style.display = "block";
document.getElementById("formDecimal").style.display = "none";
}
var podcrtanMeni;
//podčrta zavihek objekti
function meniPodcrtan() {
if (podcrtanMeni == 0) {
document.getElementById("menuObjects").style.textDecoration = "underline";
document.getElementById("menuCamera").style.textDecoration = "none";
document.getElementById("menuPath").style.textDecoration = "none";
document.getElementById("menuRepair").style.textDecoration = "none";
}
//podčrta zavihek kamera
if (podcrtanMeni == 1) {
document.getElementById("menuCamera").style.textDecoration = "underline";
document.getElementById("menuObjects").style.textDecoration = "none";
document.getElementById("menuPath").style.textDecoration = "none";
document.getElementById("menuRepair").style.textDecoration = "none";
//podčrta zavihek pot
}
if (podcrtanMeni == 2) {
![Page 69: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/69.jpg)
document.getElementById("menuPath").style.textDecoration = "underline";
document.getElementById("menuRepair").style.textDecoration = "none";
document.getElementById("menuObjects").style.textDecoration = "none";
document.getElementById("menuCamera").style.textDecoration = "none";
}
//podčrta zavihek popravi
if (podcrtanMeni == 3) {
document.getElementById("menuRepair").style.textDecoration = "underline";
document.getElementById("menuObjects").style.textDecoration = "none";
document.getElementById("menuCamera").style.textDecoration = "none";
document.getElementById("menuPath").style.textDecoration = "none";
}
}
</script>
<script type="text/javascript">
function start() { ///Izvede se, ko se stran prvič naloži
document.getElementById("div_objekti").style.display = "block";
document.getElementById("div_animacija").style.display = "none";
document.getElementById("div_popravi").style.display = "none"
document.getElementById("div_poti").style.display = "none"
document.getElementById("menuObjects").style.textDecoration = "underline";
document.getElementById("debelinaCrte").value = 12;
document.getElementById("koorDec").checked = true;
document.getElementById("debelinaCrte").disabled = true;
document.getElementById("div_objektiStart").style.display = "none";
document.getElementById("div_potiStart").style.display = "none";
document.getElementById("narisiPot").style.display = "none";
prikaziDecimal();
skrijPosljiObjekt();
}
//testira, ali je KML datoteka brez napak
function kmlTest(object) {
if (!object) {
setTimeout(function () {
alert('Napačen vnos!');
}, 0);
![Page 70: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/70.jpg)
return;
}
ge.getFeatures().appendChild(object);
alert("KML datoteka se je uspešno namestila!");
document.getElementById("kmlFetchUrl").value = "";
}
//naloži KML datoteko iz URL
function naloziKML() {
var naslov = document.getElementById("kmlFetchUrl").value;
naslov = naslov.replace("http://", "");
naslov = "http://" + naslov;
google.earth.fetchKml(ge, naslov, kmlTest);
}
//***********************************ZAVIHKI MENIJA*********************//
//odpre zavihek objekti
function div_Objekti() {
if (document.getElementById("div_objekti").style.display == "none" ||
document.getElementById("div_objekti").style.display == "") {
document.getElementById("div_objekti").style.display = "block";
document.getElementById("div_animacija").style.display = "none";
document.getElementById("div_popravi").style.display = "none";
document.getElementById("div_poti").style.display = "none";
} else {
document.getElementById("div_objekti").style.display = "block"
}
}
//odpre zavihek poti
function div_Poti() {
if (document.getElementById("div_poti").style.display == "none" ||
document.getElementById("div_poti").style.display == "") {
document.getElementById("div_poti").style.display = "block";
document.getElementById("div_animacija").style.display = "none";
document.getElementById("div_popravi").style.display = "none";
document.getElementById("div_objekti").style.display = "none";
} else {
document.getElementById("div_poti").style.display = "block"
![Page 71: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/71.jpg)
}
}
//odpre zavihek animacija
function div_Animacija() {
if (document.getElementById("div_animacija").style.display == "none" ||
document.getElementById("div_animacija").style.display == "") {
document.getElementById("div_animacija").style.display = "block";
document.getElementById("div_objekti").style.display = "none";
document.getElementById("div_popravi").style.display = "none";
document.getElementById("div_poti").style.display = "none";
} else {
document.getElementById("div_animacija").style.display = "block"
}
}
//odpre zavihek popravi
function div_Popravi() {
if (document.getElementById("div_popravi").style.display == "none") {
document.getElementById("div_popravi").style.display = "block";
document.getElementById("div_objekti").style.display = "none";
document.getElementById("div_poti").style.display = "none";
document.getElementById("div_animacija").style.display = "none";
} else {
document.getElementById("div_popravi").style.display = "block"
}
}
//***********************************OBJEKTI****************************//
///Tipkovnica
var keyboard = new THREEx.KeyboardState(); // upravljanje s tipkovnico
var premikGorDolc; // premik objekta naprej ali nazaj po y osi
var premikGorDols; // premik objekta naprej ali nazaj po x osi
var premikLevoDesnoc; // premik objekta levo ali desno po y osi
var premikLevoDesnos; // premik objekta levo ali desno po x osi
var rezultats; //decimalni zapis zemljepisne širine
var rezultatd; // decimalni zapis zemljepisne dolžine
// začetni del datoteke KML
var kmlZacetek = '<?xml version="1.0" encoding="UTF-8"?>' +
![Page 72: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/72.jpg)
'<kml xmlns="http://www.opengis.net/kml/2.2"' + "\r\n" +
'xmlns:gx="http://www.google.com/kml/ext/2.2">' + '<Document>';
// končni del datoteke KML
var kmlKonec = '</Document>' + '\n' + '</kml>';
var kmlModel; // sestavljena datoteka KML
var parsedkmlModel; //razčlenjena datoteka KML
var i = 0; // števec objektov
var naslovStreznika = "http://localhost/upload/"; //naslov strežnika kjer bo shranjena datoteka
var imeDatoteke; //ime datoteke, ki jo bomo shranili na strežnik
var objektiTabela = new Array(); //podatki o objektih zapisani v KML obliki
var izbrana; //številka izbranega objekta na seznamu (listbox)
var cameralatitude; //pozicija kamere: zemljepisna širina
var cameralongitude; //pozicija kamere: zemljepisna dolžina
var cameraheading; //pozicija kamere: usmerjenost
var cameratilt; //pozicija kamere: naklon
var cameragroundAltitude; //pozicija kamere: višina
var premik = 0.000001; //hitrost premikanja objekta
var model; //izbrani objekt
var placemark;
var eventLokacija = function (event) { //zabeleži koordinate klika
var eventDolzina = event.getLongitude();
var eventSirina = event.getLatitude();
document.getElementById("sirinaDecimal").value = event.getLatitude();
document.getElementById("dolzinaDecimal").value = event.getLongitude();
event.preventDefault();
setTimeout(function () {}, 0);
}
var paused = false; //če je false, potem lahko objekt premikamo
//ko dodamo nov objekt odpremo nekatera polja
function novObjekt() {
document.getElementById("div_radio").style.display = "block";
document.getElementById("div_poslji").style.display = "block";
document.getElementById("div_objektiStart").style.display = "block";
ponastaviVrednostiObjekt();
}
//onemogoci polja za dodajanje objektov
![Page 73: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/73.jpg)
function prekliciNovObjekt() {
var listbox = document.getElementById("objectList");
if (listbox.length == 0) {
document.getElementById("div_objektiStart").style.display = "none";
document.getElementById("div_radio").style.display = "none";
document.getElementById("div_poslji").style.display = "none";
} else {
document.getElementById("div_poslji").style.display = "none";
}
}
//polja ponastavimo tako, da nekaterim izbrišemo vrednosti, v nekatera pa zapišemo vrednost 0
function ponastaviVrednostiObjekt() {
document.getElementById("nazivObjekta").value = "";
document.getElementById("opisObjekta").value = "";
document.getElementById("heading").value = "0";
document.getElementById("sirinaDecimal").value = "0";
document.getElementById("dolzinaDecimal").value = "0";
}
//objekt pošljemo na strežnik ter naložimo v Google Earth
function posljiObjekt() {
if (document.getElementById("opisObjekta").value == "" ||
document.getElementById("nazivObjekta").value == "" ||
document.getElementById("heading").value == "") {
alert("Vpiši naziv in opis objekta!")
} else if (document.getElementById("koorSMS").checked == true &&
(document.getElementById("stopinjes").value == "" ||
document.getElementById("minutes").value == "" ||
document.getElementById("sekundes").value == "" ||
document.getElementById("stopinjed").value == "" ||
document.getElementById("minuted").value == "" ||
document.getElementById("sekunded").value == "" ||
document.getElementById("dolzina").value == "" ||
document.getElementById("sirina").value == "")) {
alert("Vnesi koordinate!");
} else if (document.getElementById("koorDec").value == true &&
(document.getElementById("sirinaDecimal").value == "" ||
![Page 74: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/74.jpg)
document.getElementById("dolzinaDecimal").value == "")) {
alert("Vnesi koordinate!")
} else {
pridobi_ime_datoteke();
pretvoriEnote();
zabeleziModel();
kamera(rezultats, rezultatd, 0);
paused = true;
skrijPosljiObjekt();
}
}
//skrije polja, ki niso več potrebna, ko je objekt poslan na strežnik ter naložen v Google Earth
function skrijPosljiObjekt() {
prikaziDecimal();
document.getElementById("div_radio").style.display = "none";
document.getElementById("div_poslji").style.display = "none";
}
//v spremenljivko imeDatoteke se shrani ime datoteke, ki se bo shranila na strežnik
function pridobi_ime_datoteke() {
imeDatoteke = (document.getElementById("file").value).replace("C:\\fakepath\\", "");
}
/*pretvori enote iz stopinje, minute, sekunde v decimalni zapis
zemljepisne širine in zemljepisne dolžine*/
function pretvoriEnote() {
var stopinjes = parseFloat(document.getElementById("stopinjes").value);
var minutes = parseFloat(document.getElementById("minutes").value);
var sekundes = parseFloat(document.getElementById("sekundes").value);
var stopinjed = parseFloat(document.getElementById("stopinjed").value);
var minuted = parseFloat(document.getElementById("minuted").value);
var sekunded = parseFloat(document.getElementById("sekunded").value);
var ss = document.getElementById("sirina").value;
var sd = document.getElementById("dolzina").value;
var heading;
if (document.getElementById("koorDec").checked == true) {
rezultats = parseFloat(document.getElementById("sirinaDecimal").value);
rezultatd = parseFloat(document.getElementById("dolzinaDecimal").value);
![Page 75: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/75.jpg)
} else {
if (ss == "S") {
rezultats = stopinjes + minutes / 60 + sekundes / 3600;
} else {
rezultats = -(stopinjes + minutes / 60 + sekundes / 3600);
}
if (sd == "V") {
rezultatd = stopinjed + minuted / 60 + sekunded / 3600;
} else {
rezultatd = -(stopinjed + minuted / 60 + sekunded / 3600);
}
}
document.getElementById("sirinaDecimal").value = rezultats;
document.getElementById("dolzinaDecimal").value = rezultatd;
}
/* v tabelo objektiTabela se zabeležijo vsi podatki o objektu.
V seznam listbox se vnese naziv objekta*/
function zabeleziModel() {
var listbox = document.getElementById("objectList");
var vnos = document.createElement("Option");
var nazivObjekta = document.getElementById("nazivObjekta").value;
var opisObjekta = document.getElementById("opisObjekta").value;
heading = document.getElementById("heading").value;
objektiTabela[i] = '<name>' + nazivObjekta + '</name>' + '<description>' +
opisObjekta + '</description>' + '<Model>' + '<altitudeMode>relativeToGround</altitudeMode>' +
'<Location>' + '<longitude>' + rezultatd + '</longitude>' + '<latitude>' + rezultats +
'</latitude>' + '<altitude>0</altitude>' + '</Location>' + '<Orientation>' +
'<heading>' + heading + '</heading>' + '</Orientation>' + '<Link>' + '<href>' +
naslovStreznika + imeDatoteke + '</href>' + '</Link>' + '</Model>' + '</Placemark>';
vnos.text = nazivObjekta;
vnos.value = imeDatoteke;
listbox.add(vnos);
i += 1;
kmlModelParse();
}
// iz tabele objektiTabela se sestavi KML datoteka ter naloži v Google Earth
![Page 76: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/76.jpg)
function kmlModelParse() {
if (parsedkmlModel) {
ge.getFeatures().removeChild(parsedkmlModel);
parsedkmlModel = null;
}
kmlModel = "";
kmlModel += kmlZacetek;
for (j = 0; j < i; j++) {
kmlModel += '<Placemark id="model' + j + '">'
kmlModel += objektiTabela[j];
}
kmlModel += kmlKonec;
parsedkmlModel = ge.parseKml(kmlModel);
ge.getFeatures().appendChild(parsedkmlModel);
}
/*funkcija postavi kamero na želeno mesto. Vnašamo lahko zemljepisno širino,
zemljepisno dolžino ter usmerjenost kamere*/
function kamera(kameras, kamerad, kamerah) {
ge.getOptions().setFlyToSpeed(1);
var la = ge.createLookAt('');
la.set(kameras, kamerad, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, kamerah, 60, 30);
ge.getView().setAbstractView(la);
}
//kamera se postavi na izbrani objekt, omogočeno je premikanje objekta
function urediObjekt() {
pridobiPodatke();
if (izbrana >= 0) {
paused = false;
kamera(rezultats, rezultatd, heading);
}
}
//premikanje izbranega objekta s tipkami na tipkovnici
function premikObjekta() {
var zascita = false;
try {
if (izbrana >= 0 && !paused) {
![Page 77: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/77.jpg)
heading = model.getOrientation().getHeading();
premikGorDolc = parseFloat(0.000005 * Math.cos((heading / 180) * Math.PI));
premikGorDols = 0.000005 * Math.sin((heading / 180) * Math.PI);
premikLevoDesnoc = 0.000005 * Math.cos(((heading + 90) / 180) * Math.PI);
premikLevoDesnos = 0.000005 * Math.sin(((heading + 90) / 180) * Math.PI);
if (keyboard.pressed("q")) {
zascita = true;
model.getOrientation().setHeading(model.getOrientation().getHeading() + 1);
document.getElementById("heading").value = model.getOrientation().getHeading();
}
if (keyboard.pressed("e")) {
zascita = true;
model.getOrientation().setHeading(model.getOrientation().getHeading() - 1);
document.getElementById("heading").value = model.getOrientation().getHeading();
}
if (keyboard.pressed("w")) {
zascita = true;
model.getLocation().setLatitude(model.getLocation().getLatitude() + premikGorDolc);
model.getLocation().setLongitude(model.getLocation().getLongitude() + premikGorDols);
document.getElementById("sirinaDecimal").value = model.getLocation().getLatitude();
document.getElementById("dolzinaDecimal").value = model.getLocation().getLongitude();
}
if (keyboard.pressed("s")) {
zascita = true;
model.getLocation().setLatitude(model.getLocation().getLatitude() - premikGorDolc);
model.getLocation().setLongitude(model.getLocation().getLongitude() - premikGorDols);
document.getElementById("sirinaDecimal").value = model.getLocation().getLatitude();
document.getElementById("dolzinaDecimal").value = model.getLocation().getLongitude();
}
if (keyboard.pressed("a")) {
zascita = true;
model.getLocation().setLatitude(model.getLocation().getLatitude() - premikLevoDesnoc);
model.getLocation().setLongitude(model.getLocation().getLongitude() - premikLevoDesnos);
document.getElementById("sirinaDecimal").value = model.getLocation().getLatitude();
document.getElementById("dolzinaDecimal").value = model.getLocation().getLongitude();
}
![Page 78: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/78.jpg)
if (keyboard.pressed("d")) {
zascita = true;
model.getLocation().setLatitude(model.getLocation().getLatitude() + premikLevoDesnoc);
model.getLocation().setLongitude(model.getLocation().getLongitude() + premikLevoDesnos);
document.getElementById("sirinaDecimal").value = model.getLocation().getLatitude();
document.getElementById("dolzinaDecimal").value = model.getLocation().getLongitude();
}
if (zascita == true) {
kameraSledi(model.getLocation().getLatitude(), model.getLocation().getLongitude(),
model.getOrientation().getHeading())
}
}
} catch (err) {}
setTimeout('premikObjekta()', 10);
}
//preveri trenutne podatke o objektu ter jih zamenja s starimi
function shraniKml() {
if (izbrana != undefined && izbrana != -1) {
var izbrana2;
var listbox = document.getElementById("objectList");
paused = true;
nazivObjekta = document.getElementById("nazivObjekta").value;
opisObjekta = document.getElementById("opisObjekta").value;
rezultats = model.getLocation().getLatitude();
rezultatd = model.getLocation().getLongitude();
imeDatoteke = model.getLink().getHref();
heading = model.getOrientation().getHeading();
listbox.options[izbrana].text = nazivObjekta;
objektiTabela[izbrana] = '<name>' + nazivObjekta + '</name>' +
'<description>' + opisObjekta + '</description>' + '<Model>' +
'<altitudeMode>relativeToGround</altitudeMode>' + '<Location>' +
'<longitude>' + rezultatd + '</longitude>' + '<latitude>' + rezultats +
'</latitude>' + '<altitude>0</altitude>' + '</Location>' +
'<Orientation>' + '<heading>' + heading + '</heading>' +
'</Orientation>' + '<Link>' + '<href>' + imeDatoteke +
'</href>' + '</Link>' + '</Model>' + '</Placemark>';
![Page 79: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/79.jpg)
izbrana2 = izbrana;
kmlModelParse();
izbrana = izbrana2;
}
}
//omogoči prikaz 3D objektov v Google Earth
function prikazi3D() {
ge.getLayerRoot().enableLayerById(ge.LAYER_BUILDINGS, true);
}
//funkcija namenjena sledenju objekta, ki ga upravljamo s tipkovnico
function kameraSledi(modelS, modelD, modelH) {
ge.getOptions().setFlyToSpeed(5);
var la = ge.createLookAt('');
la.set(modelS, modelD, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, modelH, 60, 30);
ge.getView().setAbstractView(la);
}
//briše izbran objekt
function brisiKML() {
var listbox = document.getElementById("objectList");
var zascita = false;
for (k = 0; k <= (listbox.options.length - 1); k++) {
if (listbox.options[k].selected == true) {
izbrana = k;
zascita = true;
}
}
if (zascita == true) {
listbox.remove(izbrana);
objektiTabela.splice(izbrana, 1);
i -= 1;
kmlModelParse();
izbrana = -1;
}
if (listbox.options.length == 0 && document.getElementById("div_poslji").style.display == "none") {
document.getElementById("div_objektiStart").style.display = "none";
}
![Page 80: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/80.jpg)
}
//poišče izbran objekt ter ga prikaže
function pojdiNaObjekt() {
var listbox = document.getElementById("objectList");
for (k = 0; k <= (listbox.options.length - 1); k++) {
if (listbox.options[k].selected == true) {
izbrana = k;
}
}
kamera(rezultats, rezultatd, heading);
}
//pridobi podatke o izbranem objektu ter jih prikaže v za to namenjenih poljih na spletni strani
function pridobiPodatke() {
var listbox = document.getElementById("objectList");
for (k = 0; k <= (listbox.options.length - 1); k++) {
if (listbox.options[k].selected == true) {
izbrana = k;
}
}
if (izbrana == undefined || izbrana == -1) {
alert("Izberi objekt!");
} else {
placemark = ge.getElementByUrl('#model' + izbrana);
model = placemark.getGeometry();
rezultats = model.getLocation().getLatitude();
rezultatd = model.getLocation().getLongitude();
heading = parseFloat(model.getOrientation().getHeading());
document.getElementById("heading").value = heading;
document.getElementById("dolzinaDecimal").value = rezultatd;
document.getElementById("sirinaDecimal").value = rezultats;
document.getElementById("nazivObjekta").value = placemark.getName();
document.getElementById("opisObjekta").value = placemark.getDescription();
}
}
premikObjekta();
///////////////////////////////////////////TOUR/////////////////////////////////////////////////
![Page 81: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/81.jpg)
//začetek datoteke KML
var kmlTourZacetek = '<?xml version="1.0" encoding="UTF-8"?>' +
'<kml xmlns="http://www.opengis.net/kml/2.2"' + "\r\n" +
'xmlns:gx="http://www.google.com/kml/ext/2.2">' + '<Document>' +
'<name>Animacija</name>' + '<open>1</open>' + '<gx:Tour>' +
'<name>Tour animation</name>' + '<gx:Playlist>';
//konec datoteke KML
var kmlTourKonec = '</gx:Playlist>' + '</gx:Tour>' + '</Document>' + '</kml>';
var kmlTura; //KML datoteka z animacijo kamere
var kmlTuraObject; //razčlenjena KML datoteka
var tour; //v to spremeljivko se prepiše vsebina spremenljivke kmlTuraObject
var tourTabela = new Array(); //KML podatki o pozicijah kamere
var tourPodatki = new Array(); //ločeni podatki o pozicijah kamere
tourPodatki[0] = new Array();
var izbranaTour; //vrednost pozicije kamere, ki je izbrana na seznamu
var g = 0; // števec pozicij kamer
//posname trenutno poziciji kamere ter podatke shrani v tabele. Doda nazive pozicij na seznam listbox
function tourAnimacija() {
if (g < 0) {
g = 0;
tourPodatki[0] = new Array();
}
var listboxTour = document.getElementById("tourList");
var vnosTour = document.createElement("Option");
vnosTour.text = "pozicija" + g;
vnosTour.value = "pozicija" + g;
var cas;
var casPolje = document.getElementById("tourCas").value;
if (casPolje == "") {
cas = 5;
} else {
cas = casPolje;
}
cameralatitude = ge.getView().copyAsCamera(ge.ALTITUDE_RELATIVE_TO_GROUND).getLatitude();
cameralongitude = ge.getView().copyAsCamera(ge.ALTITUDE_RELATIVE_TO_GROUND).getLongitude();
cameraheading = ge.getView().copyAsCamera(ge.ALTITUDE_RELATIVE_TO_GROUND).getHeading();
![Page 82: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/82.jpg)
cameratilt = ge.getView().copyAsCamera(ge.ALTITUDE_RELATIVE_TO_GROUND).getTilt();
cameragroundAltitude = ge.getView().copyAsCamera(ge.ALTITUDE_RELATIVE_TO_GROUND).getAltitude();
tourPodatki[g][0] = cas;
tourPodatki[g][1] = cameralatitude;
tourPodatki[g][2] = cameralongitude;
tourPodatki[g][3] = cameraheading;
tourPodatki[g][4] = cameratilt;
tourPodatki[g][5] = cameragroundAltitude;
tourPodatki[g + 1] = new Array();
listboxTour.add(vnosTour);
tourTabela[g] = '<gx:FlyTo>' + '<gx:duration>' + cas + '</gx:duration>' +
'<gx:flyToMode>smooth</gx:flyToMode>' + '<Camera>' + '<longitude>' + cameralongitude +
'</longitude>' + '<latitude>' + cameralatitude + '</latitude>' + '<altitude>' +
cameragroundAltitude + '</altitude>' + '<heading>' + cameraheading + '</heading>' +
'<tilt>' + cameratilt + '</tilt>' + '</Camera>' + '</gx:FlyTo>';
g += 1;
kmlTour();
}
//v tabelo doda podatke o pavzi med premiki kamer
function tourPavza() {
var tourPavza = document.getElementById("tourPause").value;
var listboxTour = document.getElementById("tourList");
var vnosTour = document.createElement("Option");
if (tourPavza == "") {
tourPavza = 1
}
tourPodatki[g][0] = tourPavza;
tourTabela[g] = '<gx:Wait>' + '<gx:duration>' + tourPavza + '</gx:duration>' + '</gx:Wait>';
tourPodatki[g + 1] = new Array();
vnosTour.text = "pavza" + g;
vnosTour.value = "pavza" + g;
listboxTour.add(vnosTour);
g += 1;
kmlTour();
}
//Prebere podatke iz tabel ter sestavi KML datoteko, ki jo potem naloži v Google Earth
![Page 83: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/83.jpg)
function kmlTour() {
if (kmlTuraObject) {
ge.getFeatures().removeChild(kmlTuraObject);
kmlTuraObject = null;
}
kmlTura = "";
kmlTura += kmlTourZacetek;
for (j = 0; j <= g; j++) {
kmlTura += tourTabela[j];
}
kmlTura += kmlTourKonec;
kmlTuraObject = ge.parseKml(kmlTura);
ge.getFeatures().appendChild(kmlTuraObject);
walkKmlDom(kmlTuraObject, function () {
if (this.getType() == 'KmlTour') {
tour = this;
return false;
}
});
}
//odpre predvajalnik animacij
function startTour() {
if (tour == null) {
alert("Animacija ne obstaja!");
} else {
ge.getTourPlayer().setTour(tour);
}
}
//zapre predvajalnik animacij
function stopTour() {
ge.getTourPlayer().setTour(null);
}
//priskrbi podatke o izbrani poziciji kamere
function izberiTour() {
var listboxTour = document.getElementById("tourList");
for (j = 0; j <= (listboxTour.options.length - 1); j++) {
![Page 84: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/84.jpg)
if (listboxTour.options[j].selected == true) {
izbranaTour = j;
}
}
document.getElementById("tourCas").value = tourPodatki[izbranaTour][0];
}
//kamera se postavi na izbrano lokacijo, ki smo jo že posneli
function pojdiNaTour() {
var cameraTour = ge.createCamera('');
cameraTour.set(tourPodatki[izbranaTour][1], tourPodatki[izbranaTour][2],
tourPodatki[izbranaTour][5], ge.ALTITUDE_RELATIVE_TO_GROUND,
tourPodatki[izbranaTour][3], tourPodatki[izbranaTour][4], 0);
ge.getView().setAbstractView(cameraTour);
}
//pobriše izbrano pozicijo kamere
function brisiTour() {
var listboxTour = document.getElementById("tourList");
izberiTour();
if (g >= 1) {
listboxTour.remove(izbranaTour);
tourTabela.splice(izbranaTour, 1);
tourPodatki.splice(izbranaTour, 1);
kmlTour();
g -= 1;
} else {
g = 0;
}
}
//staro pozicijo kamere zamenja z novo. Vsi podatki o stari poziciji so nadomeščeni z novimi.
function urediTour() {
var listboxTour = document.getElementById("tourList");
var casPolje = document.getElementById("tourCas").value;
izberiTour();
var cas;
if (casPolje == "") {
cas = 5;
![Page 85: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/85.jpg)
} else {
cas = casPolje;
}
cameralatitude = ge.getView().copyAsCamera(ge.ALTITUDE_RELATIVE_TO_GROUND).getLatitude();
cameralongitude = ge.getView().copyAsCamera(ge.ALTITUDE_RELATIVE_TO_GROUND).getLongitude();
cameraheading = ge.getView().copyAsCamera(ge.ALTITUDE_RELATIVE_TO_GROUND).getHeading();
cameratilt = ge.getView().copyAsCamera(ge.ALTITUDE_RELATIVE_TO_GROUND).getTilt();
cameragroundAltitude = ge.getView().copyAsCamera(ge.ALTITUDE_RELATIVE_TO_GROUND).getAltitude();
tourPodatki[izbranaTour][0] = cas;
tourPodatki[izbranaTour][1] = cameralatitude;
tourPodatki[izbranaTour][2] = cameralongitude;
tourPodatki[izbranaTour][3] = cameraheading;
tourPodatki[izbranaTour][4] = cameratilt;
tourPodatki[izbranaTour][5] = cameragroundAltitude;
tourTabela[izbranaTour] = '<gx:FlyTo>' + '<gx:duration>' + cas + '</gx:duration>' +
'<Camera>' + '<longitude>' + cameralongitude + '</longitude>' + '<latitude>' +
cameralatitude + '</latitude>' + '<altitude>' + cameragroundAltitude +
'</altitude>' + '<heading>' + cameraheading + '</heading>' + '<tilt>' +
cameratilt + '</tilt>' + '</Camera>' + '</gx:FlyTo>';
document.getElementById("tourCas").value = cas;
kmlTour();
}
//**********************LINESTRING****************************//
var pathPaused = false; //če je true, se objekt ne premika po poti
var placemarkPath; //nosilec pina, ki se vozi po poti
var lineColor; // barva poti
var point; //pin, ki se vozi po poti
var tabelaPath = new Array(); //tabela začasnih podatkov poti - koordinate točk
var lineStyle = new Array(); //tabela stila poti - debelina in barva črte
lineStyle[0] = new Array();
tabelaPath[0] = new Array();
var tabelaKoordinateLine = new Array(); //tabela za združene koordinate primerne za KML
var p = 0; // števec točk v trenutni poti
var pathHeading; //usmerjenost med dvema točkama na določeni poti
var nlong = 0; //preporovana pot po zemljepisni dolžini
var nlat = 0; // prepotovana pot po zemljepisni širini
![Page 86: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/86.jpg)
var debelinaCrte; // debelina črte poti
var pathKml; //KML datoteka vseh črt
var parsedPathKml; //razčlenjena KML datoteka
var placemarkCheck; //preveri, če je pin na zemljevidu
var hitrost = 0.000001; //hitrost objekta, ki se vozi po poti
var razlikaLongitude; //razdalja med točkama po x osi
var razlikaLatitude; //razdalja med točkama po y osi
;
//začetek KML datoteke
var pathZacetekKml =
'<?xml version="1.0" encoding="UTF-8"?><kml xmlns="http://www.opengis.net/kml/2.2"' +
' xmlns:gx="http://www.google.com/kml/ext/2.2">' + '<Document>';
//začetek KML poti
var pathPlacemarkZacetek = '<LineString>' + '<tessellate>1</tessellate>' +
'<altitudeMode>clampToGround</altitudeMode>' + '<coordinates>';
var pathPlacemarkKonec = '</coordinates>' + '</LineString>' + '</Placemark>'; //konec KML poti
var pathKonecKml = '</Document>' + '</kml>'; //konec KML datoteke
var steviloLineString = 0; //število poti
var eventCheck = false; //preverja, če se posluša klikanje miške
var lineIzbrana; //vrednost izbrane poti
var barvaObratna; //vrednost barve v KML color načinu
//zabeleži podatke o točki na katero smo kliknili z miško ter jih shrani v tabelo
var eventHandler = function (event) {
if (event.getCtrlKey() == true) {
barva(steviloLineString);
var plong = event.getLongitude();
var plat = event.getLatitude();
tabelaPath[p][0] = plong;
tabelaPath[p][1] = plat;
p += 1;
tabelaPath[p] = new Array();
kmlPath();
event.preventDefault();
setTimeout(function () {}, 0);
}
}
![Page 87: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/87.jpg)
//prižge poslušalca klikov ter omogoči polja, ki so potrebna za vnos podatkov o poti
function prizgiEvent() {
eventCheck = true;
google.earth.addEventListener(ge.getGlobe(), 'click', eventHandler);
document.getElementById("potIme").value = "";
document.getElementById("div_potiStart").style.display = "block";
document.getElementById("narisiPot").style.display = "block";
}
//prekliče dodajanje poti
function prekliciPot() {
var linelist = document.getElementById("linelist");
google.earth.removeEventListener(ge.getGlobe(), 'click', eventHandler);
document.getElementById("narisiPot").style.display = "none";
if (lineList.length == 0) {
document.getElementById("div_potiStart").style.display = "none";
}
}
//Iz tabel sestavi KML datoteko ter jo naloži v Google Earth
function kmlPath() {
var potIme = document.getElementById("potIme").value;
if (potIme == "") {
potIme = "pot " + steviloLineString;
}
if (steviloLineString > 0 || eventCheck == true) {
lineStyle[steviloLineString][2] = potIme;
tabelaKoordinateLine[steviloLineString] = "";
}
if (parsedPathKml) {
ge.getFeatures().removeChild(parsedPathKml);
barva(steviloLineString);
kmlTuraObject = null;
}
lineStyle[steviloLineString][1] = document.getElementById("debelinaCrte").value;
for (j = 0; j < p; j++) {
tabelaKoordinateLine[steviloLineString] += tabelaPath[j][0] + "," + tabelaPath[j][1] + ",0 "
}
![Page 88: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/88.jpg)
pathKml = "";
if (tabelaKoordinateLine[0] != "") {
pathKml += pathZacetekKml;
for (k = 0; k <= steviloLineString; k++) {
pathKml += '<Style id="style' + k + '">' + '<LineStyle>' + '<color>' + lineStyle[k][0] +
'</color>' + '<width>' + lineStyle[k][1] + '</width>' + '</LineStyle>' + ' </Style>' +
'<Placemark id="path' + k + '">';
pathKml += '<name>' + lineStyle[k][2] + '</name>' + '<styleUrl>#style' + k +
'</styleUrl>' + pathPlacemarkZacetek;
pathKml += tabelaKoordinateLine[k];
pathKml += pathPlacemarkKonec;
}
pathKml += pathKonecKml;
parsedPathKml = ge.parseKml(pathKml);
ge.getFeatures().appendChild(parsedPathKml);
}
}
//ugasne poslušalca, vnese podatke o poti v seznam linelist
function potrdiLineString() {
if (eventCheck == true) {
var spliceTabela = tabelaPath.getLength;
var linelist = document.getElementById("lineList");
var vnos = document.createElement("Option");
google.earth.removeEventListener(ge.getGlobe(), 'click', eventHandler);
lineStyle[steviloLineString + 1] = new Array();
p = 0;
tabelaPath.length = 1;
vnos.text = lineStyle[steviloLineString][2];
vnos.value = steviloLineString;;
linelist.add(vnos);
eventCheck = false;
steviloLineString += 1;
document.getElementById("narisiPot").style.display = "none";
}
}
//pretvornik zapisa barve v KML color
![Page 89: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/89.jpg)
function barva(stTabele) {
var trenutnaBarva = document.getElementById("barvaPoti").value;
var transparency, red, green, blue;
transparency = "FF";
blue = trenutnaBarva.substr(4, 2);
green = trenutnaBarva.substr(2, 2);
red = trenutnaBarva.substr(0, 2);
lineColor = transparency + blue + green + red;
lineStyle[stTabele][0] = lineColor;
}
var stevecPath = 0; //šteje koliko točk ima določena pot
var timeout = 10; //časovni zamik v milisekundah
//sledenje po poti
function followPath() {
if (!pathPaused && eventCheck == false) {
razlikaLongitude = tabelaPath[stevecPath + 1][0] - tabelaPath[stevecPath][0];
razlikaLatitude = tabelaPath[stevecPath + 1][1] - tabelaPath[stevecPath][1];
pathHeading = parseFloat(Math.atan(razlikaLongitude / razlikaLatitude)); ///long/lat
if (razlikaLatitude < 0 && razlikaLongitude < 0) {
pathHeading = pathHeading + Math.PI;
}
if (razlikaLatitude < 0 && razlikaLongitude > 0) {
pathHeading = Math.PI + pathHeading;
}
if (razlikaLatitude < 0 && razlikaLongitude == 0) {
pathHeading = Math.PI;
}
if (razlikaLatitude == 0 && razlikaLongitude < 0) {
alert(pathHeading);
pathHeading = pathHeading + 2 * Math.PI;
alert(pathHeading);
}
point.setLongitude(point.getLongitude() + hitrost * Math.sin(pathHeading));
point.setLatitude(point.getLatitude() + hitrost * Math.cos(pathHeading));
nlong += Math.abs(hitrost * Math.sin(pathHeading));
nlat += Math.abs(hitrost * Math.cos(pathHeading));
![Page 90: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/90.jpg)
camera(point.getLongitude(), point.getLatitude(),
parseFloat((360 * pathHeading) / (2 * Math.PI)), 4.99999976);
switch (pathHeading) {
case Math.PI / 2:
if (Math.abs(razlikaLongitude) >= nlong) {
setTimeout(followPath, timeout);
} else {
if ((tabelaPath.length - 2) > stevecPath) {
nlong = 0;
nlat = 0;
point.setLongitude(parseFloat(tabelaPath[stevecPath + 1][0]));
point.setLatitude(parseFloat(tabelaPath[stevecPath + 1][1]));
stevecPath += 1;
setTimeout(followPath, timeout);
}
}
break;
case Math.PI:
if (Math.abs(razlikaLatitude) >= nlat) {
setTimeout(followPath, timeout);
} else {
if ((tabelaPath.length - 2) > stevecPath) {
nlong = 0;
nlat = 0;
point.setLongitude(parseFloat(tabelaPath[stevecPath + 1][0]));
point.setLatitude(parseFloat(tabelaPath[stevecPath + 1][1]));
stevecPath += 1;
setTimeout(followPath, timeout);
}
}
break;
case -Math.PI / 2:
if (Math.abs(razlikaLongitude) >= nlong) {
setTimeout(followPath, timeout);
} else {
if ((tabelaPath.length - 2) > stevecPath) {
![Page 91: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/91.jpg)
nlong = 0;
nlat = 0;
point.setLongitude(parseFloat(tabelaPath[stevecPath + 1][0]));
point.setLatitude(parseFloat(tabelaPath[stevecPath + 1][1]));
stevecPath += 1;
setTimeout(followPath, timeout);
}
}
break;
default:
if (Math.abs(razlikaLongitude) >= nlong && Math.abs(razlikaLatitude) >= nlat) {
setTimeout(followPath, timeout);
} else {
if ((tabelaPath.length - 3) > stevecPath) {
nlong = 0;
nlat = 0;
point.setLongitude(parseFloat(tabelaPath[stevecPath + 1][0]));
point.setLatitude(parseFloat(tabelaPath[stevecPath + 1][1]));
stevecPath += 1;
setTimeout(followPath, timeout);
}
}
}
}
}
//pavza med sledenjem
function pausePath() {
pathPaused = true;
}
//nadaljevanje sledenja poti
function contPath() {
pathPaused = false;
followPath();
}
//naredi pin na začetku izbrane poti
function sprozi() {
![Page 92: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/92.jpg)
placemarkPath = ge.createPlacemark('');
point = ge.createPoint('');
placemarkCheck = true;
point.set(parseFloat(tabelaPath[0][1]), parseFloat(tabelaPath[0][0]), 0,
ge.ALTITUDE_CLAMP_TO_GROUND, 1, 1);
point.setLatitude(parseFloat(tabelaPath[0][1]));
placemarkPath.setGeometry(point);
ge.getFeatures().appendChild(placemarkPath);
}
//kamera se postavi na začetek izbrane poti
function pojdiNaPot() {
var la = ge.createLookAt('');
la.set(tabelaPath[0][1], tabelaPath[0][0], 0, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 60, 30);
ge.getView().setAbstractView(la);
}
/*kamera za sledenje poti - vnaša se zemljepisna dolžina, zemljepisna širina,
usmerjenost, hitrost letenja*/
function camera(cameraLong, cameraLat, cameraHead, flyspeed) {
ge.getOptions().setFlyToSpeed(flyspeed);
var camera = ge.createLookAt('');
camera.set(cameraLat, cameraLong, 0, ge.ALTITUDE_RELATIVE_TO_GROUND, cameraHead, 60, 60)
ge.getView().setAbstractView(camera);
}
//postavi pin na začetek izbrane poti
function resetPath() {
stevecPath = 0;
point.setLongitude(tabelaPath[0][0]);
point.setLatitude(tabelaPath[0][1]);
nlong = 0;
nlat = 0;
}
//pridobi podatke o izbrani poti
function pridobiLine() {
var linelist = document.getElementById("lineList");
var velikostTabele = tabelaPath.length;
tabelaPath.splice(1, velikostTabele - 2);
![Page 93: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/93.jpg)
for (k = 0; k <= (linelist.options.length - 1); k++) {
if (linelist.options[k].selected == true) {
lineIzbrana = k;
}
}
if (lineIzbrana != undefined && lineIzbrana != -1) {
var linestring = ge.getElementByUrl('#path' + lineIzbrana).getGeometry();
var lsStVnos = linestring.getCoordinates().getLength();
for (k = 0; k < lsStVnos; k++) {
tabelaPath[k][0] = linestring.getCoordinates().get(k).getLongitude();
tabelaPath[k][1] = linestring.getCoordinates().get(k).getLatitude();
tabelaPath[k + 1] = new Array();
}
if (placemarkCheck == true) {
ge.getFeatures().removeChild(placemarkPath);
}
sprozi();
resetPath();
}
}
//pri ustvarjanju poti razveljavi nazadnje ustvarjeno točko
function razveljaviLine() {
var velikostTabele = tabelaPath.length;
if (velikostTabele > 1 && eventCheck == true) {
tabelaPath.splice(velikostTabele - 2, 1);
p -= 1;
kmlPath();
}
}
//izbriše izbrano pot
function brisiPath() {
var linelist = document.getElementById("lineList");
linelist.remove(lineIzbrana);
tabelaKoordinateLine.splice(lineIzbrana, 1);
lineStyle.splice(lineIzbrana, 1);
steviloLineString -= 1;
![Page 94: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/94.jpg)
lineIzbrana = -1;
kmlPath();
if (lineList.length == 0) {
document.getElementById("div_potiStart").style.display = "none";
}
}
//odebeli črto
function debelinaCrtePlus() {
var debelina = document.getElementById("debelinaCrte").value;
debelina = parseFloat(debelina);
debelina += 2;
document.getElementById("debelinaCrte").value = debelina;
editPath();
}
//stanša črto
function debelinaCrteMinus() {
var debelina = document.getElementById("debelinaCrte").value;
if (debelina !== 0 && debelina > 1) {
debelina = parseFloat(debelina);
debelina -= 2;
document.getElementById("debelinaCrte").value = debelina;
editPath();
}
}
//pridobi podatke o poti ter jih zapiše v za to namenjena polja
function linePodatki() {
var style;
var linestring;
var red, green, blue;
pridobiLine();
style = ge.getElementByUrl("#style" + lineIzbrana).getLineStyle();
linestring = ge.getElementByUrl("#path" + lineIzbrana);
barvaObratna = style.getColor().get();
blue = barvaObratna.substr(2, 2);
green = barvaObratna.substr(4, 2);
red = barvaObratna.substr(6, 2);
![Page 95: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/95.jpg)
barvaObratna = red + green + blue;
document.getElementById("debelinaCrte").value = style.getWidth();
document.getElementById("barvaPoti").value = barvaObratna;
document.getElementById("potIme").value = linestring.getName();
}
//spreminjanje lastnosti poti
function editPath() {
var style;
var linestring;
if (eventCheck == true) {
debelinaCrte = parseFloat(document.getElementById("debelinaCrte").value);
linestring = ge.getElementByUrl("#path" + steviloLineString);
style = ge.getElementByUrl("#style" + steviloLineString).getLineStyle();
style.setWidth(debelinaCrte);
} else {
pridobiLine();
debelinaCrte = parseFloat(document.getElementById("debelinaCrte").value);
linestring = ge.getElementByUrl("#path" + lineIzbrana);
style = ge.getElementByUrl("#style" + lineIzbrana).getLineStyle();
style.setWidth(debelinaCrte);
}
}
//potrditev lastnosti poti
function applyPath() {
if (eventCheck == false) {
var listbox = document.getElementById("lineList");
pridobiLine();
barva(lineIzbrana);
lineStyle[lineIzbrana][1] = document.getElementById("debelinaCrte").value;
lineStyle[lineIzbrana][2] = document.getElementById("potIme").value;
listbox.options[lineIzbrana].text = document.getElementById("potIme").value;
kmlPath();
}
}
//izvozi KML datoteko v textboxPopravi
function exportKML() {
![Page 96: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/96.jpg)
var kmlModelEx, kmlPathEx;
var celotenKML = "";
var zascitaKML = false;
if (objektiTabela.length == 0 && tabelaKoordinateLine.length > 0) {
celotenKML = pathKml;
} else if (tabelaKoordinateLine.length == 0 && objektiTabela.length > 0) {
celotenKML = kmlModel;
} else if (objektiTabela.length == 0 && tabelaKoordinateLine.length == 0) {
alert("Ni vnosa!");
zascitaKML = true;
} else {
kmlModelEx = kmlModel.replace(kmlKonec, "");
kmlPathEx = pathKml.replace(pathZacetekKml, "");
celotenKML = kmlModelEx + kmlPathEx;
}
if (zascitaKML == false) {
document.getElementById("textboxPopravi").value = "";
document.getElementById("textboxPopravi").value = celotenKML;
}
}
//povrne stanje izgubljenega dela
function importKml() {
var kmlVsebina = document.getElementById("textboxPopravi").value;
//lineStyle spremenljivke
var ls_stVnosov;
var ls_stTock;
var ls_Ime;
var ls_Barva;
var listboxLine = document.getElementById("lineList");
var vnosLine;
var model;
//objekti spremenljivke
var model_stVnosov;
var model_nazivObjekta;
var model_opisObjekta;
var model_Latitude;
![Page 97: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/97.jpg)
var model_Longitude;
var model_Link;
var model_Heading;
var listboxModel = document.getElementById("objectList")
var vnosModel = document.createElement("Option");
var linestring;
var style;
//Naložimo kml
kml = ge.parseKml(kmlVsebina);
ge.getFeatures().appendChild(kml);
//---------------------------------LINESTRING------------------------------------------------//
//preštejemo koliko je vnosov linestring
ls_stVnosov = ge.getElementsByType("kmlLineString").getLength();
for (j = 0; j < ls_stVnosov; j++) {
linestring = ge.getElementByUrl("#path" + j);
style = ge.getElementByUrl("#style" + j).getLineStyle();
lineStyle[j][0] = style.getColor().get(); //v tabelo dodamo podatke
lineStyle[j][1] = style.getWidth();
lineStyle[j][2] = linestring.getName();
lineStyle[j + 1] = new Array();
vnosLine = document.createElement("Option"); //vnesemo jih v listbox
vnosLine.text = linestring.getName();
vnosLine.value = linestring.getName();
listboxLine.add(vnosLine);
steviloLineString += 1;
//preštejemo koliko točk ima določen linestring
ls_stTock = linestring.getGeometry().getCoordinates().getLength()
tabelaKoordinateLine[j] = "";
for (k = 0; k < ls_stTock; k++) {
tabelaPath[k][0] = linestring.getGeometry().getCoordinates().get(k).getLongitude()
//vsako točko zabeležimo
tabelaPath[k][1] = linestring.getGeometry().getCoordinates().get(k).getLatitude();
//ustvarimo vrstico
tabelaKoordinateLine[j] += tabelaPath[k][0] + "," + tabelaPath[k][1] + ",0 ";
tabelaPath[k + 1] = new Array();
}
![Page 98: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/98.jpg)
}
//-----------------------------------------------------------------------------------------//
//---------------------------------------OBJEKTI-------------------------------------------//
model_stVnosov = ge.getElementsByType("kmlModel").getLength();
for (j = 0; j < model_stVnosov; j++) {
model = ge.getElementByUrl("#model" + j);
model_nazivObjekta = model.getName();
model_opisObjekta = model.getDescription();
model = model.getGeometry();
model_Latitude = model.getLocation().getLatitude();
model_Longitude = model.getLocation().getLongitude();
model_Link = model.getLink().getHref();
model_Heading = model.getOrientation().getHeading();
vnosModel = document.createElement("Option"); //vnesemo jih v listbox
vnosModel.text = model_nazivObjekta;
vnosModel.value = model_nazivObjekta;
listboxModel.add(vnosModel);
i += 1;
objektiTabela[j] = '<name>' + model_nazivObjekta + '</name>' + '<description>' + model_opisObjekta +
'</description>' + '<Model>' + '<altitudeMode>relativeToGround</altitudeMode>' + '<Location>' +
'<longitude>' + model_Longitude + '</longitude>' + '<latitude>' + model_Latitude + '</latitude>' +
'<altitude>0</altitude>' + '</Location>' + '<Orientation>' + '<heading>' + model_Heading +
'</heading>' + '</Orientation>' + '<Link>' + '<href>' + model_Link + '</href>' + '</Link>' +
'</Model>' + '</Placemark>';
}
//------------------------------------------------------------------------------------------------//
ge.getFeatures().removeChild(kml);
//----------------------------LINESTRING KML ------------------------------------------------------//
pathKml = "";
if (tabelaKoordinateLine[0] != "") {
pathKml += pathZacetekKml;
//koordinate
for (k = 0; k < steviloLineString; k++) {
pathKml += '<Style id="style' + k + '">' + '<LineStyle>' + '<color>' + lineStyle[k][0] +
'</color>' + '<width>' + lineStyle[k][1] + '</width>' + '</LineStyle>' + ' </Style>' +
'<Placemark id="path' + k + '">';
![Page 99: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/99.jpg)
pathKml += '<name>' + lineStyle[k][2] + '</name>' + '<styleUrl>#style' + k +
'</styleUrl>' + pathPlacemarkZacetek;
pathKml += tabelaKoordinateLine[k];
pathKml += pathPlacemarkKonec;
}
pathKml += pathKonecKml;
parsedPathKml = ge.parseKml(pathKml);
ge.getFeatures().appendChild(parsedPathKml);
}
//---------------------------------MODEL KML -----------------------------------------------//
kmlModel = "";
kmlModel += kmlZacetek;
for (j = 0; j < model_stVnosov; j++) {
kmlModel += '<Placemark id="model' + j + '">'
kmlModel += objektiTabela[j];
}
kmlModel += kmlKonec;
parsedkmlModel = ge.parseKml(kmlModel);
ge.getFeatures().appendChild(parsedkmlModel);
alert("Število obnovljenih poti: " + ls_stVnosov + "\n" + "Število obnovljenih objektov: " +
model_stVnosov);
document.getElementById("div_potiStart").style.display = "block";
}
//****************ISKALNIK*************************//
google.load("maps", "2.337");
//Poišče lokacijo v Google Maps ter jo prikaže v Google Earth
function pojdiNaLokacijo() {
var geocodeLocation = document.getElementById('location').value;
var geocoder = new google.maps.ClientGeocoder();
geocoder.getLatLng(geocodeLocation, function (point) {
if (point) {
var lookAt = ge.createLookAt('');
lookAt.set(point.y, point.x, 10, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 60, 200);
ge.getView().setAbstractView(lookAt);
}
});
![Page 100: RAZVOJ SISTEMA ZA 3D VIZUALIZACIJO EVAKUACIJSKEGA … · Google Earth, ki je hitro rastoča in razvijajoča se programska oprema, ... oziroma uvoz koordinat evakuacijske poti in vizualizacijo](https://reader031.fdocuments.net/reader031/viewer/2022013008/5d28f76e88c993f3778c59f0/html5/thumbnails/100.jpg)
}
//zaščita vnosa, vnašajo se številke
//vir http://www.htmlcodetutorial.com/forms/index_famsupp_158.html, 18.7.2012
function numbersonly(myfield, e, dec) {
var key;
var keychar;
if (window.event) key = window.event.keyCode;
else if (e) key = e.which;
else return true;
keychar = String.fromCharCode(key);
// control keys
if ((key == null) || (key == 0) || (key == 8) || (key == 9) || (key == 13) || (key == 27))
return true;
// numbers
else if ((("0123456789.-").indexOf(keychar) > -1)) return true;
// decimal point jump
else if (dec && (keychar == ".")) {
myfield.form.elements[dec].focus();
return false;
} else return false;
}
</script>
</html>