Deprecated: Joomla\Input\Input implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in /home/adatpcom/public_html/libraries/vendor/joomla/input/src/Input.php on line 41

Deprecated: Return type of Joomla\Input\Input::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/adatpcom/public_html/libraries/vendor/joomla/input/src/Input.php on line 170

Deprecated: Joomla\CMS\Input\Input implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in /home/adatpcom/public_html/libraries/src/Input/Input.php on line 31

Deprecated: Joomla\CMS\Input\Cookie implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in /home/adatpcom/public_html/libraries/src/Input/Cookie.php on line 0

Deprecated: str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated in /home/adatpcom/public_html/libraries/src/Uri/Uri.php on line 141
QGIS - Vektoros vonalas réteg előállítása

Deprecated: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in /home/adatpcom/public_html/templates/shaper_helix3/html/modules.php on line 21
QGIS - Vektoros vonalas réteg előállítása

QGIS - Vektoros vonalas réteg előállítása

Számos cikksorozatunk, projektünk és beszélgetésünk mutatott az utóbbi időben abba az irányba, hogy a pontszerű téradat réteg létrehozása után (QGIS - Vektoros pontszerű réteg előállítása) írjunk arról is, hogy miként lehet vonalakat tartalmazó vektoros réteget létrehozni QGIS-ben. Ez önmagában is hasznos tudás, valamint ennek az ismeretnek a birtokában magabiztosan beszélhetünk majd a poligonokat tartalmazó vektoros réteg létrehozásáról, a domborzatmodell készítéséről és az ehhez szükséges szintvonalak vektorizálásáról. Végül, hogy a hasznosat összeköthessük a hasznossal, a Webes térinformatika - PaciTrip cikksorozat (legfrissebb része: Webes térinformatika - PaciTrip 5. rész (Új funkció: információ ablak)) folytatásához amúgy is ezzel foglalkozom: az utazások útvonalának egy-egy szakaszát (amelyek a Google Térkép útvonaltervezőjével nem hozhatók létre) állítom elő, hogy folytathassuk a sorozatot.

Első lépésként ezúttal is azt ajánlom, hogy végezz egy kis nyomozómunkát, hogy az áhított adat esetleg létezik-e már valahol a világban ingyen vagy megfizethető áron. Ez eleinte nehézkes és időrabló tevékenységnek tűnik, ami nem is mindig térül meg. Ám ahogy szépen fokozatosan rutint szerzel benne, egyre könnyebben és gyorsabban megy majd és egyre gyakrabban koronázza majd siker az erőfeszítéseidet, és megspórolhatsz rengeteg időt és vektorizálási munkát.

Digitalizálás / vektorizálás

Akárcsak a pontszerű rétegek esetében, az információ, amelyre szükségünk van, ezúttal is egy raszteres téradat rétegen található. A referenciatérkép felett elhelyezünk egy üres vektoros, vonalas réteget, majd ezt a réteget szerkesztve létrehozzuk rajta a számunkra lényeges geometriákat, végül elmentjük az eredményt.

A példában a PaciTrip cikksorozathoz készítek el egy rövid útvonalat, amelyet a Google Térkép útvonaltervezőjével sajnos nem tudok reprodukálni: Comino szigetén tett kirándulásunk útvonalát fogom elkészíteni.

1. Referencia felület hozzáadása

Az alaptérkép ezúttal is az OpenStreetMap lesz. A Browser panelben az XYZ Tiles lehetőségek közül kiválasztjuk az OpenStreetMap-et és duplán kattintva rá hozzáadjuk a projekthez, majd a megfelelő területre navigálunk. 

QGIS - Referenciatérkép hozzáadása

2. Üres vektoros réteg létrehozása

Layer menü Create Layer menüpontjában kiválasztjuk a New Shapefile Layer... opciót. A felugró New Shapefile Layer ablakban megadjuk, hogy hova hozza létre az új fájlt, milyen karakterkódolással hozza létre (javasolt: UTF-8), milyen geometriatípust szeretnénk tárolni benne (Line) és milyen vetületi rendszerben tárolja az adatokat (a példában Pseudo Mercatort-t, EPSG:3857-et választunk).

A réteg alfanumerikus adattábláját (a New Shapefile Layer ablak alsó felében) úgy szerkesztem, hogy egy id nevű oszlop legyen benne. Egy ilyen nevű oszlopot alapértelmezetten bele is tesz, esetemben azonban ez nem lesz jó, mert nem egész számot (Integer) szeretnék tárolni benne, hanem szöveget. Ezért a meglévő oszlopot törlöm, majd hozzáadok egy id nevű (Name), Text típusú (Type), 3 hosszúságú (Length) oszlopot. Az OK gomb megnyomása után az egyelőre üres shapefájl létrejön a megadott helyen és a réteg pedig megjelenik a projektben is.

