A KML (Keyhole Markup Language) a Google Earth (és sok más virtuálisglóbusz-szoftver) által használt fájlformátum.
A hivatalos dokumentáció itt elérhető: (érdemes böngészgetni) https://developers.google.com/kml/documentation/
A KML egy szöveges formátum, azaz pl. a Notepad (Jegyzettömb) segítségével is létrehozhatunk ilyen fájlt, csak arra kell ügyelnünk, hogy a kiterjesztés stimmeljen.
<?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"> <Placemark> <name>ELTE Északi Tömb</name> <description>Az ELTE lágymányosi campusának északi tömbje. Pázmány P. s. 1/a.</description> <Point> <coordinates>19.0621,47.4744</coordinates> </Point> </Placemark> </kml>
1. példa - egyszerű KML file egy placemarkkal
Ez egy helyjelzőt rak le az Északi Tömb helyére, névvel és rövid leírással.
Lássuk a részleteket:
Az első sor egyszerűen arra szolgál, hogy mindenki lássa, ez
egy XML fájl. (A KML is egyfajta XML formátum). Elvileg minden KML fájlnak így
kéne kezdődnie. A valóságban ez a sor el is maradhat, enélkül is megeszi a
Google Earth a fájlt.
A második sor az úgynevezett KML névtér deklaráció. Ehhez
kapcsolódik a záró </kml>
elem is. Elvileg minden KML fájl második és
utolsó sorának is így kellene kinézni. A valóságban még enélkül is működik a
dolog. Ebben a példában a szabvány KML névtéren kívül a Google által használt gx:
kiegészítő névtér is definiálva van. Ez utóbbira akkor van szükség, ha ilyen prefix-szel rendelkező elemet használunk.
A <kml ...>
és </kml>
elemek közt találhatók a
különféle KML objektumok. Ezek mindegyike egy nyitó és egy záró elemből áll
(pl. <Placemark>
és </Placemark>
), köztük szintén nyitó és záró
elemek közé zárva a különböző adatok (pl. <name>
és </name>
), vagy
egyéb objektumok (pl. <Point>
és </Point>
).
Fontos hogy a <>
jelek közé írt kódok kis- és nagybetű
érzékenyek, azaz pontosan úgy kell használni őket, ahogy a leírásban vannak.
A konkrét példában szereplő elemek:
a <Placemark>
egy tetszőleges fajta (pont, vonal vagy
poligon) elem lehet. A <name>
tulajdonság adja a nevét, és a
<description>
a leírást.
A leírásban HTML kódokat is alkalmazhatunk, ekkor azonban az egészet <![CDATA[
és ]]>
jelek közé kell tennünk, különben az XML értelmező szintaktikai hibát jelez a HTML tageknél. Jelen esetben egy pontszerű objektumról van szó,
így a helyét egy <Point>
elem írja le, melynek helyét a
<coordinates>
tulajdonsággal határozhatjuk meg. Fontos tudni, hogy itt az
első koordináta a földrajzi hosszúság, a második a szélesség, fokban. Ha
harmadik koordinátát is megadunk (vesszővel elválasztva), az a magasságot
jelenti méterben.
Azt, hogy a magasság mihez képest értendő, az <altitudeMode>
elem értéke határozza meg:
<altitudeMode>clampToGround</altitudeMode> |
a felszínhez tűzve |
<altitudeMode>clampToSeaFloor</altitudeMode> |
a tengerfenékhez tűzve |
<altitudeMode>relativeToGround</altitudeMode> |
a felszín felett |
<altitudeMode>relativeToSeaFloor</altitudeMode> |
a tengerfenék felett |
<altitudeMode>absolute</altitudeMode> |
a tengerszinthez képest |
Az első két esetben a magasság koordinátákat nem veszi figyelembe a program. Az alapértelmezett mód „a felszínhez tűzve”, azaz így értelmezi a program, ha nem írunk be semmit.
Ha megvizsgálunk egy, a Google Earth álatl létrehozott KML fájlt, abban általában 14 tizedesjegy pontossággal megadott koordinátákat találunk (pl.: 47.42419256933807). Ekkora pontosságra általában nincs semmi szükség. A következő táblázatban látható, hogy hány tizedesjegy kb. milyen pontosságnak felel meg a Földön:
Tizedesjegyek száma | példa | Pontosság |
---|---|---|
0 | 47 | <112 km |
1 | 47.4 | <11,2 km |
2 | 47.42 | <1.12 km |
3 | 47.424 | <112 m |
4 | 47.4241 | <11,2 m |
5 | 47.42419 | <1,12 m |
6 | 47.424192 | <0,112 m |
Ha egy KML fájlban egynél több objektumot akarunk megadni,
akkor azokat egy mappába (<Folder>
) kell helyeznünk:
<?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://www.opengis.net/kml/2.2"> <Folder> <name>ELTE Lágymányos</name> <Placemark> <name>ELTE Északi Tömb</name> <description>Az ELTE lágymányosi campusának északi tömbje. Pázmány P. s. 1/a.</description> <Point> <coordinates>19.0621,47.4744</coordinates> </Point> </Placemark> <Placemark> <name>ELTE Déli Tömb</name> <description>Az ELTE lágymányosi campusának déli tömbje. Pázmány P. s. 1/c.</description> <Point> <coordinates>19.0628,47.4723</coordinates> </Point> </Placemark> </Folder> </kml>
2. példa - Folder 2 placemarkkal
Egy mappához ugyanúgy tartozhat név (<name>
) és leírás
(<description>
) mint más elemekhez.
Ha pont helyett töröttvonalat szeretnénk rajzoltatni, akkor
a <Placemark>
elem valahogy így néz ki:
... <Placemark> <name>Útvonal minta</name> <description>Néhány háztömb Érden.</description> <LineString> <altitudeMode>clampToGround</altitudeMode> <tessellate>1</tessellate> <coordinates> 18.88122228747594,47.42419256933807,0 18.88257890803027,47.4255855059231,0 18.88195352615297,47.42579721438385,0 18.8812323242448,47.42615630246662,0 18.87859627926426,47.42709737218841,0 18.87641423208843,47.42794510529807,0 18.87365539470313,47.42923711778236,0 18.87285966402704,47.42945925213492,0 18.87213227460908,47.42968963472949,0 18.87171624378085,47.429823405858,0 18.87136797150899,47.42968838875402,0 18.87116851175903,47.42947171873274,0 18.87082713210123,47.42927686224229,0 18.86840750730523,47.42824469035715,0 18.86990523192054,47.42760293470975,0 18.88014194276373,47.42308190075308,0 18.88122228747594,47.42419256933807,0 </coordinates> </LineString> </Placemark> ...
Ha az <altitudeMode> clampToGround
vagy clampToSeaFloor
, akkor a <tessellate>
elem értéke határozza meg, hogy a vonalak egyenesek legyenek (<tessellate>0</tessellate>
),
vagy kövessék a terep görbületeit (<tessellate>1</tessellate>
).
A töröttvonal töréspontjai különböző magasságokban is lehetnek:
... <Placemark> <name>Útvonal minta a levegőben</name> <description>Minden töréspontnak más a magassága</description> <LineString> <altitudeMode>relativeToGround</altitudeMode> <coordinates> 18.88122228747594,47.42419256933807,0 18.88257890803027,47.4255855059231,20 18.88195352615297,47.42579721438385,40 18.8812323242448,47.42615630246662,60 18.87859627926426,47.42709737218841,80 18.87641423208843,47.42794510529807,100 18.87365539470313,47.42923711778236,120 18.87285966402704,47.42945925213492,140 18.87213227460908,47.42968963472949,160 18.87171624378085,47.429823405858,180 18.87136797150899,47.42968838875402,200 18.87116851175903,47.42947171873274,220 18.87082713210123,47.42927686224229,240 18.86840750730523,47.42824469035715,260 18.86990523192054,47.42760293470975,280 18.88014194276373,47.42308190075308,300 18.88122228747594,47.42419256933807,320 </coordinates> </LineString> </Placemark> ...
3/a. példa - töröttvonal változó magassággal
Bármilyen, a levegőben lebegő elem (pont, töröttvonal, vagy poligon) esetén megadható, hogy legyen összekötve a földfelszínre vonatkoztatott vetületével.
Ez placemarkok esetén egy függőleges vonalat eredményez, vonalak és poligonok esetén pedig függőleges felületeket.
A hatás eléréséhez az <extrude>
tulajdonságot kell 1-re állítani: <extrude>1</extrude>
3/b. példa - töröttvonal változó magassággal
A poligonokat is hasonlóan definiálhatjuk:
... <Placemark> <name>Poligon minta</name> <Polygon> <altitudeMode>clampToGround</altitudeMode> <tessellate>1</tessellate> <outerBoundaryIs> <LinearRing> <coordinates> 18.88122228747594,47.42419256933807,0 18.88257890803027,47.4255855059231,0 18.88195352615297,47.42579721438385,0 18.8812323242448,47.42615630246662,0 18.87859627926426,47.42709737218841,0 18.87641423208843,47.42794510529807,0 18.87365539470313,47.42923711778236,0 18.87285966402704,47.42945925213492,0 18.87213227460908,47.42968963472949,0 18.87171624378085,47.429823405858,0 18.87136797150899,47.42968838875402,0 18.87116851175903,47.42947171873274,0 18.87082713210123,47.42927686224229,0 18.86840750730523,47.42824469035715,0 18.86990523192054,47.42760293470975,0 18.88014194276373,47.42308190075308,0 18.88122228747594,47.42419256933807,0 </coordinates> </LinearRing> </outerBoundaryIs> </Polygon> </Placemark> ...
látható, hogy itt egy kicsit bonyolultabb a helyzet. Ez azért van, mert egy poligon lehet „lyukas” is. Az <outerBoundaryIs> elem adja meg a külső határt egy <LinearRing> segítségével, ami egy zárt görbe. Ha „lyukakat” is szeretnénk, akkor azokat egy vagy több <innerBoundaryIs> elemmel adhatjuk meg:
... <Placemark> <name>Poligon minta</name> <Polygon> <altitudeMode>clampToGround</altitudeMode> <tessellate>1</tessellate> <outerBoundaryIs> <LinearRing> <coordinates> 18.88122228747594,47.42419256933807,0 18.88257890803027,47.4255855059231,0 18.88195352615297,47.42579721438385,0 18.8812323242448,47.42615630246662,0 18.87859627926426,47.42709737218841,0 18.87641423208843,47.42794510529807,0 18.87365539470313,47.42923711778236,0 18.87285966402704,47.42945925213492,0 18.87213227460908,47.42968963472949,0 18.87171624378085,47.429823405858,0 18.87136797150899,47.42968838875402,0 18.87116851175903,47.42947171873274,0 18.87082713210123,47.42927686224229,0 18.86840750730523,47.42824469035715,0 18.86990523192054,47.42760293470975,0 18.88014194276373,47.42308190075308,0 18.88122228747594,47.42419256933807,0 </coordinates> </LinearRing> </outerBoundaryIs> <innerBoundaryIs> <LinearRing> <coordinates> 18.87366514135957,47.42706812944032,0 18.8748964196164,47.42653817641943,0 18.87565041618876,47.42723464083069,0 18.87434413335436,47.42778071827921,0 18.87366514135957,47.42706812944032,0 </coordinates> </LinearRing> </innerBoundaryIs> </Polygon> </Placemark> ...
Természetesen poligonok is lehetnek a levegőben is. A következő példa egy óriás „papírsárkány”:
... <Placemark> <name>Sárkány</name> <Polygon> <altitudeMode>absolute</altitudeMode> <outerBoundaryIs> <LinearRing> <coordinates> 19.1,47,1000 19,47.2,5000 19.1,47.3,7000 19.2,47.2,5000 19.1,47,1000 </coordinates> </LinearRing> </outerBoundaryIs> </Polygon> </Placemark> ...
4/b. példa - poligon a levegőben
A felszínhez kiterjesztett poligonok segítségével látványos 3 dimenziós tematikus térképeket is készíthetünk. Ilyenkor persze nem kézzel gépeljük be a koordinátákat, hanem valailyen térinformatikai szoftvert használunk a KML fájl létrehozására.
Példa - Magyarország népessége
Az eddigi példákban a helyjelzők, vonalak és poligonok az alapértelmezett kinézetben jelentek meg. Ha ezen változtatni szeretnénk, akkor stílusokat kell definiálnunk.
Erre a <Style>
elem szolgál. Lássunk néhány egyszerű stílusdefiníciót:
... <Style id="attetszo"> <PolyStyle> <color>2000ff00</color> <outline>1</outline> </PolyStyle> <LineStyle> <color>8000ff00</color> </LineStyle> </Style> ...
Az így definiált stílust kétféleképp használhatjuk fel: egyrészt, ha a fenti kódrészlet egy placemark definícióján belül van, akkor arra rögtön érvényes lesz.
Ha azonban egynél több elemre is ugyanazt a stílust szeretnénk alkalmazni, nem kell minden esetben újra és újra leírni a definíciót, elég a
<styleUrl>#attetszo</styleUrl>
tulajdonságot beszúrnunk a megfelelő helyre. Ezekben az esetekben azonban a <Document>
elemet kell használnunk a stílusdefiníciók, és az azokat használó elemek összefogására.
A <Document>
elem a <Folder>
-hez hasonlóan mappaként funkcionál. Bár a Google Earth akkor is megjeleníti a különféle stílusbeállításokat, ha azok egy <Folder>
-ben lettek definiálva, ilyet nem illik csinálni.
4/c. példa - poligon a levegőben, félig átlátszó
Egy stílusdefiníción belül külön-külön megadhatóak a pontszerű elemek ikonjainak jellemzői (IconStyle
), a poligonok kitöltésének (PolyStyle
),
illetve kontúrjának és a töröttvonalaknak (LineStyle
) tulajdonságai is.
Ikonok esetén a következő lehetőségeink vannak:
... <Style id="repulo"> <IconStyle> <Icon> <href>http://maps.google.com/mapfiles/kml/shapes/airports.png</href> </Icon> <hotSpot x="0.5" y="1" xunits="fraction" yunits="fraction" /> <color>b000ff00</color> <heading>270</heading> <scale>3</scale> </IconStyle> </Style> ...
A <href>
elemben adhatjuk meg azt a képet, amit ikonként szeretnénk használni. A <hotSpot ... >
azt adja meg, hogy az ikon melyik pontja jelezze a pozíciót.
A <color>
, <heading>
és <scale>
elemek pedig a színt, az irányt, valamint a méretet definiálják.
Vonalas elemeknél a lehetőségek:
... <Style id="vonal"> <LineStyle> <color>ffff00ff</color> <width>10</width> <gx:outerColor>ff00ffff</gx:outerColor> <gx:outerWidth>0.3</gx:outerWidth> <gx:physicalWidth>100</gx:physicalWidth> <gx:labelVisibility>1</gx:labelVisibility> </LineStyle> </Style> ...
Itt használunk először olyan elemeket, amelyek a nem részei a KML alapszabványnak, csak a Google-féle kiegészítésnek. Ezeket a gx:
prefix jelzi.
Fontos megjegyezni, hogy a <width>
(pixelekben megadott szélesség) és a <gx:physicalWidth>
(méterben megadott szélesség) közül egyszerre csak az egyik használható.
A <gx:outerWidth>
és <gx:outerColor>
elemeket (melyekkel kontúrt adhatunk a vonalnak) az utóbbi használatakor veszi figyelembe a Google Earth.
A <gx:labelVisibility>1</gx:labelVisibility>
beállítás a Google Earth 6.1. verziójától eléhető. Ebben a verzióban a vonalak nem cimkéződnek automatikusan, ezt lehet ezzel a beállítással befolyásolni.
Poligonok esetében egyszerűbb a helyzet. Itt csak a színt, és azt adhajuk meg, hogy legyen e kitöltése illetve kontúrja a poligonnak:
... <Style id="pacni"> <PolyStyle> <color>ffff00ff</color> <fill>1</fill> <outline>0</outline> </PolyStyle> </Style> ...
KML-ben a színeknek 4 komponenese van: az átlátszatlanság (alpha) és a kék, zöld és piros komponensek. Mindegyik komponens 0 (00) és 255 (FF) közti értékeket vehet fel.
A színeket hexadecimális kódokként kell definiálni, aabbggrr formában. Így pl. a 80FF0000 színkód félig áttetsző kék színt jelent.
Minden olyan helyen, ahol a <color>
elemmel megadható a szín, használható emellett a <colorMode>random</colorMode>
beállítás is, amely véletlenszerű színt jelent.
Ilyenkor a <color>
értékétől függ, hogy mi is változzon véletlenszerűen (bővebben lásd itt).
A StyleMap
elem segítségével olyan "összetett" stílust is létrehozhatunk, aminél másképp jelenik meg egy elem alapállapotban ("normal"), illetve, ha az egér fölötte van ("highlight").
Ehhez először definiálnunk kell a két különböző stílust, majd hozzárendelnünk őket a kétféle állapothoz:
... <Style id="n"> <LineStyle> <color>ff00ffff</color> <width>2</width> </LineStyle> </Style> <Style id="h"> <LineStyle> <color>ff0000ff</color> <width>2</width> </LineStyle> </Style> <StyleMap id="szinvalto"> <Pair> <key>normal</key> <styleUrl>#n</styleUrl> </Pair> <Pair> <key>highlight</key> <styleUrl>#h</styleUrl> </Pair> </StyleMap> ...
A különféle stílusbeállítások részletes leírása a KML Reference-ben
Ha egy raszteres képet (általában térképet) szeretnénk a felszínre vetíteni, akkor a <GroundOverlay> elemet kell használnunk. Ha nem csak dekoráció a kép, de az is fontos (térkép esetén), hogy minden pont a megfelelő helyre kerüljön, akkor olyan térkép kell, ami úgynevezett meridiánokban hossztartó hengervetületben van. Ez azt jelenti, hogy a fokhálózati vonalak vízszintes (szélességi körök) ill. függőleges (hosszúsági körök), párhuzamos, egyenközű egyenes vonalak. Egy ilyen képnél csak meg kell határoznunk a határoló fokhálózati vonalak koordinátáit, és a következő kódrészletet használni:
... <GroundOverlay> <Icon> <href>képfájl neve</href> </Icon> <LatLonBox> <north>északi határoló szélesség</north> <south>déli határoló szélesség</south> <east>keleti határoló hosszúság</east> <west>nyugati határoló hosszúság</west> </LatLonBox> </GroundOverlay> ...
A fájl nevéhez a kiterjesztést is hozzá kell írni, és az elérési utat akkor, ha nem a KML fájllal egy mappában van.
A határoló értékeket fokban kell megadni, pontot használva tizedesjelként (pl.: 47.5). A nyugati hosszúság és a déli szélesség előjele negatív.
A lefedő képeket el is forgathatjuk, ha a <LatLonBox>
elemen belül elhelyezünk egy <rotation>elforgatás</rotation>
elemet is. Az elforgatást fokban kell érteni, és az óramutató járásával ellentétesen.
Egy másik lehetőség a lefedő kép elhelyezésére az, ha a <LatLonBox>
helyett a <gx:LatLonQuad>
elemet használjuk. Ez is Google Earth-specifikus elem, az alap KML szabványnak nem része.
Ebben az esetben a határoló szélességek helyett a négy sarokpont koordinátáit adhatjuk meg, a bal alsó saroktól kezdve, az óramutató járásával ellentétesen haladva. Így egy terszőleges négyszögbe belevetíthetjük a képet.
... <gx:LatLonQuad> <coordinates> 18.946347,48.717928 19.028269,48.714471 19.036391,48.796496 18.954469,48.799953 </coordinates> </gx:LatLonQuad> ...
6. példa: GroundOverlay/LatLonQuad példa
Háromdimenziós modelleket is elhelyezhetünk a Föld felszínén (vagy akárhol). A Google Earth a COLLADA formátumú 3D modelleket támogatja (kiterjesztésük: .dae). Ilyen modelleket magunk is készíthetünk, de le is tölthetjük őket pl. a Google 3D elemek weboldalról.
... <Placemark> <name>Airbus A320</name> <Model> <altitudeMode>relativeToGround</altitudeMode> <Location> <longitude>19.2215</longitude> <latitude>47.4482</latitude> <altitude>20</altitude> </Location> <Orientation> <heading>132</heading> <tilt>15</tilt> <roll>0</roll> </Orientation> <Scale> <x>1</x> <y>1</y> <z>1</z> </Scale> <Link> <href>http://mercator.elte.hu/~saman/hu/ge_alk/modellek/A320.dae</href> </Link> </Model> </Placemark> ...
A modell elhelyzésekor annak pozícióján kívül megadhatjuk azt is, hogy a különböző irányokban mennyire legyen elforgatva (<Orientation>
mező),
és hogy a modell eredeti koordináta-rendszerében értelmezett x, y, z tengelyek mentén át legyen-e méretezve (<Scale>
mező)
A KML lehetőséget biztosít arra, hogy a különféle elemek a nagyítás mértékétől függően látsszanak vagy ne látsszanak.
Ehhez egy <Region>
elemet kell definiálni abban a <Folder>
-ben, amiben a nagyításfüggően megjelenítendő dolgok vannak.
A <Region>
elem tartalmazzon egy <LatLonAltBox>
-ot, amivel lehatároljuk a területet és egy <Lod>
-ot, amiben a megjelenítéshez szükséges minimális/maximális méretet írjuk elő.
Ennek hatására a <Folder>
tartalma akkor fog látszani, ha a <LatLonAltBox>
által definiált terület a képernyőn legalább
... <?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://www.opengis.net/kml/2.2"> <Folder> <name>LOD mintapélda</name> <Region> <LatLonAltBox> <north>43.333333</north> <south>43</south> <east>42.5</east> <west>42</west> </LatLonAltBox> <Lod> <minLodPixels>300</minLodPixels> <minFadeExtent>100</minFadeExtent> <maxFadeExtent>100</maxFadeExtent> <maxLodPixels>1000</maxLodPixels> </Lod> </Region> <GroundOverlay> <Icon><href>http://mercator.elte.hu/~saman/hu/ge_alk/szgurisi.jpg</href></Icon> <LatLonBox> <north>43.333333</north> <south>43</south> <east>42.5</east> <west>42</west> </LatLonBox> </GroundOverlay> </Folder> </kml> ...
8. példa - Region és LOD alkalmazása
A különféle elemekhez időbeli vonatkozást is adhatunk, mely vagy egy konkrét időpont (<TimeStamp>
) vagy egy intervallum (<TimeSpan>
).
A <TimeStamp>
elemben a <when>
tulajdonság tartalmazza a dátumot/időt 2011-10-20T09:05:38Z
formában.
A <TimeSpan>
elemben pedig a <begin>
definiálja az intervallum elejét, az <end>
pedig a végét. Ha valamelyik érték hiányzik, akkor az érvényességnek lesz kezdete vagy vége.
... <?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://www.opengis.net/kml/2.2"> <Folder> <name>Hol laktam?</name> <TimeSpan> <begin>1977-01-20</begin> <end>2012</end> </TimeSpan> <Placemark> <name>Töröcske</name> <description>Fenyves u. 20.</description> <Point> <coordinates> 17.779738, 46.303040</coordinates> </Point> <TimeSpan> <begin>1977-01-20</begin> <end>2000-08-01</end> </TimeSpan> </Placemark> <Placemark> <name>Sch</name> <description>18. emelet</description> <Point> <coordinates>19.053365, 47.472878</coordinates> </Point> <TimeSpan> <begin>1995-09-01</begin> <end>1999-06-01</end> </TimeSpan> </Placemark> <Placemark> <name>Pestszentlőrinc</name> <description>Mikszáth K. u.</description> <Point> <coordinates>19.177239, 47.4505</coordinates> </Point> <TimeSpan> <begin>1999-06-02</begin> <end>2000-08-01</end> </TimeSpan> </Placemark> <Placemark> <name>Érd</name> <description>Kubikos u. 17.</description> <Point> <coordinates>18.881172, 47.424297</coordinates> </Point> <TimeSpan> <begin>2000-08-02</begin> </TimeSpan> </Placemark> </Folder> </kml> ...
9. példa - TimeSpan alkalmazása
TimeSpan példa: az USA kialakulása (külső hivatkozás)
TimeStamp példa: egy kirándulás útvonala (külső hivatkozás)
KML-ben bármilyen elemhez definiálhatunk nézőpontot. Erre két lehetőségünk van: a <LookAt>
vagy a <Camera>
elem használata.
A <LookAt>
esetében a nézőpontot úgy definiáljuk, hogy megmondjuk, milyen távolsából és irányból nézünk egy megadott pontra, a <Camera>
használatakor pedig azt, hogy egy megadott pontból milyen irányba nézünk.
... <?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://www.opengis.net/kml/2.2"> <Placemark> <name>ELTE Északi Tömb</name> <description>Az ELTE lágymányosi campusának északi tömbje kelet felől nézve.</description> <Point> <coordinates>19.0621,47.4744</coordinates> </Point> <LookAt> <longitude>19.0621</longitude> <latitude>47.4744</latitude> <altitude>0</altitude> <altitudeMode>clampToGround</altitudeMode> <heading>270</heading> <tilt>70</tilt> <range>200</range> </LookAt> </Placemark> </kml> ...
10. példa - LookAt alkalmazása
... <?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://www.opengis.net/kml/2.2"> <Placemark> <name>Kilátás a Venediger csúcsáról</name> <description>Placemark geometria nélkül, de Camera beállítással</description> <Camera> <longitude>12.346466</longitude> <latitude>47.109147</latitude> <altitude>3666</altitude> <altitudeMode>absolute</altitudeMode> <heading>180</heading> <tilt>75</tilt> <roll>0</roll> </Camera> </Placemark> </kml> ...
10a. példa - Camera alkalmazása
<?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <name>Mekka iránya és távolsága</name> <ScreenOverlay> <overlayXY x="1" y="0" xunits="fraction" yunits="fraction"/> <screenXY x="1" y="0.15" xunits="fraction" yunits="fraction"/> <size x="-1" y="-1" xunits="fraction" yunits="fraction"/> <Icon> <href>http://mercator.elte.hu/~saman/GE/irj_pic.php</href> <viewFormat>lat=[cameraLat]&lon=[cameraLon]&hea=[lookatHeading]&dstlat=21.4225&dstlon=39.8262</viewFormat> <viewRefreshMode>onStop</viewRefreshMode> <refreshMode>onInterval</refreshMode> <refreshInterval>5</refreshInterval> </Icon> </ScreenOverlay> </Document> </kml>
xxx. példa - Pozícióadatok az url-ben
A kml
elemben megadhatjuk a hint="target=mars"
vagy hint="target=moon"
vagy hint="target=sky"
paramétert is. Ilyenkor az adott KML fájlt a Marson, a Holdon vagy az égbolton fogja elhelyezni.
<?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://www.opengis.net/kml/2.2" hint="target=mars"> <Placemark> <name>Egér a marson</name> <description>A vakegér a Marsra lépett</description> <Style> <IconStyle> <Icon><href>http://lazarus.elte.hu/hun/dolgozo/jesus/multim/icons/100vak.gif</href></Icon> <scale>10</scale> </IconStyle> </Style> <Point> <coordinates>19.0621,47.4744</coordinates> </Point> <LookAt> <latitude>46.2</latitude> <longitude>18.5</longitude> <range>170000</range> <heading>27</heading> <tilt>70</tilt> </LookAt> </Placemark> </kml>
A Google-féle KML-kiterjesztés egyik nagyon hasznos eleme a Track. Ennek segítségével egy objektum mozgását írhatjuk le térben és időben egyszerre. A mozgást úgy definiáljuk, hogy megadunk néhány helyet, és a hozzátartozó időpontot. A köztes időpontokban a program interpolálni fogja a helyszínt:
<?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"> <Placemark> <name>Minta track</name> <description> Egyszerű track egy helyjelzővel. Figyeljük meg, hogyan interpolálódik az ikon irányszöge a mozgás során! </description> <Style> <IconStyle> <Icon><href>http://maps.google.com/mapfiles/kml/shapes/track.png</href></Icon> </IconStyle> </Style> <gx:Track> <gx:coord>17.834 46.948</gx:coord> <when>2013-01-01</when> <gx:coord>18.038 47.089</gx:coord> <when>2013-01-02</when> <gx:coord>18.268 46.977</gx:coord> <when>2013-01-03</when> <gx:coord>17.259 46.619</gx:coord> <when>2013-01-04</when> <gx:coord>17.165 46.829</gx:coord> <when>2013-01-05</when> <gx:coord>17.834 46.948</gx:coord> <when>2013-01-06</when> </gx:Track> </Placemark> </kml>
track 1. példa - Egyszerű track irányjelző ikonnal
A nyomvonal pontjait a <gx:coord>
(hely) és a <when>
(idő) tulajdonságok megadásával definiáljuk. Vigyázni kell, hogy itt nem vesszővel, hanem szóközzel kell a koordinátákat egymástól elválasztani.
A fenti példában egy ikont mozgattunk a nyomvonal mentén, de használhatunk valamilyen 3D modellt is. Ilyenkor a <gx:Track>
elemen belül egy <Model>
objektumot kell elhelyeznünk.
Célszerű ugyanakkor az ikont láthatatlanná tenni pl. az átlátszatlanság 0-ra állításával:
... <Placemark> ... <Style> <IconStyle> <color>00000000</color> </IconStyle> </Style> <gx:Track> <Model> <altitudeMode>relativeToGround</altitudeMode> <Scale> <x>10</x> <y>10</y> <z>10</z> </Scale> <Link> <href>http://mercator.elte.hu/~saman/hu/ge_alk/modellek/hatak.dae</href> </Link> </Model> ... </gx:Track> </Placemark> ...
track 2. példa - Egyszerű track 3D modellel
Bár láthatóan kézzel is létre tudunk hozni KML fájlokat, mégis célszerűbb valami segédprogramot használni, különösen, ha nagyobb mennyiségű adatról van szó. Ma már egyre több térinformatikai program tud ebben a formátumban is menteni.
Vannak nagyon jó, de sajnos nem ingyenes programok, mint pl. a Global Mapper, melynek segítségével szinte bármilyen formátumot átalakíthatunk bármivé. Ezek nélkül is boldogulhatunk azonban, mert vannak olyan weboldalak is, ahol átalakíthatjuk fájljainkat.
A földtudományokban nagyon gyakori pl. hogy a GPS-ből kinyert szeretnénk megjeleníteni. Ekkor használhatjuk pl. a http://www.gpsvisualizer.com/gpsbabel/ oldalt, mely a különféle GPS-hez kapcsolódó formátumokat alakítja KML-lé.
Az is előfordulhat, hogy táblázatos formában vannak az adataink. Ekkor pl. a http://www.earthpoint.us/ExcelToKml.aspx oldal lehet hasznunkra.
Természetesen egy csomó más lehetőség is van. Érdemes egy keresőbe beírni az „on line kml converter” kifejezést, és böngészni a találatok között.
Bárhogyan is készítettünk KML fájlt, azt a Google Earthben bármikor továbbszerkeszthetjük. Nyissuk meg, és az oldalsávban megjelenő elem(ek)re jobb gombbal kattintva a Tulajdonságokat kiválasztva minden részlet módosítható.
1. Készítsünk olyan KML fájlt, amelyben a következő helyjelzők vannak egy mappában:
név |
leírás |
szélesség |
hosszúság |
Nógrádi vár |
várrom a Börzsöny peremén |
47.9066° |
19.0454° |
Mária Valéria-híd |
Duna-híd Esztergom és Párkány között |
47.7953° |
18.7296° |
2. Készítsünk olyan KML fájlt, mely elhelyezi a k_reszlet.jpg nevű fájlt a föld felszínén az északi szélesség 30° és 75°, valamint a nyugati hosszúság 25° és a keleti hosszúság 45°közé.
3. Alakítsuk át a canin.gtm nevű GPS TrackMaker fájlt KML-lé és jelenítsük meg.
4. A latnivalok.csv fájlból (Excel segítségével megnyitható) késztítsünk KML-t. Vigyázat, a tábla szerkezetét kissé át kell alakítani.