KML

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.

A legegyszerűbb példa: placemark definiálása

<?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.

Koordináták pontossága

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ámapéldaPontosság
047<112 km
147.4<11,2 km
247.42<1.12 km
347.424<112 m
447.4241<11,2 m
547.42419<1,12 m
647.424192<0,112 m

Mappák (folderek)

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.

Töröttvonal

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>
...
  

3. példa - töröttvonal

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>
...
  

4. példa - egyszerű poligon

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>
...
  

4/a. példa - "lyukas" poligon

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

Stílusok definiálása

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.

IconStyle példa

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.

LineStyle példa

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> 
...
  

PolyStyle példa

Színek a KML-ben

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).

Összetett stílusok a StyleMap alkalmazásával

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>
...
  

StyleMap példa

A különféle stílusbeállítások részletes leírása a KML Reference-ben

Lefedő képek

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.

5. példa: GroundOverlay példa

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

Modellek

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>
...
  

7. példa - 3D modell

7a. példa - 3D modell

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ő)

Nagyítástól függő megjelenítés

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 , de legfeljebb méretű. Ha a és/vagy a értéket is megadjuk, akkor az elemek nem ugrásszerűen jelennek meg/tűnnek el, hanem fokozatosan halványodnak.

...
<?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

Időpont/időintervallum megadá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)

Nézőpontok definiálása

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

Mars, Hold, égbolt

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>
  

xxx. példa - Egér a Marson

Track-ek

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

Különböző adatok konvertálása KML-lé

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ó.

Feladatok:

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.

Készült az Orzágos Tudományos Kutatási Alapprogramok támogatásával (Szerződésszám: PD 111737)