QGIS - Üres vektoros réteg létrehozása

3. Üres vektoros réteg szerkesztése

A rétegkezelőben (Layers panel) az újonnan létrehozott réteget kijelölve szerkeszthetővé tesszük azt az eszköztár ceruza (Toggle editing) ikonját megnyomva vagy a rétegre jobb egérgombbal kattintva és a Toggle Editing opciót választva.

A szerkesztendő rétegnek érdemes egy olyan színt választani, amely jól elüt az referenciatérkép színvilágától. OpenStreetMap esetében nekem jól beváltak az élénk piros, lila, rózsaszín, esetleg citromsárga színek. A végleges térképen persze nem kell ezekkel a színekkel dolgozni, de a szerkesztés során nagyon sokat segít, ha a szerkeszteni kívánt réteg jól elkülönül a többitől.

A szerkesztés megkezdéséhez arra a területre nagyítok, ahol a kirándulást is kezdtük (Blue Lagoon) és választok egy olyan léptéket, amely kellően részletes vektorizálást tesz lehetővé, de nem túlzottan elaprózott. A terület méretét, az útvonal hosszát figyelembe véve én az 1:500 lépték mellett döntök és megpróbálom a vektorizálás során ezt végig megtartani, hogy a vonalak töréspontjai közötti távolságban ne legyenek a léptékváltásból fakadó nagyságrendi eltérések.

A vonalas elemek létrehozásához az Add Line Feature ikonra kattintok, s a kurzor megváltozása (célkeresztre) is jelzi, hogy innentől a térképen kattintva az új vonalas elem töréspontjait jelölhetem meg. Egy-egy vonalas elem tetszőleges számú töréspontból állhat, mivel azonban legalább kettő töréspontra szükség van egy szakasz kirajzolásához, az első kattintás után még csak egy pontozott vonal köti össze az első kattintás helyét a kurzorral. Ez a pontozott vonal segít abban, hogy miként nézne ki a következő szakasz, ha a kurzor aktuális helyén kattintva helyeznénk el a következő töréspontot. A második kattintással már létrejön egy szakasz, ami már vékony piros vonalként jelenik meg, a pontozott vonal pedig a legújabb töréspontot és a kurzor helyét köti össze. Töréspontról töréspontra haladva rajzolhatjuk a vonalas elemet, majd az utolsó töréspontot lehelyezve jobb egérgombbal kattintva fejezhetjük be az aktuális elem szerkesztését. Ezt követően felugrik egy ablak, amelyben megadhatjuk a vonalas elem alfanumerikus attribútum adatait. (Esetemben ez csak az id, amely minden esetben 'D04' (negyedik nap).)

QGIS - Vektoros vonalas elem létrehozása

Azt, hogy mennyire sűrűn érdemes töréspontot elhelyezni, elsősorban az határozza meg, hogy mire akarjuk később használni a vektorizált elemeket. Mivel a példa feladatban "csak" vizuális megjelenítés a cél, nem kell figyelnem arra, hogy a töréspontok egyenletes távolságokra helyezkedjenek el, sokkal inkább arra, hogy a rajzolt útvonal minél pontosabban adja vissza azt az útvonalat, amelyet bejártunk. Ezért amikor az út íves, valamivel sűrűbben helyezek el töréspontokat, amikor az útvonal hosszabb szakaszon egyenes, akkor valamivel ritkábban is elegendő. Ahova mindenképpen érdemes töréspontot helyezni, azok az elágazások. Ha az általunk rajzolt vonalak metszéspontjairól van szó, akkor mindenképp, de előrelátó módon érdemes lehet olyan helyekre is töréspontot elhelyezni, ahol megvan a lehetősége keresztezés kialakulásának (mert pl. a referenciatérképen látjuk az elágazást). Így ha később ki kell egészítenünk a vonalas rétegünket, nem lesz gond a geometriák illesztésével.

Ami a pontszerű adatokhoz képest újdonság, hogy vonalas elemek esetében nagyon szeretnénk, ha két szakasz ugyanabban a pontban találkozna, így nem lenne közöttük folytonossági hiány. Amíg egyetlen vonalas elemről (feature) van szó, addig a téradat tárolási és megjelenítési logikája ezt biztosítja számunkra: a vonalas elem (feature) töréspontjaiban két szakasz mindig pontosan találkozik. Mi a helyzet akkor, ha nem akarjuk egy szuszra megrajzolni az egész vonalas elemet, hanem kisebb részekre daraboljuk?

