<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="hu">
	<id>http://gis.inf.elte.hu/giswiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Roberto</id>
	<title>GIS Wiki - Szerkesztő közreműködései [hu]</title>
	<link rel="self" type="application/atom+xml" href="http://gis.inf.elte.hu/giswiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Roberto"/>
	<link rel="alternate" type="text/html" href="http://gis.inf.elte.hu/wiki/Speci%C3%A1lis:Szerkeszt%C5%91_k%C3%B6zrem%C5%B1k%C3%B6d%C3%A9sei/Roberto"/>
	<updated>2026-05-09T16:13:41Z</updated>
	<subtitle>Szerkesztő közreműködései</subtitle>
	<generator>MediaWiki 1.31.7</generator>
	<entry>
		<id>http://gis.inf.elte.hu/giswiki/index.php?title=SUMO&amp;diff=275</id>
		<title>SUMO</title>
		<link rel="alternate" type="text/html" href="http://gis.inf.elte.hu/giswiki/index.php?title=SUMO&amp;diff=275"/>
		<updated>2016-07-07T11:50:11Z</updated>

		<summary type="html">&lt;p&gt;Roberto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &amp;#039;&amp;#039;&amp;#039;SUMO&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;Simulation of Urban MObility&amp;#039;&amp;#039;&amp;#039;) egy közúti, tömegközlekedési és vasúti &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://en.wikipedia.org/wiki/Microsimulation mikroszimulációs]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Ny%C3%ADlt_forr%C3%A1sk%C3%B3d%C3%BA_szoftver nyílt forráskódú szoftver]&amp;lt;/span&amp;gt;. Felhasználását tekintve alkalmas kereszteződések, lokális úthálózatok, lámpabeállítások, menetrendek tervezésének támogatásához, illetve teszteléséhez. Lehetőséget nyújt úgynevezett online szimulációhoz, vagyis a szimuláció közben az adatok változtatására, úgymint úthálózat (pl. baleset előidézése), forgalmi lámpák (pl. napszaktól függő lámaváltás, detektorok használata). A szoftverben a mikro modellt &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Szoftver_%C3%A1gens ágens alapú szimuláció]&amp;lt;/span&amp;gt; valósítja meg, amely járműszinten szimulálja a forgalmat. &lt;br /&gt;
&lt;br /&gt;
A SUMO széles körben használt út hálózat tervezéshez, menetrend készítéshez. Kedvelt ingyenes mivolta miatt akadémiai körökben. A felhasználására jó példa többek közt a [http://turbotraffic.mak.com TurboTraffic]. Ahol ugyan saját felhasználói felületet használnak hozzá, de a szimulációt a SUMO biztosítja.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Története==&lt;br /&gt;
&lt;br /&gt;
A SUMO-t 2000-ben kezték el írni, ​GPLv3-el. Az első verzió 2009-ben készült el. Jelenleg 0.13.0-ás verzió a legújabb. Célja a közúti forgalom kutatások támogatása.&lt;br /&gt;
&lt;br /&gt;
==Telepítés==&lt;br /&gt;
&lt;br /&gt;
Elérhető Windowsra, Suse Linuxra, Fedorára, Scientific-re és Ubuntura is. Nyílt forráskódú jellegéből következik, hogy buildelhető tetszőleges környezetben, természetesen ehhez szükséges &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Qt Qt]&amp;lt;/span&amp;gt; és &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Python_(programoz%C3%A1si_nyelv) Python]&amp;lt;/span&amp;gt; támogatás.&lt;br /&gt;
&lt;br /&gt;
==Architektúra==&lt;br /&gt;
&lt;br /&gt;
A SUMO alapvetően &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://en.wikipedia.org/wiki/C%2B%2B C++]&amp;lt;/span&amp;gt;-ban írt szoftver, a hozzá tartozó kiegészítő eszközök &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Python_(programoz%C3%A1si_nyelv) Python]&amp;lt;/span&amp;gt;ban írt szkriptek. A grafikus felülete &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Qt Qt]&amp;lt;/span&amp;gt;-ban íródott. &lt;br /&gt;
&lt;br /&gt;
A szoftver &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Objektumorient%C3%A1lt_programoz%C3%A1s objektumorientált megvalósítású]&amp;lt;/span&amp;gt;, modularizált szerkezetű, jól elkülönítve a szakértői területeket. Érdekessége viszont, hogy a különböző modulok nem minden esetben vannak össze integrálva. A rendszert felépítő modulok a következők.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;microsim&amp;#039;&amp;#039;&amp;#039;: A szimuláció futtatását biztosító modul, tartalmazza többek között a járművek jármű típusok definícióját.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;netgenerate&amp;#039;&amp;#039;&amp;#039;: Absztrakt úthálózatok generálását teszi lehetővé.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;netbuild&amp;#039;&amp;#039;&amp;#039;: Az útvonal hálózat gráfjának elkészítését, és módosítását valósítja meg szimuláció könnyű fútatásához (pl. hurokélek transzformálása).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;netimport&amp;#039;&amp;#039;&amp;#039;: Úthálózat importálását biztosítja.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;od2trips&amp;#039;&amp;#039;&amp;#039;: OD mátrixból történő útgenerálást biztosít.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;router&amp;#039;&amp;#039;&amp;#039;: Az alapértelmezett útvonal kereső modell.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;daurouter&amp;#039;&amp;#039;&amp;#039;: Legrövidebb útvonal keresése.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;dfrouter&amp;#039;&amp;#039;&amp;#039;: Útvonal tervezés ciklussal indukálva.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;jtrrouter&amp;#039;&amp;#039;&amp;#039;: Útvonal tervezés &amp;quot;junction swiching&amp;quot; módszerrel.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;polyconvert&amp;#039;&amp;#039;&amp;#039;: Az úthálózaton felülei tértképi elemek ábrázolását teszi lehetővé.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;GUI&amp;#039;&amp;#039;&amp;#039;: A grafikus felhasználói felület modulja Qt-ban.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;GUInetloader&amp;#039;&amp;#039;&amp;#039;: Úthálózat megjelenítése.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;GUIsim&amp;#039;&amp;#039;&amp;#039;: Szimuláció megjelenítése.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;foreign&amp;#039;&amp;#039;&amp;#039;: külső csomagok egységes felületét biztosítja (pl. R-fa, OpenGL támogatás).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;utils&amp;#039;&amp;#039;&amp;#039;: globális segédfunkciók gyűjteménye.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Matematikai háttér==&lt;br /&gt;
A SUMO matematikai modellek segítségével kezeli a járműveket és a forgalmat, így például a járművek haladási sebességét.&lt;br /&gt;
&lt;br /&gt;
====Krauss modell====&lt;br /&gt;
A Krauss modell a biztonságos sebességet adja meg, és közvetlenül megadja az új sebességet. Előnye, hogy jól paraméterezhető, akár különböző forgalmi szituációkra különböző viselkedést is definiálhatunk. Sőt a SUMO képes különböző járművek esetén is különböző paraméterezést használni. Ezzel szimulálva az agresszív és a kevésbé jártas vezetőket is. Az útviszonyok is ezen paraméterek beállításával történhet, bár a SUMO ezt nem támogatja közvetlenül.&lt;br /&gt;
&lt;br /&gt;
====Wiedemann modell====&lt;br /&gt;
A Wiedermann modellnek két változata is létezik, a 74-es és a 99-es. Utóbbival különböző sebesség tartományokban más-más viselkedéssel ruházhatjuk fel a járműveket, ezzel alkalmassá válik országúti forgalom modellezésére, de a városi forgalom esetén a túl sok paraméter miatt nehézkes a paraméterezése. A modell egyszerű nulladrendű képlettel adja meg a kívánt követési távolságot. Ennek kiértékelése során kell eldönteni, hogy az adott jármű hogyan változtassa a sebességét. Erre is ad kiszámítási módot a modell.&lt;br /&gt;
&lt;br /&gt;
A modell leírható a következő lineáris összefüggéssel:&lt;br /&gt;
&amp;lt;math&amp;gt;bx=(bx_{add}+bx_{multi}*z)*\sqrt{v},&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
ahol &lt;br /&gt;
* &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; a sebesség,&lt;br /&gt;
* &amp;lt;math&amp;gt;bx&amp;lt;/math&amp;gt; a biztonságos távolság,&lt;br /&gt;
* &amp;lt;math&amp;gt;bx_{add}&amp;lt;/math&amp;gt; a biztonságos távolsági komponens, &lt;br /&gt;
* &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; paraméter 0 és 1 közti érték, általában 0.5,0.15-ös standard eltérés mellett. Ha determinisztikus modellre van szükség, akkor a &amp;lt;math&amp;gt;z=1&amp;lt;/math&amp;gt; választást használják.&lt;br /&gt;
&lt;br /&gt;
Az első lökhárítók közti távolság az &amp;lt;math&amp;gt;ax+bx&amp;lt;/math&amp;gt; képlettel írható le, ahol &amp;lt;math&amp;gt;ax&amp;lt;/math&amp;gt; a nyugalmi távolságuk, vagyis &amp;lt;math&amp;gt;ax = L(n-1)+AX_{add}&amp;lt;/math&amp;gt;, ahol &amp;lt;math&amp;gt;AX_{add}&amp;lt;/math&amp;gt; kalibrációs paraméter, &amp;lt;math&amp;gt;L(n-1)&amp;lt;/math&amp;gt; pedig a követett jármű hossza.&lt;br /&gt;
A &amp;lt;math&amp;gt;bx_{add}&amp;lt;/math&amp;gt; és a &amp;lt;math&amp;gt;bx_{multi}&amp;lt;/math&amp;gt; értékek becsülhetők a kapacitás mértékéből.&lt;br /&gt;
A modell a szükséges követési távolságot határozza meg, tehát a sebesség meghatározása további számításokat igényel.&lt;br /&gt;
&lt;br /&gt;
Bizonyos implementációkban az additív kalibrációs paramétert elhagyják, a SUMO-ban, pedig fixen 1. &lt;br /&gt;
&lt;br /&gt;
==Használata==&lt;br /&gt;
&lt;br /&gt;
A szimuláció futtatásához meg kell adnunk egy konfigurációs fájlt, ami leírja a szimuláció paramétereit.Ebben kell meghivatkozni a további bemeneti fájlokat. A legfontosabb fájlok a hálózat és az útvonal választás, amelyek önmagukban elegendők a konfiguráció elkészítéséhez.&lt;br /&gt;
A konfigurációs fájlban adhatjuk meg az ütemek számát (szimuláció hosszát), illetve a kimenet típusát. Egy lehetséges konfiguráció:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;configuration&amp;gt;&lt;br /&gt;
    &amp;lt;input&amp;gt;&lt;br /&gt;
        &amp;lt;net-file value=&amp;quot;example.net.xml&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;route-files value=&amp;quot;example.rou.xml&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/input&amp;gt;&lt;br /&gt;
           &amp;lt;output&amp;gt;&lt;br /&gt;
  	…&lt;br /&gt;
           &amp;lt;/output&amp;gt;&lt;br /&gt;
    &amp;lt;time&amp;gt;&lt;br /&gt;
        &amp;lt;begin value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;end value=&amp;quot;10000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/time&amp;gt;&lt;br /&gt;
 &amp;lt;/configuration&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az útvonal választási fájl tartalmazza a járművek leírását, pl.:&lt;br /&gt;
  &amp;lt;routes&amp;gt;&lt;br /&gt;
    &amp;lt;vType accel=&amp;quot;1.0&amp;quot; decel=&amp;quot;5.0&amp;quot; id=&amp;quot;Car&amp;quot; length=&amp;quot;2.0&amp;quot; maxSpeed=&amp;quot;100.0&amp;quot; sigma=&amp;quot;0.0&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;route id=&amp;quot;route0&amp;quot; edges=&amp;quot;1to2 out&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;vehicle depart=&amp;quot;1&amp;quot; id=&amp;quot;veh0&amp;quot; route=&amp;quot;route0&amp;quot; type=&amp;quot;Car&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/routes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A járművekre megadhatjuk a kategória méretét, gyorsulási és fékezési kapacitását, illetve a hozzá tartozó jármű követési modellt és annak paramétereit. Lehetőség van a grafikus megjelenítés módosítására is. Láthatjuk, hogy egy jármű valójában egy jármű típus és a hozzá tartozó útvonal. További paraméterek is megadhatók opcionálisan, például a kezdeti sebesség.&lt;br /&gt;
&lt;br /&gt;
A szimuláció futtatása a &amp;lt;code&amp;gt;sumo -c &amp;lt;konfigurációs fájl&amp;gt;.sumocfg&amp;lt;/code&amp;gt; utasítással történik.&lt;br /&gt;
Amennyiben vizualizálni is szeretnénk a szimulációt, a &amp;lt;code&amp;gt;sumo-gui -c &amp;lt;konfigurációs fájl&amp;gt;.sumocfg&amp;lt;/code&amp;gt; utasítást használhatjuk.&lt;br /&gt;
&lt;br /&gt;
====Kimenet====&lt;br /&gt;
&lt;br /&gt;
A szimulációt sokféle célból tehetjük, mindegyik más és más analizálási módszert követel meg. Ezért a SUMO többféle kimenet típust is támogat.&lt;br /&gt;
* [[VTK format]]: Minden jármű sebességét és pozíciójából készít fájlokat VTK formátumban.&lt;br /&gt;
* [[FCD]] Floating Car Data): Minden szimulációs ütemben, minden jármű neve, típusa, sebessége, és iránya pozíciója tárolódik.&lt;br /&gt;
* [[Detektoros mérés]]: Lehetőségünk van induktív hurokdetektorok és azonnali induktív hurokdetektorok elhelyezésére a hálózaton. Előbbi folyam adatokat is tud mérni, például a forgalom eloszlása időben.&lt;br /&gt;
* [[Jármű utazásokról információ]]: Az egyes járművek által kibocsátott káros anyag, vagy elhasznált üzemanyag adatait kaphatjuk meg.&lt;br /&gt;
* [[Információk a szimuláció jelenlegi állásáról]], ami online szimuláció esetén érdekes.&lt;br /&gt;
&lt;br /&gt;
====Tömegközlekedés====&lt;br /&gt;
&lt;br /&gt;
A SUMO képes tömegközlekedést is szimulálni a menetrend és megállók megadásával. Pl.:&lt;br /&gt;
  &amp;lt;routes&amp;gt;&lt;br /&gt;
    &amp;lt;vtype id=&amp;quot;BUS&amp;quot; accel=&amp;quot;2.6&amp;quot; decel=&amp;quot;4.5&amp;quot; sigma=&amp;quot;0.5&amp;quot; length=&amp;quot;15&amp;quot; maxspeed=&amp;quot;70&amp;quot; color=&amp;quot;1,1,0&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;vehicle id=&amp;quot;0&amp;quot; type=&amp;quot;BUS&amp;quot; depart=&amp;quot;0&amp;quot; color=&amp;quot;1,1,0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;route edges=&amp;quot;2/0to2/1 2/1to1/1 1/1to1/2 1/2to0/2 0/2to0/1 0/1to0/0 0/0to1/0 1/0to2/0 2/0to2/1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;stop busStop=&amp;quot;busstop1&amp;quot; duration=&amp;quot;20&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;stop busStop=&amp;quot;busstop2&amp;quot; duration=&amp;quot;20&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;stop busStop=&amp;quot;busstop3&amp;quot; duration=&amp;quot;20&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;stop busStop=&amp;quot;busstop4&amp;quot; duration=&amp;quot;20&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/vehicle&amp;gt;&lt;br /&gt;
  &amp;lt;/routes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Grafikus felület===&lt;br /&gt;
&lt;br /&gt;
A SUMO grafikus felülete független program a többi modultól, ő is csak a &amp;lt;code&amp;gt;sumo&amp;lt;/code&amp;gt; parancsot hívja. Alkalmas arra, grafikus visszajelzést adjon a szimuláció aktuális állapotáról. A kirajzolása nem látványos, de könnyen értelmezhető. Lehetőséget ad a szimuláció szüneteltetésére, a forgalom megváltoztatására szimuláció közben (pl. dugó miatt az emberek későbbre halasztják a bevásárlást), illetve megadhatjuk a szimuláció sebességét.  Hibája, hogy mindig kirajzolja a teljes látható szimulációs területet, még akkor is ha a felbontás miatt nem is lehet látni a járműveket. Ez jelentős korlátot szab a SUMO-ban a vizualizált szimuláció futtatására.&lt;br /&gt;
Nem biztosít lehetőséget a beállítások megváltoztatására, arra csak XML fájlban van lehetőség, pl. a színezés és a jármű alakzatok megadására, továbbá helyezhetünk műholdas, vagy légifelvételt is a szimuláció mögé.&lt;br /&gt;
A moduláris felépítése lehetővé teszi a bővítést, és új menüpontok könnyű felvételét.&lt;br /&gt;
&lt;br /&gt;
===Kiegészítő eszközök===&lt;br /&gt;
&lt;br /&gt;
A grafikus felületű szimulációs alkalmazás mellett a SUMO cosmagjai között találunk számos konzolos segédalkalmazást, amely elsősorban az adatokat szolgáltatják a szimuláció számára.&lt;br /&gt;
&lt;br /&gt;
====Hálózat generátor====&lt;br /&gt;
&lt;br /&gt;
A hálózat építést a &amp;#039;&amp;#039;&amp;#039;netconvert&amp;#039;&amp;#039;&amp;#039; modul végzi, amely XML fájlok alapján tudja felépíteni a gráfot. Ehhez három bementi fájl szükséges. &lt;br /&gt;
* A csúcsok leírása, ahol a &amp;lt;code&amp;gt;&amp;lt;nodes&amp;gt;&amp;lt;/code&amp;gt; elemben kell megadni &amp;lt;code&amp;gt;&amp;lt;node&amp;gt;&amp;lt;/code&amp;gt; elemek sorozatát. Minden elem tartalmaz egy azonosítót (&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;), illetve egy X és egy Y koordinátát. Pl.:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nodes&amp;gt;&lt;br /&gt;
    &amp;lt;node id=&amp;quot;1&amp;quot; x=&amp;quot;-500.0&amp;quot; y=&amp;quot;0.0&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;node id=&amp;quot;2&amp;quot; x=&amp;quot;+500.0&amp;quot; y=&amp;quot;0.0&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;node id=&amp;quot;3&amp;quot; x=&amp;quot;+501.0&amp;quot; y=&amp;quot;0.0&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/nodes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Utak leírása, ahol a &amp;lt;code&amp;gt;&amp;lt;edges&amp;gt;&amp;lt;/code&amp;gt; elemben kell megadni &amp;lt;code&amp;gt;&amp;lt;edge&amp;gt;&amp;lt;/code&amp;gt; elemek sorozatát. Minden elem tartalmaz egy azonosítót (&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;), forrás (&amp;lt;code&amp;gt;from&amp;lt;/code&amp;gt;) és cél (&amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt;) csúcs azonosítókat, valamint típust (&amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;).&lt;br /&gt;
  &amp;lt;edges&amp;gt;&lt;br /&gt;
    &amp;lt;edge from=&amp;quot;1&amp;quot; id=&amp;quot;1to2&amp;quot; to=&amp;quot;2&amp;quot; type=”highway.motorway” /&amp;gt;&lt;br /&gt;
    &amp;lt;edge from=&amp;quot;2&amp;quot; id=&amp;quot;out&amp;quot; to=&amp;quot;3&amp;quot;  type=”highway.residential”/&amp;gt;&lt;br /&gt;
  &amp;lt;/edges&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Úttípusok leírása leírása, amely tartalmazza minden azonosítóhoz (&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;) az út prioritását (&amp;lt;code&amp;gt;from&amp;lt;/code&amp;gt;, a magasabb prioritású utakat előnyben részesíti az útvonal tervező), a sávok számát (&amp;lt;code&amp;gt;numLanes&amp;lt;/code&amp;gt;, ami legalább 1), használhatóságát (&amp;lt;code&amp;gt;allow&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;disallow&amp;lt;/code&amp;gt;, amellyel korlátozhatjuk a forgalmat), egyirányúsítást (&amp;lt;code&amp;gt;oneway&amp;lt;/code&amp;gt;), valamint a maximális sebességet (&amp;lt;code&amp;gt;speed&amp;lt;/code&amp;gt;).&lt;br /&gt;
  &amp;lt;types&amp;gt;&lt;br /&gt;
     &amp;lt;type id=&amp;quot;highway.motorway&amp;quot; priority=&amp;quot;13&amp;quot; numLanes=&amp;quot;2&amp;quot; speed=&amp;quot;44.0&amp;quot; /&amp;gt;&lt;br /&gt;
     &amp;lt;type id=&amp;quot;highway.residential&amp;quot; priority=&amp;quot;4&amp;quot; numLanes=&amp;quot;1&amp;quot; speed=&amp;quot;13.889&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/types&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A három fájlból a netconvert egy közös úthálózatot állít elő, pl.:&lt;br /&gt;