Rengeteg oka lehet, hogy több kisebb részre darabolunk egy látszólag egybe tartozó vonalat. Lehet, hogy meg kell szakítanunk a digitalizálási feladatot, később pedig egyszerűbbnek tartjuk egy újabb szakaszt rajzolni és összeolvasztani a kettőt, mint az elsőt folyamatosan újabb töréspontokkal bővíteni. De ha folyamatosan tudunk dolgozni, akkor is rákényszeríthet minket erre maga a projekt, amihez a vonalat digitalizáljuk. Geometriai oldalról kényszerítő tényező lehet, ha a vektorizált jelenség maga is hálózatos jellegű, pl. az úthálózat. Ha egy úthálózatot egyetlen vonallal próbálnánk megrajzolni, nagyon sok plusz munkát és plusz geometriát veszünk a nyakunkba, hiszen óhatatlanul lesznek olyan útszakaszok, amelyeket kétszer is átrajzolunk. Ez számos problémát felvet, megoldani pedig nagyon egyszerű: több, kisebb vonalas elemből állítjuk össze. Attribútum oldalról kényszerítő tényező lehet, ha például olyan alfanumerikus adatokat is rögzítenünk kell, mint az út jellege, burkolata, állapota, akkor ez egy útvonalon belül is változhat. Például a móló beton burkolatú volt, utána egy rövid ideig aszfalt burkolatú úton haladtunk, majd széles földúton, később keskeny gyalogösvényen és így tovább. Egyetlen, nagyon hosszú vonalas elemként ábrázolva az útvonalat, ezek a különbségek nem rögzíthetők, csak akkor, ha az útvonal maga is több szakaszból áll.

QGIS - Töréspontok elhelyezkedése vonalas elem vektorizálása során

Ha több vonalas elemet (feature-t) rajzolunk, amelyek vég- és kezdőpontjainak össze kellene kapcsolnia az elemeket, segítségre lesz szükségünk. Annak híján csupán matematikai esélyünk van arra, hogy az új vonalas elem kezdőpontjának X és Y koordinátái az utolsó tizedesjegyig megegyezik az előző végpontjának X és Y koordinátáival. Szerencsére a QGIS is lehetővé teszi a geometriák egymáshoz illesztését szerkesztés során a snap funkció segítségével. A snap abban segít, hogy a szerkesztett geometriát a lehető legpontosabban tudjuk igazítani már meglévő, vektoros geometriákhoz, legyenek azonos vagy másik rétegen. A snap bekapcsolásához szükség lesz a Snapping toolbar ikonjaira, ezért ha az eszköztár nem látható (nagy piros mágnes az első ikonja), akkor be kell kapcsolni. Bármelyik eszköztárra jobb egérgombbal kattintva ki kell pipálni a megjelenő listában és az eszköztár meg is jelenik.

QGIS - Snapping toolbar bekapcsolása

Bár a Snapping toolbar minden ikonja és beállítása rendkívül fontos, most csak néhányat emelek ki, balról jobbra haladva:

  • Toggle snapping: A snap funkció ki- és bekapcsolása. Nálunk most legyen bekapcsolva.
  • Melyik rétegekhez snappeljen: mindegyikhez (All layers) vagy az aktív (kijelölt) réteghez (Active layer), de van lehetőség egyedi beállításokra is (Advanced configuration). Mivel egyetlen vektoros réteg van a projektünkben jelenleg, az All layers és az Active layer is egyformán jó.
  • Mihez snappeljen: csak töréspontokhoz (vertex) vagy csak élekhez (segment) vagy mindkettőhöz (vertex and segment). Nálunk a töréspontok elegendőek lesznek.
  • Mennyire legyen érzékeny a snap: milyen távolságból "vonzza magához" a töréspont vagy él a kurzort? Az értéke megadható pixelben, illetve a valós méretben, esetünkben méterben. Tapasztalatom szerint a képernyő szerinti méretben (pixelben) megadva jobban használható, de előfordulhat olyan eset, hogy a terepi felbontás figyelembe vételével kell meghatározni a pontosságot. Nálunk az alapértelmezett 12px megfelelő érték lesz.

QGIS - Snapping toolbar ikonjai

A snap funkció segítségével precízen egymáshoz tudjuk illeszteni az egyes vonalas elemeket, így akármennyire nagyítunk is bele, a két vonal mindig egy pontban fog találkozni. A szerkesztés során a snap akció működését az jelzi, hogy élénk lila négyzet jelenik meg a legközelebbi, már létező törésponton, amelyhez illeszteni szeretné a következő töréspontot.

QGIS - Snap funkció működés közben

4. Mentés és a szerkesztés lezárása

Időről időre érdemes elmenteni az előrehaladásunkat a Save Layer ikonra kattintva, ha pedig átmenetileg vagy teljesen végeztünk a digitalizálással, érdemes a réteg szerkeszthetőségét is kikapcsolni a Toggle Editing ikonra kattintva.

QGIS - Vektorizálás eredményeinek mentése és a szerkesztés lezárása

A Save Layer nem azonos a Project menüben lévő Save funkcióval, amely a projektet menti! A Save layer nélkül bezárva a QGIS-t minden pont, amit lehelyeztünk, elvész!

Vonalak előállítása pontokból 

A vektorizáláson kívül is vannak eszközeink vektoros vonalas téradat rétegek előállítására. Az egyik lehetőség, hogy az egyes vonalak töréspontjait pontszerű vektoros rétegként kapjuk meg és ezeket automatizáltan összeköttetjük.

Vagy olyan koordinátákat tartalmazó szöveges fájlként, amelyből pontszerű vektoros réteget készítünk. Ennek menetét elolvashatod a QGIS - Vektoros pontszerű réteg előállítása cikk végén.

Ahhoz, hogy a pontrétegből előállhasson egy vonalas réteg, mindenképpen kell egy oszlop, amely alapján sorba rendezve megkapjuk a helyes összekötési sorrendet. Ezen kívül tartalmazhat egy olyan oszlopot is, amely az egyes vonalas elemek (feature-ök) azonosítóját tartalmazza, így a tool ezekből különálló vonalas elemeket fog létrehozni. A feladat elvégzéséhez valójában több tool is rendelkezésre áll a QGIS-ben, mi a Points to path nevűt fogjuk most használni.

Nyissuk meg a Processing Toolbox panelt (Processing menü, Toolbox menüpont) és a kereső mezőbe írjuk be a tool nevét, majd kattintsunk duplán a tool-ra! A Points to path ablakban adjuk meg az alábbi beállításokat:

  • Input point layer: válasszuk ki a legördülő menüből (ha a projekthez már hozzáadtuk) a pont réteget vagy tallózzuk ki a pontszerű adatokat!
  • Order field: válasszuk ki, melyik attribútum oszlop tartalmazza az összekötés sorrendjének adatait.
  • Group field: válasszuk ki, melyik attribútum oszlop tartalmazza az egyes vonalas elemek azonosítóit (vagyis melyik oszlop jelöli, hogy melyik töréspontok tartoznak egy vonalas elemhez). Ha nincs ilyen oszlop, ez a mező üresen marad!
  • Date format: ha az összekötés sorrendjét tartalmazó oszlop dátum (vagy dátum-idő) típusú adatokat tartalmaz, adjuk meg, milyen dátum formátumot használunk abban az oszlopban, hogy a tool jól értelmezze az adatokat!
  • Paths: adjuk meg, hova és milyen néven mentse a létrejövő vektoros vonalas téradatot!

QGIS - Points to path tool beállításai

A Run in background gombra kattintva rövid számítás után létrejön a vonalas állomány és ha az Open output file after running algorithm jelölőnégyzetet bepipálva hagytuk, akkor a projektünkben is megjelenik a vonalas réteg.

QGIS - Points to path tool eredménye

Vonalak előállítása poligonokból

Egy másik lehetőség vonalak előállítására, hogy vektoros poligon téradat réteg a bemeneti adat és a poligonok) körvonalát szeretnénk kinyerni vonalas rétegként. Cominoi látogatásunk során felmentünk a St. Mary's Tower tetejére is és szépen körbejártunk a mellvéd mentén. Ezt az útvonalat is vektorizálhatjuk vagy átalakíthatjuk a torony poligonját vonalakká. Utóbbihoz a Polygons to Lines tool-t fogjuk használn, amely elérhető a Processing Toolbox-ból vagy a Vector menü, Geometry tools almenüben. A tool számára csak azt kell megadnunk, melyik réteg poligonjaiból szeretnénk vonalat készíteni, illetve hova szeretnénk menteni a létrejövő vektoros vonalas téradatot.

QGIS - Polygons to lines tool beállítása

A Run in background gomb megnyomása után a téradat létrejön, a réteg pedig (ha a jelölőnégyzet ki van pipálva) megjelenik a projektben is.

QGIS - Polygons to lines tool eredménye

Ha adatbázis-építés, adatelemzés, vizualizáció, térinformatika témában segítségre van szükséged, írj nekünk az Ez az e-mail-cím a szpemrobotok elleni védelem alatt áll. Megtekintéséhez engedélyeznie kell a JavaScript használatát. címre és megpróbálunk egy tippel, ötlettel segíteni!


Deprecated: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in /home/adatpcom/public_html/templates/shaper_helix3/html/modules.php on line 21