&amp;lt;code&amp;gt;netconvert --node-files=example.nod.xml –type-files=example.typ.xml --edge-files=example.edg.xml --output-file=mynetwork.net.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A &amp;#039;&amp;#039;&amp;#039;netconvert&amp;#039;&amp;#039;&amp;#039; alkalmas arra is, hogy más formátumokból töltsünk be úthálózatot, úgymint &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/OpenStreetMap OpenStreetMap]&amp;lt;/span&amp;gt;, pl.: &amp;lt;code&amp;gt;netconvert --osm-files asd.osm -o mynetwork.net.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Térkép megjelenítés====&lt;br /&gt;
&lt;br /&gt;
A &amp;#039;&amp;#039;&amp;#039;polyconvert&amp;#039;&amp;#039;&amp;#039; alkalmazás lehetővé teszi az importált térképek megjelenítésének  hozzáadását a hálózathoz.&lt;br /&gt;
Pl.: &amp;lt;code&amp;gt;polyconvert --net-file example.net.xml --osm-files map.osm --type-file typemap.xml -o mymap.poly.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Forgalom generálás====&lt;br /&gt;
&lt;br /&gt;
Amennyiben a hálózatunk már rendelkezésre áll, az alábbi módokon generálhatunk hozzá forgalmat.&lt;br /&gt;
* Útvonalak megadásával (&amp;#039;&amp;#039;trip definitions&amp;#039;&amp;#039;): megadjuk a kezdeti és a végcsúcsot, illetve az indulási időt, a &amp;#039;&amp;#039;&amp;#039;duarouter&amp;#039;&amp;#039;&amp;#039; képes az útvonalakat utakká konvertálni, használata: &amp;lt;code&amp;gt;duarouter --flows=&amp;lt;FLOW_DEFS&amp;gt; --net=&amp;lt;SUMO_NET&amp;gt; --output-file=MySUMORoutes.rou.xml&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Forgalom folyam megadásával (&amp;#039;&amp;#039;flow definitions&amp;#039;&amp;#039;), amely lényegében megegyezik az útvonal megadásával, azonban itt a két pont között nem egy, hanem több jármű fog közlekedni.&lt;br /&gt;
* Véletlenszerű (&amp;#039;&amp;#039;randomization&amp;#039;&amp;#039;) a leggyorsabb módja, ha forgalmat akarunk generálni, de természetesen valószerűtlen szituációkat okozhat. A véletlenszerű generálást a &amp;lt;code&amp;gt;Tools/Trip#randomTrips.py&amp;lt;/code&amp;gt; fájllal végezhetjük.&lt;br /&gt;
* OD mátrixok (&amp;#039;&amp;#039;OD-matrices&amp;#039;&amp;#039;) alapján, amelyek gyakran elérhetőek forgalmi hatóságoktól. Az OD mátrix egy &amp;lt;math&amp;gt;(i,j)&amp;lt;/math&amp;gt; eleme azt reprezentálja hogy jármű megy &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; zónából &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; zónába. A mátrixot használat előtt át kell konvertálni útvonalakká az &amp;#039;&amp;#039;&amp;#039;od2trips&amp;#039;&amp;#039;&amp;#039; modullal, használata: &amp;lt;code&amp;gt;od2trips -n &amp;lt;NET&amp;gt; -d &amp;lt;MATRIX&amp;gt; -o &amp;lt;TRIP_DEFS&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Forgalmi folyam és kanyarodási szándék megadásával a kereszteződésekben. A &amp;#039;&amp;#039;&amp;#039;jtrrouter&amp;#039;&amp;#039;&amp;#039; alkalmazásban megadjuk a járművek haladási szándékát, illetve kanyarodási irányukat minden kereszteződésnél.&lt;br /&gt;
* Detektorok (&amp;#039;&amp;#039;detector data&amp;#039;&amp;#039;) és mérési pontok (&amp;#039;&amp;#039;observation points&amp;#039;&amp;#039;) használatával. Indukciós hurok és egyéb eszközökkel gyakran vizsgálják a forgalmat, amely adatok alapján a &amp;#039;&amp;#039;&amp;#039;dfrouter&amp;#039;&amp;#039;&amp;#039; egy megfelelő forgalmat generál. Ez önmagában a gyakorlatban csak igen kis területre ad valósághű eredményt. Használata: &amp;lt;code&amp;gt;dfrouter --net-file &amp;lt;asdad&amp;gt; --detector-files &amp;lt;DETECTOR_FILE&amp;gt;&amp;lt;/code&amp;gt;, ahol a forrásfájl egy XML állomány, ami leírja a detektorokkal mért értékeket.&lt;br /&gt;
* Népesség statisztikák alapján, amihez utcaszintű statisztikák szükségesek. Az &amp;#039;&amp;#039;&amp;#039;activitygen&amp;#039;&amp;#039;&amp;#039; alkalmazással képes népességi statisztikákból forgalmat generálni. Itt olyan adatokra kell gondolni, hogy egy utcában hány háztartás van és hány munkahely, az emberek átlagosan milyen messze és mikor járnak dolgozni, stb. Tehát ilyen hipotézisek szerint dolgozik, az emberek dolgozni, vásárolni járnak, gyereket visznek az iskolába stb. Emellett meg kell adni a városból kimenő és a városba érkező forgalmat (többnyire városra vagy kerületre értelmes). Ezekhez városkapukat is definiálnunk kell, ezeken keresztül megy ki és érkezik be a forgalom. Használata: &amp;lt;code&amp;gt;activitygen --net-file &amp;lt;NET&amp;gt; --stat-file &amp;lt;STATISTICS&amp;gt; --output-file &amp;lt;ROUTES&amp;gt; --random&amp;lt;/code&amp;gt;&lt;br /&gt;
* Kézzel, vagyis mi írjuk le pontosan a forgalmat.&lt;br /&gt;
&lt;br /&gt;
=Kapcsolódó szócikkek=&lt;br /&gt;
* [[MATSim]]&lt;br /&gt;
&lt;br /&gt;
=Szakirodalom=&lt;br /&gt;
* Krajzewicz, Daniel, et al. [http://elib.dlr.de/6661/ &amp;quot;SUMO (Simulation of Urban MObility)-an open-source traffic simulation&amp;quot;], &amp;#039;&amp;#039;Proceedings of the 4th Middle East Symposium on Simulation and Modelling&amp;#039;&amp;#039; (MESM20002). 2002.&lt;br /&gt;
* Krajzewicz, Daniel. [http://link.springer.com/chapter/10.1007/978-1-4419-6142-6_7 &amp;quot;Traffic simulation with SUMO–simulation of urban mobility&amp;quot;], &amp;#039;&amp;#039;Fundamentals of traffic simulation&amp;#039;&amp;#039;. Springer New York, 2010. 269-293.&lt;br /&gt;
* Potári, Gábor, Vincellér, Zoltán , Ács, Zoltán. [http://icai.ektf.hu/icai2014/papers/ICAI.9.2014.2.41.pdf &amp;quot;A method for real-time adaptation of weather conditions within a trac simulation&amp;quot;], &amp;#039;&amp;#039;Proceedings of the 9th International Conference on Applied Informatics&amp;#039;&amp;#039; 2:41-47. 2014. &lt;br /&gt;
&lt;br /&gt;
=Külső hivatkozások=&lt;br /&gt;
* [http://sumo-sim.org/ A SUMO hivatalos honlapja]&lt;br /&gt;
* [http://sourceforge.net/projects/sumo/ A SUMO forráskódja]&lt;br /&gt;
* [http://www.dlr.de/ts/en/desktopdefault.aspx/tabid-9883/16931_read-41000/ DLR - Institute of Transportation Systems - SUMO]&lt;/div&gt;</summary>
		<author><name>Roberto</name></author>
		
	</entry>
	<entry>
		<id>http://gis.inf.elte.hu/giswiki/index.php?title=SUMO&amp;diff=274</id>
		<title>SUMO</title>
		<link rel="alternate" type="text/html" href="http://gis.inf.elte.hu/giswiki/index.php?title=SUMO&amp;diff=274"/>
		<updated>2016-07-06T16:13:32Z</updated>

		<summary type="html">&lt;p&gt;Roberto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &amp;#039;&amp;#039;&amp;#039;SUMO&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;Simulation of Urban MObility&amp;#039;&amp;#039;&amp;#039;) egy közúti, tömegközlekedési és vasúti &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://en.wikipedia.org/wiki/Microsimulation mikroszimulációs]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Ny%C3%ADlt_forr%C3%A1sk%C3%B3d%C3%BA_szoftver nyílt forráskódú szoftver]&amp;lt;/span&amp;gt;. Felhasználását tekintve alkalmas kereszteződések, lokális úthálózatok, lámpabeállítások, menetrendek tervezésének támogatásához, illetve teszteléséhez. Lehetőséget nyújt úgynevezett online szimulációhoz, vagyis a szimuláció közben az adatok változtatására, úgymint úthálózat (pl. baleset előidézése), forgalmi lámpák (pl. napszaktól függő lámaváltás, detektorok használata). A szoftverben a mikro modellt &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Szoftver_%C3%A1gens ágens alapú szimuláció]&amp;lt;/span&amp;gt; valósítja meg, amely járműszinten szimulálja a forgalmat.&lt;br /&gt;
&lt;br /&gt;
==Története==&lt;br /&gt;
&lt;br /&gt;
A SUMO-t 2000-ben kezték el írni, ​GPLv3-el. Az első verzió 2009-ben készült el. Jelenleg 0.13.0-ás verzió a legújabb. Célja a közúti forgalom kutatások támogatása.&lt;br /&gt;
&lt;br /&gt;
==Telepítés==&lt;br /&gt;
&lt;br /&gt;
Elérhető Windowsra, Suse Linuxra, Fedorára, Scientific-re és Ubuntura is. Nyílt forráskódú jellegéből következik, hogy buildelhető tetszőleges környezetben, természetesen ehhez szükséges &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Qt Qt]&amp;lt;/span&amp;gt; és &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Python_(programoz%C3%A1si_nyelv) Python]&amp;lt;/span&amp;gt; támogatás.&lt;br /&gt;
&lt;br /&gt;
==Architektúra==&lt;br /&gt;
&lt;br /&gt;
A SUMO alapvetően &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://en.wikipedia.org/wiki/C%2B%2B C++]&amp;lt;/span&amp;gt;-ban írt szoftver, a hozzá tartozó kiegészítő eszközök &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Python_(programoz%C3%A1si_nyelv) Python]&amp;lt;/span&amp;gt;ban írt szkriptek. A grafikus felülete &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Qt Qt]&amp;lt;/span&amp;gt;-ban íródott. &lt;br /&gt;
&lt;br /&gt;
A szoftver &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Objektumorient%C3%A1lt_programoz%C3%A1s objektumorientált megvalósítású]&amp;lt;/span&amp;gt;, modularizált szerkezetű, jól elkülönítve a szakértői területeket. Érdekessége viszont, hogy a különböző modulok nem minden esetben vannak össze integrálva. A rendszert felépítő modulok a következők.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;microsim&amp;#039;&amp;#039;&amp;#039;: A szimuláció futtatását biztosító modul, tartalmazza többek között a járművek jármű típusok definícióját.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;netgenerate&amp;#039;&amp;#039;&amp;#039;: Absztrakt úthálózatok generálását teszi lehetővé.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;netbuild&amp;#039;&amp;#039;&amp;#039;: Az útvonal hálózat gráfjának elkészítését, és módosítását valósítja meg szimuláció könnyű fútatásához (pl. hurokélek transzformálása).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;netimport&amp;#039;&amp;#039;&amp;#039;: Úthálózat importálását biztosítja.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;od2trips&amp;#039;&amp;#039;&amp;#039;: OD mátrixból történő útgenerálást biztosít.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;router&amp;#039;&amp;#039;&amp;#039;: Az alapértelmezett útvonal kereső modell.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Daurouter&amp;#039;&amp;#039;&amp;#039;: Legrövidebb útvonal keresése.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;DFRouter&amp;#039;&amp;#039;&amp;#039;: Útvonal tervezés ciklussal indukálva.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;jtrrouter&amp;#039;&amp;#039;&amp;#039;: Útvonal tervezés &amp;quot;junction swiching&amp;quot; módszerrel.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;polyconvert&amp;#039;&amp;#039;&amp;#039;: Az úthálózaton felülei tértképi elemek ábrázolását teszi lehetővé.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;GUI&amp;#039;&amp;#039;&amp;#039;: A grafikus felhasználói felület modulja Qt-ban.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;GUInetLader&amp;#039;&amp;#039;&amp;#039;: Úthálózat megjelenítése.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;GUISim&amp;#039;&amp;#039;&amp;#039;: Szimuláció megjelenítése.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Foreign&amp;#039;&amp;#039;&amp;#039;: külső csomagok egységes felületét biztosítja (pl. R-fa, OpenGL támogatás).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;utils&amp;#039;&amp;#039;&amp;#039;: globális segédfunkciók gyűjteménye.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Matematikai háttér==&lt;br /&gt;
A SUMO matematikai modellek segítségével kezeli a járműveket és a forgalmat, így például a járművek haladási sebességét.&lt;br /&gt;
&lt;br /&gt;
====Krauss modell====&lt;br /&gt;
A Krauss modell a biztonságos sebességet adja meg, és közvetlenül megadja az új sebességet. Előnye, hogy jól paraméterezhető, akár különböző forgalmi szituációkra különböző viselkedést is definiálhatunk. Sőt a SUMO képes különböző járművek esetén is különböző paraméterezést használni. Ezzel szimulálva az agresszív és a kevésbé jártas vezetőket is. Az útviszonyok is ezen paraméterek beállításával történhet, bár a SUMO ezt nem támogatja közvetlenül.&lt;br /&gt;
&lt;br /&gt;
====Wiedemann modell====&lt;br /&gt;
A Wiedermann modellnek két változata is létezik, a 74-es és a 99-es. Utóbbival különböző sebesség tartományokban más-más viselkedéssel ruházhatjuk fel a járműveket, ezzel alkalmassá válik országúti forgalom modellezésére, de a városi forgalom esetén a túl sok paraméter miatt nehézkes a paraméterezése. A modell egyszerű nulladrendű képlettel adja meg a kívánt követési távolságot. Ennek kiértékelése során kell eldönteni, hogy az adott jármű hogyan változtassa a sebességét. Erre is ad kiszámítási módot a modell.&lt;br /&gt;
&lt;br /&gt;
A modell leírható a következő lineáris összefüggéssel:&lt;br /&gt;
&amp;lt;math&amp;gt;bx=(bx_{add}+bx_{multi}*z)*\sqrt{v},&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
ahol &lt;br /&gt;
* &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; a sebesség,&lt;br /&gt;
* &amp;lt;math&amp;gt;bx&amp;lt;/math&amp;gt; a biztonságos távolság,&lt;br /&gt;
* &amp;lt;math&amp;gt;bx_{add}&amp;lt;/math&amp;gt; a biztonságos távolsági komponens, &lt;br /&gt;
* &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; paraméter 0 és 1 közti érték, általában 0.5,0.15-ös standard eltérés mellett. Ha determinisztikus modellre van szükség, akkor a &amp;lt;math&amp;gt;z=1&amp;lt;/math&amp;gt; választást használják.&lt;br /&gt;
&lt;br /&gt;
Az első lökhárítók közti távolság az &amp;lt;math&amp;gt;ax+bx&amp;lt;/math&amp;gt; képlettel írható le, ahol &amp;lt;math&amp;gt;ax&amp;lt;/math&amp;gt; a nyugalmi távolságuk, vagyis &amp;lt;math&amp;gt;ax = L(n-1)+AX_{add}&amp;lt;/math&amp;gt;, ahol &amp;lt;math&amp;gt;AX_{add}&amp;lt;/math&amp;gt; kalibrációs paraméter, &amp;lt;math&amp;gt;L(n-1)&amp;lt;/math&amp;gt; pedig a követett jármű hossza.&lt;br /&gt;
A &amp;lt;math&amp;gt;bx_{add}&amp;lt;/math&amp;gt; és a &amp;lt;math&amp;gt;bx_{multi}&amp;lt;/math&amp;gt; értékek becsülhetők a kapacitás mértékéből.&lt;br /&gt;
A modell a szükséges követési távolságot határozza meg, tehát a sebesség meghatározása további számításokat igényel.&lt;br /&gt;
&lt;br /&gt;
Bizonyos implementációkban az additív kalibrációs paramétert elhagyják, a SUMO-ban, pedig fixen 1. &lt;br /&gt;
&lt;br /&gt;
==Használata==&lt;br /&gt;
&lt;br /&gt;
===Kiegészítő Eszközök===&lt;br /&gt;
&lt;br /&gt;
====Hálózat generátor====&lt;br /&gt;
&lt;br /&gt;
A hálózat építést a &amp;#039;&amp;#039;&amp;#039;netconvert&amp;#039;&amp;#039;&amp;#039; modul végzi, amely XML fájlok alapján tudja felépíteni a gráfot. Ehhez három bementi fájl szükséges. &lt;br /&gt;
* A csúcsok leírása, ahol a &amp;lt;code&amp;gt;&amp;lt;nodes&amp;gt;&amp;lt;/code&amp;gt; elemben kell megadni &amp;lt;code&amp;gt;&amp;lt;node&amp;gt;&amp;lt;/code&amp;gt; elemek sorozatát. Minden elem tartalmaz egy azonosítót (&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;), illetve egy X és egy Y koordinátát. Pl.:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nodes&amp;gt;&lt;br /&gt;
    &amp;lt;node id=&amp;quot;1&amp;quot; x=&amp;quot;-500.0&amp;quot; y=&amp;quot;0.0&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;node id=&amp;quot;2&amp;quot; x=&amp;quot;+500.0&amp;quot; y=&amp;quot;0.0&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;node id=&amp;quot;3&amp;quot; x=&amp;quot;+501.0&amp;quot; y=&amp;quot;0.0&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/nodes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Utak leírása, ahol a &amp;lt;code&amp;gt;&amp;lt;edges&amp;gt;&amp;lt;/code&amp;gt; elemben kell megadni &amp;lt;code&amp;gt;&amp;lt;edge&amp;gt;&amp;lt;/code&amp;gt; elemek sorozatát. Minden elem tartalmaz egy azonosítót (&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;), forrás (&amp;lt;code&amp;gt;from&amp;lt;/code&amp;gt;) és cél (&amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt;) csúcs azonosítókat, valamint típust (&amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;).&lt;br /&gt;
  &amp;lt;edges&amp;gt;&lt;br /&gt;
    &amp;lt;edge from=&amp;quot;1&amp;quot; id=&amp;quot;1to2&amp;quot; to=&amp;quot;2&amp;quot; type=”a” /&amp;gt;&lt;br /&gt;
    &amp;lt;edge from=&amp;quot;2&amp;quot; id=&amp;quot;out&amp;quot; to=&amp;quot;3&amp;quot;  type=”b”/&amp;gt;&lt;br /&gt;
  &amp;lt;/edges&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* kereszteződéseket leíró xml file&lt;br /&gt;
  &amp;lt;edges&amp;gt;&lt;br /&gt;
    &amp;lt;edge from=&amp;quot;1&amp;quot; id=&amp;quot;1to2&amp;quot; to=&amp;quot;2&amp;quot; type=”a” /&amp;gt;&lt;br /&gt;
    &amp;lt;edge from=&amp;quot;2&amp;quot; id=&amp;quot;out&amp;quot; to=&amp;quot;3&amp;quot;  type=”b”/&amp;gt;&lt;br /&gt;
  &amp;lt;/edges&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* kereszteződéseket leíró xml file&lt;br /&gt;
  &amp;lt;types&amp;gt;&lt;br /&gt;
   &amp;lt;type id=&amp;quot;a&amp;quot; priority=&amp;quot;3&amp;quot; numLanes=&amp;quot;3&amp;quot; speed=&amp;quot;13.889&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;type id=&amp;quot;b&amp;quot; priority=&amp;quot;3&amp;quot; numLanes=&amp;quot;2&amp;quot; speed=&amp;quot;13.889&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;type id=&amp;quot;c&amp;quot; priority=&amp;quot;2&amp;quot; numLanes=&amp;quot;3&amp;quot; speed=&amp;quot;13.889&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/types&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az utakhoz rendelhetünk prioritást, és funkcionalitást. Az utat sávokra oszthatjuk. Pontosabban minden élhez kell, hogy tartozzon egy vagy több sáv.&lt;br /&gt;
&lt;br /&gt;
Alább látható egy példa a netconvert használatára, ennek az outputja a generált hálózat, példánkban a hello.net.xml&lt;br /&gt;
   netconvert --node-files=hello.nod.xml –type-files=hello.typ.xml --edge-files=hello.edg.xml --output-file=hello.net.xml&lt;br /&gt;
&lt;br /&gt;
A netconvert nem csak általunk definiált hálózat készítésére alkalmas. Ez igen hasznos funkció, mert általában egy létező topológiát akarunk használni. Azaz importálhatunk hálózatot más formátumokból. Például open streat map export fájlt a következő képen használhatjuk SUMO hálózat építésére&lt;br /&gt;
  netconvert --osm-files asd.osm -o asd.net.xml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Táj színezés====&lt;br /&gt;
&lt;br /&gt;
Kevésbé fontos, de látványos eszköz a polyconverter, mellyel az importált térkép színezését is hozzá adhatjuk a hálózatunkhoz.&lt;br /&gt;
Alább láthatunk példát a használatára&lt;br /&gt;
  polyconvert --net-file bartok.net.xml --osm-files map.osm --type-file typemap.xml -o bartok.poly.xml&lt;br /&gt;
&lt;br /&gt;
====Forgalom Generáslás====&lt;br /&gt;
&lt;br /&gt;
Ha megvan a hálózatunk (net), akkor sokféleképpen generálhatunk forgalmat az adott hálózatra. Ez a következő képen történhet:&lt;br /&gt;
* útvonalak megadásával (trip definitions) : megadjuk a kezdeti és a végcsúcsot, és az indulási időt.  A  DUAROUTER képes az útvonalakat utakká konvertálni. Használata&lt;br /&gt;
 duarouter --flows=&amp;lt;FLOW_DEFS&amp;gt; --net=&amp;lt;SUMO_NET&amp;gt; --output-file=MySUMORoutes.rou.xml&lt;br /&gt;
* forgalom folyam megadásával (flow definitions): ugyanolyan mint az útvonal megadása (xml file), csak itt A-ból B-be egy jármű halmaz halad.&lt;br /&gt;
* véletlenszerű (Randomization): ez a leggyorsabb módja, ha forgalmat akarunk generálni, de természetesen nagy valószínűtlenséget okozhat.  Tools/Trip#randomTrips.py&lt;br /&gt;
* OD mátrixokkal: (OD-matrices) : gyakran elérhetőek forgalmi hatóságoktól. Az OD mátrix egy i,j eleme azt reprezentálja hogy jármű megy i. zónából j.zónába. A mátrixot át kell konvertálni útvonalakká a OD2TRIPS modullal. Használata:&lt;br /&gt;
 od2trips -n &amp;lt;NET&amp;gt; -d &amp;lt;MATRIX&amp;gt; -o &amp;lt;TRIP_DEFS&amp;gt;&lt;br /&gt;
 duarouter --trip-files=&amp;lt;TRIP_DEFS&amp;gt; --net-file=&amp;lt;SUMO_NET&amp;gt;   --output-file=MySUMORoutes.rou.xml&lt;br /&gt;
* forgalmi folyam és kanyarodási szándék a kereszteződésekben (JTRROUTER eszközzel): megadjuk a járművek haladási szándékát, és hogy merre kanyarodjanak minden kereszteződésnél.&lt;br /&gt;
* Detektorok, mérési pontok használatával (detector data, observation points) : &lt;br /&gt;
Indukciós hurok és egyéb eszközökkel gyakran vizsgálják a forgalmat. A  DFROUTER modul képes ezekből az adatokból forgalmat generálni. Azaz olyan forgalmat, amely illeszkedik a mért adatokra. Ez önmagában a gyakorlatban, csak igen kis területre ad valóság hű eredményt. Használata:&lt;br /&gt;
 dfrouter --net-file &amp;lt;asdad&amp;gt; --detector-files &amp;lt;DETECTOR_FILE&amp;gt;&lt;br /&gt;
Ahol a DETECTOR_FILE egy xml fájl, ami leírja a detektorokkal mért értékeket.&lt;br /&gt;
* Kézzel: mi generáljuk le a forgalmat.&lt;br /&gt;
* Népesség statisztikák alapján:  Az ACTIVITYGEN modul képes népességi statisztikákból forgalmat generálni. Ehhez utca szintű statisztikák kellenek. Itt olyanra kell gondolni, hogy egy utcában hány háztartás van és hány munkahely, az emberek átlagosan milyen messze és mikor járnak dolgozni, stb. Tehát ilyen hipotézisek szerint dolgozik, az emberek dolgozni, vásárolni járnak, gyereket visznek az iskolába stb. Emellett meg kell adni a városból kimenő és a városba (ezt többnyire városra vagy kerületre értelmes) érkező forgalmat. Ezekhez városkapukat is definiálnunk kell, ezeken keresztül megy ki és érkezik be a forgalom.&lt;br /&gt;
Használata:&lt;br /&gt;
 activitygen --net-file &amp;lt;NET&amp;gt; --stat-file &amp;lt;STATISTICS&amp;gt; --output-file &amp;lt;ROUTES&amp;gt; --random&lt;br /&gt;
&lt;br /&gt;
===Szimuláció===&lt;br /&gt;
&lt;br /&gt;
A szimuláció futtatásához meg kell adnunk egy konfigurációs fájlt. Ez a fájl írja le a szimuláció paramétereit. Ebben kell meghivatkozni a további input fájlokat, például az útvonal választási fájlt.&lt;br /&gt;
&lt;br /&gt;
Az útvonal választási fájl tartalmazza a jármű típusokat is például:&lt;br /&gt;
  &amp;lt;routes&amp;gt;&lt;br /&gt;
    &amp;lt;vType accel=&amp;quot;1.0&amp;quot; decel=&amp;quot;5.0&amp;quot; id=&amp;quot;Car&amp;quot; length=&amp;quot;2.0&amp;quot; maxSpeed=&amp;quot;100.0&amp;quot; sigma=&amp;quot;0.0&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;route id=&amp;quot;route0&amp;quot; edges=&amp;quot;1to2 out&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;vehicle depart=&amp;quot;1&amp;quot; id=&amp;quot;veh0&amp;quot; route=&amp;quot;route0&amp;quot; type=&amp;quot;Car&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/routes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Itt megadhatjuk a kategória méretét, gyorsulási és fékezési kapacitását. Illetve a hozzá tartozó jármű követési modellt és annak paramétereit. Lehetőség van a grafikus megjelenítés módosítására is. Láthatjuk, hogy egy jármű valójában egy jármű típus és a hozzá tartozó útvonal. Természetesen további paraméterek adhatók meg neki, például a kezdeti sebesség.&lt;br /&gt;
&lt;br /&gt;
Azt már bemutattuk, hogyan kell hálózatot generálni, tehát a legfontosabb fájlok a hálózat és az útvonal választás. Ezek elegendők a konfiguráció elkészítéséhez. Itt meg kell adni hány virtuális ütemnyit szeretnénk szimulálni. Illetve, hogy milyen típusú outputot várunk. Egy példa konfiguráció:&lt;br /&gt;
 &amp;lt;configuration&amp;gt;&lt;br /&gt;
    &amp;lt;input&amp;gt;&lt;br /&gt;
        &amp;lt;net-file value=&amp;quot;hello.net.xml&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;route-files value=&amp;quot;hello.rou.xml&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/input&amp;gt;&lt;br /&gt;
           &amp;lt;output&amp;gt;&lt;br /&gt;
  	…&lt;br /&gt;
           &amp;lt;/output&amp;gt;&lt;br /&gt;
    &amp;lt;time&amp;gt;&lt;br /&gt;
        &amp;lt;begin value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;end value=&amp;quot;10000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/time&amp;gt;&lt;br /&gt;
 &amp;lt;/configuration&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ekkor lefuttathatjuk a szimulációt az alábbi parancssal&lt;br /&gt;
sumo -c &amp;lt;konfigurációs fájl&amp;gt;.sumocfg&lt;br /&gt;
Ha vizualizációt is szeretnénk akkor&lt;br /&gt;
sumo-gui -c &amp;lt;konfigurációs fájl&amp;gt;.sumocfg&lt;br /&gt;
&lt;br /&gt;
====Tömegközlekedés====&lt;br /&gt;
A SUMO képes tömegközlekedést is szimulálni a menetrend és megállók megadásával. Például a következő módon:&lt;br /&gt;
    &amp;lt;vtype id=&amp;quot;BUS&amp;quot; accel=&amp;quot;2.6&amp;quot; decel=&amp;quot;4.5&amp;quot; sigma=&amp;quot;0.5&amp;quot; length=&amp;quot;15&amp;quot; maxspeed=&amp;quot;70&amp;quot;&lt;br /&gt;
            color=&amp;quot;1,1,0&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;vehicle id=&amp;quot;0&amp;quot; type=&amp;quot;BUS&amp;quot; depart=&amp;quot;0&amp;quot; color=&amp;quot;1,1,0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;route edges=&amp;quot;2/0to2/1 2/1to1/1 1/1to1/2 1/2to0/2&lt;br /&gt;
             0/2to0/1 0/1to0/0 0/0to1/0 1/0to2/0 2/0to2/1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;stop busStop=&amp;quot;busstop1&amp;quot; duration=&amp;quot;20&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;stop busStop=&amp;quot;busstop2&amp;quot; duration=&amp;quot;20&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;stop busStop=&amp;quot;busstop3&amp;quot; duration=&amp;quot;20&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;stop busStop=&amp;quot;busstop4&amp;quot; duration=&amp;quot;20&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/vehicle&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Kimenet====&lt;br /&gt;
&lt;br /&gt;
A szimulációt sokféle célból tehetjük, mindegyik más és más analizálási módszert követel meg. Ezért a SUMO többféle kimenet típust is támogat.&lt;br /&gt;
* [[VTK format]] : Minden jármű sebességét és pozíciójából készít fájlokat VTK formátumban.&lt;br /&gt;
* [[FCD]] Floating Car Data): Minden szimulációs ütemben, minden jármű neve, típusa, sebessége, és iránya pozíciója tárolódik.&lt;br /&gt;
* [[Detektoros mérés]] : Lehetőségünk van induktív hurokdetektorok és azonnali induktív hurokdetektorok elhelyezésére a hálózaton. Előbbi folyam adatokat is tud mérni, például a forgalom eloszlása időben.&lt;br /&gt;
* [[Jármű utazásokról információ]] : Az egyes járművek által kibocsátott káros anyag, vagy elhasznált üzemanyag adatait kaphatjuk meg.&lt;br /&gt;
* [[információk a szimuláció jelenlegi állásáról]]: ez nyílván online szimuláció esetén érdekes.&lt;br /&gt;
&lt;br /&gt;
===Grafikus Interfész===&lt;br /&gt;
&lt;br /&gt;
A SUMO grafikus interfésze független program a többi modultól, ő is csak a sumo parancsot hívja. Sajnos az xml szerkesztéstől sem óv meg, nem lehet benne konfigurációt szerkeszteni. Csak grafikusan adhatjuk meg a konfigurációs fájl nevét. Viszont alkalmas arra, hogy grafikus visszajelzést adjon a szimuláció aktuális állapotáról. A kirajzolása nem látványos, de könnyen értelmezhető. Az xmlben megadott színezéseket és jármű alakokat jól kezeli (ezek felül definiálhatók).  Továbbá képeket is elhelyezhetünk a vizualizációba a koordináták megadásával. Például műhold vagy légi felvételt tehetünk a szimuláció mögé.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jelentős hibája, hogy mindig kirajzolja a teljes látható szimulációs területet, még akkor is ha a felbontás miatt nem is lehet látni a járműveket. Ez jelentős korlátot szab a SUMO-ban a vizualizált szimuláció futtatására.&lt;br /&gt;
&lt;br /&gt;
Lehetőség van a szimuláció szüneteltetésére is, illetve megadhatjuk a szimuláció sebességét is. A gui lehetőséget biztosít a forgalom szimuláció közbeni változtatására, például a dugó miatt az emberek későbbre halasztják a bevásárlást.&lt;br /&gt;
&lt;br /&gt;
A modul felépítése lehetővé teszi, új menüpontok könnyű felvételét.&lt;br /&gt;
&lt;br /&gt;
=Felhasználása=&lt;br /&gt;
&lt;br /&gt;
Széles körben használt út hálózat tervezéshez, menetrend készítéshez. Kedvelt ingyenes mivolta miatt akadémiai körökben.  A felhasználására jó példa többek közt a [http://turbotraffic.mak.com TurboTraffic]. Ahol saját GUI-t használnak hozzá, de a sumo szimulátort.&lt;br /&gt;
&lt;br /&gt;
=Kapcsolódó szócikkek=&lt;br /&gt;
* [[MATSim]]&lt;br /&gt;
&lt;br /&gt;
=Szakirodalom=&lt;br /&gt;
* Krajzewicz, Daniel, et al. [http://elib.dlr.de/6661/ &amp;quot;SUMO (Simulation of Urban MObility)-an open-source traffic simulation&amp;quot;], &amp;#039;&amp;#039;Proceedings of the 4th Middle East Symposium on Simulation and Modelling&amp;#039;&amp;#039; (MESM20002). 2002.&lt;br /&gt;
* Krajzewicz, Daniel. [http://link.springer.com/chapter/10.1007/978-1-4419-6142-6_7 &amp;quot;Traffic simulation with SUMO–simulation of urban mobility&amp;quot;], &amp;#039;&amp;#039;Fundamentals of traffic simulation&amp;#039;&amp;#039;. Springer New York, 2010. 269-293.&lt;br /&gt;
* Potári, Gábor, Vincellér, Zoltán , Ács, Zoltán. [http://icai.ektf.hu/icai2014/papers/ICAI.9.2014.2.41.pdf &amp;quot;A method for real-time adaptation of weather conditions within a trac simulation&amp;quot;], &amp;#039;&amp;#039;Proceedings of the 9th International Conference on Applied Informatics&amp;#039;&amp;#039; 2:41-47. 2014. &lt;br /&gt;
&lt;br /&gt;
=Külső hivatkozások=&lt;br /&gt;
* [http://sumo-sim.org/ A SUMO hivatalos honlapja]&lt;br /&gt;
* [http://sourceforge.net/projects/sumo/ A SUMO forráskódja]&lt;br /&gt;
* [http://www.dlr.de/ts/en/desktopdefault.aspx/tabid-9883/16931_read-41000/ DLR - Institute of Transportation Systems - SUMO]&lt;/div&gt;</summary>
		<author><name>Roberto</name></author>
		
	</entry>
	<entry>
		<id>http://gis.inf.elte.hu/giswiki/index.php?title=Kezd%C5%91lap&amp;diff=273</id>
		<title>Kezdőlap</title>
		<link rel="alternate" type="text/html" href="http://gis.inf.elte.hu/giswiki/index.php?title=Kezd%C5%91lap&amp;diff=273"/>
		<updated>2016-07-01T08:35:25Z</updated>

		<summary type="html">&lt;p&gt;Roberto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Üdvözlet a GIS Wikin!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A GIS Wiki az [http://www.elte.hu Eötvös Loránd Tudományegyetem] [http://www.inf.elte.hu Informatikai Karának] egy belső információs oldala, amelynek célja alapvetően &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://hu.wikipedia.org/wiki/F%C3%B6ldrajzi_inform%C3%A1ci%C3%B3s_rendszer térinformatikai rendszerrek]&amp;lt;/span&amp;gt;kel kapcsolatos ismeretek gyűjtése. A szócikkek anyagát elsősorban a [http://people.inf.elte.hu/groberto/elte_ttaf/ Térinformatikai és Távérzékelési Alkalmazások fejlesztése] tárgy hallgatói biztosították.&lt;br /&gt;
&lt;br /&gt;
Jelenleg elérhető szócikkek:&lt;br /&gt;
&lt;br /&gt;
* [[DotSpatial]]&lt;br /&gt;
* [[GeoTools]]&lt;br /&gt;
* [[GDAL/OGR]]&lt;br /&gt;
* [[MapServer]]&lt;br /&gt;
* [[OpenLayers]]&lt;br /&gt;
* [[PgRouting]]&lt;br /&gt;
* [[SharpMap]]&lt;br /&gt;
* [[SUMO]]&lt;br /&gt;
&lt;br /&gt;
Az oldalt [http://people.inf.elte.hu/groberto Giachetta Roberto] szerkeszti.&lt;/div&gt;</summary>
		<author><name>Roberto</name></author>
		
	</entry>
	<entry>
		<id>http://gis.inf.elte.hu/giswiki/index.php?title=DotSpatial&amp;diff=270</id>
		<title>DotSpatial</title>
		<link rel="alternate" type="text/html" href="http://gis.inf.elte.hu/giswiki/index.php?title=DotSpatial&amp;diff=270"/>
		<updated>2016-06-29T15:04:42Z</updated>

		<summary type="html">&lt;p&gt;Roberto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &amp;#039;&amp;#039;&amp;#039;DotSpatial&amp;#039;&amp;#039;&amp;#039; egy nyílt forráskódú térinformatikai programkönyvtár, amely különböző funkcionalitásokat biztosít téradat kezelés, betöltés és mentés, valamint elemzési feladatokra. A programkönyvtár &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/C_Sharp C#]&amp;lt;/span&amp;gt;-ban íródott és a &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/.NET_keretrendszer .NET 4.0 keretrendszeren]&amp;lt;/span&amp;gt; alapszik. Elsősorban asztali alkalmazások elkészítését segíti elő, amely a &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://en.wikipedia.org/wiki/Windows_Forms Windows Forms]&amp;lt;/span&amp;gt; platformra épülnek. A programcsomag &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/GNU_Lesser_General_Public_License GNU LGPL]&amp;lt;/span&amp;gt; licenc alatt használható.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Története ==&lt;br /&gt;
&lt;br /&gt;
A könyvtár létrehozását az Idaho állami egyetemen (&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://en.wikipedia.org/wiki/Idaho_State_University Idaho State University]&amp;lt;/span&amp;gt;) fejlesztett [[MapWindow]] alkalmazás ihlette. Kezdetben csak a saját belső fejlesztésüket szerették volna megkönnyíteni különféle központi funkciók kiszervezésével, idővel azonban a felhalmozott szolgáltatások száma elérte azt a méretet, hogy a fejlesztők úgy érezték, érdemes kiadni a nagyközönség számára is. &lt;br /&gt;
Sajnos a folyamatosan rétegződő, és központi koncepció nélküli fejlesztés rányomta a bélyegét a kódbázisra. Ennek megfelelően modulonként, vagy akár azokon belül is erősen eltérő megközelítéseket láthatunk a forráskódban.&lt;br /&gt;
&lt;br /&gt;
== Szolgáltatások ==&lt;br /&gt;
&lt;br /&gt;
* Térinformatikai adatok megjelenítése &amp;#039;&amp;#039;.Net Windows Form&amp;#039;&amp;#039;, vagy Web alkalmazásokban&lt;br /&gt;
* Shapefájlok, rácshálók valamint raszter felvételek olvasása.&lt;br /&gt;
* Menet közbeni projektálás&lt;br /&gt;
* Tudományos analízis&lt;br /&gt;
* GPS adatok olvasása&lt;br /&gt;
&lt;br /&gt;
== Kik használják? ==&lt;br /&gt;
&lt;br /&gt;
* [http://mapwindow6.codeplex.com/ MapWindow 6]&lt;br /&gt;
* [http://hydrodesktop.codeplex.com/ HydroDesktop]&lt;br /&gt;
* [http://mad.codeplex.com/ MAD]&lt;br /&gt;
* [http://linesiter.codeplex.com/ LineSiter]&lt;br /&gt;
* [http://cetamon.codeplex.com/ Marine Life]&lt;br /&gt;
* [https://pvdesktop.codeplex.com/ PVMapper Site Designer]&lt;br /&gt;
&lt;br /&gt;
== Használat ==&lt;br /&gt;
&lt;br /&gt;
Telepítést nem igényel, ha használni szeretnénk, akkor két lehetőségünk közül választhatunk.&lt;br /&gt;
&lt;br /&gt;
* Letölthetjük azt össze modult egyben a http://dotspatial.codeplex.com/ oldalról, majd később a szükséges projektekbe referenciázzuk őket.&lt;br /&gt;
* &amp;#039;&amp;#039;Visual Studio&amp;#039;&amp;#039; 2010-től felfelé használhatjuk a &amp;#039;&amp;#039;NuGet&amp;#039;&amp;#039; csomagkezelő, ahonnan telepíthetjük az egyes modulokat a kiválasztott projektek alá. Nagy előnye, hogy csomag frissülése esetén automatikusan eljut hozzánk is az új csomag.&lt;br /&gt;
&lt;br /&gt;
== Windows Forms vezérlők ==&lt;br /&gt;
&lt;br /&gt;
A DotSpatialt egyik legnagyobb előnye az előre megírt kontrolok, amiket a már jól megszokott Windows Formsos recept alapján akár vizuális szerkesztőben is összeállíthatunk.&lt;br /&gt;
&lt;br /&gt;
=== DotSpatialt vezérlők telepítése ===&lt;br /&gt;
&lt;br /&gt;
Ha szeretnénk használni a grafikus szerkesztőt, akkor mindenekelőtt hozzá kell adnunk a &amp;#039;&amp;#039;Toolbox&amp;#039;&amp;#039;-hoz a DotSpatialt vezérlőit.&lt;br /&gt;
&lt;br /&gt;
# Jobbklikk a Toolboxon, majd válasszuk ki az &amp;#039;&amp;#039;Add Tab&amp;#039;&amp;#039; menüpontot.&lt;br /&gt;
# Nevezzük az előbb hozzáadott fület.&lt;br /&gt;
# Ismét jobbklikk az új fülön, és válasszuk ki a Choose Item opciót.&lt;br /&gt;
# A felugró ablakból válasszuk ki a &amp;#039;&amp;#039;DotSpatial.Controls.dll&amp;#039;&amp;#039;-t, ha nem találjuk a listából, akkor manuálisan adjuk hozz.&lt;br /&gt;
&lt;br /&gt;
Most már ugyanúgy használhatjuk DotSpatial vezérlőit, mit a .NET  alapértelmezettjeit.&lt;br /&gt;
&lt;br /&gt;
== Vezérlők demonstrációja ==&lt;br /&gt;
&lt;br /&gt;
A DotSpatial vezérlők segítségével rendkívül gyorsan tudjuk alkalmazásunkat felruházni térinformatikai képességekkel. A következő alkalmazás remek példa az előbbiekre. &lt;br /&gt;
Először készítsük el a felületet az alapértelmezett .NET, illetve a már ismertetett DotSpatial vezérlőkből.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;KÉP&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Miután megfelelően elneveztük a felületre elhelyezett elemeket, a hozzájuk tartozó kód mindössze ennyi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
public partial class DesktopMapping : Form&lt;br /&gt;
    {&lt;br /&gt;
        private AppManager _AppManager;&lt;br /&gt;
&lt;br /&gt;
        public DesktopMapping()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
&lt;br /&gt;
            _AppManager = new AppManager();&lt;br /&gt;
            _AppManager.LoadExtensions();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void uxOpenFile_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            uxMap.AddLayer();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void uxZoomIn_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            uxMap.ZoomIn();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void uxZoomWide_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            uxMap.ZoomToMaxExtent();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void uxPan_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            uxMap.FunctionMode = DotSpatial.Controls.FunctionMode.Pan;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void uxGenShp_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            var rnd = new Random();&lt;br /&gt;
            var pg = new Polygon[100];&lt;br /&gt;
            var f = new Feature();&lt;br /&gt;
            var fs = new FeatureSet(f.FeatureType);&lt;br /&gt;
             &lt;br /&gt;
            for (int i = 0; i &amp;lt; 100; i++)&lt;br /&gt;
            {&lt;br /&gt;
                var center = new Coordinate((rnd.Next(50) * 360) - 180, (rnd.Next(60) * 180) - 90);&lt;br /&gt;
                var coord = new Coordinate[50];&lt;br /&gt;
                for (int ii = 0; ii &amp;lt; 50; ii++)&lt;br /&gt;
                {&lt;br /&gt;
                    coord[ii] = new Coordinate(center.X + Math.Cos((ii * 10) * Math.PI / 10), center.Y + (ii * 10) * Math.PI / 10);&lt;br /&gt;
                }&lt;br /&gt;
                coord[35] = new Coordinate(coord[0].X, coord[0].Y);&lt;br /&gt;
                pg[i] = new Polygon(coord);&lt;br /&gt;
                fs.Features.Add(pg[i]);&lt;br /&gt;
            }&lt;br /&gt;
            fs.SaveAs(&amp;quot;C:\\Temp\\test.shp&amp;quot;, true);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bővítmények ==&lt;br /&gt;
Lehetőségünk van bővítmények készítésére, amelyek akár a már kész alkalmazásokba is könnyedén integrálódnak (ilyen például a MapWindow).&lt;br /&gt;
&lt;br /&gt;
=== Példaprogram beépülő modulra ===&lt;br /&gt;
&lt;br /&gt;
A bemutatásra kerülő bővítménnyel lehetőségünk lesz vonalakat rajzolni, réteget létrehozni, illetve megjeleníthetünk velük kapcsolatos magassági adatokat.&lt;br /&gt;
Elsőnek le kell töltenünk az online megtalálható [http://visualstudiogallery.msdn.microsoft.com/92919cee-a2b0-43c6-8993-aeac965bc4b5 sémával].&lt;br /&gt;
&lt;br /&gt;
==== Diagram készítése ====&lt;br /&gt;
&lt;br /&gt;
A magassági adatok megjelenítéséhez egy Windows Form alkalmazást készítünk.&lt;br /&gt;
&lt;br /&gt;
public void Plot(double[] data)&lt;br /&gt;
{&lt;br /&gt;
    chart1.Series.Clear();&lt;br /&gt;
    var series = chart1.Series.Add(&amp;quot;Elevation (meters)&amp;quot;);&lt;br /&gt;
    series.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;&lt;br /&gt;
    series.Points.DataBindY(data);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==== Raszter adatok kinyerése ====&lt;br /&gt;
&lt;br /&gt;
A DotSpatial segítségével könnyedén kinyerhetjük a szükséges magassági adatokat.&lt;br /&gt;
&lt;br /&gt;
private static double GetElevation(IMapRasterLayer raster, Coordinate coordinate)&lt;br /&gt;
{&lt;br /&gt;
    RcIndex rowColumn = raster.DataSet.Bounds.ProjToCell(coordinate);&lt;br /&gt;
    double elevation = raster.DataSet.Value[rowColumn.Row, rowColumn.Column];&lt;br /&gt;
    return elevation;&lt;br /&gt;
}&lt;br /&gt;
private static double GetDistance(double x1, double y1, double x2, double y2)&lt;br /&gt;
{&lt;br /&gt;
    return Math.Sqrt(((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1)));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==== Koordináták kinyerése ====&lt;br /&gt;
&lt;br /&gt;
private List&amp;lt;Coordinate&amp;gt; GetCoordinatesFromLine(IMapLineLayer lineLayer)&lt;br /&gt;
{&lt;br /&gt;
    IFeatureSet featureSet = lineLayer.DataSet;&lt;br /&gt;
&lt;br /&gt;
    // The coordinates should be the first feature of the feature set.&lt;br /&gt;
    IList&amp;lt;Coordinate&amp;gt; lineCoordinates = featureSet.Features[0].Coordinates;&lt;br /&gt;
&lt;br /&gt;
    // Though the original line may only have a few points, we split&lt;br /&gt;
    // each line segment into many points&lt;br /&gt;
    List&amp;lt;Coordinate&amp;gt; pathCoordinates = new List&amp;lt;Coordinate&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
    for (int i = 0; i &amp;lt; lineCoordinates.Count - 1; i++)&lt;br /&gt;
    {&lt;br /&gt;
        Coordinate startCoord = lineCoordinates[i];&lt;br /&gt;
        Coordinate endCoord = lineCoordinates[i + 1];&lt;br /&gt;
        List&amp;lt;Coordinate&amp;gt; segmentCoordinates = SplitSegment(startCoord.X, startCoord.Y, endCoord.X, endCoord.Y);&lt;br /&gt;
&lt;br /&gt;
        //add list of points from this line segment to the complete list&lt;br /&gt;
        pathCoordinates.AddRange(segmentCoordinates);&lt;br /&gt;
    }&lt;br /&gt;
    return pathCoordinates;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private static List&amp;lt;Coordinate&amp;gt; SplitSegment(double startX, double startY, double endX, double endY)&lt;br /&gt;
{&lt;br /&gt;
    const int MinimumDistanceBetweenPoints = 15;&lt;br /&gt;
&lt;br /&gt;
    double points = Math.Floor(GetDistance(startX, startY, endX, endY) / MinimumDistanceBetweenPoints);&lt;br /&gt;
    int PointsPerSegment = (int)Math.Max(points, 1);&lt;br /&gt;
&lt;br /&gt;
    double curX = startX;&lt;br /&gt;
    double curY = startY;&lt;br /&gt;
    double constXdif = ((endX - startX) / PointsPerSegment);&lt;br /&gt;
    double constYdif = ((endY - startY) / PointsPerSegment);&lt;br /&gt;
&lt;br /&gt;
    List&amp;lt;Coordinate&amp;gt; pathPointList = new List&amp;lt;Coordinate&amp;gt;(PointsPerSegment);&lt;br /&gt;
    for (int i = 0; i &amp;lt;= PointsPerSegment; i++)&lt;br /&gt;
    {&lt;br /&gt;
        if (i == 0)&lt;br /&gt;
        {&lt;br /&gt;
            curX = startX;&lt;br /&gt;
            curY = startY;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            curX = curX + constXdif;&lt;br /&gt;
            curY = curY + constYdif;&lt;br /&gt;
        }&lt;br /&gt;
        Coordinate coordinate = new Coordinate(curX, curY);&lt;br /&gt;
        pathPointList.Add(coordinate);&lt;br /&gt;
    }&lt;br /&gt;
    return pathPointList;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void ShowElevation()&lt;br /&gt;
{&lt;br /&gt;
    if (!map.GetRasterLayers().Any())&lt;br /&gt;
    {&lt;br /&gt;
        MessageBox.Show(&amp;quot;Please add a DEM raster layer to the map.&amp;quot;);&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!map.GetLineLayers().Any())&lt;br /&gt;
    {&lt;br /&gt;
        MessageBox.Show(&amp;quot;Please create a path by left clicking to add points and right-clicking to complete the path.&amp;quot;);&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    try&lt;br /&gt;
    {&lt;br /&gt;
        IMapRasterLayer rasterLayer = map.GetRasterLayers().First();&lt;br /&gt;
        IMapLineLayer pathLayer = map.GetLineLayers().First();&lt;br /&gt;
        var coords = GetCoordinatesFromLine(pathLayer);&lt;br /&gt;
&lt;br /&gt;
        double[] elevation = new double[coords.Count];&lt;br /&gt;
        for (int i = 0; i &amp;lt; coords.Count; i++)&lt;br /&gt;
        {&lt;br /&gt;
            elevation[i] = GetElevation(rasterLayer, coords[i]);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        ChartForm chart = new ChartForm();&lt;br /&gt;
        chart.Plot(elevation);&lt;br /&gt;
        chart.Show();&lt;br /&gt;
    }&lt;br /&gt;
    catch (Exception ex)&lt;br /&gt;
    {&lt;br /&gt;
        MessageBox.Show(&amp;quot;Error calculating elevation. The whole path should be inside the DEM area. &amp;quot; + ex.Message);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==== SimpleActionItem használata (menüelem) ====&lt;br /&gt;
&lt;br /&gt;
public void ButtonClick(object sender, EventArgs e)&lt;br /&gt;
{&lt;br /&gt;
    // We&amp;#039;re expecting this extension to only be run in a Windows Forms application.&lt;br /&gt;
    // We&amp;#039;ll depend on a few Windows Forms (Map) features like MouseDown, so we cast&lt;br /&gt;
    // the App.Map as a Map and store a reference to it.&lt;br /&gt;
    map = App.Map as Map;&lt;br /&gt;
&lt;br /&gt;
    // remove any existing path if needed.&lt;br /&gt;
    if (_PathLineLayer != null)&lt;br /&gt;
        map.Layers.Remove(_PathLineLayer);&lt;br /&gt;
&lt;br /&gt;
    _PathLineLayer = null;&lt;br /&gt;
    _LineFeature = null;&lt;br /&gt;
&lt;br /&gt;
    // Let the user know we are ready for them to set points by changing the cursor.&lt;br /&gt;
    map.Cursor = Cursors.Cross;&lt;br /&gt;
    map.MouseDown += map_MouseDown;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==== Vektor réteg létrehozása ====&lt;br /&gt;
&lt;br /&gt;
private void map_MouseDown(object sender, MouseEventArgs e)&lt;br /&gt;
{&lt;br /&gt;
    if (e.Button == MouseButtons.Left)&lt;br /&gt;
    {&lt;br /&gt;
        // Encourage the user to select a raster, if they haven&amp;#039;t done so.&lt;br /&gt;
        if (!map.GetRasterLayers().Any())&lt;br /&gt;
        {&lt;br /&gt;
            map.AddRasterLayer();&lt;br /&gt;
            map.ZoomToMaxExtent();&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        StartOrContinueDrawingPath(e.Location);&lt;br /&gt;
        App.ProgressHandler.Progress(null, 0, &amp;quot;Point registered. Click again to add line segment. Right-click to finish.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    else if (e.Button == MouseButtons.Right)&lt;br /&gt;
    {&lt;br /&gt;
        EndDrawingPath();&lt;br /&gt;
        ShowElevation();&lt;br /&gt;
        App.ProgressHandler.Progress(null, 0, &amp;quot;Ready.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private IFeature AddLineFeatureSetToMap()&lt;br /&gt;
{&lt;br /&gt;
    FeatureSet lineFeatureSet = new FeatureSet(FeatureType.Line);&lt;br /&gt;
    lineFeatureSet.Projection = map.Projection;&lt;br /&gt;
&lt;br /&gt;
    // Initialize the featureSet attribute table by creating columns&lt;br /&gt;
    DataColumn column = new DataColumn(&amp;quot;ID&amp;quot;, typeof(short));&lt;br /&gt;
    lineFeatureSet.DataTable.Columns.Add(column);&lt;br /&gt;
    DataColumn column2 = new DataColumn(&amp;quot;Number of Points&amp;quot;, typeof(int));&lt;br /&gt;
    lineFeatureSet.DataTable.Columns.Add(column2);&lt;br /&gt;
    DataColumn column3 = new DataColumn(&amp;quot;Description&amp;quot;);&lt;br /&gt;
    lineFeatureSet.DataTable.Columns.Add(column3);&lt;br /&gt;
&lt;br /&gt;
    // Add the featureSet as map layer&lt;br /&gt;
    _PathLineLayer = (MapLineLayer)map.Layers.Add(lineFeatureSet);&lt;br /&gt;
    _PathLineLayer.Symbolizer = new LineSymbolizer(Color.Blue, 2);&lt;br /&gt;
    _PathLineLayer.LegendText = &amp;quot;Path Layer&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    var newList = new List&amp;lt;Coordinate&amp;gt;();&lt;br /&gt;
    LineString lineGeometry = new LineString(newList);&lt;br /&gt;
&lt;br /&gt;
    // AddFeature creates the point and a row in the DataTable&lt;br /&gt;
    return lineFeatureSet.AddFeature(lineGeometry);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void StartOrContinueDrawingPath(System.Drawing.Point mouseLocation)&lt;br /&gt;
{&lt;br /&gt;
    Coordinate coord = map.PixelToProj(mouseLocation);&lt;br /&gt;
&lt;br /&gt;
    if (_LineFeature == null)&lt;br /&gt;
    {&lt;br /&gt;
        // This is the first time we see a left click; create empty line feature.&lt;br /&gt;
        _LineFeature = AddLineFeatureSetToMap();&lt;br /&gt;
&lt;br /&gt;
        // Add first coordinate to the line feature.&lt;br /&gt;
        _LineFeature.Coordinates.Add(coord);&lt;br /&gt;
&lt;br /&gt;
        // Set the line feature attribute. This line may have multiple points,&lt;br /&gt;
        // but there is only one row in the attribute table for the entire feature (line).&lt;br /&gt;
        _LineFeature.DataRow[&amp;quot;ID&amp;quot;] = 0;&lt;br /&gt;
        _LineFeature.DataRow[&amp;quot;Description&amp;quot;] = &amp;quot;Path (line)&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // Second or later click - add points to the existing feature&lt;br /&gt;
        _LineFeature.BasicGeometry.Coordinates.Add(coord);&lt;br /&gt;
        _LineFeature.ParentFeatureSet.InitializeVertices();&lt;br /&gt;
&lt;br /&gt;
        // Draw the line.&lt;br /&gt;
        map.ResetBuffer();&lt;br /&gt;
&lt;br /&gt;
        // Update the attribute table.&lt;br /&gt;
        _LineFeature.DataRow[&amp;quot;Number of Points&amp;quot;] = _LineFeature.BasicGeometry.Coordinates.Count;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void EndDrawingPath()&lt;br /&gt;
{&lt;br /&gt;
    // The path is complete.&lt;br /&gt;
    map.ResetBuffer();&lt;br /&gt;
    map.Cursor = Cursors.Arrow;&lt;br /&gt;
    map.MouseDown -= map_MouseDown;&lt;br /&gt;
    _LineFeature = null;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Roberto</name></author>
		
	</entry>
	<entry>
		<id>http://gis.inf.elte.hu/giswiki/index.php?title=PgRouting&amp;diff=233</id>
		<title>PgRouting</title>
		<link rel="alternate" type="text/html" href="http://gis.inf.elte.hu/giswiki/index.php?title=PgRouting&amp;diff=233"/>
		<updated>2016-06-06T11:00:05Z</updated>

		<summary type="html">&lt;p&gt;Roberto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &amp;#039;&amp;#039;&amp;#039;pgRouting&amp;#039;&amp;#039;&amp;#039; egy &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Ny%C3%ADlt_forr%C3%A1sk%C3%B3d%C3%BA_szoftver nyílt forráskódú]&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/C%2B%2B C++]&amp;lt;/span&amp;gt; nyelven írt bővítmény a [[PostGIS]]/&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/PostgreSQL PostgreSQL]&amp;lt;/span&amp;gt; térinformatikai adatbázisokhoz. Lehetővé teszi &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Gr%C3%A1f gráf adatszerkezetek]&amp;lt;/span&amp;gt; kezelését, így például legrövidebb utakat, csomópontok távolságát és egyéb hálózati elemzést igénylő feladatokat oldhatunk meg vele. A programcsomag &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/GNU_General_Public_License GNU GPL v2]&amp;lt;/span&amp;gt; licenc alatt használható.&lt;br /&gt;
&lt;br /&gt;
== Telepítés ==&lt;br /&gt;
A PostGIS újabb verziói (2.0+) már tartalmazzák a pgRouting csomagot, így nem szükséges külön telepíteni, csak aktiválni kell, a következő módon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
CREATE EXTENSION pgrouting;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A teljes telepítési útmutató elérhető a pgRouting honlapján.&lt;br /&gt;
&lt;br /&gt;
== Felépítés ==&lt;br /&gt;
&lt;br /&gt;
A pgRouting két fő összetevőből áll:&lt;br /&gt;
* Egy C modul, amely egy PostgreSQL-ben átadott lekérdezést használ a gráf felépítéséhez.&lt;br /&gt;
* C++ modulok, amelyek a lekérdezést úgynevezett boost gráffá alakítják, és futtatják az útvonal-választást.&lt;br /&gt;
&lt;br /&gt;
Hogy mely összetevőt használja a program futása során, az az algoritmus fajtájától függ.&lt;br /&gt;
&lt;br /&gt;
A függvénykönyvtár szerkezete pedig a következőképp néz ki:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  cmake/                 - cmake fájlok&lt;br /&gt;
  CMakeLists.txt         - Top level cmake &lt;br /&gt;
  doc/                   - Top level doc, a nem forrásalgoritmus-specifikus dokumentáció helye&lt;br /&gt;
    themes/              - Sphinx téma a doc-nak&lt;br /&gt;
    static/              - dokumentáció képei&lt;br /&gt;
  src/                  &lt;br /&gt;
    astar/               - A* algoritmus&lt;br /&gt;
    common/              - pgRouting projektekben szükséges közös fájlok&lt;br /&gt;
    dijkstra/            - Dijkstra algoritmus&lt;br /&gt;
    driving_distance/    - Vezetési távolság&lt;br /&gt;
    trsp/                - Legrövidebb utak kanyarodási korlátokkal&lt;br /&gt;
    tsp/                 - Utazó ügynök&lt;br /&gt;
  tools/                 - Tesztelési eszközök&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az src mappa minden könyvtárában &amp;lt;code&amp;gt;doc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sql&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt;, és &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt; almappák találhatók, melyekbe értelemszerűen a következők kerülnek:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;doc&amp;#039;&amp;#039;&amp;#039;: Az adott algoritmushoz szükséges összes dokumentáció ReStructuredText formátumban. Ennek célja, hogy a függvények leírásával, input és output paraméterek megadásával a felhasználók számára érthetővé tegye, hogyan működik az algoritmus.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;sql&amp;#039;&amp;#039;&amp;#039;: Az sql burkolók a C kódhoz.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;src&amp;#039;&amp;#039;&amp;#039;: C/C++ kód az algoritmushoz.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;test&amp;#039;&amp;#039;&amp;#039;: &amp;lt;code&amp;gt;test.conf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;*.data&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;*.test&amp;lt;/code&amp;gt;, és &amp;lt;code&amp;gt;*.rest&amp;lt;/code&amp;gt; fájlok az algoritmus teszteléséhez.&lt;br /&gt;
&lt;br /&gt;
Fejlesztési célból a programot klónozhatjuk Git-en keresztül, majd telepítjük a következők szerint:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 git clone git@github.com:pgRouting/pgrouting.git&lt;br /&gt;
 cd pgrouting&lt;br /&gt;
 cmake -DWITH_TSP=ON -DWITH_DD=ON .&lt;br /&gt;
 make&lt;br /&gt;
 sudo make install&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Használat ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Adatok betöltése&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A vektoros térképi adatok adatbázis-táblába betöltésére számos eszköz áll rendelkezésre, például:&lt;br /&gt;
*	&amp;#039;&amp;#039;&amp;#039;osm2po&amp;#039;&amp;#039;&amp;#039;: OpenStreetMap (OSM) adatok konvertálása SQL formátumba, pgRouting-nak megfelelő formátumban.&lt;br /&gt;
*	&amp;#039;&amp;#039;&amp;#039;shp2pgsql&amp;#039;&amp;#039;&amp;#039;:	PostgreSQL shapefile betöltője.&lt;br /&gt;
*	&amp;#039;&amp;#039;&amp;#039;ogr2ogr&amp;#039;&amp;#039;&amp;#039;:	Vektoros adatok konverziója.&lt;br /&gt;
*	&amp;#039;&amp;#039;&amp;#039;osm2pgsql&amp;#039;&amp;#039;&amp;#039;:	OSM adat betöltése postgreSQL-be.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Előfeldolgozás&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Amikor egy GIS fájlt olvasunk be az adatbázisunkba a pgRouting számára, nem feltétlenül követnek alkalmas topológiát a rekordok. A helytelen topológia hibás útvonalakhoz vezetne. Hogy használható adattáblát kapjunk, csomópontokra van szükségünk minden egyes útkereszteződésnél. Az útvonalhálózat megfelelő topológiájának kialakítását segítheti a pgr_createTopology  vagy a pgr_nodeNetwork parancs. Működésük hasonló. Az utóbbi beolvassa a „csúcstalan” hálózat adatbázis-tábláját, majd egy új táblába írja a már felcsúcsozott éleket. Paraméterei&lt;br /&gt;
*	éltábla neve, &lt;br /&gt;
*	tolerancia: a toleranciaértéken belüli csomópontok egy csomópontot fognak alkotni,&lt;br /&gt;
*	id, az éltábla elsődleges kulcsa,&lt;br /&gt;
*	geometriát tartalmazó oszlop,&lt;br /&gt;
*	kimeneti tábla szuffixe. Alapértelmezetten edge_table_noded.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lekérdezés szintaxis&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Minden pgRouting lekérdezés az alábbi formátumot követi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
SELECT pgr_&amp;lt;algorithm&amp;gt;(&amp;lt;SQL for edges&amp;gt;, start, end, &amp;lt;additonal options&amp;gt;)&lt;br /&gt;
&amp;lt;/code&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;pgr_&amp;lt;/code&amp;gt;előtaggal hívjuk meg a lentebb ismertetett algoritmusok egyikét. A belső SQL lekérdezéssel adjuk meg a táblát, amelyre az algoritmust futtatjuk, a kezdő- és végponto(ka)t, valamint opcionális további szűrési feltételeket. Például, ha a [http://http://docs.pgrouting.org/latest/en/doc/src/developer/sampledata.html#sampledata pgRouting dokumentációjában] bemutatott mintaadatokkal dolgozunk, az alábbi lekérdezéssel a 2. sorszámú csúcsból a 3. sorszámúba vezető legrövidebb utat kapjuk meg:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 SELECT * FROM pgr_dijkstra(&lt;br /&gt;
      &amp;#039;SELECT id, source, target, cost, reverse_cost &lt;br /&gt;
      FROM edge_table&amp;#039;, 2, 3);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Algoritmusok ==&lt;br /&gt;
&lt;br /&gt;
=== Dijkstra algoritmus ===&lt;br /&gt;
A &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Dijkstra-algoritmus Dijkstra algoritmus]&amp;lt;/span&amp;gt; egy súlyozott élű, irányított &amp;lt;math&amp;gt;G=(V,E)&amp;lt;/math&amp;gt; gráf adott csúcsából egy másik adott csúcsába vezető legrövidebb út megtalálására szolgáló módszer.  Az algoritmus csak nem negatív élsúlyok esetén működik. Jelölje a súlyfüggvényt &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt;. Az algoritmus mohó módszert használ. Legyen a kiindulási pont &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;, a célállomás pedig &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;. Az algoritmus egy &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; halmazban tárolja azon csúcsokat, amelyeknek már ismerjük az &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;-ből hozzájuk vezető legrövidebb út hosszát. Ezen kívül minden &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; csúcsról nyilvántartunk az algoritmus futása során egy &amp;lt;math&amp;gt;D[u]&amp;lt;/math&amp;gt; értéket, ami az &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;-ből &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt;-ba vezető addig megismert legrövidebb út hossza.&lt;br /&gt;
&lt;br /&gt;
Kezdetben &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; üres, &amp;lt;math&amp;gt;D[s]=0&amp;lt;/math&amp;gt; és minden más &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; csúcsra &amp;lt;math&amp;gt;D[v]=\infty&amp;lt;/math&amp;gt;. Ezután minden iterációban kiválasztunk a &amp;lt;math&amp;gt;V\setminus H&amp;lt;/math&amp;gt; halmazból egy olyan &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; csúcsot, amelyre &amp;lt;math&amp;gt;D[x]&amp;lt;/math&amp;gt; minimális, áttesszük &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;-et &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;-ba, majd &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; minden olyan &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; szomszédjára, amely nincs &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;-ban frissítjük a &amp;lt;math&amp;gt;D[v]&amp;lt;/math&amp;gt; értéket:&lt;br /&gt;
&amp;lt;math&amp;gt;D[v]=\min\{D[v],D[x]+w(x,v)\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Az algoritmus véget ér, amikor &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; átkerül &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;-ba, ekkor &amp;lt;math&amp;gt;D[t]&amp;lt;/math&amp;gt; egy legrövidebb &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;-ből &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-be vezető út hossza. Az algoritmus kis módosítással egy legrövidebb utat is megad &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;-ből &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-be.&lt;br /&gt;
&lt;br /&gt;
Az algoritmus költsége szomszédsági mátrixos gráfábrázolás esetén &amp;lt;math&amp;gt;O(|V|^2)&amp;lt;/math&amp;gt;, szomszédsági listás gráfábrázolás esetén Fibonacci kupacot használva&lt;br /&gt;
&amp;lt;math&amp;gt;O(|E|+|V|\log |V|)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Kétirányú Dijkstra algoritmus ===&lt;br /&gt;
A kétirányú Dijkstra algoritmus szintén egy súlyozott élű, irányított &amp;lt;math&amp;gt;G=(V,E)&amp;lt;/math&amp;gt; gráf adott csúcsából egy másik adott csúcsába vezető legrövidebb út megtalálására szolgáló módszer.  Az algoritmus csak nem negatív élsúlyok esetén működik.  Legyen a kiindulási pont &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;, a célállomást pedig &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;. A Dijkstra algoritmust futtatjuk a kiindulási pontból az eredeti gráfon, és párhuzamosan a célállomásból a transzponált gráfon (amelyet úgy kapunk az eredeti gráfból, hogy az élek irányítását megfordítjuk).  Akkor állunk meg, ha egy &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; csúcs mindkét irányból bekerül a Dijkstra algoritmusnál definiált &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; halmazba (pontosabban a &amp;lt;math&amp;gt;H_s&amp;lt;/math&amp;gt; és a &amp;lt;math&amp;gt;H_t&amp;lt;/math&amp;gt; halmazba is). Egy alternatív lehetőség, hogy a &amp;lt;math&amp;gt;H_s&amp;lt;/math&amp;gt; és a &amp;lt;math&amp;gt;H_t&amp;lt;/math&amp;gt; halmazok közül minden egyes iterációban csak azt bővítjük, amelyiknél &amp;lt;math&amp;gt;D[x]&amp;lt;/math&amp;gt; kisebb. Az algoritmus kis módosítással egy legrövidebb utat is megad &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;-ből &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-be.&lt;br /&gt;
&lt;br /&gt;
=== k-Dijkstra algoritmus ===&lt;br /&gt;
A &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-Dijkstra algoritmus egy súlyozott élű, irányított &amp;lt;math&amp;gt;G=(V,E)&amp;lt;/math&amp;gt; gráf adott csúcsából több adott csúcsába vezető legrövidebb út megtalálására szolgáló módszer. Valójában a Dijkstra algoritmus a gráf egy adott csúcsából az összes többi csúcsba vezető legrövidebb utat megtalálja, így akárhány célállomást megadhatunk. Az algoritmus akkor fejeződik be, amikor minden egyes célállomás bekerült a Dijkstra algoritmusnál definiált &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; halmazba. Az algoritmus kis módosítással magukat a legrövidebb utakat is megadja.&lt;br /&gt;
&lt;br /&gt;
Az algoritmus költsége szomszédsági mátrixos gráfábrázolás esetén &amp;lt;math&amp;gt;O(|V|^2)&amp;lt;/math&amp;gt;, szomszédsági listás gráfábrázolás esetén Fibonacci kupacot használva&lt;br /&gt;
&amp;lt;math&amp;gt;O(|E|+|V|\log |V|)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== A* algoritmus ===&lt;br /&gt;
Az [https://en.wikipedia.org/wiki/A*_search_algorithm &amp;lt;math&amp;gt;A^\ast&amp;lt;/math&amp;gt; algoritmus] egy súlyozott élű, irányított &amp;lt;math&amp;gt;G=(V,E)&amp;lt;/math&amp;gt; gráf adott csúcsából egy másik adott csúcsába vezető legrövidebb út megtalálására szolgáló módszer.  Az &amp;lt;math&amp;gt;A^\ast&amp;lt;/math&amp;gt; algoritmus a Dijkstra algoritmus általánosítása, és szintén csak nem negatív élsúlyok esetén működik. Jelölje a súlyfüggvényt &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt;. Az algoritmus mohó módszert használ. Legyen a kiindulási pont &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;, a célállomás pedig &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;. Az algoritmus egy &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; halmazban tárolja azon csúcsokat, amelyeknek már ismerjük az &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;-ből hozzávezető legrövidebb út hosszát, egy &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt; halmazban pedig azokat, amelyeket már elértünk &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;-ből, de az &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;-ből hozzájuk vezető legrövidebb út hosszát még nem ismerjük. Minden &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; csúcsról nyilvántartunk az algoritmus futása során három értéket: &amp;lt;math&amp;gt;D[u]&amp;lt;/math&amp;gt; az &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;-ből &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt;-ba vezető addig megismert legrövidebb út hossza, &amp;lt;math&amp;gt;C[u]&amp;lt;/math&amp;gt; egy nem negatív heurisztikus alsó becslés az &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt;-ból &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-be vezető legrövidebb út hosszára, amelyre az is teljesül, hogy az &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt;-ból bármely &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; csúcsba vezető legrövidebb út hosszára &lt;br /&gt;
&amp;lt;math&amp;gt;C[u]-C[v]&amp;lt;/math&amp;gt; alsó korlát (például egy térkép esetén &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; és &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; légvonalban mért távolsága), végül &amp;lt;math&amp;gt;B[u]=D[u]+C[u]&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Kezdetben &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; üres, &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;-ben csak az &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; csúcs van, és &amp;lt;math&amp;gt;B[s]=0&amp;lt;/math&amp;gt;. Ezután minden iterációban kiválasztunk az &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt; halmazból egy olyan &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; csúcsot, amelyre &amp;lt;math&amp;gt;B[x]&amp;lt;/math&amp;gt; minimális, áttesszük &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;-et &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;-ba, majd &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; minden olyan &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; szomszédjára, amely nincs &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;-ban frissítjük először a &amp;lt;math&amp;gt;D[v]&amp;lt;/math&amp;gt; értéket: &lt;br /&gt;
&amp;lt;math&amp;gt;D[v]=\min\{D[v],D[x]+w(x,v)\}&amp;lt;/math&amp;gt;,&lt;br /&gt;
majd a &amp;lt;math&amp;gt;B[v]&amp;lt;/math&amp;gt; értéket: &lt;br /&gt;
&amp;lt;math&amp;gt;B[v]=\min\{B[v],D[v]+C[v]\}&amp;lt;/math&amp;gt;,&lt;br /&gt;
végül áttesszük &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt;-t &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;-be. Az algoritmus véget ér, amikor &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; átkerül &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;-ből &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;-ba, ekkor &amp;lt;math&amp;gt;B[t]&amp;lt;/math&amp;gt; egy legrövidebb &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;-ből &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-be vezető út hossza. Az algoritmus kis módosítással egy legrövidebb utat is megad &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;-ből &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-be.&lt;br /&gt;
&lt;br /&gt;
A tapasztalat azt mutatja, hogy az &amp;lt;math&amp;gt;A^\ast&amp;lt;/math&amp;gt; algoritmus számos esetben hatékonyabb, mint a Dijkstra algoritmust.&lt;br /&gt;
&lt;br /&gt;
=== Kétirányú &amp;lt;math&amp;gt;A^\ast&amp;lt;/math&amp;gt; algoritmus ===&lt;br /&gt;
A kétirányú &amp;lt;math&amp;gt;A^\ast&amp;lt;/math&amp;gt; algoritmus egy súlyozott élű, irányított &amp;lt;math&amp;gt;G=(V,E)&amp;lt;/math&amp;gt; gráf adott csúcsából egy másik adott csúcsába vezető legrövidebb út megtalálására szolgáló módszer.  Az algoritmus csak nem negatív élsúlyok esetén működik.  Legyen a kiindulási pont &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;, a célállomást pedig &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;. Az &amp;lt;math&amp;gt;A^\ast&amp;lt;/math&amp;gt;  algoritmust futtatjuk a kiindulási pontból az eredeti gráfon, és párhuzamosan a célállomásból a transzponált gráfon (amelyet úgy kapunk az eredeti gráfból, hogy az élek irányítását megfordítjuk).  Akkor állunk meg, ha egy &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; csúcs mindkét irányból bekerül az &amp;lt;math&amp;gt;A^\ast&amp;lt;/math&amp;gt; algoritmusnál definiált &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; halmazba (pontosabban a &amp;lt;math&amp;gt;H_s&amp;lt;/math&amp;gt; és a &amp;lt;math&amp;gt;H_t&amp;lt;/math&amp;gt; halmazba is). Az algoritmus kis módosítással egy legrövidebb utat is megad s-ből t-be.&lt;br /&gt;
&lt;br /&gt;
=== Yen algoritmus ===&lt;br /&gt;
A [https://en.wikipedia.org/wiki/Yen%27s_algorithm Yen algoritmus] egy súlyozott élű, irányított &amp;lt;math&amp;gt;G=(V,E)&amp;lt;/math&amp;gt; gráf egy adott csúcsából egy adott másik csúcsába vezető legrövidebb út mellett megtalálja a második, harmadik, …, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-adik legrövidebb (egyszerű) utat is. Az algoritmus csak nem negatív élsúlyok esetén működik. &lt;br /&gt;
&lt;br /&gt;
Az algoritmus költsége &lt;br /&gt;
&amp;lt;math&amp;gt;O(k|V|(|E|+|V|\log |V|))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Floyd-Warshall algoritmus ===&lt;br /&gt;
A [https://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm Floyd-Warshall algoritmus] egy súlyozott élű, irányított &amp;lt;math&amp;gt;G=(V,E)&amp;lt;/math&amp;gt; gráf bármely két csúcsa közötti legrövidebb út megtalálására szolgáló módszer. Az algoritmus negatív élsúlyok esetén is működik, ha a gráf nem tartalmaz negatív összhosszúságú irányított kört. Jelölje a súlyfüggvényt &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt;. Az algoritmus dinamikus programozást használ. Legyen a gráf csúcshalmaza &amp;lt;math&amp;gt;\{v_1,v_2,\ldots,v_n\}&amp;lt;/math&amp;gt;. Az algoritmus minden &amp;lt;math&amp;gt;0\leqslant k\leqslant n&amp;lt;/math&amp;gt; esetén meghatározza a &amp;lt;math&amp;gt;v_i&amp;lt;/math&amp;gt;-ből &lt;br /&gt;
&amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt;-be menő legrövidebb olyan (egyszerű) út &amp;lt;math&amp;gt;T_k[v_i,v_j]&amp;lt;/math&amp;gt; hosszát, amelyen a közbülső csúcsok a &amp;lt;math&amp;gt;\{v_1,v_2,\ldots,v_k\}&amp;lt;/math&amp;gt; halmazból kerülnek ki: &lt;br /&gt;
&amp;lt;math&amp;gt;T_0[v_i,v_j]=w(v_i,v_j)&amp;lt;/math&amp;gt;, és &amp;lt;math&amp;gt;T_k[v_i,v_j]=\min\{T_{k-1}[v_i,v_j],T_{k-1}[v_i,v_k]+T_{k-1}[v_k,v_j]\}&amp;lt;/math&amp;gt; ha &amp;lt;math&amp;gt;k&amp;gt;0&amp;lt;/math&amp;gt;. Az algoritmus kis módosítással magukat a legrövidebb utakat is megadja.&lt;br /&gt;
&lt;br /&gt;
Az algoritmus költsége &amp;lt;math&amp;gt;O(|V|^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Johnson algoritmus ===&lt;br /&gt;
A [https://en.wikipedia.org/wiki/Johnson%27s_algorithm Johnson algoritmus] egy súlyozott élű, irányított &amp;lt;math&amp;gt;G=(V,E)&amp;lt;/math&amp;gt; gráf bármely két csúcsa közötti legrövidebb út megtalálására szolgáló módszer. Az algoritmus negatív élsúlyok esetén is működik, ha a gráf nem tartalmaz negatív összhosszúságú irányított kört. Jelölje a súlyfüggvényt &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt;. Az algoritmus ritka gráfokon teljesít igazán jól. &lt;br /&gt;
&lt;br /&gt;
Vegyünk fel egy új &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; csúcsot, és vezessünk &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;-ből nulla súlyú éleket &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; csúcsaiba. Jelölje az így kapott gráfot &amp;lt;math&amp;gt;G&amp;#039;&amp;lt;/math&amp;gt;. Futtassuk le &amp;lt;math&amp;gt;G&amp;#039;&amp;lt;/math&amp;gt;-re a Bellman-Ford algoritmust az &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; kezdőcsúccsal. Az algoritmus által szolgáltatott távolságérték a gráf egy &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; csúcsára legyen &lt;br /&gt;
&amp;lt;math&amp;gt;D[v]&amp;lt;/math&amp;gt;. Átsúlyozzuk a &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; gráf éleit: legyen &amp;lt;math&amp;gt;w&amp;#039;(u,v)=w(u,v)+D[u]-D[v]&amp;lt;/math&amp;gt; minden &amp;lt;math&amp;gt;(u,v)&amp;lt;/math&amp;gt; élre. Most &amp;lt;math&amp;gt;w&amp;#039;&amp;lt;/math&amp;gt; egy nem negatív súlyfüggvény &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;-n. Futtassuk ezzel a súlyfüggvénnyel a Dijkstra algoritmust a &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; gráf minden csúcsából. Egy legrövidebb &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt;-ból &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt;-be vezető út hossza ezután a kapott érték mínusz &amp;lt;math&amp;gt;D[u]-D[v]&amp;lt;/math&amp;gt;. Az algoritmus kis módosítással magukat a legrövidebb utakat is megadja.&lt;br /&gt;
&lt;br /&gt;
Az algoritmus költsége szomszédsági listás gráfábrázolás esetén Fibonacci kupacot használva&lt;br /&gt;
&amp;lt;math&amp;gt;O(|V|(|E|+|V|\log |V|))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Utazó ügynök probléma === &lt;br /&gt;
Az [https://hu.wikipedia.org/wiki/Az_utaz%C3%B3_%C3%BCgyn%C3%B6k_probl%C3%A9m%C3%A1ja utazó ügynök probléma] a következő. Adott városoknak egy listája, és adott bármely két város között a távolság. Határozzunk meg egy olyan körutat, amely minden városon pontosan egyszer halad át, és a hossza minimális. A problémára nem ismert polinomiális költségű algoritmus. A program ún. simulated annealing technikán alapuló algoritmust használ egy jó közelítő megoldás meghatározására.&lt;br /&gt;
&lt;br /&gt;
=== Legrövidebb utak kanyarodási korlátokkal ===&lt;br /&gt;
Az algoritmus egy súlyozott élű, irányított &amp;lt;math&amp;gt;G=(V,E)&amp;lt;/math&amp;gt; gráf adott csúcsából egy másik adott csúcsába vezető legrövidebb út meghatározásakor képes figyelembe venni, hogy két csatlakozó él egymás utáni bejárása extra költséggel bírhat. Ezeket a megszorításokat egy külön táblában adhatjuk meg. Tapasztalat szerint az algoritmus közel olyan gyors, mint az &amp;lt;math&amp;gt;A^\ast&amp;lt;/math&amp;gt; algoritmus.&lt;br /&gt;
&lt;br /&gt;
=== Vezetési távolság === &lt;br /&gt;
Az algoritmus egy súlyozott élű, irányított &amp;lt;math&amp;gt;G=(V,E)&amp;lt;/math&amp;gt; gráfban a Dijkstra algoritmus felhasználásával megadja azon csúcsokat, melyekbe egy vagy több adott csúcsból egy adott értéknél rövidebb úton el lehet jutni.&lt;br /&gt;
&lt;br /&gt;
== Kapcsolódó alkalmazások ==&lt;br /&gt;
Útvonal-meghatározásra alkalmas adathalmazt például [[OpenStreetMap]] (OSM) térképekből nyerhetünk ki. Ehhez egyik alkalmas segédeszköz az [[OSM2PO]]  alkalmazás, amely megfelelő topológiájú SQL fájlt állít elő a megadott térképrészlethez, amely egyből alkalmas a pgRouting-gal vagy QGIS-szel való feldolgozásra. [[Fájl:Osm.png|thumb|450px|Útvonal megjelenítése OSM2PO webszolgáltatásként]]&lt;br /&gt;
Az OSM2PO révén vizualizálhatjuk is a legrövidebb utakat. A programmal előállított SQL táblákban minden útkereszteződéshez tartozik egy rekord, melyben a következőket tároljuk:&lt;br /&gt;
*	koordináták (&amp;lt;code&amp;gt;x1, x2, y1, y2&amp;lt;/code&amp;gt;), &lt;br /&gt;
*	név (&amp;lt;code&amp;gt;osm_name&amp;lt;/code&amp;gt;),&lt;br /&gt;
*	csomópont azonosító (&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;),&lt;br /&gt;
*	lehetséges továbbhaladási irány (&amp;lt;code&amp;gt;osm_source_id, osm_target_id&amp;lt;/code&amp;gt;),&lt;br /&gt;
*	útszakasz hossza (&amp;lt;code&amp;gt;km&amp;lt;/code&amp;gt;),&lt;br /&gt;
*	megengedett sebesség (&amp;lt;code&amp;gt;kmh&amp;lt;/code&amp;gt;),&lt;br /&gt;
*	költség (&amp;lt;code&amp;gt;cost&amp;lt;/code&amp;gt;),&lt;br /&gt;
*       geometria (&amp;lt;code&amp;gt;geom_way&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;demo.bat&amp;lt;/code&amp;gt; fájl szerkesztésével specifikálhatjuk térképünk paramétereit, például, hogy mely térképrészleten dolgozzunk. A [https://mapzen.com/data/metro-extracts/ Mapzen] oldalán kész &amp;lt;code&amp;gt;.pbf&amp;lt;/code&amp;gt; formátumú városrészleteket találhatunk, melyeket kompatibilisek az Osm2Po-val. A fájl futtatásával előáll egy &amp;lt;code&amp;gt;.sql&amp;lt;/code&amp;gt; fájl is, melyet importálhatunk a postGIS adatbázisunkba, és akár pgRouting lekérdezéseket is futtathatunk rajta. &lt;br /&gt;
Amíg fut a program, helyi webszerveren (&amp;lt;code&amp;gt;localhost:8888/Osm2poService&amp;lt;/code&amp;gt;) jeleníthető meg az importált térképrészlet, melyen az útkeresést is kipróbálhatjuk.&lt;br /&gt;
&lt;br /&gt;
== Szakirodalom ==&lt;br /&gt;
&lt;br /&gt;
* Regina O. Obe, Leo S. Hsu. [https://locatepress.com/pgrouting &amp;quot;pgRouting: A Practical Guide&amp;quot;], &amp;#039;&amp;#039;Locate Press&amp;#039;&amp;#039;, 2016.&lt;br /&gt;
* Regina O. Obe, Leo S. Hsu. [https://www.manning.com/books/postgis-in-action-second-edition &amp;quot;PostGIS in Action (Second Edition)&amp;quot;], &amp;#039;&amp;#039;Manning Publictions&amp;#039;&amp;#039; (ISBN 9781617291395). 2015. pp 286-290.&lt;br /&gt;
* Lijing Zhang, Xuanhui He. [http://link.springer.com/chapter/10.1007%2F978-3-642-25349-2_133 &amp;quot;Route Search Base on pgRouting&amp;quot;], &amp;#039;&amp;#039;Software Engineering and Knowledge Engineering: Theory and Practice Vol 2.&amp;#039;&amp;#039;. Springer-Verlag Berlin Heidelberg, 2012. pp 1003-1007.&lt;br /&gt;
&lt;br /&gt;
== Külső hivatkozások ==&lt;br /&gt;
&lt;br /&gt;
* [http://pgrouting.org/ A pgRouting hivatalos honlapja]&lt;br /&gt;
* [http://docs.pgrouting.org/latest/en/doc/index.html pgRouting Dokumentáció]&lt;br /&gt;
* [http://www.postgresonline.com/journal/archives/362-An-almost-idiots-guide-to-install-PostgreSQL-9.5,-PostGIS-2.2-and-pgRouting-2.1.0-with-Yum.html Fejlesztőkörnyezet telepítési útmutató]&lt;br /&gt;
* [http://workshop.pgrouting.org/index.html pgRouting Workshop]&lt;br /&gt;
* [http://www.bostongis.com/PrinterFriendly.aspx?content_name=pgrouting_osm2po_1 OpenStreetMap fájl betöltése Osm2Po-val és útvonalkeresés]&lt;/div&gt;</summary>
		<author><name>Roberto</name></author>
		
	</entry>
	<entry>
		<id>http://gis.inf.elte.hu/giswiki/index.php?title=PgRouting&amp;diff=232</id>
		<title>PgRouting</title>
		<link rel="alternate" type="text/html" href="http://gis.inf.elte.hu/giswiki/index.php?title=PgRouting&amp;diff=232"/>
		<updated>2016-06-06T10:56:50Z</updated>

		<summary type="html">&lt;p&gt;Roberto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &amp;#039;&amp;#039;&amp;#039;pgRouting&amp;#039;&amp;#039;&amp;#039; egy &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Ny%C3%ADlt_forr%C3%A1sk%C3%B3d%C3%BA_szoftver nyílt forráskódú]&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/C%2B%2B C++]&amp;lt;/span&amp;gt; nyelven írt bővítmény a [[PostGIS]]/&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/PostgreSQL PostgreSQL]&amp;lt;/span&amp;gt; térinformatikai adatbázisokhoz. Lehetővé teszi &amp;lt;span class=&amp;quot;plainlinks&amp;quot;[https://hu.wikipedia.org/wiki/Gr%C3%A1f gráf adatszerkezetek]&amp;lt;/span&amp;gt; kezelését, így például legrövidebb utakat, csomópontok távolságát és egyéb hálózati elemzést igénylő feladatokat oldhatunk meg vele. A programcsomag &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/GNU_General_Public_License GNU GPL v2]&amp;lt;/span&amp;gt; licenc alatt használható.&lt;br /&gt;
&lt;br /&gt;
== Telepítés ==&lt;br /&gt;
A PostGIS újabb verziói (2.0+) már tartalmazzák a pgRouting csomagot, így nem szükséges külön telepíteni, csak aktiválni kell, a következő módon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
CREATE EXTENSION pgrouting;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A teljes telepítési útmutató elérhető a pgRouting honlapján.&lt;br /&gt;
&lt;br /&gt;
== Felépítés ==&lt;br /&gt;
&lt;br /&gt;
A pgRouting két fő összetevőből áll:&lt;br /&gt;
* Egy C modul, amely egy PostgreSQL-ben átadott lekérdezést használ a gráf felépítéséhez.&lt;br /&gt;
* C++ modulok, amelyek a lekérdezést úgynevezett boost gráffá alakítják, és futtatják az útvonal-választást.&lt;br /&gt;
&lt;br /&gt;
Hogy mely összetevőt használja a program futása során, az az algoritmus fajtájától függ.&lt;br /&gt;
&lt;br /&gt;
A függvénykönyvtár szerkezete pedig a következőképp néz ki:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  cmake/                 - cmake fájlok&lt;br /&gt;
  CMakeLists.txt         - Top level cmake &lt;br /&gt;
  doc/                   - Top level doc, a nem forrásalgoritmus-specifikus dokumentáció helye&lt;br /&gt;
    themes/              - Sphinx téma a doc-nak&lt;br /&gt;
    static/              - dokumentáció képei&lt;br /&gt;
  src/                  &lt;br /&gt;
    astar/               - A* algoritmus&lt;br /&gt;
    common/              - pgRouting projektekben szükséges közös fájlok&lt;br /&gt;
    dijkstra/            - Dijkstra algoritmus&lt;br /&gt;
    driving_distance/    - Vezetési távolság&lt;br /&gt;
    trsp/                - Legrövidebb utak kanyarodási korlátokkal&lt;br /&gt;
    tsp/                 - Utazó ügynök&lt;br /&gt;
  tools/                 - Tesztelési eszközök&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az src mappa minden könyvtárában &amp;lt;code&amp;gt;doc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sql&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt;, és &amp;lt;code&amp;gt;test&amp;lt;/code&amp;gt; almappák találhatók, melyekbe értelemszerűen a következők kerülnek:&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;doc&amp;#039;&amp;#039;&amp;#039;: Az adott algoritmushoz szükséges összes dokumentáció ReStructuredText formátumban. Ennek célja, hogy a függvények leírásával, input és output paraméterek megadásával a felhasználók számára érthetővé tegye, hogyan működik az algoritmus.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;sql&amp;#039;&amp;#039;&amp;#039;: Az sql burkolók a C kódhoz.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;src&amp;#039;&amp;#039;&amp;#039;: C/C++ kód az algoritmushoz.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;test&amp;#039;&amp;#039;&amp;#039;: &amp;lt;code&amp;gt;test.conf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;*.data&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;*.test&amp;lt;/code&amp;gt;, és &amp;lt;code&amp;gt;*.rest&amp;lt;/code&amp;gt; fájlok az algoritmus teszteléséhez.&lt;br /&gt;
&lt;br /&gt;
Fejlesztési célból a programot klónozhatjuk Git-en keresztül, majd telepítjük a következők szerint:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 git clone git@github.com:pgRouting/pgrouting.git&lt;br /&gt;
 cd pgrouting&lt;br /&gt;
 cmake -DWITH_TSP=ON -DWITH_DD=ON .&lt;br /&gt;
 make&lt;br /&gt;
 sudo make install&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Használat ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Adatok betöltése&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A vektoros térképi adatok adatbázis-táblába betöltésére számos eszköz áll rendelkezésre, például:&lt;br /&gt;
*	&amp;#039;&amp;#039;&amp;#039;osm2po&amp;#039;&amp;#039;&amp;#039;: OpenStreetMap (OSM) adatok konvertálása SQL formátumba, pgRouting-nak megfelelő formátumban.&lt;br /&gt;
*	&amp;#039;&amp;#039;&amp;#039;shp2pgsql&amp;#039;&amp;#039;&amp;#039;:	PostgreSQL shapefile betöltője.&lt;br /&gt;
*	&amp;#039;&amp;#039;&amp;#039;ogr2ogr&amp;#039;&amp;#039;&amp;#039;:	Vektoros adatok konverziója.&lt;br /&gt;
*	&amp;#039;&amp;#039;&amp;#039;osm2pgsql&amp;#039;&amp;#039;&amp;#039;:	OSM adat betöltése postgreSQL-be.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Előfeldolgozás&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Amikor egy GIS fájlt olvasunk be az adatbázisunkba a pgRouting számára, nem feltétlenül követnek alkalmas topológiát a rekordok. A helytelen topológia hibás útvonalakhoz vezetne. Hogy használható adattáblát kapjunk, csomópontokra van szükségünk minden egyes útkereszteződésnél. Az útvonalhálózat megfelelő topológiájának kialakítását segítheti a pgr_createTopology  vagy a pgr_nodeNetwork parancs. Működésük hasonló. Az utóbbi beolvassa a „csúcstalan” hálózat adatbázis-tábláját, majd egy új táblába írja a már felcsúcsozott éleket. Paraméterei&lt;br /&gt;
*	éltábla neve, &lt;br /&gt;
*	tolerancia: a toleranciaértéken belüli csomópontok egy csomópontot fognak alkotni,&lt;br /&gt;
*	id, az éltábla elsődleges kulcsa,&lt;br /&gt;
*	geometriát tartalmazó oszlop,&lt;br /&gt;
*	kimeneti tábla szuffixe. Alapértelmezetten edge_table_noded.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Lekérdezés szintaxis&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Minden pgRouting lekérdezés az alábbi formátumot követi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
SELECT pgr_&amp;lt;algorithm&amp;gt;(&amp;lt;SQL for edges&amp;gt;, start, end, &amp;lt;additonal options&amp;gt;)&lt;br /&gt;
&amp;lt;/code&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
ahol a &amp;lt;code&amp;gt;pgr_&amp;lt;/code&amp;gt;előtaggal hívjuk meg a lentebb ismertetett algoritmusok egyikét. A belső SQL lekérdezéssel adjuk meg a táblát, amelyre az algoritmust futtatjuk, a kezdő- és végponto(ka)t, valamint opcionális további szűrési feltételeket. Például, ha a [http://http://docs.pgrouting.org/latest/en/doc/src/developer/sampledata.html#sampledata pgRouting dokumentációjában] bemutatott mintaadatokkal dolgozunk, az alábbi lekérdezéssel a 2. sorszámú csúcsból a 3. sorszámúba vezető legrövidebb utat kapjuk meg:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 SELECT * FROM pgr_dijkstra(&lt;br /&gt;
      &amp;#039;SELECT id, source, target, cost, reverse_cost &lt;br /&gt;
      FROM edge_table&amp;#039;, 2, 3);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Algoritmusok ==&lt;br /&gt;
&lt;br /&gt;
=== Dijkstra algoritmus ===&lt;br /&gt;
A &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Dijkstra-algoritmus Dijkstra algoritmus]&amp;lt;/span&amp;gt; egy súlyozott élű, irányított &amp;lt;math&amp;gt;G=(V,E)&amp;lt;/math&amp;gt; gráf adott csúcsából egy másik adott csúcsába vezető legrövidebb út megtalálására szolgáló módszer.  Az algoritmus csak nem negatív élsúlyok esetén működik. Jelölje a súlyfüggvényt &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt;. Az algoritmus mohó módszert használ. Legyen a kiindulási pont &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;, a célállomás pedig &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;. Az algoritmus egy &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; halmazban tárolja azon csúcsokat, amelyeknek már ismerjük az &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;-ből hozzájuk vezető legrövidebb út hosszát. Ezen kívül minden &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; csúcsról nyilvántartunk az algoritmus futása során egy &amp;lt;math&amp;gt;D[u]&amp;lt;/math&amp;gt; értéket, ami az &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;-ből &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt;-ba vezető addig megismert legrövidebb út hossza.&lt;br /&gt;
&lt;br /&gt;
Kezdetben &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; üres, &amp;lt;math&amp;gt;D[s]=0&amp;lt;/math&amp;gt; és minden más &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; csúcsra &amp;lt;math&amp;gt;D[v]=\infty&amp;lt;/math&amp;gt;. Ezután minden iterációban kiválasztunk a &amp;lt;math&amp;gt;V\setminus H&amp;lt;/math&amp;gt; halmazból egy olyan &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; csúcsot, amelyre &amp;lt;math&amp;gt;D[x]&amp;lt;/math&amp;gt; minimális, áttesszük &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;-et &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;-ba, majd &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; minden olyan &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; szomszédjára, amely nincs &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;-ban frissítjük a &amp;lt;math&amp;gt;D[v]&amp;lt;/math&amp;gt; értéket:&lt;br /&gt;
&amp;lt;math&amp;gt;D[v]=\min\{D[v],D[x]+w(x,v)\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Az algoritmus véget ér, amikor &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; átkerül &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;-ba, ekkor &amp;lt;math&amp;gt;D[t]&amp;lt;/math&amp;gt; egy legrövidebb &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;-ből &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-be vezető út hossza. Az algoritmus kis módosítással egy legrövidebb utat is megad &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;-ből &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-be.&lt;br /&gt;
&lt;br /&gt;
Az algoritmus költsége szomszédsági mátrixos gráfábrázolás esetén &amp;lt;math&amp;gt;O(|V|^2)&amp;lt;/math&amp;gt;, szomszédsági listás gráfábrázolás esetén Fibonacci kupacot használva&lt;br /&gt;
&amp;lt;math&amp;gt;O(|E|+|V|\log |V|)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Kétirányú Dijkstra algoritmus ===&lt;br /&gt;
A kétirányú Dijkstra algoritmus szintén egy súlyozott élű, irányított &amp;lt;math&amp;gt;G=(V,E)&amp;lt;/math&amp;gt; gráf adott csúcsából egy másik adott csúcsába vezető legrövidebb út megtalálására szolgáló módszer.  Az algoritmus csak nem negatív élsúlyok esetén működik.  Legyen a kiindulási pont &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;, a célállomást pedig &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;. A Dijkstra algoritmust futtatjuk a kiindulási pontból az eredeti gráfon, és párhuzamosan a célállomásból a transzponált gráfon (amelyet úgy kapunk az eredeti gráfból, hogy az élek irányítását megfordítjuk).  Akkor állunk meg, ha egy &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; csúcs mindkét irányból bekerül a Dijkstra algoritmusnál definiált &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; halmazba (pontosabban a &amp;lt;math&amp;gt;H_s&amp;lt;/math&amp;gt; és a &amp;lt;math&amp;gt;H_t&amp;lt;/math&amp;gt; halmazba is). Egy alternatív lehetőség, hogy a &amp;lt;math&amp;gt;H_s&amp;lt;/math&amp;gt; és a &amp;lt;math&amp;gt;H_t&amp;lt;/math&amp;gt; halmazok közül minden egyes iterációban csak azt bővítjük, amelyiknél &amp;lt;math&amp;gt;D[x]&amp;lt;/math&amp;gt; kisebb. Az algoritmus kis módosítással egy legrövidebb utat is megad &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;-ből &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-be.&lt;br /&gt;
&lt;br /&gt;
=== k-Dijkstra algoritmus ===&lt;br /&gt;
A &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-Dijkstra algoritmus egy súlyozott élű, irányított &amp;lt;math&amp;gt;G=(V,E)&amp;lt;/math&amp;gt; gráf adott csúcsából több adott csúcsába vezető legrövidebb út megtalálására szolgáló módszer. Valójában a Dijkstra algoritmus a gráf egy adott csúcsából az összes többi csúcsba vezető legrövidebb utat megtalálja, így akárhány célállomást megadhatunk. Az algoritmus akkor fejeződik be, amikor minden egyes célállomás bekerült a Dijkstra algoritmusnál definiált &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; halmazba. Az algoritmus kis módosítással magukat a legrövidebb utakat is megadja.&lt;br /&gt;
&lt;br /&gt;
Az algoritmus költsége szomszédsági mátrixos gráfábrázolás esetén &amp;lt;math&amp;gt;O(|V|^2)&amp;lt;/math&amp;gt;, szomszédsági listás gráfábrázolás esetén Fibonacci kupacot használva&lt;br /&gt;
&amp;lt;math&amp;gt;O(|E|+|V|\log |V|)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== A* algoritmus ===&lt;br /&gt;
Az [https://en.wikipedia.org/wiki/A*_search_algorithm &amp;lt;math&amp;gt;A^\ast&amp;lt;/math&amp;gt; algoritmus] egy súlyozott élű, irányított &amp;lt;math&amp;gt;G=(V,E)&amp;lt;/math&amp;gt; gráf adott csúcsából egy másik adott csúcsába vezető legrövidebb út megtalálására szolgáló módszer.  Az &amp;lt;math&amp;gt;A^\ast&amp;lt;/math&amp;gt; algoritmus a Dijkstra algoritmus általánosítása, és szintén csak nem negatív élsúlyok esetén működik. Jelölje a súlyfüggvényt &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt;. Az algoritmus mohó módszert használ. Legyen a kiindulási pont &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;, a célállomás pedig &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;. Az algoritmus egy &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; halmazban tárolja azon csúcsokat, amelyeknek már ismerjük az &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;-ből hozzávezető legrövidebb út hosszát, egy &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt; halmazban pedig azokat, amelyeket már elértünk &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;-ből, de az &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;-ből hozzájuk vezető legrövidebb út hosszát még nem ismerjük. Minden &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; csúcsról nyilvántartunk az algoritmus futása során három értéket: &amp;lt;math&amp;gt;D[u]&amp;lt;/math&amp;gt; az &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;-ből &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt;-ba vezető addig megismert legrövidebb út hossza, &amp;lt;math&amp;gt;C[u]&amp;lt;/math&amp;gt; egy nem negatív heurisztikus alsó becslés az &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt;-ból &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-be vezető legrövidebb út hosszára, amelyre az is teljesül, hogy az &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt;-ból bármely &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; csúcsba vezető legrövidebb út hosszára &lt;br /&gt;
&amp;lt;math&amp;gt;C[u]-C[v]&amp;lt;/math&amp;gt; alsó korlát (például egy térkép esetén &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; és &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; légvonalban mért távolsága), végül &amp;lt;math&amp;gt;B[u]=D[u]+C[u]&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Kezdetben &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; üres, &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;-ben csak az &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; csúcs van, és &amp;lt;math&amp;gt;B[s]=0&amp;lt;/math&amp;gt;. Ezután minden iterációban kiválasztunk az &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt; halmazból egy olyan &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; csúcsot, amelyre &amp;lt;math&amp;gt;B[x]&amp;lt;/math&amp;gt; minimális, áttesszük &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;-et &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;-ba, majd &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; minden olyan &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; szomszédjára, amely nincs &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;-ban frissítjük először a &amp;lt;math&amp;gt;D[v]&amp;lt;/math&amp;gt; értéket: &lt;br /&gt;
&amp;lt;math&amp;gt;D[v]=\min\{D[v],D[x]+w(x,v)\}&amp;lt;/math&amp;gt;,&lt;br /&gt;
majd a &amp;lt;math&amp;gt;B[v]&amp;lt;/math&amp;gt; értéket: &lt;br /&gt;
&amp;lt;math&amp;gt;B[v]=\min\{B[v],D[v]+C[v]\}&amp;lt;/math&amp;gt;,&lt;br /&gt;
végül áttesszük &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt;-t &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;-be. Az algoritmus véget ér, amikor &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; átkerül &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt;-ből &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt;-ba, ekkor &amp;lt;math&amp;gt;B[t]&amp;lt;/math&amp;gt; egy legrövidebb &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;-ből &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-be vezető út hossza. Az algoritmus kis módosítással egy legrövidebb utat is megad &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;-ből &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;-be.&lt;br /&gt;
&lt;br /&gt;
A tapasztalat azt mutatja, hogy az &amp;lt;math&amp;gt;A^\ast&amp;lt;/math&amp;gt; algoritmus számos esetben hatékonyabb, mint a Dijkstra algoritmust.&lt;br /&gt;
&lt;br /&gt;
=== Kétirányú &amp;lt;math&amp;gt;A^\ast&amp;lt;/math&amp;gt; algoritmus ===&lt;br /&gt;
A kétirányú &amp;lt;math&amp;gt;A^\ast&amp;lt;/math&amp;gt; algoritmus egy súlyozott élű, irányított &amp;lt;math&amp;gt;G=(V,E)&amp;lt;/math&amp;gt; gráf adott csúcsából egy másik adott csúcsába vezető legrövidebb út megtalálására szolgáló módszer.  Az algoritmus csak nem negatív élsúlyok esetén működik.  Legyen a kiindulási pont &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;, a célállomást pedig &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;. Az &amp;lt;math&amp;gt;A^\ast&amp;lt;/math&amp;gt;  algoritmust futtatjuk a kiindulási pontból az eredeti gráfon, és párhuzamosan a célállomásból a transzponált gráfon (amelyet úgy kapunk az eredeti gráfból, hogy az élek irányítását megfordítjuk).  Akkor állunk meg, ha egy &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; csúcs mindkét irányból bekerül az &amp;lt;math&amp;gt;A^\ast&amp;lt;/math&amp;gt; algoritmusnál definiált &amp;lt;math&amp;gt;H&amp;lt;/math&amp;gt; halmazba (pontosabban a &amp;lt;math&amp;gt;H_s&amp;lt;/math&amp;gt; és a &amp;lt;math&amp;gt;H_t&amp;lt;/math&amp;gt; halmazba is). Az algoritmus kis módosítással egy legrövidebb utat is megad s-ből t-be.&lt;br /&gt;
&lt;br /&gt;
=== Yen algoritmus ===&lt;br /&gt;
A [https://en.wikipedia.org/wiki/Yen%27s_algorithm Yen algoritmus] egy súlyozott élű, irányított &amp;lt;math&amp;gt;G=(V,E)&amp;lt;/math&amp;gt; gráf egy adott csúcsából egy adott másik csúcsába vezető legrövidebb út mellett megtalálja a második, harmadik, …, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;-adik legrövidebb (egyszerű) utat is. Az algoritmus csak nem negatív élsúlyok esetén működik. &lt;br /&gt;
&lt;br /&gt;
Az algoritmus költsége &lt;br /&gt;
&amp;lt;math&amp;gt;O(k|V|(|E|+|V|\log |V|))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Floyd-Warshall algoritmus ===&lt;br /&gt;
A [https://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm Floyd-Warshall algoritmus] egy súlyozott élű, irányított &amp;lt;math&amp;gt;G=(V,E)&amp;lt;/math&amp;gt; gráf bármely két csúcsa közötti legrövidebb út megtalálására szolgáló módszer. Az algoritmus negatív élsúlyok esetén is működik, ha a gráf nem tartalmaz negatív összhosszúságú irányított kört. Jelölje a súlyfüggvényt &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt;. Az algoritmus dinamikus programozást használ. Legyen a gráf csúcshalmaza &amp;lt;math&amp;gt;\{v_1,v_2,\ldots,v_n\}&amp;lt;/math&amp;gt;. Az algoritmus minden &amp;lt;math&amp;gt;0\leqslant k\leqslant n&amp;lt;/math&amp;gt; esetén meghatározza a &amp;lt;math&amp;gt;v_i&amp;lt;/math&amp;gt;-ből &lt;br /&gt;
&amp;lt;math&amp;gt;v_j&amp;lt;/math&amp;gt;-be menő legrövidebb olyan (egyszerű) út &amp;lt;math&amp;gt;T_k[v_i,v_j]&amp;lt;/math&amp;gt; hosszát, amelyen a közbülső csúcsok a &amp;lt;math&amp;gt;\{v_1,v_2,\ldots,v_k\}&amp;lt;/math&amp;gt; halmazból kerülnek ki: &lt;br /&gt;
&amp;lt;math&amp;gt;T_0[v_i,v_j]=w(v_i,v_j)&amp;lt;/math&amp;gt;, és &amp;lt;math&amp;gt;T_k[v_i,v_j]=\min\{T_{k-1}[v_i,v_j],T_{k-1}[v_i,v_k]+T_{k-1}[v_k,v_j]\}&amp;lt;/math&amp;gt; ha &amp;lt;math&amp;gt;k&amp;gt;0&amp;lt;/math&amp;gt;. Az algoritmus kis módosítással magukat a legrövidebb utakat is megadja.&lt;br /&gt;
&lt;br /&gt;
Az algoritmus költsége &amp;lt;math&amp;gt;O(|V|^3)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Johnson algoritmus ===&lt;br /&gt;
A [https://en.wikipedia.org/wiki/Johnson%27s_algorithm Johnson algoritmus] egy súlyozott élű, irányított &amp;lt;math&amp;gt;G=(V,E)&amp;lt;/math&amp;gt; gráf bármely két csúcsa közötti legrövidebb út megtalálására szolgáló módszer. Az algoritmus negatív élsúlyok esetén is működik, ha a gráf nem tartalmaz negatív összhosszúságú irányított kört. Jelölje a súlyfüggvényt &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt;. Az algoritmus ritka gráfokon teljesít igazán jól. &lt;br /&gt;
&lt;br /&gt;
Vegyünk fel egy új &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; csúcsot, és vezessünk &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt;-ből nulla súlyú éleket &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; csúcsaiba. Jelölje az így kapott gráfot &amp;lt;math&amp;gt;G&amp;#039;&amp;lt;/math&amp;gt;. Futtassuk le &amp;lt;math&amp;gt;G&amp;#039;&amp;lt;/math&amp;gt;-re a Bellman-Ford algoritmust az &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; kezdőcsúccsal. Az algoritmus által szolgáltatott távolságérték a gráf egy &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; csúcsára legyen &lt;br /&gt;
&amp;lt;math&amp;gt;D[v]&amp;lt;/math&amp;gt;. Átsúlyozzuk a &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; gráf éleit: legyen &amp;lt;math&amp;gt;w&amp;#039;(u,v)=w(u,v)+D[u]-D[v]&amp;lt;/math&amp;gt; minden &amp;lt;math&amp;gt;(u,v)&amp;lt;/math&amp;gt; élre. Most &amp;lt;math&amp;gt;w&amp;#039;&amp;lt;/math&amp;gt; egy nem negatív súlyfüggvény &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;-n. Futtassuk ezzel a súlyfüggvénnyel a Dijkstra algoritmust a &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; gráf minden csúcsából. Egy legrövidebb &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt;-ból &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt;-be vezető út hossza ezután a kapott érték mínusz &amp;lt;math&amp;gt;D[u]-D[v]&amp;lt;/math&amp;gt;. Az algoritmus kis módosítással magukat a legrövidebb utakat is megadja.&lt;br /&gt;
&lt;br /&gt;
Az algoritmus költsége szomszédsági listás gráfábrázolás esetén Fibonacci kupacot használva&lt;br /&gt;
&amp;lt;math&amp;gt;O(|V|(|E|+|V|\log |V|))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Utazó ügynök probléma === &lt;br /&gt;
Az [https://hu.wikipedia.org/wiki/Az_utaz%C3%B3_%C3%BCgyn%C3%B6k_probl%C3%A9m%C3%A1ja utazó ügynök probléma] a következő. Adott városoknak egy listája, és adott bármely két város között a távolság. Határozzunk meg egy olyan körutat, amely minden városon pontosan egyszer halad át, és a hossza minimális. A problémára nem ismert polinomiális költségű algoritmus. A program ún. simulated annealing technikán alapuló algoritmust használ egy jó közelítő megoldás meghatározására.&lt;br /&gt;
&lt;br /&gt;
=== Legrövidebb utak kanyarodási korlátokkal ===&lt;br /&gt;
Az algoritmus egy súlyozott élű, irányított &amp;lt;math&amp;gt;G=(V,E)&amp;lt;/math&amp;gt; gráf adott csúcsából egy másik adott csúcsába vezető legrövidebb út meghatározásakor képes figyelembe venni, hogy két csatlakozó él egymás utáni bejárása extra költséggel bírhat. Ezeket a megszorításokat egy külön táblában adhatjuk meg. Tapasztalat szerint az algoritmus közel olyan gyors, mint az &amp;lt;math&amp;gt;A^\ast&amp;lt;/math&amp;gt; algoritmus.&lt;br /&gt;
&lt;br /&gt;
=== Vezetési távolság === &lt;br /&gt;
Az algoritmus egy súlyozott élű, irányított &amp;lt;math&amp;gt;G=(V,E)&amp;lt;/math&amp;gt; gráfban a Dijkstra algoritmus felhasználásával megadja azon csúcsokat, melyekbe egy vagy több adott csúcsból egy adott értéknél rövidebb úton el lehet jutni.&lt;br /&gt;
&lt;br /&gt;
== Kapcsolódó alkalmazások ==&lt;br /&gt;
Útvonal-meghatározásra alkalmas adathalmazt például [[OpenStreetMap]] (OSM) térképekből nyerhetünk ki. Ehhez egyik alkalmas segédeszköz az [[OSM2PO]]  alkalmazás, amely megfelelő topológiájú SQL fájlt állít elő a megadott térképrészlethez, amely egyből alkalmas a pgRouting-gal vagy QGIS-szel való feldolgozásra. [[Fájl:Osm.png|thumb|450px|Útvonal megjelenítése OSM2PO webszolgáltatásként]]&lt;br /&gt;
Az OSM2PO révén vizualizálhatjuk is a legrövidebb utakat. A programmal előállított SQL táblákban minden útkereszteződéshez tartozik egy rekord, melyben a következőket tároljuk:&lt;br /&gt;
*	koordináták (&amp;lt;code&amp;gt;x1, x2, y1, y2&amp;lt;/code&amp;gt;), &lt;br /&gt;
*	név (&amp;lt;code&amp;gt;osm_name&amp;lt;/code&amp;gt;),&lt;br /&gt;
*	csomópont azonosító (&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;),&lt;br /&gt;
*	lehetséges továbbhaladási irány (&amp;lt;code&amp;gt;osm_source_id, osm_target_id&amp;lt;/code&amp;gt;),&lt;br /&gt;
*	útszakasz hossza (&amp;lt;code&amp;gt;km&amp;lt;/code&amp;gt;),&lt;br /&gt;
*	megengedett sebesség (&amp;lt;code&amp;gt;kmh&amp;lt;/code&amp;gt;),&lt;br /&gt;
*	költség (&amp;lt;code&amp;gt;cost&amp;lt;/code&amp;gt;),&lt;br /&gt;
*       geometria (&amp;lt;code&amp;gt;geom_way&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
A &amp;lt;code&amp;gt;demo.bat&amp;lt;/code&amp;gt; fájl szerkesztésével specifikálhatjuk térképünk paramétereit, például, hogy mely térképrészleten dolgozzunk. A [https://mapzen.com/data/metro-extracts/ Mapzen] oldalán kész &amp;lt;code&amp;gt;.pbf&amp;lt;/code&amp;gt; formátumú városrészleteket találhatunk, melyeket kompatibilisek az Osm2Po-val. A fájl futtatásával előáll egy &amp;lt;code&amp;gt;.sql&amp;lt;/code&amp;gt; fájl is, melyet importálhatunk a postGIS adatbázisunkba, és akár pgRouting lekérdezéseket is futtathatunk rajta. &lt;br /&gt;
Amíg fut a program, helyi webszerveren (&amp;lt;code&amp;gt;localhost:8888/Osm2poService&amp;lt;/code&amp;gt;) jeleníthető meg az importált térképrészlet, melyen az útkeresést is kipróbálhatjuk.&lt;br /&gt;
&lt;br /&gt;
== Szakirodalom ==&lt;br /&gt;
&lt;br /&gt;
* Regina O. Obe, Leo S. Hsu. [https://locatepress.com/pgrouting &amp;quot;pgRouting: A Practical Guide&amp;quot;], &amp;#039;&amp;#039;Locate Press&amp;#039;&amp;#039;, 2016.&lt;br /&gt;
* Regina O. Obe, Leo S. Hsu. [https://www.manning.com/books/postgis-in-action-second-edition &amp;quot;PostGIS in Action (Second Edition)&amp;quot;], &amp;#039;&amp;#039;Manning Publictions&amp;#039;&amp;#039; (ISBN 9781617291395). 2015. pp 286-290.&lt;br /&gt;
* Lijing Zhang, Xuanhui He. [http://link.springer.com/chapter/10.1007%2F978-3-642-25349-2_133 &amp;quot;Route Search Base on pgRouting&amp;quot;], &amp;#039;&amp;#039;Software Engineering and Knowledge Engineering: Theory and Practice Vol 2.&amp;#039;&amp;#039;. Springer-Verlag Berlin Heidelberg, 2012. pp 1003-1007.&lt;br /&gt;
&lt;br /&gt;
== Külső hivatkozások ==&lt;br /&gt;
&lt;br /&gt;
* [http://pgrouting.org/ A pgRouting hivatalos honlapja]&lt;br /&gt;
* [http://docs.pgrouting.org/latest/en/doc/index.html pgRouting Dokumentáció]&lt;br /&gt;
* [http://www.postgresonline.com/journal/archives/362-An-almost-idiots-guide-to-install-PostgreSQL-9.5,-PostGIS-2.2-and-pgRouting-2.1.0-with-Yum.html Fejlesztőkörnyezet telepítési útmutató]&lt;br /&gt;
* [http://workshop.pgrouting.org/index.html pgRouting Workshop]&lt;br /&gt;
* [http://www.bostongis.com/PrinterFriendly.aspx?content_name=pgrouting_osm2po_1 OpenStreetMap fájl betöltése Osm2Po-val és útvonalkeresés]&lt;/div&gt;</summary>
		<author><name>Roberto</name></author>
		
	</entry>
	<entry>
		<id>http://gis.inf.elte.hu/giswiki/index.php?title=DotSpatial&amp;diff=222</id>
		<title>DotSpatial</title>
		<link rel="alternate" type="text/html" href="http://gis.inf.elte.hu/giswiki/index.php?title=DotSpatial&amp;diff=222"/>
		<updated>2016-06-01T18:48:24Z</updated>

		<summary type="html">&lt;p&gt;Roberto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float:right; margin-left: auto; margin-right: 0px;&amp;quot;&lt;br /&gt;
|+ DotSpatial&lt;br /&gt;
| Első kiadás&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Legfrissebb stabil kiadás&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Programozási nyelv&lt;br /&gt;
| C#&lt;br /&gt;
|-&lt;br /&gt;
| Platform&lt;br /&gt;
| .NET (Windows)&lt;br /&gt;
|-&lt;br /&gt;
| Kategória&lt;br /&gt;
| Térinformatikai programkönyvtár&lt;br /&gt;
|-&lt;br /&gt;
| Állapot&lt;br /&gt;
| aktív&lt;br /&gt;
|-&lt;br /&gt;
| Licenc&lt;br /&gt;
| &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/GNU_Lesser_General_Public_License GNU LGPL]&amp;lt;/span&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Weboldal&lt;br /&gt;
| [https://dotspatial.codeplex.com/]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A &amp;#039;&amp;#039;&amp;#039;DotSpatial&amp;#039;&amp;#039;&amp;#039; egy nyílt forráskódú térinformatikai programkönyvtár, amely különböző funkcionalitásokat biztosít téradat kezelés, betöltés és mentés, valamint elemzési feladatokra. A programkönyvtár &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/C_Sharp C#]&amp;lt;/span&amp;gt;-ban íródott és a &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/.NET_keretrendszer .NET 4.0 keretrendszeren]&amp;lt;/span&amp;gt; alapszik. Elsősorban asztali alkalmazások elkészítését segíti elő, amely a &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://en.wikipedia.org/wiki/Windows_Forms Windows Forms]&amp;lt;/span&amp;gt; platformra épülnek. A programcsomag &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/GNU_Lesser_General_Public_License GNU LGPL]&amp;lt;/span&amp;gt; licenc alatt használható.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Története ==&lt;br /&gt;
&lt;br /&gt;
A könyvtár létrehozását az Idaho állami egyetemen (&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://en.wikipedia.org/wiki/Idaho_State_University Idaho State University]&amp;lt;/span&amp;gt;) fejlesztett [[MapWindow]] alkalmazás ihlette. Kezdetben csak a saját belső fejlesztésüket szerették volna megkönnyíteni különféle központi funkciók kiszervezésével, idővel azonban a felhalmozott szolgáltatások száma elérte azt a méretet, hogy a fejlesztők úgy érezték, érdemes kiadni a nagyközönség számára is. &lt;br /&gt;
Sajnos a folyamatosan rétegződő, és központi koncepció nélküli fejlesztés rányomta a bélyegét a kódbázisra. Ennek megfelelően modulonként, vagy akár azokon belül is erősen eltérő megközelítéseket láthatunk a forráskódban.&lt;br /&gt;
&lt;br /&gt;
== Szolgáltatások ==&lt;br /&gt;
&lt;br /&gt;
* Térinformatikai adatok megjelenítése &amp;#039;&amp;#039;.Net Windows Form&amp;#039;&amp;#039;, vagy Web alkalmazásokban&lt;br /&gt;
* Shapefájlok, rácshálók valamint raszter felvételek olvasása.&lt;br /&gt;
* Menet közbeni projektálás&lt;br /&gt;
* Tudományos analízis&lt;br /&gt;
* GPS adatok olvasása&lt;br /&gt;
&lt;br /&gt;
== Kik használják? ==&lt;br /&gt;
&lt;br /&gt;
* [http://mapwindow6.codeplex.com/ MapWindow 6]&lt;br /&gt;
* [http://hydrodesktop.codeplex.com/ HydroDesktop]&lt;br /&gt;
* [http://mad.codeplex.com/ MAD]&lt;br /&gt;
* [http://linesiter.codeplex.com/ LineSiter]&lt;br /&gt;
* [http://cetamon.codeplex.com/ Marine Life]&lt;br /&gt;
* [https://pvdesktop.codeplex.com/ PVMapper Site Designer]&lt;br /&gt;
&lt;br /&gt;
== Használat ==&lt;br /&gt;
&lt;br /&gt;
Telepítést nem igényel, ha használni szeretnénk, akkor két lehetőségünk közül választhatunk.&lt;br /&gt;
&lt;br /&gt;
* Letölthetjük azt össze modult egyben a http://dotspatial.codeplex.com/ oldalról, majd később a szükséges projektekbe referenciázzuk őket.&lt;br /&gt;
* &amp;#039;&amp;#039;Visual Studio&amp;#039;&amp;#039; 2010-től felfelé használhatjuk a &amp;#039;&amp;#039;NuGet&amp;#039;&amp;#039; csomagkezelő, ahonnan telepíthetjük az egyes modulokat a kiválasztott projektek alá. Nagy előnye, hogy csomag frissülése esetén automatikusan eljut hozzánk is az új csomag.&lt;br /&gt;
&lt;br /&gt;
== Windows Forms vezérlők ==&lt;br /&gt;
&lt;br /&gt;
A DotSpatialt egyik legnagyobb előnye az előre megírt kontrolok, amiket a már jól megszokott Windows Formsos recept alapján akár vizuális szerkesztőben is összeállíthatunk.&lt;br /&gt;
&lt;br /&gt;
=== DotSpatialt vezérlők telepítése ===&lt;br /&gt;
&lt;br /&gt;
Ha szeretnénk használni a grafikus szerkesztőt, akkor mindenekelőtt hozzá kell adnunk a &amp;#039;&amp;#039;Toolbox&amp;#039;&amp;#039;-hoz a DotSpatialt vezérlőit.&lt;br /&gt;
&lt;br /&gt;
# Jobbklikk a Toolboxon, majd válasszuk ki az &amp;#039;&amp;#039;Add Tab&amp;#039;&amp;#039; menüpontot.&lt;br /&gt;
# Nevezzük az előbb hozzáadott fület.&lt;br /&gt;
# Ismét jobbklikk az új fülön, és válasszuk ki a Choose Item opciót.&lt;br /&gt;
# A felugró ablakból válasszuk ki a &amp;#039;&amp;#039;DotSpatial.Controls.dll&amp;#039;&amp;#039;-t, ha nem találjuk a listából, akkor manuálisan adjuk hozz.&lt;br /&gt;
&lt;br /&gt;
Most már ugyanúgy használhatjuk DotSpatial vezérlőit, mit a .NET  alapértelmezettjeit.&lt;br /&gt;
&lt;br /&gt;
== Vezérlők demonstrációja ==&lt;br /&gt;
&lt;br /&gt;
A DotSpatial vezérlők segítségével rendkívül gyorsan tudjuk alkalmazásunkat felruházni térinformatikai képességekkel. A következő alkalmazás remek példa az előbbiekre. &lt;br /&gt;
Először készítsük el a felületet az alapértelmezett .NET, illetve a már ismertetett DotSpatial vezérlőkből.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;KÉP&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Miután megfelelően elneveztük a felületre elhelyezett elemeket, a hozzájuk tartozó kód mindössze ennyi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
public partial class DesktopMapping : Form&lt;br /&gt;
    {&lt;br /&gt;
        private AppManager _AppManager;&lt;br /&gt;
&lt;br /&gt;
        public DesktopMapping()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
&lt;br /&gt;
            _AppManager = new AppManager();&lt;br /&gt;
            _AppManager.LoadExtensions();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void uxOpenFile_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            uxMap.AddLayer();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void uxZoomIn_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            uxMap.ZoomIn();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void uxZoomWide_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            uxMap.ZoomToMaxExtent();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void uxPan_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            uxMap.FunctionMode = DotSpatial.Controls.FunctionMode.Pan;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void uxGenShp_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            var rnd = new Random();&lt;br /&gt;
            var pg = new Polygon[100];&lt;br /&gt;
            var f = new Feature();&lt;br /&gt;
            var fs = new FeatureSet(f.FeatureType);&lt;br /&gt;
             &lt;br /&gt;
            for (int i = 0; i &amp;lt; 100; i++)&lt;br /&gt;
            {&lt;br /&gt;
                var center = new Coordinate((rnd.Next(50) * 360) - 180, (rnd.Next(60) * 180) - 90);&lt;br /&gt;
                var coord = new Coordinate[50];&lt;br /&gt;
                for (int ii = 0; ii &amp;lt; 50; ii++)&lt;br /&gt;
                {&lt;br /&gt;
                    coord[ii] = new Coordinate(center.X + Math.Cos((ii * 10) * Math.PI / 10), center.Y + (ii * 10) * Math.PI / 10);&lt;br /&gt;
                }&lt;br /&gt;
                coord[35] = new Coordinate(coord[0].X, coord[0].Y);&lt;br /&gt;
                pg[i] = new Polygon(coord);&lt;br /&gt;
                fs.Features.Add(pg[i]);&lt;br /&gt;
            }&lt;br /&gt;
            fs.SaveAs(&amp;quot;C:\\Temp\\test.shp&amp;quot;, true);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bővítmények ==&lt;br /&gt;
Lehetőségünk van bővítmények készítésére, amelyek akár a már kész alkalmazásokba is könnyedén integrálódnak (ilyen például a MapWindow).&lt;br /&gt;
&lt;br /&gt;
=== Példaprogram beépülő modulra ===&lt;br /&gt;
&lt;br /&gt;
A bemutatásra kerülő bővítménnyel lehetőségünk lesz vonalakat rajzolni, réteget létrehozni, illetve megjeleníthetünk velük kapcsolatos magassági adatokat.&lt;br /&gt;
Elsőnek le kell töltenünk az online megtalálható [http://visualstudiogallery.msdn.microsoft.com/92919cee-a2b0-43c6-8993-aeac965bc4b5 sémával].&lt;br /&gt;
&lt;br /&gt;
==== Diagram készítése ====&lt;br /&gt;
&lt;br /&gt;
A magassági adatok megjelenítéséhez egy Windows Form alkalmazást készítünk.&lt;br /&gt;
&lt;br /&gt;
public void Plot(double[] data)&lt;br /&gt;
{&lt;br /&gt;
    chart1.Series.Clear();&lt;br /&gt;
    var series = chart1.Series.Add(&amp;quot;Elevation (meters)&amp;quot;);&lt;br /&gt;
    series.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;&lt;br /&gt;
    series.Points.DataBindY(data);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==== Raszter adatok kinyerése ====&lt;br /&gt;
&lt;br /&gt;
A DotSpatial segítségével könnyedén kinyerhetjük a szükséges magassági adatokat.&lt;br /&gt;
&lt;br /&gt;
private static double GetElevation(IMapRasterLayer raster, Coordinate coordinate)&lt;br /&gt;
{&lt;br /&gt;
    RcIndex rowColumn = raster.DataSet.Bounds.ProjToCell(coordinate);&lt;br /&gt;
    double elevation = raster.DataSet.Value[rowColumn.Row, rowColumn.Column];&lt;br /&gt;
    return elevation;&lt;br /&gt;
}&lt;br /&gt;
private static double GetDistance(double x1, double y1, double x2, double y2)&lt;br /&gt;
{&lt;br /&gt;
    return Math.Sqrt(((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1)));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==== Koordináták kinyerése ====&lt;br /&gt;
&lt;br /&gt;
private List&amp;lt;Coordinate&amp;gt; GetCoordinatesFromLine(IMapLineLayer lineLayer)&lt;br /&gt;
{&lt;br /&gt;
    IFeatureSet featureSet = lineLayer.DataSet;&lt;br /&gt;
&lt;br /&gt;
    // The coordinates should be the first feature of the feature set.&lt;br /&gt;
    IList&amp;lt;Coordinate&amp;gt; lineCoordinates = featureSet.Features[0].Coordinates;&lt;br /&gt;
&lt;br /&gt;
    // Though the original line may only have a few points, we split&lt;br /&gt;
    // each line segment into many points&lt;br /&gt;
    List&amp;lt;Coordinate&amp;gt; pathCoordinates = new List&amp;lt;Coordinate&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
    for (int i = 0; i &amp;lt; lineCoordinates.Count - 1; i++)&lt;br /&gt;
    {&lt;br /&gt;
        Coordinate startCoord = lineCoordinates[i];&lt;br /&gt;
        Coordinate endCoord = lineCoordinates[i + 1];&lt;br /&gt;
        List&amp;lt;Coordinate&amp;gt; segmentCoordinates = SplitSegment(startCoord.X, startCoord.Y, endCoord.X, endCoord.Y);&lt;br /&gt;
&lt;br /&gt;
        //add list of points from this line segment to the complete list&lt;br /&gt;
        pathCoordinates.AddRange(segmentCoordinates);&lt;br /&gt;
    }&lt;br /&gt;
    return pathCoordinates;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private static List&amp;lt;Coordinate&amp;gt; SplitSegment(double startX, double startY, double endX, double endY)&lt;br /&gt;
{&lt;br /&gt;
    const int MinimumDistanceBetweenPoints = 15;&lt;br /&gt;
&lt;br /&gt;
    double points = Math.Floor(GetDistance(startX, startY, endX, endY) / MinimumDistanceBetweenPoints);&lt;br /&gt;
    int PointsPerSegment = (int)Math.Max(points, 1);&lt;br /&gt;
&lt;br /&gt;
    double curX = startX;&lt;br /&gt;
    double curY = startY;&lt;br /&gt;
    double constXdif = ((endX - startX) / PointsPerSegment);&lt;br /&gt;
    double constYdif = ((endY - startY) / PointsPerSegment);&lt;br /&gt;
&lt;br /&gt;
    List&amp;lt;Coordinate&amp;gt; pathPointList = new List&amp;lt;Coordinate&amp;gt;(PointsPerSegment);&lt;br /&gt;
    for (int i = 0; i &amp;lt;= PointsPerSegment; i++)&lt;br /&gt;
    {&lt;br /&gt;
        if (i == 0)&lt;br /&gt;
        {&lt;br /&gt;
            curX = startX;&lt;br /&gt;
            curY = startY;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            curX = curX + constXdif;&lt;br /&gt;
            curY = curY + constYdif;&lt;br /&gt;
        }&lt;br /&gt;
        Coordinate coordinate = new Coordinate(curX, curY);&lt;br /&gt;
        pathPointList.Add(coordinate);&lt;br /&gt;
    }&lt;br /&gt;
    return pathPointList;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void ShowElevation()&lt;br /&gt;
{&lt;br /&gt;
    if (!map.GetRasterLayers().Any())&lt;br /&gt;
    {&lt;br /&gt;
        MessageBox.Show(&amp;quot;Please add a DEM raster layer to the map.&amp;quot;);&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!map.GetLineLayers().Any())&lt;br /&gt;
    {&lt;br /&gt;
        MessageBox.Show(&amp;quot;Please create a path by left clicking to add points and right-clicking to complete the path.&amp;quot;);&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    try&lt;br /&gt;
    {&lt;br /&gt;
        IMapRasterLayer rasterLayer = map.GetRasterLayers().First();&lt;br /&gt;
        IMapLineLayer pathLayer = map.GetLineLayers().First();&lt;br /&gt;
        var coords = GetCoordinatesFromLine(pathLayer);&lt;br /&gt;
&lt;br /&gt;
        double[] elevation = new double[coords.Count];&lt;br /&gt;
        for (int i = 0; i &amp;lt; coords.Count; i++)&lt;br /&gt;
        {&lt;br /&gt;
            elevation[i] = GetElevation(rasterLayer, coords[i]);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        ChartForm chart = new ChartForm();&lt;br /&gt;
        chart.Plot(elevation);&lt;br /&gt;
        chart.Show();&lt;br /&gt;
    }&lt;br /&gt;
    catch (Exception ex)&lt;br /&gt;
    {&lt;br /&gt;
        MessageBox.Show(&amp;quot;Error calculating elevation. The whole path should be inside the DEM area. &amp;quot; + ex.Message);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==== SimpleActionItem használata (menüelem) ====&lt;br /&gt;
&lt;br /&gt;
public void ButtonClick(object sender, EventArgs e)&lt;br /&gt;
{&lt;br /&gt;
    // We&amp;#039;re expecting this extension to only be run in a Windows Forms application.&lt;br /&gt;
    // We&amp;#039;ll depend on a few Windows Forms (Map) features like MouseDown, so we cast&lt;br /&gt;
    // the App.Map as a Map and store a reference to it.&lt;br /&gt;
    map = App.Map as Map;&lt;br /&gt;
&lt;br /&gt;
    // remove any existing path if needed.&lt;br /&gt;
    if (_PathLineLayer != null)&lt;br /&gt;
        map.Layers.Remove(_PathLineLayer);&lt;br /&gt;
&lt;br /&gt;
    _PathLineLayer = null;&lt;br /&gt;
    _LineFeature = null;&lt;br /&gt;
&lt;br /&gt;
    // Let the user know we are ready for them to set points by changing the cursor.&lt;br /&gt;
    map.Cursor = Cursors.Cross;&lt;br /&gt;
    map.MouseDown += map_MouseDown;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==== Vektor réteg létrehozása ====&lt;br /&gt;
&lt;br /&gt;
private void map_MouseDown(object sender, MouseEventArgs e)&lt;br /&gt;
{&lt;br /&gt;
    if (e.Button == MouseButtons.Left)&lt;br /&gt;
    {&lt;br /&gt;
        // Encourage the user to select a raster, if they haven&amp;#039;t done so.&lt;br /&gt;
        if (!map.GetRasterLayers().Any())&lt;br /&gt;
        {&lt;br /&gt;
            map.AddRasterLayer();&lt;br /&gt;
            map.ZoomToMaxExtent();&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        StartOrContinueDrawingPath(e.Location);&lt;br /&gt;
        App.ProgressHandler.Progress(null, 0, &amp;quot;Point registered. Click again to add line segment. Right-click to finish.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    else if (e.Button == MouseButtons.Right)&lt;br /&gt;
    {&lt;br /&gt;
        EndDrawingPath();&lt;br /&gt;
        ShowElevation();&lt;br /&gt;
        App.ProgressHandler.Progress(null, 0, &amp;quot;Ready.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private IFeature AddLineFeatureSetToMap()&lt;br /&gt;
{&lt;br /&gt;
    FeatureSet lineFeatureSet = new FeatureSet(FeatureType.Line);&lt;br /&gt;
    lineFeatureSet.Projection = map.Projection;&lt;br /&gt;
&lt;br /&gt;
    // Initialize the featureSet attribute table by creating columns&lt;br /&gt;
    DataColumn column = new DataColumn(&amp;quot;ID&amp;quot;, typeof(short));&lt;br /&gt;
    lineFeatureSet.DataTable.Columns.Add(column);&lt;br /&gt;
    DataColumn column2 = new DataColumn(&amp;quot;Number of Points&amp;quot;, typeof(int));&lt;br /&gt;
    lineFeatureSet.DataTable.Columns.Add(column2);&lt;br /&gt;
    DataColumn column3 = new DataColumn(&amp;quot;Description&amp;quot;);&lt;br /&gt;
    lineFeatureSet.DataTable.Columns.Add(column3);&lt;br /&gt;
&lt;br /&gt;
    // Add the featureSet as map layer&lt;br /&gt;
    _PathLineLayer = (MapLineLayer)map.Layers.Add(lineFeatureSet);&lt;br /&gt;
    _PathLineLayer.Symbolizer = new LineSymbolizer(Color.Blue, 2);&lt;br /&gt;
    _PathLineLayer.LegendText = &amp;quot;Path Layer&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    var newList = new List&amp;lt;Coordinate&amp;gt;();&lt;br /&gt;
    LineString lineGeometry = new LineString(newList);&lt;br /&gt;
&lt;br /&gt;
    // AddFeature creates the point and a row in the DataTable&lt;br /&gt;
    return lineFeatureSet.AddFeature(lineGeometry);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void StartOrContinueDrawingPath(System.Drawing.Point mouseLocation)&lt;br /&gt;
{&lt;br /&gt;
    Coordinate coord = map.PixelToProj(mouseLocation);&lt;br /&gt;
&lt;br /&gt;
    if (_LineFeature == null)&lt;br /&gt;
    {&lt;br /&gt;
        // This is the first time we see a left click; create empty line feature.&lt;br /&gt;
        _LineFeature = AddLineFeatureSetToMap();&lt;br /&gt;
&lt;br /&gt;
        // Add first coordinate to the line feature.&lt;br /&gt;
        _LineFeature.Coordinates.Add(coord);&lt;br /&gt;
&lt;br /&gt;
        // Set the line feature attribute. This line may have multiple points,&lt;br /&gt;
        // but there is only one row in the attribute table for the entire feature (line).&lt;br /&gt;
        _LineFeature.DataRow[&amp;quot;ID&amp;quot;] = 0;&lt;br /&gt;
        _LineFeature.DataRow[&amp;quot;Description&amp;quot;] = &amp;quot;Path (line)&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // Second or later click - add points to the existing feature&lt;br /&gt;
        _LineFeature.BasicGeometry.Coordinates.Add(coord);&lt;br /&gt;
        _LineFeature.ParentFeatureSet.InitializeVertices();&lt;br /&gt;
&lt;br /&gt;
        // Draw the line.&lt;br /&gt;
        map.ResetBuffer();&lt;br /&gt;
&lt;br /&gt;
        // Update the attribute table.&lt;br /&gt;
        _LineFeature.DataRow[&amp;quot;Number of Points&amp;quot;] = _LineFeature.BasicGeometry.Coordinates.Count;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void EndDrawingPath()&lt;br /&gt;
{&lt;br /&gt;
    // The path is complete.&lt;br /&gt;
    map.ResetBuffer();&lt;br /&gt;
    map.Cursor = Cursors.Arrow;&lt;br /&gt;
    map.MouseDown -= map_MouseDown;&lt;br /&gt;
    _LineFeature = null;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Roberto</name></author>
		
	</entry>
	<entry>
		<id>http://gis.inf.elte.hu/giswiki/index.php?title=DotSpatial&amp;diff=221</id>
		<title>DotSpatial</title>
		<link rel="alternate" type="text/html" href="http://gis.inf.elte.hu/giswiki/index.php?title=DotSpatial&amp;diff=221"/>
		<updated>2016-06-01T18:24:13Z</updated>

		<summary type="html">&lt;p&gt;Roberto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &amp;#039;&amp;#039;&amp;#039;DotSpatial&amp;#039;&amp;#039;&amp;#039; egy nyílt forráskódú térinformatikai programkönyvtár, amely különböző funkcionalitásokat biztosít téradat kezelés, betöltés és mentés, valamint elemzési feladatokra. A programkönyvtár &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/C_Sharp C#]&amp;lt;/span&amp;gt;-ban íródott és a &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/.NET_keretrendszer .NET 4.0 keretrendszeren]&amp;lt;/span&amp;gt; alapszik. Elsősorban asztali alkalmazások elkészítését segíti elő, amely a &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://en.wikipedia.org/wiki/Windows_Forms Windows Forms]&amp;lt;/span&amp;gt; platformra épülnek. A programcsomag &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/GNU_Lesser_General_Public_License GNU LGPL]&amp;lt;/span&amp;gt; licensz alatt használható.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Története ==&lt;br /&gt;
&lt;br /&gt;
A könyvtár létrehozását az Idaho állami egyetemen (&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://en.wikipedia.org/wiki/Idaho_State_University Idaho State University]&amp;lt;/span&amp;gt;) fejlesztett [[MapWindow]] alkalmazás ihlette. Kezdetben csak a saját belső fejlesztésüket szerették volna megkönnyíteni különféle központi funkciók kiszervezésével, idővel azonban a felhalmozott szolgáltatások száma elérte azt a méretet, hogy a fejlesztők úgy érezték, érdemes kiadni a nagyközönség számára is. &lt;br /&gt;
Sajnos a folyamatosan rétegződő, és központi koncepció nélküli fejlesztés rányomta a bélyegét a kódbázisra. Ennek megfelelően modulonként, vagy akár azokon belül is erősen eltérő megközelítéseket láthatunk a forráskódban.&lt;br /&gt;
&lt;br /&gt;
== Szolgáltatások ==&lt;br /&gt;
&lt;br /&gt;
* Térinformatikai adatok megjelenítése &amp;#039;&amp;#039;.Net Windows Form&amp;#039;&amp;#039;, vagy Web alkalmazásokban&lt;br /&gt;
* Shapefájlok, rácshálók valamint raszter felvételek olvasása.&lt;br /&gt;
* Menet közbeni projektálás&lt;br /&gt;
* Tudományos analízis&lt;br /&gt;
* GPS adatok olvasása&lt;br /&gt;
&lt;br /&gt;
== Kik használják? ==&lt;br /&gt;
&lt;br /&gt;
* [http://mapwindow6.codeplex.com/ MapWindow 6]&lt;br /&gt;
* [http://hydrodesktop.codeplex.com/ HydroDesktop]&lt;br /&gt;
* [http://mad.codeplex.com/ MAD]&lt;br /&gt;
* [http://linesiter.codeplex.com/ LineSiter]&lt;br /&gt;
* [http://cetamon.codeplex.com/ Marine Life]&lt;br /&gt;
* [https://pvdesktop.codeplex.com/ PVMapper Site Designer]&lt;br /&gt;
&lt;br /&gt;
== Használat ==&lt;br /&gt;
&lt;br /&gt;
Telepítést nem igényel, ha használni szeretnénk, akkor két lehetőségünk közül választhatunk.&lt;br /&gt;
&lt;br /&gt;
* Letölthetjük azt össze modult egyben a http://dotspatial.codeplex.com/ oldalról, majd később a szükséges projektekbe referenciázzuk őket.&lt;br /&gt;
* &amp;#039;&amp;#039;Visual Studio&amp;#039;&amp;#039; 2010-től felfelé használhatjuk a &amp;#039;&amp;#039;NuGet&amp;#039;&amp;#039; csomagkezelő, ahonnan telepíthetjük az egyes modulokat a kiválasztott projektek alá. Nagy előnye, hogy csomag frissülése esetén automatikusan eljut hozzánk is az új csomag.&lt;br /&gt;
&lt;br /&gt;
== Windows Forms vezérlők ==&lt;br /&gt;
&lt;br /&gt;
A DotSpatialt egyik legnagyobb előnye az előre megírt kontrolok, amiket a már jól megszokott Windows Formsos recept alapján akár vizuális szerkesztőben is összeállíthatunk.&lt;br /&gt;
&lt;br /&gt;
=== DotSpatialt vezérlők telepítése ===&lt;br /&gt;
&lt;br /&gt;
Ha szeretnénk használni a grafikus szerkesztőt, akkor mindenekelőtt hozzá kell adnunk a &amp;#039;&amp;#039;Toolbox&amp;#039;&amp;#039;-hoz a DotSpatialt vezérlőit.&lt;br /&gt;
&lt;br /&gt;
# Jobbklikk a Toolboxon, majd válasszuk ki az &amp;#039;&amp;#039;Add Tab&amp;#039;&amp;#039; menüpontot.&lt;br /&gt;
# Nevezzük az előbb hozzáadott fület.&lt;br /&gt;
# Ismét jobbklikk az új fülön, és válasszuk ki a Choose Item opciót.&lt;br /&gt;
# A felugró ablakból válasszuk ki a &amp;#039;&amp;#039;DotSpatial.Controls.dll&amp;#039;&amp;#039;-t, ha nem találjuk a listából, akkor manuálisan adjuk hozz.&lt;br /&gt;
&lt;br /&gt;
Most már ugyanúgy használhatjuk DotSpatial vezérlőit, mit a .NET  alapértelmezettjeit.&lt;br /&gt;
&lt;br /&gt;
== Vezérlők demonstrációja ==&lt;br /&gt;
&lt;br /&gt;
A DotSpatial vezérlők segítségével rendkívül gyorsan tudjuk alkalmazásunkat felruházni térinformatikai képességekkel. A következő alkalmazás remek példa az előbbiekre. &lt;br /&gt;
Először készítsük el a felületet az alapértelmezett .NET, illetve a már ismertetett DotSpatial vezérlőkből.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;KÉP&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Miután megfelelően elneveztük a felületre elhelyezett elemeket, a hozzájuk tartozó kód mindössze ennyi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
public partial class DesktopMapping : Form&lt;br /&gt;
    {&lt;br /&gt;
        private AppManager _AppManager;&lt;br /&gt;
&lt;br /&gt;
        public DesktopMapping()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
&lt;br /&gt;
            _AppManager = new AppManager();&lt;br /&gt;
            _AppManager.LoadExtensions();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void uxOpenFile_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            uxMap.AddLayer();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void uxZoomIn_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            uxMap.ZoomIn();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void uxZoomWide_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            uxMap.ZoomToMaxExtent();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void uxPan_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            uxMap.FunctionMode = DotSpatial.Controls.FunctionMode.Pan;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void uxGenShp_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            var rnd = new Random();&lt;br /&gt;
            var pg = new Polygon[100];&lt;br /&gt;
            var f = new Feature();&lt;br /&gt;
            var fs = new FeatureSet(f.FeatureType);&lt;br /&gt;
             &lt;br /&gt;
            for (int i = 0; i &amp;lt; 100; i++)&lt;br /&gt;
            {&lt;br /&gt;
                var center = new Coordinate((rnd.Next(50) * 360) - 180, (rnd.Next(60) * 180) - 90);&lt;br /&gt;
                var coord = new Coordinate[50];&lt;br /&gt;
                for (int ii = 0; ii &amp;lt; 50; ii++)&lt;br /&gt;
                {&lt;br /&gt;
                    coord[ii] = new Coordinate(center.X + Math.Cos((ii * 10) * Math.PI / 10), center.Y + (ii * 10) * Math.PI / 10);&lt;br /&gt;
                }&lt;br /&gt;
                coord[35] = new Coordinate(coord[0].X, coord[0].Y);&lt;br /&gt;
                pg[i] = new Polygon(coord);&lt;br /&gt;
                fs.Features.Add(pg[i]);&lt;br /&gt;
            }&lt;br /&gt;
            fs.SaveAs(&amp;quot;C:\\Temp\\test.shp&amp;quot;, true);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bővítmények ==&lt;br /&gt;
Lehetőségünk van bővítmények készítésére, amelyek akár a már kész alkalmazásokba is könnyedén integrálódnak (ilyen például a MapWindow).&lt;br /&gt;
&lt;br /&gt;
=== Példaprogram beépülő modulra ===&lt;br /&gt;
&lt;br /&gt;
A bemutatásra kerülő bővítménnyel lehetőségünk lesz vonalakat rajzolni, réteget létrehozni, illetve megjeleníthetünk velük kapcsolatos magassági adatokat.&lt;br /&gt;
Elsőnek le kell töltenünk az online megtalálható [http://visualstudiogallery.msdn.microsoft.com/92919cee-a2b0-43c6-8993-aeac965bc4b5 sémával].&lt;br /&gt;
&lt;br /&gt;
==== Diagram készítése ====&lt;br /&gt;
&lt;br /&gt;
A magassági adatok megjelenítéséhez egy Windows Form alkalmazást készítünk.&lt;br /&gt;
&lt;br /&gt;
public void Plot(double[] data)&lt;br /&gt;
{&lt;br /&gt;
    chart1.Series.Clear();&lt;br /&gt;
    var series = chart1.Series.Add(&amp;quot;Elevation (meters)&amp;quot;);&lt;br /&gt;
    series.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;&lt;br /&gt;
    series.Points.DataBindY(data);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==== Raszter adatok kinyerése ====&lt;br /&gt;
&lt;br /&gt;
A DotSpatial segítségével könnyedén kinyerhetjük a szükséges magassági adatokat.&lt;br /&gt;
&lt;br /&gt;
private static double GetElevation(IMapRasterLayer raster, Coordinate coordinate)&lt;br /&gt;
{&lt;br /&gt;
    RcIndex rowColumn = raster.DataSet.Bounds.ProjToCell(coordinate);&lt;br /&gt;
    double elevation = raster.DataSet.Value[rowColumn.Row, rowColumn.Column];&lt;br /&gt;
    return elevation;&lt;br /&gt;
}&lt;br /&gt;
private static double GetDistance(double x1, double y1, double x2, double y2)&lt;br /&gt;
{&lt;br /&gt;
    return Math.Sqrt(((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1)));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==== Koordináták kinyerése ====&lt;br /&gt;
&lt;br /&gt;
private List&amp;lt;Coordinate&amp;gt; GetCoordinatesFromLine(IMapLineLayer lineLayer)&lt;br /&gt;
{&lt;br /&gt;
    IFeatureSet featureSet = lineLayer.DataSet;&lt;br /&gt;
&lt;br /&gt;
    // The coordinates should be the first feature of the feature set.&lt;br /&gt;
    IList&amp;lt;Coordinate&amp;gt; lineCoordinates = featureSet.Features[0].Coordinates;&lt;br /&gt;
&lt;br /&gt;
    // Though the original line may only have a few points, we split&lt;br /&gt;
    // each line segment into many points&lt;br /&gt;
    List&amp;lt;Coordinate&amp;gt; pathCoordinates = new List&amp;lt;Coordinate&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
    for (int i = 0; i &amp;lt; lineCoordinates.Count - 1; i++)&lt;br /&gt;
    {&lt;br /&gt;
        Coordinate startCoord = lineCoordinates[i];&lt;br /&gt;
        Coordinate endCoord = lineCoordinates[i + 1];&lt;br /&gt;
        List&amp;lt;Coordinate&amp;gt; segmentCoordinates = SplitSegment(startCoord.X, startCoord.Y, endCoord.X, endCoord.Y);&lt;br /&gt;
&lt;br /&gt;
        //add list of points from this line segment to the complete list&lt;br /&gt;
        pathCoordinates.AddRange(segmentCoordinates);&lt;br /&gt;
    }&lt;br /&gt;
    return pathCoordinates;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private static List&amp;lt;Coordinate&amp;gt; SplitSegment(double startX, double startY, double endX, double endY)&lt;br /&gt;
{&lt;br /&gt;
    const int MinimumDistanceBetweenPoints = 15;&lt;br /&gt;
&lt;br /&gt;
    double points = Math.Floor(GetDistance(startX, startY, endX, endY) / MinimumDistanceBetweenPoints);&lt;br /&gt;
    int PointsPerSegment = (int)Math.Max(points, 1);&lt;br /&gt;
&lt;br /&gt;
    double curX = startX;&lt;br /&gt;
    double curY = startY;&lt;br /&gt;
    double constXdif = ((endX - startX) / PointsPerSegment);&lt;br /&gt;
    double constYdif = ((endY - startY) / PointsPerSegment);&lt;br /&gt;
&lt;br /&gt;
    List&amp;lt;Coordinate&amp;gt; pathPointList = new List&amp;lt;Coordinate&amp;gt;(PointsPerSegment);&lt;br /&gt;
    for (int i = 0; i &amp;lt;= PointsPerSegment; i++)&lt;br /&gt;
    {&lt;br /&gt;
        if (i == 0)&lt;br /&gt;
        {&lt;br /&gt;
            curX = startX;&lt;br /&gt;
            curY = startY;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            curX = curX + constXdif;&lt;br /&gt;
            curY = curY + constYdif;&lt;br /&gt;
        }&lt;br /&gt;
        Coordinate coordinate = new Coordinate(curX, curY);&lt;br /&gt;
        pathPointList.Add(coordinate);&lt;br /&gt;
    }&lt;br /&gt;
    return pathPointList;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void ShowElevation()&lt;br /&gt;
{&lt;br /&gt;
    if (!map.GetRasterLayers().Any())&lt;br /&gt;
    {&lt;br /&gt;
        MessageBox.Show(&amp;quot;Please add a DEM raster layer to the map.&amp;quot;);&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!map.GetLineLayers().Any())&lt;br /&gt;
    {&lt;br /&gt;
        MessageBox.Show(&amp;quot;Please create a path by left clicking to add points and right-clicking to complete the path.&amp;quot;);&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    try&lt;br /&gt;
    {&lt;br /&gt;
        IMapRasterLayer rasterLayer = map.GetRasterLayers().First();&lt;br /&gt;
        IMapLineLayer pathLayer = map.GetLineLayers().First();&lt;br /&gt;
        var coords = GetCoordinatesFromLine(pathLayer);&lt;br /&gt;
&lt;br /&gt;
        double[] elevation = new double[coords.Count];&lt;br /&gt;
        for (int i = 0; i &amp;lt; coords.Count; i++)&lt;br /&gt;
        {&lt;br /&gt;
            elevation[i] = GetElevation(rasterLayer, coords[i]);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        ChartForm chart = new ChartForm();&lt;br /&gt;
        chart.Plot(elevation);&lt;br /&gt;
        chart.Show();&lt;br /&gt;
    }&lt;br /&gt;
    catch (Exception ex)&lt;br /&gt;
    {&lt;br /&gt;
        MessageBox.Show(&amp;quot;Error calculating elevation. The whole path should be inside the DEM area. &amp;quot; + ex.Message);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==== SimpleActionItem használata (menüelem) ====&lt;br /&gt;
&lt;br /&gt;
public void ButtonClick(object sender, EventArgs e)&lt;br /&gt;
{&lt;br /&gt;
    // We&amp;#039;re expecting this extension to only be run in a Windows Forms application.&lt;br /&gt;
    // We&amp;#039;ll depend on a few Windows Forms (Map) features like MouseDown, so we cast&lt;br /&gt;
    // the App.Map as a Map and store a reference to it.&lt;br /&gt;
    map = App.Map as Map;&lt;br /&gt;
&lt;br /&gt;
    // remove any existing path if needed.&lt;br /&gt;
    if (_PathLineLayer != null)&lt;br /&gt;
        map.Layers.Remove(_PathLineLayer);&lt;br /&gt;
&lt;br /&gt;
    _PathLineLayer = null;&lt;br /&gt;
    _LineFeature = null;&lt;br /&gt;
&lt;br /&gt;
    // Let the user know we are ready for them to set points by changing the cursor.&lt;br /&gt;
    map.Cursor = Cursors.Cross;&lt;br /&gt;
    map.MouseDown += map_MouseDown;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==== Vektor réteg létrehozása ====&lt;br /&gt;
&lt;br /&gt;
private void map_MouseDown(object sender, MouseEventArgs e)&lt;br /&gt;
{&lt;br /&gt;
    if (e.Button == MouseButtons.Left)&lt;br /&gt;
    {&lt;br /&gt;
        // Encourage the user to select a raster, if they haven&amp;#039;t done so.&lt;br /&gt;
        if (!map.GetRasterLayers().Any())&lt;br /&gt;
        {&lt;br /&gt;
            map.AddRasterLayer();&lt;br /&gt;
            map.ZoomToMaxExtent();&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        StartOrContinueDrawingPath(e.Location);&lt;br /&gt;
        App.ProgressHandler.Progress(null, 0, &amp;quot;Point registered. Click again to add line segment. Right-click to finish.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    else if (e.Button == MouseButtons.Right)&lt;br /&gt;
    {&lt;br /&gt;
        EndDrawingPath();&lt;br /&gt;
        ShowElevation();&lt;br /&gt;
        App.ProgressHandler.Progress(null, 0, &amp;quot;Ready.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private IFeature AddLineFeatureSetToMap()&lt;br /&gt;
{&lt;br /&gt;
    FeatureSet lineFeatureSet = new FeatureSet(FeatureType.Line);&lt;br /&gt;
    lineFeatureSet.Projection = map.Projection;&lt;br /&gt;
&lt;br /&gt;
    // Initialize the featureSet attribute table by creating columns&lt;br /&gt;
    DataColumn column = new DataColumn(&amp;quot;ID&amp;quot;, typeof(short));&lt;br /&gt;
    lineFeatureSet.DataTable.Columns.Add(column);&lt;br /&gt;
    DataColumn column2 = new DataColumn(&amp;quot;Number of Points&amp;quot;, typeof(int));&lt;br /&gt;
    lineFeatureSet.DataTable.Columns.Add(column2);&lt;br /&gt;
    DataColumn column3 = new DataColumn(&amp;quot;Description&amp;quot;);&lt;br /&gt;
    lineFeatureSet.DataTable.Columns.Add(column3);&lt;br /&gt;
&lt;br /&gt;
    // Add the featureSet as map layer&lt;br /&gt;
    _PathLineLayer = (MapLineLayer)map.Layers.Add(lineFeatureSet);&lt;br /&gt;
    _PathLineLayer.Symbolizer = new LineSymbolizer(Color.Blue, 2);&lt;br /&gt;
    _PathLineLayer.LegendText = &amp;quot;Path Layer&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    var newList = new List&amp;lt;Coordinate&amp;gt;();&lt;br /&gt;
    LineString lineGeometry = new LineString(newList);&lt;br /&gt;
&lt;br /&gt;
    // AddFeature creates the point and a row in the DataTable&lt;br /&gt;
    return lineFeatureSet.AddFeature(lineGeometry);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void StartOrContinueDrawingPath(System.Drawing.Point mouseLocation)&lt;br /&gt;
{&lt;br /&gt;
    Coordinate coord = map.PixelToProj(mouseLocation);&lt;br /&gt;
&lt;br /&gt;
    if (_LineFeature == null)&lt;br /&gt;
    {&lt;br /&gt;
        // This is the first time we see a left click; create empty line feature.&lt;br /&gt;
        _LineFeature = AddLineFeatureSetToMap();&lt;br /&gt;
&lt;br /&gt;
        // Add first coordinate to the line feature.&lt;br /&gt;
        _LineFeature.Coordinates.Add(coord);&lt;br /&gt;
&lt;br /&gt;
        // Set the line feature attribute. This line may have multiple points,&lt;br /&gt;
        // but there is only one row in the attribute table for the entire feature (line).&lt;br /&gt;
        _LineFeature.DataRow[&amp;quot;ID&amp;quot;] = 0;&lt;br /&gt;
        _LineFeature.DataRow[&amp;quot;Description&amp;quot;] = &amp;quot;Path (line)&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // Second or later click - add points to the existing feature&lt;br /&gt;
        _LineFeature.BasicGeometry.Coordinates.Add(coord);&lt;br /&gt;
        _LineFeature.ParentFeatureSet.InitializeVertices();&lt;br /&gt;
&lt;br /&gt;
        // Draw the line.&lt;br /&gt;
        map.ResetBuffer();&lt;br /&gt;
&lt;br /&gt;
        // Update the attribute table.&lt;br /&gt;
        _LineFeature.DataRow[&amp;quot;Number of Points&amp;quot;] = _LineFeature.BasicGeometry.Coordinates.Count;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void EndDrawingPath()&lt;br /&gt;
{&lt;br /&gt;
    // The path is complete.&lt;br /&gt;
    map.ResetBuffer();&lt;br /&gt;
    map.Cursor = Cursors.Arrow;&lt;br /&gt;
    map.MouseDown -= map_MouseDown;&lt;br /&gt;
    _LineFeature = null;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Roberto</name></author>
		
	</entry>
	<entry>
		<id>http://gis.inf.elte.hu/giswiki/index.php?title=Kezd%C5%91lap&amp;diff=220</id>
		<title>Kezdőlap</title>
		<link rel="alternate" type="text/html" href="http://gis.inf.elte.hu/giswiki/index.php?title=Kezd%C5%91lap&amp;diff=220"/>
		<updated>2016-06-01T17:07:44Z</updated>

		<summary type="html">&lt;p&gt;Roberto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Üdvözlet a GIS Wikin!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A GIS Wiki az [http://www.elte.hu Eötvös Loránd Tudományegyetem] [http://www.inf.elte.hu Informatikai Karának] egy belső információs oldala, amelynek célja alapvetően &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://hu.wikipedia.org/wiki/F%C3%B6ldrajzi_inform%C3%A1ci%C3%B3s_rendszer térinformatikai rendszerrek]&amp;lt;/span&amp;gt;kel kapcsolatos ismeretek gyűjtése. A szócikkek anyagát elsősorban a [http://people.inf.elte.hu/groberto/elte_ttaf/ Térinformatikai Alkalmazások fejlesztése] tárgy hallgatói biztosították.&lt;br /&gt;
&lt;br /&gt;
Jelenleg elérhető szócikkek:&lt;br /&gt;
&lt;br /&gt;
* [[DotSpatial]]&lt;br /&gt;
* [[GeoTools]]&lt;br /&gt;
* [[GDAL/OGR]]&lt;br /&gt;
* [[MapServer]]&lt;br /&gt;
* [[OpenLayers]]&lt;br /&gt;
* [[PgRouting]]&lt;br /&gt;
* [[SharpMap]]&lt;br /&gt;
* [[SUMO]]&lt;br /&gt;
&lt;br /&gt;
Az oldalt [http://people.inf.elte.hu/groberto Giachetta Roberto] szerkeszti.&lt;/div&gt;</summary>
		<author><name>Roberto</name></author>
		
	</entry>
	<entry>
		<id>http://gis.inf.elte.hu/giswiki/index.php?title=Kezd%C5%91lap&amp;diff=219</id>
		<title>Kezdőlap</title>
		<link rel="alternate" type="text/html" href="http://gis.inf.elte.hu/giswiki/index.php?title=Kezd%C5%91lap&amp;diff=219"/>
		<updated>2016-06-01T13:24:35Z</updated>

		<summary type="html">&lt;p&gt;Roberto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Üdvözlet a GIS Wikin!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A GIS Wiki az [http://www.elte.hu Eötvös Loránd Tudományegyetem] [http://www.inf.elte.hu Informatikai Karának] egy belső információs oldala, amelynek célja alapvetően &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://hu.wikipedia.org/wiki/F%C3%B6ldrajzi_inform%C3%A1ci%C3%B3s_rendszer térinformatikai rendszerrekkel]&amp;lt;/span&amp;gt; kapcsolatos ismeretek gyűjtése. A szócikkek anyagát elsősorban a [http://people.inf.elte.hu/groberto/elte_ttaf/ Térinformatikai Alkalmazások fejlesztése] tárgy hallgatói biztosították.&lt;br /&gt;
&lt;br /&gt;
Jelenleg elérhető szócikkek:&lt;br /&gt;
&lt;br /&gt;
* [[DotSpatial]]&lt;br /&gt;
* [[GeoTools]]&lt;br /&gt;
* [[GDAL/OGR]]&lt;br /&gt;
* [[MapServer]]&lt;br /&gt;
* [[OpenLayers]]&lt;br /&gt;
* [[PgRouting]]&lt;br /&gt;
* [[SharpMap]]&lt;br /&gt;
* [[SUMO]]&lt;br /&gt;
&lt;br /&gt;
Az oldalt [http://people.inf.elte.hu/groberto Giachetta Roberto] szerkeszti.&lt;/div&gt;</summary>
		<author><name>Roberto</name></author>
		
	</entry>
	<entry>
		<id>http://gis.inf.elte.hu/giswiki/index.php?title=Kezd%C5%91lap&amp;diff=218</id>
		<title>Kezdőlap</title>
		<link rel="alternate" type="text/html" href="http://gis.inf.elte.hu/giswiki/index.php?title=Kezd%C5%91lap&amp;diff=218"/>
		<updated>2016-06-01T13:23:55Z</updated>

		<summary type="html">&lt;p&gt;Roberto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Üdvözlet a GIS Wikin!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A GIS Wiki az [http://www.elte.hu Eötvös Loránd Tudományegyetem] [http://www.inf.elte.hu Informatikai Karának] egy belső információs oldala, amelynek célja alapvetően &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://hu.wikipedia.org/wiki/F%C3%B6ldrajzi_inform%C3%A1ci%C3%B3s_rendszer térinformatikai rendszerrekkel]&amp;lt;/span&amp;gt; kapcsolatos ismeretek gyűjtése.&lt;br /&gt;
&lt;br /&gt;
A szócikkek elsősorban a [http://people.inf.elte.hu/groberto/elte_ttaf/ Térinformatikai Alkalmazások fejlesztése] tárgy kapcsán gyűjtött hallgatói hozzájárásokból állnak.&lt;br /&gt;
&lt;br /&gt;
Jelenleg elérhető szócikkek:&lt;br /&gt;
&lt;br /&gt;
* [[DotSpatial]]&lt;br /&gt;
* [[GeoTools]]&lt;br /&gt;
* [[GDAL/OGR]]&lt;br /&gt;
* [[MapServer]]&lt;br /&gt;
* [[OpenLayers]]&lt;br /&gt;
* [[PgRouting]]&lt;br /&gt;
* [[SharpMap]]&lt;br /&gt;
* [[SUMO]]&lt;br /&gt;
&lt;br /&gt;
Felelős szerkesztő&lt;br /&gt;
&lt;br /&gt;
Az oldalt [http://people.inf.elte.hu/groberto Giachetta Roberto] szerkeszti.&lt;/div&gt;</summary>
		<author><name>Roberto</name></author>
		
	</entry>
	<entry>
		<id>http://gis.inf.elte.hu/giswiki/index.php?title=Kezd%C5%91lap&amp;diff=217</id>
		<title>Kezdőlap</title>
		<link rel="alternate" type="text/html" href="http://gis.inf.elte.hu/giswiki/index.php?title=Kezd%C5%91lap&amp;diff=217"/>
		<updated>2016-06-01T13:23:23Z</updated>

		<summary type="html">&lt;p&gt;Roberto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Üdvözlet a GIS Wikin!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A GIS Wiki az [http://www.elte.hu Eötvös Loránd Tudományegyetem] [http://www.inf.elte.hu Informatikai Karának] egy belső információs oldala, amelynek célja alapvetően &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://hu.wikipedia.org/wiki/F%C3%B6ldrajzi_inform%C3%A1ci%C3%B3s_rendszer térinformatikai rendszerrekkel]&amp;lt;/span&amp;gt; kapcsolatos ismeretek gyűjtése.&lt;br /&gt;
&lt;br /&gt;
A szócikkek elsősorban a [http://people.inf.elte.hu/groberto/elte_ttaf/ Térinformatikai Alkalmazások fejlesztése] tárgy kapcsán gyűjtött hallgatói hozzájárásokból állnak.&lt;br /&gt;
Jelenleg elérhető szócikkek:&lt;br /&gt;
&lt;br /&gt;
* [[DotSpatial]]&lt;br /&gt;
* [[GeoTools]]&lt;br /&gt;
* [[GDAL/OGR]]&lt;br /&gt;
* [[MapServer]]&lt;br /&gt;
* [[OpenLayers]]&lt;br /&gt;
* [[PgRouting]]&lt;br /&gt;
* [[SharpMap]]&lt;br /&gt;
* [[SUMO]]&lt;br /&gt;
&lt;br /&gt;
Felelős szerkesztő&lt;br /&gt;
&lt;br /&gt;
Az oldalt [http://people.inf.elte.hu/groberto Giachetta Roberto] szerkeszti.&lt;/div&gt;</summary>
		<author><name>Roberto</name></author>
		
	</entry>
	<entry>
		<id>http://gis.inf.elte.hu/giswiki/index.php?title=Kezd%C5%91lap&amp;diff=216</id>
		<title>Kezdőlap</title>
		<link rel="alternate" type="text/html" href="http://gis.inf.elte.hu/giswiki/index.php?title=Kezd%C5%91lap&amp;diff=216"/>
		<updated>2016-06-01T13:09:25Z</updated>

		<summary type="html">&lt;p&gt;Roberto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Üdvözlet a GIS Wikin!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A GIS Wiki az [http://www.elte.hu Eötvös Loránd Tudományegyetem] [http://www.inf.elte.hu Informatikai Karának] egy belső információs oldala, amelynek célja alapvetően &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://hu.wikipedia.org/wiki/F%C3%B6ldrajzi_inform%C3%A1ci%C3%B3s_rendszer térinformatikai rendszerrekkel]&amp;lt;/span&amp;gt; kapcsolatos ismeretek gyűjtése.&lt;br /&gt;
&lt;br /&gt;
A szócikkek elsősorban a [http://people.inf.elte.hu/groberto/elte_ttaf/ Térinformatikai Alkalmazások fejlesztése] tárgy kapcsán gyűjtött hallgatói hozzájárások.&lt;br /&gt;
&lt;br /&gt;
Jelenleg elérhető szócikkek:&lt;br /&gt;
&lt;br /&gt;
* [[DotSpatial]]&lt;br /&gt;
* [[GeoTools]]&lt;br /&gt;
* [[GDAL/OGR]]&lt;br /&gt;
* [[MapServer]]&lt;br /&gt;
* [[OpenLayers]]&lt;br /&gt;
* [[PgRouting]]&lt;br /&gt;
* [[SharpMap]]&lt;br /&gt;
* [[SUMO]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Az oldalt [http://people.inf.elte.hu/groberto Giachetta Roberto] szerkeszti.&lt;/div&gt;</summary>
		<author><name>Roberto</name></author>
		
	</entry>
	<entry>
		<id>http://gis.inf.elte.hu/giswiki/index.php?title=OpenLayers&amp;diff=214</id>
		<title>OpenLayers</title>
		<link rel="alternate" type="text/html" href="http://gis.inf.elte.hu/giswiki/index.php?title=OpenLayers&amp;diff=214"/>
		<updated>2016-06-01T13:09:07Z</updated>

		<summary type="html">&lt;p&gt;Roberto: Groberto átnevezte a(z) OpenLayers 3 lapot a következő névre: OpenLayers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Az OpenLayers egy olyan JavaScipt programcsomag, mely lehetővé teszi geo adatok böngészőben történő megjelenítését. Maga a programcsomag is JavaScriptben íródott, és nyílt forráskódú, BSD2 engedéllyel rendelkezik.&lt;br /&gt;
&lt;br /&gt;
== Bevezetés ==&lt;br /&gt;
=== Főbb funkcionalitások ===&lt;br /&gt;
&lt;br /&gt;
Az OpenLayers 3 (OL3) alapvetően az OpenLayers webes térkép megjelenítő, kezelő csomag újratervezése. A második verzióját is széles kőrben használták, de mivel az korábbi Javascript elemeken alapult, most már újra korszerűsítésre volt igény. Az OL3 alapoktól újra volt építve modern tervezési minták alkalmazásával.&lt;br /&gt;
&lt;br /&gt;
A harmadik kiadás arra irányult, hogy lehetővé tegye a második verzió által támogatott lehető legtöbb funkcionalitást, széles körben támogatva különböző kereskedelmi és ingyenes forrásokat, és a legismertebb vektor adat formátumokat. Ahogyan a második verzióban, az adat bármilyen vetületben lehet. Ugyanakkor a harmadik kiadás hozzáad néhány új funkcionalitást, mint például a könnyű forgathatóságot, valamint a térképek animálását. &lt;br /&gt;
A jelenlegi könyvtár 3 interpretert (renderer) foglal magába: Canvas, DOM, és WebGL. Mindhárom támogatja úgy a raszter adatokat csempe/kép szerverektől, illetve vektor adatokat; a WebGL csak pont vektorokat támogat (Point vectors), és nem támogat címkéket. Természetesen csak azon böngészők esetén támogatják a Canvast, melyekben van Canvas interpreter. A WebGL esetében is hasonlóan, csak azon eszközök és böngészők esetében használható, melyek támogatják a WebGL-t. Az Internet Explorer 9 előtt verziók egyáltalán nem kapnak támogatást. &lt;br /&gt;
&lt;br /&gt;
A könyvtár alkalmas desktop/laptop használat esetén, úgy mint mobil eszköz esetén is. &lt;br /&gt;
Úgy van megtervezve az alkalmazás, hogy a főbb új irányzatokkal bővíthető legyen a következő kiadást. (pl. 3D térképek megjelenítése, WebGL használata nagyméretű vektoradatok megjelenítéséhez.)&lt;br /&gt;
&lt;br /&gt;
=== Felépítés ===&lt;br /&gt;
&lt;br /&gt;
Az OL3 nagy mértékben épül a Google Closure eszköztárára, nagy mértékben él a Closure könyvtár (Closure Library) nyújtotta segítséggel – például a DOM vagy az esemény kezelés résznél. Ez lehetővé teszi, hogy a fejlesztők a térképészeti funkciókra koncentrálhassanak, tudva, hogy az alá épült szoftver megbízható, jól tesztelt, böngésző szinten egyezményesített. A Closure Library sajátos tervezésének előnye, hogy a Closure fordító (Clusure Compiler) optimalizálni tudja, ráadásul olyan mértékben tömörítve, hogy az messzemenően meghaladja az jelenlegi kínálatokat. Az OL3-nak is nagy előnye származik ebből.&lt;br /&gt;
A Closure Compiler használata egyben azt is jelenti, hogy a tulajdonságok és a metódusok át vannak nevezve az előzőekhez képest. A hosszú, jelentést megnevező nevek többsége rövidebbre lett cserélve – ezért nem igazán hatékonyan használhatóak az alkalmazásokban, melyek a könyvtárat használják. A megoldást az a módszer nyújtja, hogy kell explicit módon exportálni őket. Ez azt jelenti, hogy az exportált nevek (vagyis azok, melyek nincsenek átnevezve), képezik tulajdonképpen a publikus API-ját a könyvtárnak. Ezek az exportálható tulajdonságok, metódusok vannak megjelölve a forrásban, és dokumentálva vannak az „API docs”-ban. Ez a nyilvánosan támogatott API-ja a könyvtárnak.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Objektumok és névterek&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Az OL3 a Closure könyvtárhoz hasonló felépítésű. A legfelső szintet az ol névtér képezi (alapértelmezetten, var ol = {}). Alábbi szinteken a következők vannak:&lt;br /&gt;
*	Alábbi névterek, mint az ol.layer; kisbetűvel kezdődik a nevük&lt;br /&gt;
*	Egyszerű objektumok, melyek statikus tulajdonságokat és metódusokat használnak, mint pl. ol.animation; ezek is kisbetűvel kezdődnek.&lt;br /&gt;
*	Típusok, melyek nagybetűvel kezdődnek. Ezek nagyjából „osztályok”, ami itt azt jelenti, hogy konstruktor függvény van prototípusos öröklődéssel, mint az ol.Map vagy ol.layer.Vector (Vector osztály a layer névtérben). Ugyanakkor vannak más, egyszerű típusok, mint pl. ol.Extent, amely egy tömb.&lt;br /&gt;
&lt;br /&gt;
Osztály névtereknek, mint pl. az ol.layer van egy alap (base) osztály típusuk, mint például ol.layer.Layer. Ezek nagyjából absztrakt osztályok, melyekből a más osztályok örökölnek. &lt;br /&gt;
A forrás állományok hasonlóan vannak rendezve, minden névtér számára egy külön mappa. Neveik kisbetűsek, és az alosztályok ismétlik a örökölt osztály nevét is, mint pl. ol.layer.vectorlayers.js.&lt;br /&gt;
Az OL3 azt a konvenciót követi, hogy a privát tulajdonságok és metódusok, vagyis amelyek nem részei az API-nak, alul-vonásban végződnek. Általában a példány típusú tulajdonságok privátok, és elérésük erre célzott függvényekkel lehetséges. &lt;br /&gt;
&lt;br /&gt;
=== Teljes build, testre-szabott build ===&lt;br /&gt;
&lt;br /&gt;
Azt a fordítás, mely minden exportálható nevet tartalmaz, teljes build-nek (full build) nevezik. Egy befogadó verzió ebből elérhető, mely minden alkalmazás számára használható.&lt;br /&gt;
Closure fordítóval az exportálások fordítási időben meghatározhatóak, így saját fordítások (build-ek) könnyedén hozhatóak létre, melyek az adott weboldalhoz, alkalmazáshoz illőek. A testre-szabott build (custom build) csak azokat a tulajdonságokat, metódusokat exportálja, melyeket az adott weblap vagy alkalmazás valóban használni fog. Mivel a teljes build (full build) nagyon nagy méretű, és valószínűleg egyre nagyobb méretűvé fog válni amikor új lehetőségeket kerülnek az API-ba, nagyon ajánlott testre-szabott build-et létrehozni a weblapok számára.&lt;br /&gt;
&lt;br /&gt;
== Alap komponensek ==&lt;br /&gt;
&lt;br /&gt;
=== Térkép ===&lt;br /&gt;
&lt;br /&gt;
Az OpenLayers3 fő komponense a térkép (ol.Map). Egy target típusú elem zárja körül (pl. egy div elem). A térkép minden tulajdonsága beállítható már létrehozása idején, de beállító metódusok is rendelkezésre állnak. (pl. setTarget()).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;&amp;lt;nowiki /&amp;gt;div id=&amp;quot;map&amp;quot; style=&amp;quot;width: 100%, height: 400px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  var map = new ol.Map({target: &amp;#039;map&amp;#039;});&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nézet ===&lt;br /&gt;
&lt;br /&gt;
Az ol.Map nem felelős a középpont(center), nagyítás(zoom) mértékének számontartásáért. Ezt a nézet (view) típusú elem tudja biztosítani.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
map.setView(new ol.View({&lt;br /&gt;
    center: [0, 0],&lt;br /&gt;
    zoom: 2&lt;br /&gt;
  }));&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A nézet elem rendelkezik a vetületről (projection) is. Meghatározza a középpont koordináta rendszerét, és a lépték mértékét. Ha nincsen külön megadva, akkor az alapból beállított vetület a  Spherical Mercator (EPSG:3857), és a lépték mértékegysége a méter. &lt;br /&gt;
A nagyítás mértéke szorosan összefügg a felbontás nagyságával. Három tulajdonság rögzíti a fontos paramétereket. A maxZoom a rendelkezésre álló nagyítási szintek számát jelöli, alapbeállításban 28. A maxResolution a legnagyobb felbontást jelenti, a 0. nagyítási szint esetén ennyi egység van pixelenként. A további nagyítási szintek úgy állnak elő, hogy az előző szint maxResolution értéke a zoomFactor értékkel lesz osztva. (Alapbeállítás a zoomFactor esetében a 2.)&lt;br /&gt;
&lt;br /&gt;
=== Forrás ===&lt;br /&gt;
&lt;br /&gt;
Hogy távoli adatot tudjunk biztosítani a térképrétegek számára, az OpenLayers 3 az ol.source.Source alosztályokat kínálja. Segítségükkel különböző ingyenes és kereskedelmi térképszolgáltatókat tudunk elérni, mint OpenStreetMap, Bing (térkép csempe szolgáltatások), WMS, WMTS (OBC források), GeoJSON, KML (vektoradatok).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
var osmSource = new ol.source.OSM();&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rétegek ===&lt;br /&gt;
&lt;br /&gt;
A réteg(Layer) egy source elem által biztosított adatok megjelenítéséért felelős. Az OpenLayers 3 három fő layer típust kínál: ol.layer.Tile, ol.layer.Image, ol.layer.Vector.&lt;br /&gt;
* ol.layer.Tile: olyan réteg forrásokhoz kell rendelni, melyek előre generáltak, rácsban lévő csempés képek, nagyítási mérték szerint rendezve a bizonyos felbontásnak megfelelően.&lt;br /&gt;
* ol.layer.Image: szerver által generalizát képekhez, melyek tetszőleges bővítésre, felbontásra nyitottak.&lt;br /&gt;
* ol.layer.Vector: olyan vektor adatokhoz, melyek kliens oldalon vannak generalizálva.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 var osmLayer = new ol.layer.Tile({source: osmSource});&lt;br /&gt;
 map.addLayer(osmLayer);&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Összefoglaló példa ===&lt;br /&gt;
&lt;br /&gt;
Összefoglalva a példa a következőképpen nézne ki:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;&amp;lt;nowiki /&amp;gt;div id=&amp;quot;map&amp;quot; style=&amp;quot;width: 100%, height: 400px&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
  new ol.Map({&lt;br /&gt;
    layers: [&lt;br /&gt;
      new ol.layer.Tile({source: new ol.source.OSM()})&lt;br /&gt;
    ],&lt;br /&gt;
    view: new ol.View({&lt;br /&gt;
      center: [0, 0],&lt;br /&gt;
      zoom: 2&lt;br /&gt;
    }),&lt;br /&gt;
    target: &amp;#039;map&amp;#039;&lt;br /&gt;
  });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Testre-szabott build-ek készítése ==&lt;br /&gt;
&lt;br /&gt;
Az OpenLayers 3 fordítói eszközök használják a Node-ot és a Java-t, tehát ezek fel kell legyenek telepítve a fejlesztő gépén. A node –version, java –version parancsok segítségével ellenőrizhető, hogy a Java és a Node fel van-e telepítve, a fejlesztői útmutató (developer guide) a minimum verziót is rögzíti.&lt;br /&gt;
Következő lépésként le kell tölteni az OpenLayers 3-at, hiszen a testre-szabott build-hez szükség van a forrás állományokra és sajátos build szkriptekre. Ezek beszerzése több módon lehetséges: az ol3 repository klónozásával, vagy valamelyik OL3 közzététel archiv csomagjának letöltésével. Letölthető az openLayres Node csomagja is az NPM (Node Package Manager) segítségével. A következőkben ezt a módszert mutatjuk be:&lt;br /&gt;
&lt;br /&gt;
* 1.	Létrehozunk egy új mappát:  &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$ mkdir openlayers&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 2.	Letöltünk egy OpenLayers 3 disztribúciót az NPM használatával:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$ npm install openlayers&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ez mindig az OpenLayers 3 legfrissebb stabil verzióját tölti le, és a node_modules alá telepíti. Ezt követően ellenőrizhető az „openlayers” mappa jelenléte a node_modules listázásával. A node_modules/openlayers/node_modules&lt;br /&gt;
mappának például tartalmaznia kell a closure-utilt is, hiszen az OL3 rá épül.&lt;br /&gt;
&lt;br /&gt;
Ezen műveleteket követően mindenünk biztosítva van a testre-szabott build elkészítéséhez.&lt;br /&gt;
&lt;br /&gt;
=== Konfigurációs állomány készítése  ===&lt;br /&gt;
&lt;br /&gt;
A következő lépés egy build konfigurációs állomány létrehozása. Ennek formátuma JSON kell legyen. Egy példa build konfigurációs állományra:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;exports&amp;quot;: [&lt;br /&gt;
    &amp;quot;ol.Map&amp;quot;,&lt;br /&gt;
    &amp;quot;ol.View&amp;quot;,&lt;br /&gt;
    &amp;quot;ol.control.defaults&amp;quot;,&lt;br /&gt;
    &amp;quot;ol.layer.Tile&amp;quot;,&lt;br /&gt;
    &amp;quot;ol.source.OSM&amp;quot;&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;compile&amp;quot;: {&lt;br /&gt;
    &amp;quot;externs&amp;quot;: [&lt;br /&gt;
      &amp;quot;externs/bingmaps.js&amp;quot;,&lt;br /&gt;
      &amp;quot;externs/closure-compiler.js&amp;quot;,&lt;br /&gt;
      &amp;quot;externs/geojson.js&amp;quot;,&lt;br /&gt;
      &amp;quot;externs/oli.js&amp;quot;,&lt;br /&gt;
      &amp;quot;externs/olx.js&amp;quot;,&lt;br /&gt;
      &amp;quot;externs/proj4js.js&amp;quot;,&lt;br /&gt;
      &amp;quot;externs/tilejson.js&amp;quot;,&lt;br /&gt;
      &amp;quot;externs/topojson.js&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;define&amp;quot;: [&lt;br /&gt;
      &amp;quot;goog.DEBUG=false&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;extra_annotation_name&amp;quot;: [&lt;br /&gt;
      &amp;quot;api&amp;quot;, &amp;quot;observable&amp;quot;&lt;br /&gt;
    ],&lt;br /&gt;
    &amp;quot;compilation_level&amp;quot;: &amp;quot;ADVANCED&amp;quot;,&lt;br /&gt;
    &amp;quot;manage_closure_dependencies&amp;quot;: true&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Például egy ilyen tartalommal rendelkező állományt ol-custom.json névvel le lehet menteni a node_modulse/openlayers/build mappába.&lt;br /&gt;
&lt;br /&gt;
====Exports lehetőségei====&lt;br /&gt;
&lt;br /&gt;
A legszámottevőbb része ennek a konfigurációs állománynak az „exports” tömb. Ez a tömb deklarálja azokat a függvényeket/konstruktorokat, melyeket a JavaScript kódban használni lehet majd. Például az előbbi konfigurációs állomány alkalmas az előző fejezetben bemutatott javascript esetén. (Alap komponensek/Összefoglaló példa)&lt;br /&gt;
Most már minden elő van készítve a OpenLayers 3 build –hez. A következő parancsok következnek.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
$ cd node_modules/openlayers&lt;br /&gt;
$ node tasks/build.js build/ol-custom.json build/ol-custom.js&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A build felvehet egy kis időt, de végül a console-on a következő jelenik meg:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;info ol Parsing dependencies&lt;br /&gt;
&amp;lt;info ol Compiling 364 sources&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ennek a parancsnak a nyomán létre kellett jöjjön az ol-custom.js állomány a node_module/openlayers/build mappában. Ellenőrizhető és megnyitható. Tesztként használhatjuk a következő HTML állományt, hogy lássuk, a testre-szabott build-ünk az elvártaknak megfelelően működik.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;&amp;lt;nowiki /&amp;gt;html&amp;gt;&lt;br /&gt;
&amp;lt;&amp;lt;nowiki /&amp;gt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta charset=&amp;quot;utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;OpenLayers 3 example&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;node_modules/openlayers/css/ol.css&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;style&amp;gt;&lt;br /&gt;
      #map {&lt;br /&gt;
        width: 600px;&lt;br /&gt;
        height: 400px;&lt;br /&gt;
      }&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;&amp;lt;nowiki /&amp;gt;/head&amp;gt;&lt;br /&gt;
&amp;lt;&amp;lt;nowiki /&amp;gt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;map&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;script src=&amp;quot;node_modules/openlayers/build/ol-custom.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;script&amp;gt;&lt;br /&gt;
    var map = new ol.Map({&lt;br /&gt;
      target: &amp;#039;map&amp;#039;,&lt;br /&gt;
      layers: [&lt;br /&gt;
        new ol.layer.Tile({&lt;br /&gt;
          source: new ol.source.OSM()&lt;br /&gt;
        })&lt;br /&gt;
      ],&lt;br /&gt;
      view: new ol.View({&lt;br /&gt;
        center: [0, 0],&lt;br /&gt;
        zoom: 4&lt;br /&gt;
      })&lt;br /&gt;
    });&lt;br /&gt;
    &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;&amp;lt;nowiki /&amp;gt;/body&amp;gt;&lt;br /&gt;
&amp;lt;&amp;lt;nowiki /&amp;gt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Define lehetőségei====&lt;br /&gt;
&lt;br /&gt;
A konfigurációs állományban a define használata a Clusre-hoz kötődik, mely engedi olyan konstansok definiálását, melyek fordítási időben beállíthatóak. A fentebbi példa négy goog tulajdonságot állít be a Closure library számára. Az OpenLayers 3 kód rendelkezik definiált értékekkel is, melyek beállíthatóak.&lt;br /&gt;
Néhányat ezek közül hamisra (false) állítva azt érjük el, hogy azok a kódrészletek melyek ezekhez a beállításokhoz kötődnek „halottak” lesznek, vagyis sosem lesznek végrehajtva. Mivel a Closure fordító előrehaladottabb módja eltávolítja a halott kódokat, az előrehaladottabb fordítóval létrehozott kód jóval kisebb méretű lesz.&lt;br /&gt;
Észrevehető, hogy az előbbi folyamat során készült build állomány látványosan kisebb, mint a teljes build, de még ennél kisebbre is szorítható. Ez azért van, mert alapból mindhárom interpreter és minden réteg típus bele van vonva. Mivel csak egy interpreterre volt szükségünk, és csak a csempe rétegre, a többit ki is zárhatjuk a tulajdonság listában hamisra állítva őket. A következő kóddal kell kiegészíteni a konfigurációs állomány define részét, és újra kell futtatni a build szkriptet – majd újra láthatjuk, hogy kisebb lett a build mérete.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
      &amp;quot;ol.ENABLE_DOM=false&amp;quot;,&lt;br /&gt;
      &amp;quot;ol.ENABLE_WEBGL=false&amp;quot;,&lt;br /&gt;
      &amp;quot;ol.ENABLE_PROJ4JS=false&amp;quot;,&lt;br /&gt;
      &amp;quot;ol.ENABLE_IMAGE=false&amp;quot;,&lt;br /&gt;
      &amp;quot;ol.ENABLE_VECTOR=false&amp;quot;,&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Externs lehetőségei====&lt;br /&gt;
&lt;br /&gt;
Az externs alatt olyan külsős dolgok nevei szerepelnek, melyek használva vannak a fordított kódban. A fordító include-olja az externs mappába mindazokat a külsős állományokat, melyeket a könyvtár valamely részében használni fog. Például, ha használjuk a Bing Maps-et, akkor be kell include-olni az konfigurációs állomány externs részénél.&lt;br /&gt;
Az oli.js és az olx.js külső állományok az OpenLayers 3 API-hoz. Pédául az olx.js külső definíciókat tartalmaz az OpenLayers 3 konstruktor lehetőségeihez. Ezt a két állományt mindig használni érdemes extern-ként testre-szabott build esetén. &lt;br /&gt;
&lt;br /&gt;
====Egyéb lehetőségek====&lt;br /&gt;
&lt;br /&gt;
Vannak egyébb fordítási lehetőségek a konfigurációs állományban. Például a manage_closure_dependencies mindig használandó. Minden más fordítási opció is beállítható itt, a closure-util-ban látható az összes, listázott formában.&lt;br /&gt;
Több információ a build szkriptekről, és a tulajdonságokról, melyeket a konfigurációs állományokban állítani lehet [https://github.com/openlayers/ol3/blob/master/tasks/readme.md itt] található.&lt;br /&gt;
&lt;br /&gt;
===Kód karbantartás===&lt;br /&gt;
&lt;br /&gt;
A kód karbantartása érdekében, ha a Node csomag által telepítjük az OpenLayer-st, akkor az npm használható a legújabb verzióra frissítéshez. Ha a Github repo volt klónozva, nem biztos, hogy elég a pull a legújabb verzióra, mert néhány  használt csomag, mint például a fordító, lehet, hogy kíván upgrade-et is. Ezt érdemes npm install paranccsal kiváltani, nem pedig npm update-tel.&lt;br /&gt;
&lt;br /&gt;
== Saját kód és OL3 kód együttes fordítása ==&lt;br /&gt;
&lt;br /&gt;
Egy alternatíva testre-szabott build-ek készítésére a saját kód OpenLayers 3-mal együtt történő fordítása a Closure fordító segítségével. Ennek a módszernek előnye az, hogy a Closure fordító kiszűri azokat a kódokat, melyeket az alkalmazás nem használ, és ehhez nem szükséges egy „exports” lista írása és karbantartása. Ugyanakkor lehetővé teszi olyan OpenLayers 3 függvények és objektumok használatát, melyek nem részei az OpenLayers 3 API-nak. Ez kissé kockázatos is lehet, de szerencsére a fordító szól, ha olyan függvényeket és objektumokat használnánk, melyek már nem az OpenLayers 3 API részei. (A módszerről részletesebben: [http://openlayers.org/en/v3.15.1/doc/tutorials/closure.html itt] olvasható.)&lt;br /&gt;
&lt;br /&gt;
== Eltérő koordináta rendszerek esete ==&lt;br /&gt;
&lt;br /&gt;
Az OpenLayers 3 képes megjeleníteni raszteres adatot WMS, WMTS, statikus kép típusú és sok más forrásból a szervertől kapott koordináta rendszertől eltérően. A koordináták transzformálása a web böngészőben történik. A nézet minden Proj4js támogató koordináta referencia rendszerben lehetséges, és előzetesen inkompatibilis rétegek ma már kombinálhatóak. Az alábbi példa során látható, hogy a forrás és a nézet koordináta rendszere eltérő, az átszámítás megtörténik viszont automatikusan.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
var map = new ol.Map({&lt;br /&gt;
  target: &amp;#039;map&amp;#039;,&lt;br /&gt;
  view: new ol.View({&lt;br /&gt;
    projection: &amp;#039;EPSG:3857&amp;#039;, //HERE IS THE VIEW PROJECTION&lt;br /&gt;
    center: [0, 0],&lt;br /&gt;
    zoom: 2&lt;br /&gt;
  }),&lt;br /&gt;
  layers: [&lt;br /&gt;
    new ol.layer.Tile({&lt;br /&gt;
      source: new ol.source.TileWMS({&lt;br /&gt;
        projection: &amp;#039;EPSG:4326&amp;#039;, //HERE IS THE DATA SOURCE PROJECTION&lt;br /&gt;
        url: &amp;#039;http://demo.boundlessgeo.com/geoserver/wms&amp;#039;,&lt;br /&gt;
        params: {&lt;br /&gt;
          &amp;#039;LAYERS&amp;#039;: &amp;#039;ne:NE1_HR_LC_SR_W_DR&amp;#039;&lt;br /&gt;
        }&lt;br /&gt;
      })&lt;br /&gt;
    })&lt;br /&gt;
  ]&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Érdekes és látványos példák ==&lt;br /&gt;
&lt;br /&gt;
*	 [http://openlayers.org/en/v3.15.1/examples/animation.html Animációk térképen (View Animation)]&lt;br /&gt;
*	 [http://openlayers.org/en/v3.15.1/examples/box-selection.html Ország, országok kijelölése (Box Selection) ]&lt;br /&gt;
*	 [http://openlayers.org/en/v3.15.1/examples/earthquake-clusters.html Földrengések és mértékének megjelenítése (Eartquake Clusters)]&lt;br /&gt;
*	[http://openlayers.org/en/v3.15.1/examples/export-pdf.html Exportálás pdf-be] &lt;br /&gt;
*	[http://openlayers.org/en/v3.15.1/examples/flight-animation.html Repülő animáció (Flight Animation)] &lt;br /&gt;
*	[http://openlayers.org/en/v3.15.1/examples/kml-timezones.html Időzónák KML-lel (Timezones in KML)]&lt;br /&gt;
*	[http://openlayers.org/en/v3.15.1/examples/measure.html Terület felmérés (Measure)] &lt;br /&gt;
&lt;br /&gt;
== Források ==&lt;br /&gt;
* Open Layers 3 hivatalos oldala:  [http://openlayers.org/ http://openlayers.org/]&lt;br /&gt;
* FOSSGIS Konferencia - 2015 Münster- Andreas Hocevar, Bart van den Eijnden, Marc Jansen előadása – [https://www.youtube.com/watch?v=U3ByMIIsA_Y  OpenLayers 3]&lt;/div&gt;</summary>
		<author><name>Roberto</name></author>
		
	</entry>
	<entry>
		<id>http://gis.inf.elte.hu/giswiki/index.php?title=OpenLayers_3&amp;diff=215</id>
		<title>OpenLayers 3</title>
		<link rel="alternate" type="text/html" href="http://gis.inf.elte.hu/giswiki/index.php?title=OpenLayers_3&amp;diff=215"/>
		<updated>2016-06-01T13:09:07Z</updated>

		<summary type="html">&lt;p&gt;Roberto: Groberto átnevezte a(z) OpenLayers 3 lapot a következő névre: OpenLayers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#ÁTIRÁNYÍTÁS [[OpenLayers]]&lt;/div&gt;</summary>
		<author><name>Roberto</name></author>
		
	</entry>
	<entry>
		<id>http://gis.inf.elte.hu/giswiki/index.php?title=DotSpatial&amp;diff=213</id>
		<title>DotSpatial</title>
		<link rel="alternate" type="text/html" href="http://gis.inf.elte.hu/giswiki/index.php?title=DotSpatial&amp;diff=213"/>
		<updated>2016-06-01T13:06:25Z</updated>

		<summary type="html">&lt;p&gt;Roberto: Új oldal, tartalma: „A &amp;#039;&amp;#039;DotSpatial&amp;#039;&amp;#039; egy .&amp;#039;&amp;#039;NET 4&amp;#039;&amp;#039; alapokra íródott, nyílt forráskódú (&amp;#039;&amp;#039;LGPL&amp;#039;&amp;#039;) térinformatikai osztálykönyvtár. Segítségével alkalmazásunkat könnyedén ru…”&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &amp;#039;&amp;#039;DotSpatial&amp;#039;&amp;#039; egy .&amp;#039;&amp;#039;NET 4&amp;#039;&amp;#039; alapokra íródott, nyílt forráskódú (&amp;#039;&amp;#039;LGPL&amp;#039;&amp;#039;) térinformatikai osztálykönyvtár. Segítségével alkalmazásunkat könnyedén ruházhatjuk fel téradat kezeléssel, analízissel valamint egyéb térinformatikai funkcionalitással. Biztosít előre elkészített &amp;#039;&amp;#039;Windows Forms&amp;#039;&amp;#039; vezérlőket, melyek radikálisan tudják csökkenteni a fejlesztési időt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Fejlődés ==&lt;br /&gt;
&lt;br /&gt;
A könyvtár megszületését az idahoi egyetemen (&amp;#039;&amp;#039;Idaho State University&amp;#039;&amp;#039;) fejlesztett &amp;#039;&amp;#039;MapWindow&amp;#039;&amp;#039; alkalmazás ihlette. Kezdetben csak a saját belső fejlesztésüket szerették volna megkönnyíteni különféle központi funkciók kiszervezésével. Idővel azonban a felhalmozott szolgáltatások száma elérte azt a méretet, hogy a fejlesztők úgy érezték érdemes kiadni a nagyközönség számára is. &lt;br /&gt;
Sajnos a folyamatosan rétegződő, és központi koncepció nélküli fejlesztés rányomta a bélyegét a kódbázisra. Aki belenéz az implementációba modulonként, vagy akár azokon belül is erősen eltérő megközelítésekkel találja magát szemben.&lt;br /&gt;
&lt;br /&gt;
== Szolgáltatások ==&lt;br /&gt;
&lt;br /&gt;
* Térinformatikai adatok megjelenítése &amp;#039;&amp;#039;.Net Windows Form&amp;#039;&amp;#039;, vagy Web alkalmazásokban&lt;br /&gt;
* Shapefájlok, rácshálók valamint raszter felvételek olvasása.&lt;br /&gt;
* Menet közbeni projektálás&lt;br /&gt;
* Tudományos analízis&lt;br /&gt;
* GPS adatok olvasása&lt;br /&gt;
&lt;br /&gt;
== Kik használják? ==&lt;br /&gt;
&lt;br /&gt;
* [http://mapwindow6.codeplex.com/ MapWindow 6]&lt;br /&gt;
* [http://hydrodesktop.codeplex.com/ HydroDesktop]&lt;br /&gt;
* [http://mad.codeplex.com/ MAD]&lt;br /&gt;
* [http://linesiter.codeplex.com/ LineSiter]&lt;br /&gt;
* [http://cetamon.codeplex.com/ Marine Life]&lt;br /&gt;
* [https://pvdesktop.codeplex.com/ PVMapper Site Designer]&lt;br /&gt;
&lt;br /&gt;
== Használat ==&lt;br /&gt;
&lt;br /&gt;
Telepítést nem igényel, ha használni szeretnénk, akkor két lehetőségünk közül választhatunk.&lt;br /&gt;
&lt;br /&gt;
* Letölthetjük azt össze modult egyben a http://dotspatial.codeplex.com/ oldalról, majd később a szükséges projektekbe referenciázzuk őket.&lt;br /&gt;
* &amp;#039;&amp;#039;Visual Studio&amp;#039;&amp;#039; 2010-től felfelé használhatjuk a &amp;#039;&amp;#039;NuGet&amp;#039;&amp;#039; csomagkezelő, ahonnan telepíthetjük az egyes modulokat a kiválasztott projektek alá. Nagy előnye, hogy csomag frissülése esetén automatikusan eljut hozzánk is az új csomag.&lt;br /&gt;
&lt;br /&gt;
== Windows Forms vezérlők ==&lt;br /&gt;
&lt;br /&gt;
A DotSpatialt egyik legnagyobb előnye az előre megírt kontrolok, amiket a már jól megszokott Windows Formsos recept alapján akár vizuális szerkesztőben is összeállíthatunk.&lt;br /&gt;
&lt;br /&gt;
=== DotSpatialt vezérlők telepítése ===&lt;br /&gt;
&lt;br /&gt;
Ha szeretnénk használni a grafikus szerkesztőt, akkor mindenekelőtt hozzá kell adnunk a &amp;#039;&amp;#039;Toolbox&amp;#039;&amp;#039;-hoz a DotSpatialt vezérlőit.&lt;br /&gt;
&lt;br /&gt;
# Jobbklikk a Toolboxon, majd válasszuk ki az &amp;#039;&amp;#039;Add Tab&amp;#039;&amp;#039; menüpontot.&lt;br /&gt;
# Nevezzük az előbb hozzáadott fület.&lt;br /&gt;
# Ismét jobbklikk az új fülön, és válasszuk ki a Choose Item opciót.&lt;br /&gt;
# A felugró ablakból válasszuk ki a &amp;#039;&amp;#039;DotSpatial.Controls.dll&amp;#039;&amp;#039;-t, ha nem találjuk a listából, akkor manuálisan adjuk hozz.&lt;br /&gt;
&lt;br /&gt;
Most már ugyanúgy használhatjuk DotSpatial vezérlőit, mit a .NET  alapértelmezettjeit.&lt;br /&gt;
&lt;br /&gt;
== Vezérlők demonstrációja ==&lt;br /&gt;
&lt;br /&gt;
A DotSpatial vezérlők segítségével rendkívül gyorsan tudjuk alkalmazásunkat felruházni térinformatikai képességekkel. A következő alkalmazás remek példa az előbbiekre. &lt;br /&gt;
Először készítsük el a felületet az alapértelmezett .NET, illetve a már ismertetett DotSpatial vezérlőkből.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;KÉP&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Miután megfelelően elneveztük a felületre elhelyezett elemeket, a hozzájuk tartozó kód mindössze ennyi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
public partial class DesktopMapping : Form&lt;br /&gt;
    {&lt;br /&gt;
        private AppManager _AppManager;&lt;br /&gt;
&lt;br /&gt;
        public DesktopMapping()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
&lt;br /&gt;
            _AppManager = new AppManager();&lt;br /&gt;
            _AppManager.LoadExtensions();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void uxOpenFile_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            uxMap.AddLayer();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void uxZoomIn_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            uxMap.ZoomIn();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void uxZoomWide_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            uxMap.ZoomToMaxExtent();&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void uxPan_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            uxMap.FunctionMode = DotSpatial.Controls.FunctionMode.Pan;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void uxGenShp_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            var rnd = new Random();&lt;br /&gt;
            var pg = new Polygon[100];&lt;br /&gt;
            var f = new Feature();&lt;br /&gt;
            var fs = new FeatureSet(f.FeatureType);&lt;br /&gt;
             &lt;br /&gt;
            for (int i = 0; i &amp;lt; 100; i++)&lt;br /&gt;
            {&lt;br /&gt;
                var center = new Coordinate((rnd.Next(50) * 360) - 180, (rnd.Next(60) * 180) - 90);&lt;br /&gt;
                var coord = new Coordinate[50];&lt;br /&gt;
                for (int ii = 0; ii &amp;lt; 50; ii++)&lt;br /&gt;
                {&lt;br /&gt;
                    coord[ii] = new Coordinate(center.X + Math.Cos((ii * 10) * Math.PI / 10), center.Y + (ii * 10) * Math.PI / 10);&lt;br /&gt;
                }&lt;br /&gt;
                coord[35] = new Coordinate(coord[0].X, coord[0].Y);&lt;br /&gt;
                pg[i] = new Polygon(coord);&lt;br /&gt;
                fs.Features.Add(pg[i]);&lt;br /&gt;
            }&lt;br /&gt;
            fs.SaveAs(&amp;quot;C:\\Temp\\test.shp&amp;quot;, true);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Bővítmények ==&lt;br /&gt;
Lehetőségünk van bővítmények készítésére, amelyek akár a már kész alkalmazásokba is könnyedén integrálódnak (ilyen például a MapWindow).&lt;br /&gt;
&lt;br /&gt;
=== Példaprogram beépülő modulra ===&lt;br /&gt;
&lt;br /&gt;
A bemutatásra kerülő bővítménnyel lehetőségünk lesz vonalakat rajzolni, réteget létrehozni, illetve megjeleníthetünk velük kapcsolatos magassági adatokat.&lt;br /&gt;
Elsőnek le kell töltenünk az online megtalálható [http://visualstudiogallery.msdn.microsoft.com/92919cee-a2b0-43c6-8993-aeac965bc4b5 sémával].&lt;br /&gt;
&lt;br /&gt;
==== Diagram készítése ====&lt;br /&gt;
&lt;br /&gt;
A magassági adatok megjelenítéséhez egy Windows Form alkalmazást készítünk.&lt;br /&gt;
&lt;br /&gt;
public void Plot(double[] data)&lt;br /&gt;
{&lt;br /&gt;
    chart1.Series.Clear();&lt;br /&gt;
    var series = chart1.Series.Add(&amp;quot;Elevation (meters)&amp;quot;);&lt;br /&gt;
    series.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;&lt;br /&gt;
    series.Points.DataBindY(data);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==== Raszter adatok kinyerése ====&lt;br /&gt;
&lt;br /&gt;
A DotSpatial segítségével könnyedén kinyerhetjük a szükséges magassági adatokat.&lt;br /&gt;
&lt;br /&gt;
private static double GetElevation(IMapRasterLayer raster, Coordinate coordinate)&lt;br /&gt;
{&lt;br /&gt;
    RcIndex rowColumn = raster.DataSet.Bounds.ProjToCell(coordinate);&lt;br /&gt;
    double elevation = raster.DataSet.Value[rowColumn.Row, rowColumn.Column];&lt;br /&gt;
    return elevation;&lt;br /&gt;
}&lt;br /&gt;
private static double GetDistance(double x1, double y1, double x2, double y2)&lt;br /&gt;
{&lt;br /&gt;
    return Math.Sqrt(((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1)));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==== Koordináták kinyerése ====&lt;br /&gt;
&lt;br /&gt;
private List&amp;lt;Coordinate&amp;gt; GetCoordinatesFromLine(IMapLineLayer lineLayer)&lt;br /&gt;
{&lt;br /&gt;
    IFeatureSet featureSet = lineLayer.DataSet;&lt;br /&gt;
&lt;br /&gt;
    // The coordinates should be the first feature of the feature set.&lt;br /&gt;
    IList&amp;lt;Coordinate&amp;gt; lineCoordinates = featureSet.Features[0].Coordinates;&lt;br /&gt;
&lt;br /&gt;
    // Though the original line may only have a few points, we split&lt;br /&gt;
    // each line segment into many points&lt;br /&gt;
    List&amp;lt;Coordinate&amp;gt; pathCoordinates = new List&amp;lt;Coordinate&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
    for (int i = 0; i &amp;lt; lineCoordinates.Count - 1; i++)&lt;br /&gt;
    {&lt;br /&gt;
        Coordinate startCoord = lineCoordinates[i];&lt;br /&gt;
        Coordinate endCoord = lineCoordinates[i + 1];&lt;br /&gt;
        List&amp;lt;Coordinate&amp;gt; segmentCoordinates = SplitSegment(startCoord.X, startCoord.Y, endCoord.X, endCoord.Y);&lt;br /&gt;
&lt;br /&gt;
        //add list of points from this line segment to the complete list&lt;br /&gt;
        pathCoordinates.AddRange(segmentCoordinates);&lt;br /&gt;
    }&lt;br /&gt;
    return pathCoordinates;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private static List&amp;lt;Coordinate&amp;gt; SplitSegment(double startX, double startY, double endX, double endY)&lt;br /&gt;
{&lt;br /&gt;
    const int MinimumDistanceBetweenPoints = 15;&lt;br /&gt;
&lt;br /&gt;
    double points = Math.Floor(GetDistance(startX, startY, endX, endY) / MinimumDistanceBetweenPoints);&lt;br /&gt;
    int PointsPerSegment = (int)Math.Max(points, 1);&lt;br /&gt;
&lt;br /&gt;
    double curX = startX;&lt;br /&gt;
    double curY = startY;&lt;br /&gt;
    double constXdif = ((endX - startX) / PointsPerSegment);&lt;br /&gt;
    double constYdif = ((endY - startY) / PointsPerSegment);&lt;br /&gt;
&lt;br /&gt;
    List&amp;lt;Coordinate&amp;gt; pathPointList = new List&amp;lt;Coordinate&amp;gt;(PointsPerSegment);&lt;br /&gt;
    for (int i = 0; i &amp;lt;= PointsPerSegment; i++)&lt;br /&gt;
    {&lt;br /&gt;
        if (i == 0)&lt;br /&gt;
        {&lt;br /&gt;
            curX = startX;&lt;br /&gt;
            curY = startY;&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            curX = curX + constXdif;&lt;br /&gt;
            curY = curY + constYdif;&lt;br /&gt;
        }&lt;br /&gt;
        Coordinate coordinate = new Coordinate(curX, curY);&lt;br /&gt;
        pathPointList.Add(coordinate);&lt;br /&gt;
    }&lt;br /&gt;
    return pathPointList;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void ShowElevation()&lt;br /&gt;
{&lt;br /&gt;
    if (!map.GetRasterLayers().Any())&lt;br /&gt;
    {&lt;br /&gt;
        MessageBox.Show(&amp;quot;Please add a DEM raster layer to the map.&amp;quot;);&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (!map.GetLineLayers().Any())&lt;br /&gt;
    {&lt;br /&gt;
        MessageBox.Show(&amp;quot;Please create a path by left clicking to add points and right-clicking to complete the path.&amp;quot;);&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    try&lt;br /&gt;
    {&lt;br /&gt;
        IMapRasterLayer rasterLayer = map.GetRasterLayers().First();&lt;br /&gt;
        IMapLineLayer pathLayer = map.GetLineLayers().First();&lt;br /&gt;
        var coords = GetCoordinatesFromLine(pathLayer);&lt;br /&gt;
&lt;br /&gt;
        double[] elevation = new double[coords.Count];&lt;br /&gt;
        for (int i = 0; i &amp;lt; coords.Count; i++)&lt;br /&gt;
        {&lt;br /&gt;
            elevation[i] = GetElevation(rasterLayer, coords[i]);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        ChartForm chart = new ChartForm();&lt;br /&gt;
        chart.Plot(elevation);&lt;br /&gt;
        chart.Show();&lt;br /&gt;
    }&lt;br /&gt;
    catch (Exception ex)&lt;br /&gt;
    {&lt;br /&gt;
        MessageBox.Show(&amp;quot;Error calculating elevation. The whole path should be inside the DEM area. &amp;quot; + ex.Message);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==== SimpleActionItem használata (menüelem) ====&lt;br /&gt;
&lt;br /&gt;
public void ButtonClick(object sender, EventArgs e)&lt;br /&gt;
{&lt;br /&gt;
    // We&amp;#039;re expecting this extension to only be run in a Windows Forms application.&lt;br /&gt;
    // We&amp;#039;ll depend on a few Windows Forms (Map) features like MouseDown, so we cast&lt;br /&gt;
    // the App.Map as a Map and store a reference to it.&lt;br /&gt;
    map = App.Map as Map;&lt;br /&gt;
&lt;br /&gt;
    // remove any existing path if needed.&lt;br /&gt;
    if (_PathLineLayer != null)&lt;br /&gt;
        map.Layers.Remove(_PathLineLayer);&lt;br /&gt;
&lt;br /&gt;
    _PathLineLayer = null;&lt;br /&gt;
    _LineFeature = null;&lt;br /&gt;
&lt;br /&gt;
    // Let the user know we are ready for them to set points by changing the cursor.&lt;br /&gt;
    map.Cursor = Cursors.Cross;&lt;br /&gt;
    map.MouseDown += map_MouseDown;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
==== Vektor réteg létrehozása ====&lt;br /&gt;
&lt;br /&gt;
private void map_MouseDown(object sender, MouseEventArgs e)&lt;br /&gt;
{&lt;br /&gt;
    if (e.Button == MouseButtons.Left)&lt;br /&gt;
    {&lt;br /&gt;
        // Encourage the user to select a raster, if they haven&amp;#039;t done so.&lt;br /&gt;
        if (!map.GetRasterLayers().Any())&lt;br /&gt;
        {&lt;br /&gt;
            map.AddRasterLayer();&lt;br /&gt;
            map.ZoomToMaxExtent();&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        StartOrContinueDrawingPath(e.Location);&lt;br /&gt;
        App.ProgressHandler.Progress(null, 0, &amp;quot;Point registered. Click again to add line segment. Right-click to finish.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    else if (e.Button == MouseButtons.Right)&lt;br /&gt;
    {&lt;br /&gt;
        EndDrawingPath();&lt;br /&gt;
        ShowElevation();&lt;br /&gt;
        App.ProgressHandler.Progress(null, 0, &amp;quot;Ready.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private IFeature AddLineFeatureSetToMap()&lt;br /&gt;
{&lt;br /&gt;
    FeatureSet lineFeatureSet = new FeatureSet(FeatureType.Line);&lt;br /&gt;
    lineFeatureSet.Projection = map.Projection;&lt;br /&gt;
&lt;br /&gt;
    // Initialize the featureSet attribute table by creating columns&lt;br /&gt;
    DataColumn column = new DataColumn(&amp;quot;ID&amp;quot;, typeof(short));&lt;br /&gt;
    lineFeatureSet.DataTable.Columns.Add(column);&lt;br /&gt;
    DataColumn column2 = new DataColumn(&amp;quot;Number of Points&amp;quot;, typeof(int));&lt;br /&gt;
    lineFeatureSet.DataTable.Columns.Add(column2);&lt;br /&gt;
    DataColumn column3 = new DataColumn(&amp;quot;Description&amp;quot;);&lt;br /&gt;
    lineFeatureSet.DataTable.Columns.Add(column3);&lt;br /&gt;
&lt;br /&gt;
    // Add the featureSet as map layer&lt;br /&gt;
    _PathLineLayer = (MapLineLayer)map.Layers.Add(lineFeatureSet);&lt;br /&gt;
    _PathLineLayer.Symbolizer = new LineSymbolizer(Color.Blue, 2);&lt;br /&gt;
    _PathLineLayer.LegendText = &amp;quot;Path Layer&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    var newList = new List&amp;lt;Coordinate&amp;gt;();&lt;br /&gt;
    LineString lineGeometry = new LineString(newList);&lt;br /&gt;
&lt;br /&gt;
    // AddFeature creates the point and a row in the DataTable&lt;br /&gt;
    return lineFeatureSet.AddFeature(lineGeometry);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void StartOrContinueDrawingPath(System.Drawing.Point mouseLocation)&lt;br /&gt;
{&lt;br /&gt;
    Coordinate coord = map.PixelToProj(mouseLocation);&lt;br /&gt;
&lt;br /&gt;
    if (_LineFeature == null)&lt;br /&gt;
    {&lt;br /&gt;
        // This is the first time we see a left click; create empty line feature.&lt;br /&gt;
        _LineFeature = AddLineFeatureSetToMap();&lt;br /&gt;
&lt;br /&gt;
        // Add first coordinate to the line feature.&lt;br /&gt;
        _LineFeature.Coordinates.Add(coord);&lt;br /&gt;
&lt;br /&gt;
        // Set the line feature attribute. This line may have multiple points,&lt;br /&gt;
        // but there is only one row in the attribute table for the entire feature (line).&lt;br /&gt;
        _LineFeature.DataRow[&amp;quot;ID&amp;quot;] = 0;&lt;br /&gt;
        _LineFeature.DataRow[&amp;quot;Description&amp;quot;] = &amp;quot;Path (line)&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        // Second or later click - add points to the existing feature&lt;br /&gt;
        _LineFeature.BasicGeometry.Coordinates.Add(coord);&lt;br /&gt;
        _LineFeature.ParentFeatureSet.InitializeVertices();&lt;br /&gt;
&lt;br /&gt;
        // Draw the line.&lt;br /&gt;
        map.ResetBuffer();&lt;br /&gt;
&lt;br /&gt;
        // Update the attribute table.&lt;br /&gt;
        _LineFeature.DataRow[&amp;quot;Number of Points&amp;quot;] = _LineFeature.BasicGeometry.Coordinates.Count;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
private void EndDrawingPath()&lt;br /&gt;
{&lt;br /&gt;
    // The path is complete.&lt;br /&gt;
    map.ResetBuffer();&lt;br /&gt;
    map.Cursor = Cursors.Arrow;&lt;br /&gt;
    map.MouseDown -= map_MouseDown;&lt;br /&gt;
    _LineFeature = null;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Roberto</name></author>
		
	</entry>
	<entry>
		<id>http://gis.inf.elte.hu/giswiki/index.php?title=Kezd%C5%91lap&amp;diff=212</id>
		<title>Kezdőlap</title>
		<link rel="alternate" type="text/html" href="http://gis.inf.elte.hu/giswiki/index.php?title=Kezd%C5%91lap&amp;diff=212"/>
		<updated>2016-06-01T13:05:46Z</updated>

		<summary type="html">&lt;p&gt;Roberto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Üdvözlet a GIS Wikin!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A GIS Wiki az [http://www.elte.hu Eötvös Loránd Tudományegyetem] [http://www.inf.elte.hu Informatikai Karának] egy belső információs oldala, amelynek célja alapvetően &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://hu.wikipedia.org/wiki/F%C3%B6ldrajzi_inform%C3%A1ci%C3%B3s_rendszer térinformatikai rendszerrekkel]&amp;lt;/span&amp;gt; kapcsolatos ismeretek gyűjtése.&lt;br /&gt;
&lt;br /&gt;
A szócikkek elsősorban a [http://people.inf.elte.hu/groberto/elte_ttaf/ Térinformatikai Alkalmazások fejlesztése] tárgy kapcsán gyűjtött hallgatói hozzájárások.&lt;br /&gt;
&lt;br /&gt;
Jelenleg elérhető szócikkek:&lt;br /&gt;
&lt;br /&gt;
* [[DotSpatial]]&lt;br /&gt;
* [[GeoTools]]&lt;br /&gt;
* [[GDAL/OGR]]&lt;br /&gt;
* [[MapServer]]&lt;br /&gt;
* [[PgRouting]]&lt;br /&gt;
* [[SharpMap]]&lt;br /&gt;
* [[SUMO]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Az oldalt [http://people.inf.elte.hu/groberto Giachetta Roberto] szerkeszti.&lt;/div&gt;</summary>
		<author><name>Roberto</name></author>
		
	</entry>
	<entry>
		<id>http://gis.inf.elte.hu/giswiki/index.php?title=SharpMap&amp;diff=211</id>
		<title>SharpMap</title>
		<link rel="alternate" type="text/html" href="http://gis.inf.elte.hu/giswiki/index.php?title=SharpMap&amp;diff=211"/>
		<updated>2016-06-01T10:53:23Z</updated>

		<summary type="html">&lt;p&gt;Roberto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &amp;#039;&amp;#039;&amp;#039;SharpMap&amp;#039;&amp;#039;&amp;#039; egy nyílt forráskódú térinformatikai programkönyvtár, amely alkalmas asztali és webes alkalmazások fejlesztésére egyaránt. Lehetőséget ad &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Geoinformatika térinformatikai adatok]&amp;lt;/span&amp;gt; különböző formátumokból történő betöltésére, és térképek megjelenítésére.  A programkönyvtár &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/C_Sharp C#]&amp;lt;/span&amp;gt;-ban íródott és a &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/.NET_keretrendszer .NET 4.0 keretrendszeren]&amp;lt;/span&amp;gt; alapszik. A programcsomag &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/GNU_Lesser_General_Public_License GNU LGPL]&amp;lt;/span&amp;gt; licensz alatt használható.&lt;br /&gt;
&lt;br /&gt;
== Felépítés ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SharpMap&amp;#039;&amp;#039;&amp;#039;: Központi modul, amely tartalmazza a térbeli elemek modelljét.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SharpMap.UI&amp;#039;&amp;#039;&amp;#039;: &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://en.wikipedia.org/wiki/Windows_Forms Windows Forms]&amp;lt;/span&amp;gt; felhasználói vezérlőket tartalmazó modul&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SharpMap.Web&amp;#039;&amp;#039;&amp;#039;: &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://en.wikipedia.org/wiki/ASP.NET ASP.NET]&amp;lt;/span&amp;gt; webes alkalmazások felhasználói felületéhez szükséges funkciókat tartalmazó modul.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SharpMap.Extensions&amp;#039;&amp;#039;&amp;#039;: további bővítményeket tartalmazó komponens. Olyan bővítményeket ad, amelyekkel lehetőség van &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Oracle_Database Oracle], [SpatiaLite SpatiaLite (SQLite)]&amp;lt;/span&amp;gt; illetve [[PostGIS PostGIS (PostgreSQL)]] adatbázis használatára. A modul továbbá biztosítja [[GDAL/OGR]] modulok használatára.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Telepítés ==&lt;br /&gt;
&lt;br /&gt;
A SharpMap programcsomag hivatalos weblapján http://sharpmap.codeplex.com elérhető a bináris változat, valamint a forráskód egyaránt. Binárisan a programcsomag &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://en.wikipedia.org/wiki/Assembly_(CLI) .NET szerelvények]&amp;lt;/span&amp;gt; formájában érhető el, amelyek behivatkozhatóak bármilyen .NET 4.0 (vagy frissebb) alkalmazásban.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A programkönyvtár elérhető &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://en.wikipedia.org/wiki/NuGet NuGet]&amp;lt;/span&amp;gt; csomagok formájában is:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| Modul&lt;br /&gt;
! scope=&amp;quot;col&amp;quot;| NuGet parancs&lt;br /&gt;
|-&lt;br /&gt;
| Központi modul&lt;br /&gt;
| &amp;lt;tt&amp;gt;Install-Package SharpMap&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Windows Forms felhasználói felület modul &lt;br /&gt;
| &amp;lt;tt&amp;gt;Install-Package SharpMap.UI&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| ASP.NET felhasználói felület modul &lt;br /&gt;
| &amp;lt;tt&amp;gt;Install-Package SharpMap.Web&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Bővítmények modulja&lt;br /&gt;
| &amp;lt;tt&amp;gt;Install-Package SharpMap.Extensions&amp;lt;/tt&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Használat&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SharpMap felvétele a referenciák közé: ===&lt;br /&gt;
&lt;br /&gt;
- Indítsuk el a VisualStudio-t&lt;br /&gt;
&lt;br /&gt;
- Hozzunk létre egy új projektet (pl. Windows Forms Application)&lt;br /&gt;
&lt;br /&gt;
- SharpMap osztályok felvétele a referenciák közé:&lt;br /&gt;
&lt;br /&gt;
- VisualStudio főmenüjében &amp;#039;&amp;#039;&amp;#039;Project -&amp;gt; Add reference&amp;#039;&amp;#039;&amp;#039;, itt a &amp;#039;&amp;#039;&amp;#039;Browse&amp;#039;&amp;#039;&amp;#039; fül alatt keressük meg azt a helyet, ahová a SharpMap zip fájlt kicsomagoltuk.&lt;br /&gt;
&lt;br /&gt;
- Válasszuk ki a számunkra szükséges dll fájlokat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Így már importálhatóak az osztályok, ha a kódból szeretnénk példányosítani őket. Viszont a designer még nem tartalmazza azokat a vezérlőket, amelyekre szükségünk lehet a megjelenítésnél.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vezérlők hozzáadása a Toolbox-hoz: ===&lt;br /&gt;
&lt;br /&gt;
- Adjunk hozzá egy új tabot a Toolbox-hoz. &amp;#039;&amp;#039;&amp;#039;Toolbox -&amp;gt; jobb klikk -&amp;gt; Add Tab&amp;#039;&amp;#039;&amp;#039;, az új tab neve legyen SharpMap&lt;br /&gt;
&lt;br /&gt;
- Ebbe a csoportba rakjuk bele a SharpMap vezérlőit a következő módon: &amp;#039;&amp;#039;&amp;#039;Jobb klikk a csoportra -&amp;gt; Choose Items… -&amp;gt; dll fájlok kiválasztása&amp;#039;&amp;#039;&amp;#039; (csak azokat a dll fájlokat tudjuk kiválasztani, amik tartalmaznak grafikus vezérlőket)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ezzel megvannak a legfontosabb kezdő lépések. A SharpMap importálható és elérhetőek a grafikus vezérlői is.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Megjegyzés:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;A SharpMap dll fájlok elérési útja megváltozik, akkor a VisualStudio nem fogja őket megtalálni. Ha ilyen történik, a Solution Explorer ablakban a projektünk Reference részét lenyitva kiválasztjuk a SharpMap adott állományát és a Properties-ben módosítjuk a path-ot a megváltozott elérési útra.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Funkciók&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Főbb funkciók ===&lt;br /&gt;
&lt;br /&gt;
A SharpMap főbb funkciói lehetőséget adnak:&lt;br /&gt;
&lt;br /&gt;
- GIS adatok kezelésére&lt;br /&gt;
&lt;br /&gt;
- Térbeli adatok betöltésére adatbázisból. Pl: Oracle, PostGIS, SpatiaLite&lt;br /&gt;
&lt;br /&gt;
- Térbeli adatok betöltése shape fájlból, WMS-ről.&lt;br /&gt;
&lt;br /&gt;
- Térképek renderelésére&lt;br /&gt;
&lt;br /&gt;
- Rétegek használata adatok megjelenítésére&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Vektor rétegek ===&lt;br /&gt;
&lt;br /&gt;
Vektor rétegeket a &amp;#039;&amp;#039;&amp;#039;SharpMap.Layers.VectorLayer&amp;#039;&amp;#039;&amp;#039; nevű objektummal tudunk létrehozni. A rétegen megjeleníteni kívánt térbeli adatokat pedig a &amp;#039;&amp;#039;&amp;#039;SharpMap.Data.Providers&amp;#039;&amp;#039;&amp;#039; nevű függvény segítségével tudjuk betölteni. Pl.: egy shape fájlból töltjük be az adatokat.&lt;br /&gt;
&lt;br /&gt;
 SharpMap.Layers.VectorLayer vlay = new SharpMap.Layers.VectorLayer(&amp;quot;States&amp;quot;);&lt;br /&gt;
 SharpMap.Data.Providers.ShapeFile(&amp;quot;path_to_data\\states_ugl.shp&amp;quot;, true);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== WMS rétegek ===&lt;br /&gt;
&lt;br /&gt;
Lehetőségünk van &amp;#039;&amp;#039;&amp;#039;WMS szerverről&amp;#039;&amp;#039;&amp;#039; betölteni az adatokat a rétegünkre. Ezt a &amp;#039;&amp;#039;&amp;#039;SharpMap.Layers.WmsLayer&amp;#039;&amp;#039;&amp;#039; használatával tudjuk megtenni.&lt;br /&gt;
&lt;br /&gt;
 SharpMap.Layers.WmsLayer wmsL = new SharpMap.Layers.WmsLayer(&amp;quot;US Cities&amp;quot;, &amp;quot;http://sampleserver1.arcgisonline.com/ArcGIS/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer/WMSServer&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
WMS rétegnél be kell még állítanunk a következő paramétereket.&lt;br /&gt;
&lt;br /&gt;
 //PNG formátum.&lt;br /&gt;
 wmsL.SetImageFormat(&amp;quot;image/png&amp;quot;);&lt;br /&gt;
 //Verziószám 1.1.0&lt;br /&gt;
 wmsL.Version = &amp;quot;1.1.0&amp;quot;;&lt;br /&gt;
 //Réteg hozzáadása&lt;br /&gt;
 wmsL.AddLayer(&amp;quot;Cities&amp;quot;);&lt;br /&gt;
 //Vetületi rendszer azonosítója (SRID)&lt;br /&gt;
 wmsL.SRID = 4326;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Térkép stílusok ===&lt;br /&gt;
&lt;br /&gt;
Ahogy fentebb láthattuk,lehetőségünk van vektor rétegek létrehozására. Ezekhez a rétegekhez hozzárendelhetünk stílusokat, amelyekkel a térképünket tudjuk szinezni. Tegyük fel, hogy már van egy vektor rétegünk &amp;#039;&amp;#039;&amp;#039;(vlay)&amp;#039;&amp;#039;&amp;#039;, amit egy shape fájlból töltünk be. A &amp;#039;&amp;#039;&amp;#039;SharpMap.Styles.VectorStyle&amp;#039;&amp;#039;&amp;#039;-al tudunk új stílusokat létrehozni. Az objektum &amp;#039;&amp;#039;&amp;#039;Fill&amp;#039;&amp;#039;&amp;#039; metódusával tudjuk kitölteni a színezni kívánt objektumot a térképen mégpedig a &amp;#039;&amp;#039;&amp;#039;System.Drawing.SolidBrush&amp;#039;&amp;#039;&amp;#039; segítségével.&lt;br /&gt;
&lt;br /&gt;
Egy lehetséges példa a megvalósításra, ahol a területet szinezzük:&lt;br /&gt;
&lt;br /&gt;
 SharpMap.Styles.VectorStyle landStyle = new SharpMap.Styles.VectorStyle();&lt;br /&gt;
 landStyle.Fill = new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(232, 232, 232));&lt;br /&gt;
&lt;br /&gt;
Egy másik példa a vizek szinezésére:&lt;br /&gt;
&lt;br /&gt;
 SharpMap.Styles.VectorStyle waterStyle = new SharpMap.Styles.VectorStyle();&lt;br /&gt;
 waterStyle.Fill = new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(198,198,255));&lt;br /&gt;
&lt;br /&gt;
A stílusokat lehetőségünk van egy szótár adatszerkezetben eltárolni&amp;#039;&amp;#039;&amp;#039;(Dictionary)&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
 Dictionary&amp;lt;string, SharpMap.Styles.IStyle&amp;gt; styles = new Dictionary&amp;lt;string,SharpMap.Styles.IStyle&amp;gt;();&lt;br /&gt;
 styles.Add(&amp;quot;land&amp;quot;, landStyle);&lt;br /&gt;
 styles.Add(&amp;quot;water&amp;quot;, waterStyle);&lt;br /&gt;
&lt;br /&gt;
Végül a stílusokat úgynevezett &amp;#039;&amp;#039;&amp;#039;Theme&amp;#039;&amp;#039;&amp;#039;-ként tudjuk hozzáadni az előzőleg elkészített vlay nevű vektor rétegünkhöz, ehhez a &amp;#039;&amp;#039;&amp;#039;SharpMap.Rendering.Thematics&amp;#039;&amp;#039;&amp;#039; névterében megtalálható &amp;#039;&amp;#039;&amp;#039;UniqueValuesTheme&amp;#039;&amp;#039;&amp;#039; metódust használjuk.&lt;br /&gt;
&lt;br /&gt;
 vlay.Theme = new SharpMap.Rendering.Thematics.UniqueValuesTheme&amp;lt;string&amp;gt;(&amp;quot;class&amp;quot;, styles, landStyle);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Egyedi vezérlők ===&lt;br /&gt;
&lt;br /&gt;
A SharpMap-ben megtalálható &amp;#039;&amp;#039;&amp;#039;MapBox&amp;#039;&amp;#039;&amp;#039; biztosít számunkra néhány egyedi eseményt azokon az eseményeken kívül amiket a &amp;#039;&amp;#039;&amp;#039;System.Windows.Forms.Control&amp;#039;&amp;#039;&amp;#039; névtérből származtat. Ezekre az egyedi eseményekre tudunk saját eseménykezelőket írni. A SharpMap honlapján megtalálható tutorial-ban kapunk egy alap osztályt, amely segítségünkre lehet egy saját Tool megírásához. Ezenfelül kapunk egy minta példát egy ilyen Tool megvalósítsára.&lt;br /&gt;
&lt;br /&gt;
A tutorial, az alap osztály, a minta Tool és a MapBox által nyújtott események/eseménykezelők elérhetőek itt: http://sharpmap.codeplex.com/wikipage?title=Tutorial%20-%20Example%205%3a%20Create%20a%20custom%20tool%20for%20the%20MapBox%20control&amp;amp;referringTitle=SharpMap%20Tutorial&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Megjegyzés:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;A fent említett funkciók elérhetőek a SharpMap hivatalos honlapján levő&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;SharpMap Tutorial&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;link alatt, itt: http://sharpmap.codeplex.com/wikipage?title=SharpMap%20Tutorial&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Egyszerű példaprogram&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
A shape fájlok megjelenítése minden GIS szoftver alapfunkciója. A SharpMap is biztosít egy osztályt ezek megjelenítésére. Ez a &amp;#039;&amp;#039;&amp;#039;MapBox&amp;#039;&amp;#039;&amp;#039; osztály, amelyet megtalálhatunk a SharpMap tabon, amelyet az előzőleg készítettünk. A megjelenítendő vektor térkép ebbe az osztályba fog legenerálódni és ez az osztály fogja megjeleníteni nekünk. Ennek a tartalma egyébként egy &amp;#039;&amp;#039;&amp;#039;PictureBox&amp;#039;&amp;#039;&amp;#039;-ban is megjeleníthető a az &amp;#039;&amp;#039;&amp;#039;Image&amp;#039;&amp;#039;&amp;#039; property használatával.&lt;br /&gt;
&lt;br /&gt;
Első lépésként hozzunk létre egy ”Demo1” nevű új projektet.&lt;br /&gt;
&lt;br /&gt;
A Design ablakban levő Formra tegyünk rá egy MapBox-ot:&lt;br /&gt;
&lt;br /&gt;
- Dupla klikk a Toolbox-ban lévő SharpMap tab MapBox controljára -&amp;gt; megjelenik a formon a mapBox1 nevű objektum&lt;br /&gt;
&lt;br /&gt;
A Property ablakban a BackColor tulajdonságot állítsuk fehérre.&lt;br /&gt;
&lt;br /&gt;
Ez az egyszerű program egy shape fájl megjelenítését fogja végezni. Ehhez annyit kell tennünk, hogy a Form1 konstruktorában fogjuk elvégezni a megjelenítést. A következő C# kódot másoljuk be a konstruktorba:&lt;br /&gt;
  &lt;br /&gt;
  //--&amp;gt; countriesLayer réteg elkészítése a shape fájlból&lt;br /&gt;
  SharpMap.Layers.VectorLayer countriesLayer = new SharpMap.Layers.VectorLayer(&amp;quot;megye&amp;quot;);&lt;br /&gt;
  countriesLayer.DataSource = new SharpMap.Data.Providers.ShapeFile(@&amp;quot;C:\Users\Bence\Documents\mo_shp\megye_region.shp&amp;quot;, true);&lt;br /&gt;
  mapBox1.Map.Layers.Add(countriesLayer);&lt;br /&gt;
  &lt;br /&gt;
  this.Text = countriesLayer.LayerName;&lt;br /&gt;
  &lt;br /&gt;
  //--&amp;gt; réteg stílus paramétereinek beállítása&lt;br /&gt;
  countriesLayer.Style.Fill = Brushes.LightBlue;&lt;br /&gt;
  countriesLayer.Style.EnableOutline = true;&lt;br /&gt;
  countriesLayer.Style.Outline = Pens.DarkBlue;&lt;br /&gt;
  &lt;br /&gt;
  mapBox1.Map.ZoomToExtents();&lt;br /&gt;
  RefreshMap();&lt;br /&gt;
&lt;br /&gt;
Nézzük meg mit jelentenek az egyes sorok a kódban.&lt;br /&gt;
&lt;br /&gt;
Hozzuk létre a countriesLayer nevű &amp;#039;&amp;#039;&amp;#039;SharpMap.Layers&amp;#039;&amp;#039;&amp;#039; objektumot, amely &amp;#039;&amp;#039;&amp;#039;VectorLayer&amp;#039;&amp;#039;&amp;#039; lesz, „megye” névvel. Ezenkívül meg kell adnunk a rétegünk forrását, amely sokféle lehet, jelen esetben egy shape fájl. Argumentumként adjuk meg a megjeleníteni kívánt fájl nevét és elérési útját. Végül adjuk hozzá a réteget a &amp;#039;&amp;#039;&amp;#039;_sharMap.Layers&amp;#039;&amp;#039;&amp;#039; kollekcióhoz.&lt;br /&gt;
&lt;br /&gt;
  //--&amp;gt; countriesLayer réteg elkészítése a shape fájlból&lt;br /&gt;
  SharpMap.Layers.VectorLayer countriesLayer = new SharpMap.Layers.VectorLayer(&amp;quot;megye&amp;quot;);&lt;br /&gt;
  countriesLayer.DataSource = new SharpMap.Data.Providers.ShapeFile(@&amp;quot;C:\Users\Bence\Documents\mo_shp\megye_region.shp&amp;quot;, true);&lt;br /&gt;
  mapBox1.Map.Layers.Add(countriesLayer);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Megjegyzés:&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;Data providers paraméterlistáján az első paraméter egy string, ami a fájl elérhetőségeit tartalmazza. A második paraméter, ami boolean típusú arra utal, hogy van-e térbeli indexelés vagy sem. Ha False, akkor nincs, de ebben az esetben, nagy adatállományokra lassúvá válhat a megjelenítés. True esetében lesz térbeli indexelés, ami az első megjelenítéskor egy kis időt vesz igénybe, viszont a további megjelenítéskor gyorsabb lesz a folyamat.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A Form1 fejlécében is jelenítsük meg ezt a nevet&lt;br /&gt;
&lt;br /&gt;
  this.Text = countriesLayer.LayerName;&lt;br /&gt;
&lt;br /&gt;
Következő kódsorok a megjelenési stílusra vonatkozó paraméterek.&lt;br /&gt;
&lt;br /&gt;
  //--&amp;gt; réteg stílus paramétereinek beállítása&lt;br /&gt;
  countriesLayer.Style.Fill = Brushes.LightBlue;&lt;br /&gt;
  countriesLayer.Style.EnableOutline = true;&lt;br /&gt;
  countriesLayer.Style.Outline = Pens.DarkBlue;&lt;br /&gt;
&lt;br /&gt;
Végül be kell állítanunk a viewport sarkait a térképünk térbeli kiterjedésének megfelelő értékre. Erre külön eljárása van a mapBox1.Map-nek. A mapBox1 frissítésével jelenik meg a tényleges térkép.&lt;br /&gt;
&lt;br /&gt;
  mapBox1.Map.ZoomToExtents();&lt;br /&gt;
  RefreshMap();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Egyszerű példaprogram: Térkép mozgatás&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
Ebben a programban az előző példát fejlesztjük tovább. A térképet kicsinyítjük, nagyítjuk és mozgatjuk. A mozgatásokat a Formra elhelyezett gombok segítségével fogjuk irányítani. Négy funkciót fogunk megvalósítani: &amp;#039;&amp;#039;&amp;#039;Zoom in&amp;#039;&amp;#039;&amp;#039; (nagyítás), &amp;#039;&amp;#039;&amp;#039;Zoom out&amp;#039;&amp;#039;&amp;#039; (kicsinyítés), &amp;#039;&amp;#039;&amp;#039;Zoom Full&amp;#039;&amp;#039;&amp;#039; (zoom out a teljes térképi tartalomra) és Pan (a kurzor klikkelés helyére teszi a viewport középpontját.&lt;br /&gt;
&lt;br /&gt;
A program C# kódja:&lt;br /&gt;
&lt;br /&gt;
 using System;&lt;br /&gt;
 using System.Collections.Generic;&lt;br /&gt;
 using System.ComponentModel;&lt;br /&gt;
 using System.Data;&lt;br /&gt;
 using System.Drawing;&lt;br /&gt;
 using System.Linq;&lt;br /&gt;
 using System.Text;&lt;br /&gt;
 using System.Threading.Tasks;&lt;br /&gt;
 using System.Windows.Forms;&lt;br /&gt;
 &lt;br /&gt;
 namespace Demo1&lt;br /&gt;
 {&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        SharpMap.Map _sharpMap;&lt;br /&gt;
        //--&amp;gt; nagyítási érték beállítása&lt;br /&gt;
        const float ZOOM_FACTOR = 0.3f;&lt;br /&gt;
        //--&amp;gt; a vector réteg neve és a forrásfájl elérési útja&lt;br /&gt;
        const string DATA_NAME = &amp;quot;megye&amp;quot;;&lt;br /&gt;
        const string DATA_PATH = @&amp;quot;C:\Users\Bence\Documents\mo_shp\megye_region.shp&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
 &lt;br /&gt;
            //--&amp;gt; térkép inicializálása&lt;br /&gt;
            _sharpMap = new SharpMap.Map(new Size(600, 300));&lt;br /&gt;
 &lt;br /&gt;
            //--&amp;gt; countriesLayer réteg elkészítése a shape fájlból&lt;br /&gt;
            SharpMap.Layers.VectorLayer countriesLayer = new SharpMap.Layers.VectorLayer(DATA_NAME);&lt;br /&gt;
            countriesLayer.DataSource = new SharpMap.Data.Providers.ShapeFile(DATA_PATH, true);&lt;br /&gt;
 &lt;br /&gt;
            _sharpMap.Layers.Add(countriesLayer);&lt;br /&gt;
            &lt;br /&gt;
            //--&amp;gt; réteg stílus paramétereinek beállítása&lt;br /&gt;
            countriesLayer.Style.Fill = Brushes.LightBlue;&lt;br /&gt;
            countriesLayer.Style.EnableOutline = true;&lt;br /&gt;
            countriesLayer.Style.Outline = Pens.DarkBlue;&lt;br /&gt;
            this.Text = countriesLayer.LayerName;&lt;br /&gt;
 &lt;br /&gt;
            _sharpMap.ZoomToExtents();&lt;br /&gt;
             &lt;br /&gt;
            RefreshMap();&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        private void RefreshMap()&lt;br /&gt;
        {&lt;br /&gt;
            //--&amp;gt; Térkép generálása a SharpMap segítségével&lt;br /&gt;
            pictureBox1.Image = _sharpMap.GetMap();&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        private void ZoomIn_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            //--&amp;gt; Nagyítás a Zoom érték megváltoztatásával&lt;br /&gt;
            _sharpMap.Zoom -= _sharpMap.Zoom * ZOOM_FACTOR;&lt;br /&gt;
            RefreshMap();&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        private void ZoomOut_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            //--&amp;gt; Kicsinyítés a Zoom érték megváltoztatásával&lt;br /&gt;
            _sharpMap.Zoom += _sharpMap.Zoom * ZOOM_FACTOR;&lt;br /&gt;
            RefreshMap();&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        private void ZoomFull_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            //--&amp;gt; Eredit térképméret visszaállítása&lt;br /&gt;
            _sharpMap.ZoomToExtents();&lt;br /&gt;
            RefreshMap();&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        private void pictureBox1_Click(object sender, MouseEventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            //--&amp;gt; Kurzor koordinátájának konvertálása&lt;br /&gt;
            GeoAPI.Geometries.Coordinate p = _sharpMap.ImageToWorld(e.Location);&lt;br /&gt;
            //--&amp;gt; térkép pozicionálása&lt;br /&gt;
            _sharpMap.Center.X = p.X;&lt;br /&gt;
            _sharpMap.Center.Y = p.Y;&lt;br /&gt;
            RefreshMap();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
A Zoom In, Zoom out, Zoom Full feliratú gombokra klikkelve tudjuk változtatni a kép nagyítását. Ezek eseménykezelőjébe kerültek bele a zoom műveletek. Például a Zoom In gombra klikkelve azonnal megtörténik a nagyítás, mégpedig úgy, hogy a kép közepe változatlanul a viewport közepére esik. A kurzor bármely pozíciójában történő klikkelés a viewport elmozdulását jelenti úgy, hogy a klikkelés térképi helye lesz a viewport közepe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Egyszerű példaprogram: Térkép mozgatás webes alkalmazásban&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
Az előző példaprogramhoz nagyon hasonló webes térkép alkalmazás van megvalósítva &amp;#039;&amp;#039;&amp;#039;ASP.NET 2.0&amp;#039;&amp;#039;&amp;#039; és &amp;#039;&amp;#039;&amp;#039;SharpMap&amp;#039;&amp;#039;&amp;#039; használatával.&lt;br /&gt;
&lt;br /&gt;
A leírás, a kódrészletek és a teljes kód letölthető ezen a linken: http://www.codeproject.com/Articles/12457/Creating-an-Interactive-Map-in-ASP-NET-Using-S&lt;br /&gt;
&lt;br /&gt;
=Külső hivatkozások=&lt;br /&gt;
* [http://sharpmap.codeplex.com/ A SharpMap hivatalos honlapja]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Hivatkozások&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;SharpMap hivatalos honlap: http://sharpmap.codeplex.com/&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;SharpMap további Tutorialok: http://sharpmap.codeplex.com/wikipage?title=SharpMap%20Tutorial&amp;amp;referringTitle=Documentation&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;SharpMap leírás további példaprogramokkal (VisualBasic, C#): http://tarsadalominformatika.elte.hu/tananyagok/opensourcewin/index.html&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;SharpMap Tutorial (C#): http://spatialhorizons.com/2007/10/14/using-sharpmap-1/&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;SharpMap Tutorial (ASP.NET 2.0): http://www.codeproject.com/Articles/12457/Creating-an-Interactive-Map-in-ASP-NET-Using-S&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Roberto</name></author>
		
	</entry>
	<entry>
		<id>http://gis.inf.elte.hu/giswiki/index.php?title=SUMO&amp;diff=202</id>
		<title>SUMO</title>
		<link rel="alternate" type="text/html" href="http://gis.inf.elte.hu/giswiki/index.php?title=SUMO&amp;diff=202"/>
		<updated>2016-05-23T08:41:15Z</updated>

		<summary type="html">&lt;p&gt;Roberto: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &amp;#039;&amp;#039;&amp;#039;SUMO&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;Simulation of Urban MObility&amp;#039;&amp;#039;&amp;#039;) egy közúti, tömegközlekedési és vasúti &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://en.wikipedia.org/wiki/Microsimulation mikroszimulációs]&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Ny%C3%ADlt_forr%C3%A1sk%C3%B3d%C3%BA_szoftver nyílt forráskódú szoftver]&amp;lt;/span&amp;gt;. Felhasználását tekintve alkalmas kereszteződések, lokális úthálózatok, lámpabeállítások, menetrendek tervezésének támogatásához, illetve teszteléséhez. Lehetőséget nyújt úgynevezett online szimulációhoz, vagyis a szimuláció közben az adatok változtatására, úgymint úthálózat (pl. baleset előidézése), forgalmi lámpák (pl. napszaktól függő lámaváltás, detektorok használata). A szoftverben a mikro modellt &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Szoftver_%C3%A1gens ágens alapú szimuláció]&amp;lt;/span&amp;gt; valósítja meg, amely járműszinten szimulálja a forgalmat.&lt;br /&gt;
&lt;br /&gt;
==Története==&lt;br /&gt;
&lt;br /&gt;
A SUMO-t 2000-ben kezték el írni, ​GPLv3-el. Az első verzió 2009-ben készült el. Jelenleg 0.13.0-ás verzió a legújabb. Célja a közúti forgalom kutatások támogatása.&lt;br /&gt;
&lt;br /&gt;
==Telepítés==&lt;br /&gt;
&lt;br /&gt;
Elérhető Windowsra, Suse Linuxra, Fedorára, Scientific-re és Ubuntura is. Nyílt forráskódú jellegéből következik, hogy buildelhető tetszőleges környezetben, természetesen ehhez szükséges &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Qt Qt]&amp;lt;/span&amp;gt; és &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Python_(programoz%C3%A1si_nyelv) Python]&amp;lt;/span&amp;gt; támogatás.&lt;br /&gt;
&lt;br /&gt;
==Technológiai Leírása==&lt;br /&gt;
&lt;br /&gt;
A SUMO alapvetően &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://en.wikipedia.org/wiki/C%2B%2B C++]&amp;lt;/span&amp;gt;-ban írt szoftver, a hozzá tartozó kiegészítő eszközök &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Python_(programoz%C3%A1si_nyelv) Python]&amp;lt;/span&amp;gt;ban írt szkriptek. A grafikus felülete &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://hu.wikipedia.org/wiki/Qt Qt]&amp;lt;/span&amp;gt;-ban íródott. A szimulációhoz használt matematikai modell jól elkülönített modulban helyezkedik el.&lt;br /&gt;
&lt;br /&gt;
===Matematikai háttér===&lt;br /&gt;
&lt;br /&gt;
A SUMO-ban beállítható minden jármű típushoz tartozó követési modell. A követési modell azt határozza meg, hogy egy jármű milyen sebességgel haladjon.&lt;br /&gt;
&lt;br /&gt;
====Wiedemann====&lt;br /&gt;
Ennek a modellnek két változata is létezik, a 74-es és a 99-es. Előbbi kevesebb paraméterrel dolgozik, második viszont 10 paraméterrel, így különböző sebesség tartományokban más-más viselkedéssel ruházhatjuk fel a járműveket, ezzel alkalmassá válik országúti forgalom modellezésére, de a városi forgalom esetén a túl sok paraméter miatt nehézkes a paraméterezése.&lt;br /&gt;
A modell egyszerű nulladrendű képlettel adja meg a kívánt követési távolságot. Ennek kiértékelése során kell eldönteni, hogy az adott jármű, hogyan változtassa a sebességét. Erre is ad kiszámítási módot a modell.&lt;br /&gt;
&lt;br /&gt;
A modell egyetlen lineáris összefüggéssel leírható: bx= (bx_add+bx_Multi*z)* √v, a hol a bx a biztonságos távolság, v a sebesség, bx_add a biztonságos távolsági komponens, z paraméter 0 és 1 közti érték, általában 0,5 , 0,15-ös standard eltérés mellett.&lt;br /&gt;
Tehát az első lökhárítók közti távolság az ax+bx, ax pedig a nyugalmi távolságuk, azaz ax = L(n-1) +AXadd. Ahol az AXadd kalibrációs paraméter.&lt;br /&gt;
A bx_add és a bx_multi becsülhetők a kapacitás mértékéből.&lt;br /&gt;
A modell a szükséges követési távolságot határozza meg, tehát a sebesség meghatározása további számításokat igényel.&lt;br /&gt;
&lt;br /&gt;
Bizonyos implementációkban az additív kalibrációs paramétert elhagyják, a SUMO-ban, pedig fixen 1. Ha determinisztikus modellre van szükség, akkor a z=1 választást használják.&lt;br /&gt;
Az első lökhárítók közti távolság az ax+bx, ax pedig a nyugalmi távolságuk, azaz ax = L(n-1) +AXadd. Ahol az AXadd kalibrációs paraméter, az L(n-1) pedig a követett jármű hossza.&lt;br /&gt;
A bx_add és a bx_multi becsülhetők a kapacitás mértékéből. Ennek módja a kalibráció fejezetben található.&lt;br /&gt;
A bx értéke alapján el kell dönteni, hogy hogyan változzon a jármű sebessége, ehhez meg kell határozni jelenlegi távolság alapján. Ennek a döntésnek a meghozatalához a további mutató számokat kell meghatározni, ezek alapján lehet eldönteni, hogy követésre, közelítésre, vészfékezésre, vagy intenzív gyorsításra van szükség. Ilyen felosztásra látható példa az alábbi diagramon. Vegyük észre,hogy az ezen lévő értéken nem a számunkra rendelkezésre álló értékek, azokat ki kellene számítani. Implementációkor viszont inkább használt stratégia ezen elv visszavezetése a rendelkezésre álló értékekre.&lt;br /&gt;
&lt;br /&gt;
A modell tovább fejlesztett változatának (Wiedemann 99) 10 paramétere van. Ez inkább az autópályák forgalmára van kifejlesztve.&lt;br /&gt;
&lt;br /&gt;
====Krauss====&lt;br /&gt;
&lt;br /&gt;
A SUMO a Krauss modelt használja alapértelmezésként. Ez a modell a biztonságos sebességet adja meg. Itt a modell közvetlenül megadja az új sebességet. Előnye, hogy jól paraméterezhető, akár különböző forgalmi szituációkra különböző viselkedést is definiálhatunk. Sőt a SUMO képes különböző járművek esetén is különböző paraméterezést használni. Ezzel szimulálva az agrasszív és a &amp;quot;szőke&amp;quot; vezetőket is. Az útviszonyok is ezen paraméterek beállításával történhet. Bár a SUMO ezt nem támogatja közvetlenül.&lt;br /&gt;
&lt;br /&gt;
===Modul szerkezet===&lt;br /&gt;
&lt;br /&gt;
A modul szerkezet kialakításánál a funkciók elkülönítését tartották szemelőtt. A nyílt forráskód miatt ez igen hasznos. Két szemszögből is, az egyik, hogy az egyikben vétett hiba a másikban nem jelentkezik. A másik, hogy így szakértői területek szerint is tagolódik. Érdekessége viszont, hogy a különböző modulok nem minden esetben vannak össze integrálva.&lt;br /&gt;
&lt;br /&gt;
A szoftver rendszer az alábbi modulokból áll:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;DFRouter:&amp;#039;&amp;#039;&amp;#039; Utvonal készítés ciklussal indukálva&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Daurouter:&amp;#039;&amp;#039;&amp;#039; Legrövidebb út választása&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Foreign:&amp;#039;&amp;#039;&amp;#039; külső packagek interfészelése, úgy mint R fa, openGl stb…&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;GUI:&amp;#039;&amp;#039;&amp;#039; graphical itnerface in Qt&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;GUInetLader:&amp;#039;&amp;#039;&amp;#039; Hálózat megjeleníítése&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;GUISim:&amp;#039;&amp;#039;&amp;#039; Szimuláció megjelenítése&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;jtrrouter:&amp;#039;&amp;#039;&amp;#039; Útvonal készítés junction swichelési módszerrel&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;microsim:&amp;#039;&amp;#039;&amp;#039; A simuláció futatása, ez tartalmazza pl a járművek jármű típusok definícióját&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;netbuild:&amp;#039;&amp;#039;&amp;#039; Az útvonal hálózat gráfjának elkészítése, és módosítása szimuláció könnyű futatásához, pl hurokélek transzformálása&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;netgen:&amp;#039;&amp;#039;&amp;#039; absztrakt network&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;netimport:&amp;#039;&amp;#039;&amp;#039; Úthálózat importálása&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;od2trips:&amp;#039;&amp;#039;&amp;#039; OD mátrixból generál utakat&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;polyconvert:&amp;#039;&amp;#039;&amp;#039; A „tájat” adja hozzá a hálózathoz, tehát a térkép szinezését végzi&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;router:&amp;#039;&amp;#039;&amp;#039; alapértelmezett útválasztóó modell&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;utils:&amp;#039;&amp;#039;&amp;#039; globális segéd osztályok gyüjteménye&lt;br /&gt;
&lt;br /&gt;
===Projekt szervezés===&lt;br /&gt;
&lt;br /&gt;
A SUMO egy open source szoftver, tehát nyilt repozitorival kell, hogy rendelkezzen. A ticketing rendszere is nyílt. A projekt szervezéséhez a Trac nevű eszközt használják, ez wikioldalt, ticketing rendszert és verzió kontrolt is tartalmaz.&lt;br /&gt;
&lt;br /&gt;
==Használata==&lt;br /&gt;
&lt;br /&gt;
===Kiegészítő Eszközök===&lt;br /&gt;
&lt;br /&gt;
====Hálózat generátor====&lt;br /&gt;
&lt;br /&gt;
A hálózat építést a netconvert nevű program végzi.&lt;br /&gt;
Három inputra van szüksége: &lt;br /&gt;
&lt;br /&gt;
* Csúcsokat leíró xml file, pl.:  hello.nod.xml&lt;br /&gt;
  &amp;lt;nodes&amp;gt;&lt;br /&gt;
    &amp;lt;node id=&amp;quot;1&amp;quot; x=&amp;quot;-500.0&amp;quot; y=&amp;quot;0.0&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;node id=&amp;quot;2&amp;quot; x=&amp;quot;+500.0&amp;quot; y=&amp;quot;0.0&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;node id=&amp;quot;3&amp;quot; x=&amp;quot;+501.0&amp;quot; y=&amp;quot;0.0&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/nodes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Utakat leíró xml file, pl: hello.edg.xml&lt;br /&gt;
  &amp;lt;edges&amp;gt;&lt;br /&gt;
    &amp;lt;edge from=&amp;quot;1&amp;quot; id=&amp;quot;1to2&amp;quot; to=&amp;quot;2&amp;quot; type=”a” /&amp;gt;&lt;br /&gt;
    &amp;lt;edge from=&amp;quot;2&amp;quot; id=&amp;quot;out&amp;quot; to=&amp;quot;3&amp;quot;  type=”b”/&amp;gt;&lt;br /&gt;
  &amp;lt;/edges&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* kereszteződéseket leíró xml file&lt;br /&gt;
  &amp;lt;edges&amp;gt;&lt;br /&gt;
    &amp;lt;edge from=&amp;quot;1&amp;quot; id=&amp;quot;1to2&amp;quot; to=&amp;quot;2&amp;quot; type=”a” /&amp;gt;&lt;br /&gt;
    &amp;lt;edge from=&amp;quot;2&amp;quot; id=&amp;quot;out&amp;quot; to=&amp;quot;3&amp;quot;  type=”b”/&amp;gt;&lt;br /&gt;
  &amp;lt;/edges&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* kereszteződéseket leíró xml file&lt;br /&gt;
  &amp;lt;types&amp;gt;&lt;br /&gt;
   &amp;lt;type id=&amp;quot;a&amp;quot; priority=&amp;quot;3&amp;quot; numLanes=&amp;quot;3&amp;quot; speed=&amp;quot;13.889&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;type id=&amp;quot;b&amp;quot; priority=&amp;quot;3&amp;quot; numLanes=&amp;quot;2&amp;quot; speed=&amp;quot;13.889&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;type id=&amp;quot;c&amp;quot; priority=&amp;quot;2&amp;quot; numLanes=&amp;quot;3&amp;quot; speed=&amp;quot;13.889&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/types&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Az utakhoz rendelhetünk prioritást, és funkcionalitást. Az utat sávokra oszthatjuk. Pontosabban minden élhez kell, hogy tartozzon egy vagy több sáv.&lt;br /&gt;
&lt;br /&gt;
Alább látható egy példa a netconvert használatára, ennek az outputja a generált hálózat, példánkban a hello.net.xml&lt;br /&gt;
   netconvert --node-files=hello.nod.xml –type-files=hello.typ.xml --edge-files=hello.edg.xml --output-file=hello.net.xml&lt;br /&gt;
&lt;br /&gt;
A netconvert nem csak általunk definiált hálózat készítésére alkalmas. Ez igen hasznos funkció, mert általában egy létező topológiát akarunk használni. Azaz importálhatunk hálózatot más formátumokból. Például open streat map export fájlt a következő képen használhatjuk SUMO hálózat építésére&lt;br /&gt;
  netconvert --osm-files asd.osm -o asd.net.xml&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Táj színezés====&lt;br /&gt;
&lt;br /&gt;
Kevésbé fontos, de látványos eszköz a polyconverter, mellyel az importált térkép színezését is hozzá adhatjuk a hálózatunkhoz.&lt;br /&gt;
Alább láthatunk példát a használatára&lt;br /&gt;
  polyconvert --net-file bartok.net.xml --osm-files map.osm --type-file typemap.xml -o bartok.poly.xml&lt;br /&gt;
&lt;br /&gt;
====Forgalom Generáslás====&lt;br /&gt;
&lt;br /&gt;
Ha megvan a hálózatunk (net), akkor sokféleképpen generálhatunk forgalmat az adott hálózatra. Ez a következő képen történhet:&lt;br /&gt;
* útvonalak megadásával (trip definitions) : megadjuk a kezdeti és a végcsúcsot, és az indulási időt.  A  DUAROUTER képes az útvonalakat utakká konvertálni. Használata&lt;br /&gt;
 duarouter --flows=&amp;lt;FLOW_DEFS&amp;gt; --net=&amp;lt;SUMO_NET&amp;gt; --output-file=MySUMORoutes.rou.xml&lt;br /&gt;
* forgalom folyam megadásával (flow definitions): ugyanolyan mint az útvonal megadása (xml file), csak itt A-ból B-be egy jármű halmaz halad.&lt;br /&gt;
* véletlenszerű (Randomization): ez a leggyorsabb módja, ha forgalmat akarunk generálni, de természetesen nagy valószínűtlenséget okozhat.  Tools/Trip#randomTrips.py&lt;br /&gt;
* OD mátrixokkal: (OD-matrices) : gyakran elérhetőek forgalmi hatóságoktól. Az OD mátrix egy i,j eleme azt reprezentálja hogy jármű megy i. zónából j.zónába. A mátrixot át kell konvertálni útvonalakká a OD2TRIPS modullal. Használata:&lt;br /&gt;
 od2trips -n &amp;lt;NET&amp;gt; -d &amp;lt;MATRIX&amp;gt; -o &amp;lt;TRIP_DEFS&amp;gt;&lt;br /&gt;
 duarouter --trip-files=&amp;lt;TRIP_DEFS&amp;gt; --net-file=&amp;lt;SUMO_NET&amp;gt;   --output-file=MySUMORoutes.rou.xml&lt;br /&gt;
* forgalmi folyam és kanyarodási szándék a kereszteződésekben (JTRROUTER eszközzel): megadjuk a járművek haladási szándékát, és hogy merre kanyarodjanak minden kereszteződésnél.&lt;br /&gt;
* Detektorok, mérési pontok használatával (detector data, observation points) : &lt;br /&gt;
Indukciós hurok és egyéb eszközökkel gyakran vizsgálják a forgalmat. A  DFROUTER modul képes ezekből az adatokból forgalmat generálni. Azaz olyan forgalmat, amely illeszkedik a mért adatokra. Ez önmagában a gyakorlatban, csak igen kis területre ad valóság hű eredményt. Használata:&lt;br /&gt;
 dfrouter --net-file &amp;lt;asdad&amp;gt; --detector-files &amp;lt;DETECTOR_FILE&amp;gt;&lt;br /&gt;
Ahol a DETECTOR_FILE egy xml fájl, ami leírja a detektorokkal mért értékeket.&lt;br /&gt;
* Kézzel: mi generáljuk le a forgalmat.&lt;br /&gt;
* Népesség statisztikák alapján:  Az ACTIVITYGEN modul képes népességi statisztikákból forgalmat generálni. Ehhez utca szintű statisztikák kellenek. Itt olyanra kell gondolni, hogy egy utcában hány háztartás van és hány munkahely, az emberek átlagosan milyen messze és mikor járnak dolgozni, stb. Tehát ilyen hipotézisek szerint dolgozik, az emberek dolgozni, vásárolni járnak, gyereket visznek az iskolába stb. Emellett meg kell adni a városból kimenő és a városba (ezt többnyire városra vagy kerületre értelmes) érkező forgalmat. Ezekhez városkapukat is definiálnunk kell, ezeken keresztül megy ki és érkezik be a forgalom.&lt;br /&gt;
Használata:&lt;br /&gt;
 activitygen --net-file &amp;lt;NET&amp;gt; --stat-file &amp;lt;STATISTICS&amp;gt; --output-file &amp;lt;ROUTES&amp;gt; --random&lt;br /&gt;
&lt;br /&gt;
===Szimuláció===&lt;br /&gt;
&lt;br /&gt;
A szimuláció futtatásához meg kell adnunk egy konfigurációs fájlt. Ez a fájl írja le a szimuláció paramétereit. Ebben kell meghivatkozni a további input fájlokat, például az útvonal választási fájlt.&lt;br /&gt;
&lt;br /&gt;
Az útvonal választási fájl tartalmazza a jármű típusokat is például:&lt;br /&gt;
  &amp;lt;routes&amp;gt;&lt;br /&gt;
    &amp;lt;vType accel=&amp;quot;1.0&amp;quot; decel=&amp;quot;5.0&amp;quot; id=&amp;quot;Car&amp;quot; length=&amp;quot;2.0&amp;quot; maxSpeed=&amp;quot;100.0&amp;quot; sigma=&amp;quot;0.0&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;route id=&amp;quot;route0&amp;quot; edges=&amp;quot;1to2 out&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;vehicle depart=&amp;quot;1&amp;quot; id=&amp;quot;veh0&amp;quot; route=&amp;quot;route0&amp;quot; type=&amp;quot;Car&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/routes&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Itt megadhatjuk a kategória méretét, gyorsulási és fékezési kapacitását. Illetve a hozzá tartozó jármű követési modellt és annak paramétereit. Lehetőség van a grafikus megjelenítés módosítására is. Láthatjuk, hogy egy jármű valójában egy jármű típus és a hozzá tartozó útvonal. Természetesen további paraméterek adhatók meg neki, például a kezdeti sebesség.&lt;br /&gt;
&lt;br /&gt;
Azt már bemutattuk, hogyan kell hálózatot generálni, tehát a legfontosabb fájlok a hálózat és az útvonal választás. Ezek elegendők a konfiguráció elkészítéséhez. Itt meg kell adni hány virtuális ütemnyit szeretnénk szimulálni. Illetve, hogy milyen típusú outputot várunk. Egy példa konfiguráció:&lt;br /&gt;
 &amp;lt;configuration&amp;gt;&lt;br /&gt;
    &amp;lt;input&amp;gt;&lt;br /&gt;
        &amp;lt;net-file value=&amp;quot;hello.net.xml&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;route-files value=&amp;quot;hello.rou.xml&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/input&amp;gt;&lt;br /&gt;
           &amp;lt;output&amp;gt;&lt;br /&gt;
  	…&lt;br /&gt;
           &amp;lt;/output&amp;gt;&lt;br /&gt;
    &amp;lt;time&amp;gt;&lt;br /&gt;
        &amp;lt;begin value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;end value=&amp;quot;10000&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/time&amp;gt;&lt;br /&gt;
 &amp;lt;/configuration&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ekkor lefuttathatjuk a szimulációt az alábbi parancssal&lt;br /&gt;
sumo -c &amp;lt;konfigurációs fájl&amp;gt;.sumocfg&lt;br /&gt;
Ha vizualizációt is szeretnénk akkor&lt;br /&gt;
sumo-gui -c &amp;lt;konfigurációs fájl&amp;gt;.sumocfg&lt;br /&gt;
&lt;br /&gt;
====Tömegközlekedés====&lt;br /&gt;
A SUMO képes tömegközlekedést is szimulálni a menetrend és megállók megadásával. Például a következő módon:&lt;br /&gt;
    &amp;lt;vtype id=&amp;quot;BUS&amp;quot; accel=&amp;quot;2.6&amp;quot; decel=&amp;quot;4.5&amp;quot; sigma=&amp;quot;0.5&amp;quot; length=&amp;quot;15&amp;quot; maxspeed=&amp;quot;70&amp;quot;&lt;br /&gt;
            color=&amp;quot;1,1,0&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;vehicle id=&amp;quot;0&amp;quot; type=&amp;quot;BUS&amp;quot; depart=&amp;quot;0&amp;quot; color=&amp;quot;1,1,0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;route edges=&amp;quot;2/0to2/1 2/1to1/1 1/1to1/2 1/2to0/2&lt;br /&gt;
             0/2to0/1 0/1to0/0 0/0to1/0 1/0to2/0 2/0to2/1&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;stop busStop=&amp;quot;busstop1&amp;quot; duration=&amp;quot;20&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;stop busStop=&amp;quot;busstop2&amp;quot; duration=&amp;quot;20&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;stop busStop=&amp;quot;busstop3&amp;quot; duration=&amp;quot;20&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;stop busStop=&amp;quot;busstop4&amp;quot; duration=&amp;quot;20&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/vehicle&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Kimenet====&lt;br /&gt;
&lt;br /&gt;
A szimulációt sokféle célból tehetjük, mindegyik más és más analizálási módszert követel meg. Ezért a SUMO többféle kimenet típust is támogat.&lt;br /&gt;
* [[VTK format]] : Minden jármű sebességét és pozíciójából készít fájlokat VTK formátumban.&lt;br /&gt;
* [[FCD]] Floating Car Data): Minden szimulációs ütemben, minden jármű neve, típusa, sebessége, és iránya pozíciója tárolódik.&lt;br /&gt;
* [[Detektoros mérés]] : Lehetőségünk van induktív hurokdetektorok és azonnali induktív hurokdetektorok elhelyezésére a hálózaton. Előbbi folyam adatokat is tud mérni, például a forgalom eloszlása időben.&lt;br /&gt;
* [[Jármű utazásokról információ]] : Az egyes járművek által kibocsátott káros anyag, vagy elhasznált üzemanyag adatait kaphatjuk meg.&lt;br /&gt;
* [[információk a szimuláció jelenlegi állásáról]]: ez nyílván online szimuláció esetén érdekes.&lt;br /&gt;
&lt;br /&gt;
===Grafikus Interfész===&lt;br /&gt;
&lt;br /&gt;
A SUMO grafikus interfésze független program a többi modultól, ő is csak a sumo parancsot hívja. Sajnos az xml szerkesztéstől sem óv meg, nem lehet benne konfigurációt szerkeszteni. Csak grafikusan adhatjuk meg a konfigurációs fájl nevét. Viszont alkalmas arra, hogy grafikus visszajelzést adjon a szimuláció aktuális állapotáról. A kirajzolása nem látványos, de könnyen értelmezhető. Az xmlben megadott színezéseket és jármű alakokat jól kezeli (ezek felül definiálhatók).  Továbbá képeket is elhelyezhetünk a vizualizációba a koordináták megadásával. Például műhold vagy légi felvételt tehetünk a szimuláció mögé.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Jelentős hibája, hogy mindig kirajzolja a teljes látható szimulációs területet, még akkor is ha a felbontás miatt nem is lehet látni a járműveket. Ez jelentős korlátot szab a SUMO-ban a vizualizált szimuláció futtatására.&lt;br /&gt;
&lt;br /&gt;
Lehetőség van a szimuláció szüneteltetésére is, illetve megadhatjuk a szimuláció sebességét is. A gui lehetőséget biztosít a forgalom szimuláció közbeni változtatására, például a dugó miatt az emberek későbbre halasztják a bevásárlást.&lt;br /&gt;
&lt;br /&gt;
A modul felépítése lehetővé teszi, új menüpontok könnyű felvételét.&lt;br /&gt;
&lt;br /&gt;
=Felhasználása=&lt;br /&gt;
&lt;br /&gt;
Széles körben használt út hálózat tervezéshez, menetrend készítéshez. Kedvelt ingyenes mivolta miatt akadémiai körökben.  A felhasználására jó példa többek közt a [http://turbotraffic.mak.com TurboTraffic]. Ahol saját GUI-t használnak hozzá, de a sumo szimulátort.&lt;br /&gt;
&lt;br /&gt;
=Kapcsolódó szócikkek=&lt;br /&gt;
* [[MATSim]]&lt;br /&gt;
&lt;br /&gt;
=Szakirodalom=&lt;br /&gt;
* Krajzewicz, Daniel, et al. [http://elib.dlr.de/6661/ &amp;quot;SUMO (Simulation of Urban MObility)-an open-source traffic simulation&amp;quot;], &amp;#039;&amp;#039;Proceedings of the 4th Middle East Symposium on Simulation and Modelling&amp;#039;&amp;#039; (MESM20002). 2002.&lt;br /&gt;
* Krajzewicz, Daniel. [http://link.springer.com/chapter/10.1007/978-1-4419-6142-6_7 &amp;quot;Traffic simulation with SUMO–simulation of urban mobility&amp;quot;], &amp;#039;&amp;#039;Fundamentals of traffic simulation&amp;#039;&amp;#039;. Springer New York, 2010. 269-293.&lt;br /&gt;
* Potári, Gábor, Vincellér, Zoltán , Ács, Zoltán. [http://icai.ektf.hu/icai2014/papers/ICAI.9.2014.2.41.pdf &amp;quot;A method for real-time adaptation of weather conditions within a trac simulation&amp;quot;], &amp;#039;&amp;#039;Proceedings of the 9th International Conference on Applied Informatics&amp;#039;&amp;#039; 2:41-47. 2014. &lt;br /&gt;
&lt;br /&gt;
=Külső hivatkozások=&lt;br /&gt;
* [http://sumo-sim.org/ A SUMO hivatalos honlapja]&lt;br /&gt;
* [http://sourceforge.net/projects/sumo/ A SUMO forráskódja]&lt;br /&gt;
* [http://www.dlr.de/ts/en/desktopdefault.aspx/tabid-9883/16931_read-41000/ DLR - Institute of Transportation Systems - SUMO]&lt;/div&gt;</summary>
		<author><name>Roberto</name></author>
		
	</entry>
	<entry>
		<id>http://gis.inf.elte.hu/giswiki/index.php?title=Kezd%C5%91lap&amp;diff=3</id>
		<title>Kezdőlap</title>
		<link rel="alternate" type="text/html" href="http://gis.inf.elte.hu/giswiki/index.php?title=Kezd%C5%91lap&amp;diff=3"/>
		<updated>2014-03-18T13:41:47Z</updated>

		<summary type="html">&lt;p&gt;Roberto: Kezdőlap első változata létrehozva.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Üdvözlet a GIS Wikin!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A GIS Wiki az [http://www.elte.hu Eötvös Loránd Tudományegyetem] [http://www.inf.elte.hu Informatikai Karának] egy belső információs oldala, amelynek célja alapvetően [http://hu.wikipedia.org/wiki/F%C3%B6ldrajzi_inform%C3%A1ci%C3%B3s_rendszer térinformatikai rendszerrekkel] kapcsolatos ismeretek gyűjtése.&lt;br /&gt;
&lt;br /&gt;
Az oldalt [http://people.inf.elte.hu/groberto Giachetta Roberto] szerkeszti.&lt;/div&gt;</summary>
		<author><name>Roberto</name></author>
		
	</entry>
	<entry>
		<id>http://gis.inf.elte.hu/giswiki/index.php?title=Main_Page&amp;diff=2</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://gis.inf.elte.hu/giswiki/index.php?title=Main_Page&amp;diff=2"/>
		<updated>2014-03-18T12:50:20Z</updated>

		<summary type="html">&lt;p&gt;Roberto: Changed main page.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Welcome to the GIS Wiki.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;GIS Wiki&amp;#039;&amp;#039; is an internal Wiki site of the [http://www.elte.hu Eötvös Loránd University (ELTE)], [http://www.inf.elte.hu Faculty of Informatics] with the primary aim of hosting topics related to [http://en.wikipedia.org/wiki/Geographic_information_system Geographic Information Systems].&lt;br /&gt;
&lt;br /&gt;
The administrator of the site is [mailto:groberto@inf.elte.hu Roberto Giachetta].&lt;/div&gt;</summary>
		<author><name>Roberto</name></author>
		
	</entry>
</feed>