• 2024-01-31

GIS alapú épületmozgás vizsgálat lépésről lépésre

GIS alapú épületmozgás vizsgálat lépésről lépésre

GIS alapú épületmozgás vizsgálat lépésről lépésre 1024 576 SurveyTransfer

Jelen írásban azt mutatom meg Neked, hogy hogyan lehet egyszerűen és hatékonyan megvizsgálni az állapotváltozást két 3D objektum között. A példa egy épület mozgását fogja bemutatni úgy, hogy közben különböző lehetőségekre és hibafaktorokra is felhívom a figyelmedet.

A feladatot ingyenes, nyílt forráskódú szoftverekkel oldottam meg, ezért az itt leírtakat bátran kipróbálhatod Te is.

A következőkre lesz szükséged, ha végig akarod csinálni a műveletsort. Az adatelőkészítés és adatmegjelenítés során a Blender 2.93 verziót, valamint a BlenderGIS bővítményt használtam fel. Az adattáblák kialakításához a QGIS 3.22.1 verzióját választottam. A 3D téradatok távolság vizsgálatát pedig CloudCompare segítségével végeztem el.
Az elemzés során bemutatott épületmodellt Tomasz Armata hozta létre. A nyers 3D modell ingyenesen felhasználható és a következő linkről érhető el.

A cikk célja, hogy segítse a Te munkádat! Ugyanis ezzel a tudással felvértezve belevághatsz komolyabb elemzéssel járó projektekbe is. Továbbá, népszerűsíteni szeretném a nyílt forráskódú szoftvereket és az azokban rejlő lehetőségeket.

Ezt az írást elsősorban azoknak ajánlom, akik szeretnének a szakma mélységeibe belelátni, ugyanakkor a kezdőknek is jó iránymutatást jelent, hogy egy-egy projekt során milyen adatelemző kihívásokkal kell megbirkózni.

Itt most nem fogunk kitérni az adatgyűjtésre. Feltételezem, hogy pontos, megfelelően georeferált adatállományok állnak rendelkezésre, amiken már csak az adatfeldolgozást és elemzést kell elvégezni.

Milyen állományok szükségesek egy ilyen vizsgálathoz?

  • Kettő 3D modell, amik közül az egyik a kiindulási állapotot, a másik a végállapotot mutatja be.
  • A téradatok vizsgálhatók meshként vagy pontfelhőként is.
  • A téradatok jellege (pontfelhő vagy 3D mesh modell) az elemzés során vegyesen is felhasználható, például a kiindulási állapot mesh modell, míg a végállapot pontfelhő.

Milyen lépésekből fog állni a műveletsor?

  1. Adatelőkészítés (ha ez szükséges)
  2. Háromdimenziós távolságmérés a két modell között
  3. A távolságmérés eredményeiből irányszögek és dőlésszögek számítása
  4. Adatok vizualizálása

VIZSGÁLAT ELŐTTI MEGFONTOLÁSOK

Mielőtt belecsapunk az elemzés közepébe muszáj megemlítenem, hogy ez egy 3D távolság alapú mérést fog jelenteni. Éppen ezért végig kell gondolni azt, hogy hogyan érjük el a legjobb eredményeket.

Ha kettő olyan objektumot szeretnél összehasonlítani,

  1. amiknek a térbeli elhelyezkedése jelentősen eltér egymástól, tehát több tengely mentén megdőlt és elmozdult az egyik objektum a másikhoz képest, akkor referenciapontokat kell elhelyezni a modelleken és ezek távolságát kell megvizsgálni.
  2. amiknek a térbeli elhelyezkedése szinte tökéletesen megegyezik, de egyes részek hiányoznak az egyik modellből, akkor megvizsgálhatók a felszínek mentén bekövetkezett eltérések is.

A két eset végeredményei között az lesz a különbség, hogy az első során csupán annyi adatot kapsz, amennyi referenciapontot Te feljelölsz. Míg a másik kimenetele tömeges adathalmaz lesz, amin érdemes statisztikai kimutatásokat végezni.

Amennyiben az első eset áll fenn, akkor mindenképp szükséges a Blender-t használni a referenciapontok létrehozásához. A második pontban leírtaknál a Blender-re nem lesz szükséged.

Még mindig nem egyértelmű, hogy miért van szükség egyes esetekben referenciapontokra? Semmi gond, elmagyarázom egy példán keresztül! A következő kép összefoglalja a lényeget.



A zöldes korláttal ellátott épületmodellt akarjuk összehasonlítani a rózsaszínnel. Jól látszódik, hogy a modellek térben annyira eltérnek egymástól, hogy az egyik modellen a korlát felső pontja közelebb esik a másik korlát alsó pontjához. Nyilvánvaló, hogy mindkettő modellen vagy csak a felső vagy csak az alsó szinthez tartozó pontokat szeretnénk összehasonlítani, nem pedig össze-vissza.
Ha keverednek az objektumokon belül az összehasonlítandó pontok, akkor a legrövidebb távolságot vizsgáló algoritmus eredménye is hibás lesz! Ez pedig nagy zűrzavarokat eredményezhet, ha a rosszul meghatározott adatok alapján szeretnéd kimutatni, hogy milyen irányba és milyen mértékben dől az adott objektum.

REFERENCIAPONTOK ELHELYEZÉSE

Ebben a fejezetben megvizsgáljuk az első esetet, amikor elkerülhetetlen, hogy referenciapontokat helyezzünk el a modelleken és ezeket hasonlítjuk össze a távolságszámítás során.

BLENDER BEÜZEMELÉSE

Természetesen az első lépés, hogy feltelepíted a Blender-t ezzel nem lesz nagy gondod, ezért nem foglalkozunk vele részletesebben: Tovább, tovább, elfogadom, kész… Telepítsük a BlenderGIS-t! Ezen az oldalon a „Code” gomb alatt találod a „Download ZIP” lehetőséget, kattints rá!

Ezután nyissuk meg a Blender-t. Az üdvözlő ablak mellé kattints bal egérgombbal, hogy az eltűnjön. Egy üres modelltérben fogunk dolgozni, úgyhogy jelöljünk ki minden objektumot az „A” billentyűvel, majd töröljük ki azokat a „Delete”-tel. Ha nincs feltelepítve a BlenderGIS bővítmény, akkor ezt a felső menüszalag „Edit/Preferences…” alatt tudod telepíteni. 

A bal oldalsávban válaszd ki az „Add-ons” opciót, majd a menü felső részében válaszd ki az „Install…” gombot. Itt a letöltött „.zip” fájlt kell megkeresned és megadnod. Ha sikeres volt a telepítés, akkor megjelenik a bővítmény.

A BlenderGIS előtt szerepeljen egy pipa, ez jelenti, hogy a bővítmény aktív. Ha legördíted a jelölőnégyzet előtti nyilat, akkor több beállítási lehetőség is eléd tárul. Például, itt tudsz hozzáadni új koordináta-rendszert, amit EPSG kód alapján vár a program. Ha végeztél a beállításokkal, akkor nyugodtan zárd be a „Blender Preferences” ablakot. A BlenderGIS sikeres telepítését jelzi, hogy a modelltér bal felső sarkánál található gombok között – az „Object” mellett – megjelent a „GIS” opció.

Megjegyzés: Ha tervrajzok alapján kell létrehoznod egy generalizált modellt, amit össze akarsz hasonlítani egy tényleges felmérés eredményével, akkor azt is létrehozhatod Blender-ben. Igaz, ez sok gyakorlást kíván.

BLENDERGIS AKCIÓBAN

A következő fejezetben megnézzük, hogy hogyan lehet Blender-ben elhelyezni referenciapontokat a modelleken. Sajnos, Blender-ben nem lehet megfelelően kezelni olyan egyszerű geometriákat, mint a pontok és vonalak. Ugyanakkor, jó hír, hogy a BlenderGIS-nek köszönhetően tudunk shapefile-ból beolvasni pontokat. Ennek első lépése, hogy létrehozunk egy shapefile-t, amit a legegyszerűbben QGIS-ben tehetünk meg. Ezután a pont geometriákat tartalmazó shapefile-t beolvassuk BlenderGIS-szel és a 3D térben elhelyezzük a pontokat a kiinduló és végállapotot jelentő modellekhez illesztve.

SHAPEFILE LÉTREHOZÁSA

Nyissuk meg a QGIS-t, majd kattintsunk a felső menüben található „New Shapefile Layer…” gombra.

Hozz létre egy pont geometriával rendelkező shapefile állományt, aminek van „Z (+M values)” térbeli vonatkozása. Továbbá, ne felejtsd el beállítani a koordináta-rendszert, amiben a modelljeid is vannak. Egyelőre ennyi, most nem foglalkozunk attribútumokkal. Ha bővebben szeretnél olvasni a shapefile létrehozásáról, akkor ezt a cikkünket is olvasd el!

Miután létrejött az adatállomány, a QGIS automatikusan hozzáadja ezt a rétegfához. Azt javaslom, hogy az épületmodelled közelében helyezz el egy pontot. Ehhez aktiválnod kell a rétegen a szerkesztést. Jelöld ki a rétegfában az új shapefile rétegedet egy bal kattintással, majd nyomd meg a „Toggle Editing” nevű ceruza ikont.

Ezután elérhetővé válik a ceruzától kettővel jobbra található „Add Point Feature” gomb. Kattintsunk rá, mi baj lehet! 🙂 Ezután elhelyezheted a pont geometriádat a térképen. Ebben az esetben két lehetőséged van: vagy behívsz egy alaptérképet, ami alapján el tudod helyezni a pontodat vagy koordinátákkal adod meg a pont helyét. Az alaptérkép behívását a réteged feletti „Browser” ablakból tudod megtenni. Az „XYZ Tiles” alatt lévő „OpenStreetMap” ikonra kattints duplán bal egérgombbal és máris megjelenik az alaptérképed. Szabadon belenagyíthatsz az egérgörgővel bármelyik területre, majd a bal egérgomb lenyomásával elhelyezhetsz egy pontot (figyelj arra, hogy a pont réteged legyen kijelölve a rétegfában). Rendben, nyomj rá az „OK” gombra.

Ha nem jelenik meg a pontod, akkor ne ijedj meg, valószínűleg mindent jól csináltál! Csupán a rétegsorrenden kell módosítani a „Layers” ablakon belül, ugyanis az alaptérkép elfedi a pontodat. Egyszerűen ragadd meg a pont réteget és húzd az „OpenStreetMap” réteg fölé. Mindjárt látszik az eredmény! 🙂

Ha a pontod mégsem került jó pozícióba, akkor elegendő a koordinátákat átírni. Ezt úgy tudod megtenni, ha a „Vertex Tool”-ra kattintasz, ami az előbb használt „Add Point Feature” gomb mellett található.

Ezután kattints jobb egérgombbal a térképen a pontodra. Bal alul megjelenik egy új ablak, ahol megadhatod az X, Y, Z koordinátákat.

Rendben, miután végeztél mentsd el a rétegedet a felső menüsávban található „Save Layer Edits” gombra kattintva, majd zárd le a szerkesztési folyamatot a „Toggle Editing”-re kattintva.

PONTOK ELHELYEZÉSE BLENDER-BEN

Vissza a Blender-hez! A BlenderGIS-nek köszönhetően megjelent egy „GIS” gomb a modelltér menüjében. Erre kattintsunk bal egérgombbal, majd az „Import” alatt válaszd ki a „Shapefile (.shp)” opciót.

Keresd ki az imént létrehozott pont geometriákat tartalmazó shapefile-t, majd add hozzá a modelltérhez. Egyelőre csak annyit tegyünk meg, hogy klónozzuk az importált állományt és átnevezzük a rétegeket. Ezt úgy tudod megtenni, ha a jobb felső ablakban kijelölöd a réteget bal egérgombbal, majd lenyomod a „Ctrl+C” és a „Ctrl+V” billentyűkombinációkat. Megjelent egy új réteg, aminek ugyanaz a neve, mint az importált shapefile-nak, csak a végződése „.001” lett.

Nevezd át a rétegeket, hogy tudd, melyik vonatkozik a kiindulási állapotra és melyik a végállapotra. Ezt úgy tudod megtenni, ha duplán kattintasz bal egérgombbal egy réteg nevére.

Mindezek után importáljuk a modelleket is. A bal sarokban található „File” menüpontban válaszd ki az „Import” opciót, majd keresd ki a modelledet. Az importálás során figyelj arra, hogy a jobb sávban megjelenő „Transform” menüben a „Forward” érték „X Forward”-ra, míg az „Up” érték „Z Up”-ra legyen állítva! Ezt a műveletet végezd el mindkettő modellel. A modellek importálása után, a rétegek átnevezése ismét hasznos lehet. Ha egy réteget ki szeretnél kapcsolni, mert az zavar Téged, akkor a rétegfában az adott réteg mellett jobbra található nyitott szem ikonra kattints.

Megjegyzés: Ha pontfelhőn szeretnél referenciapontokat elhelyezni Blender-ben, akkor ennek sincs akadálya, viszont ehhez szükséges egy újabb bővítményt telepíteni, a Point Cloud Visualizer-t. Nézd meg ezt a videót, hogy képbe kerülj, hogyan használhatók pontfelhők Blender alatt. Ha ezt választod, akkor arra készülj fel, hogy a pontfelhőhöz sokkal nehezebb lesz hozzáilleszteni a referenciapontokat!

Vágjunk bele a pontok elhelyezésébe! Először is válaszd ki a potenciális referenciapontok helyét a modelleken. Ezt ugyanolyan szemlélettel végezd, ahogy georeferálnál, tehát a jól kivehető pontokra koncentrálj, amik mindkettő modellen jelen vannak. Ilyenek például ugyanazok a sarkok és kereszteződési pontok.

Blender-ben az egérgörgő lenyomása közben, az egeret mozgatva tudod forgatni a nézetet. Ha mindezek mellett a „Shift” billentyűt is nyomva tartod, akkor pedig vonszolhatod a kamerát. Értelemszerűen az egérgörgővel tudsz nagyítani és kicsinyíteni.

A rétegfában jelöld ki a pont geometrákat tartalmazó shapefile réteget! Mielőtt elkezdenénk mozgatni a pontokat, aktiváljuk a „Snap” funkciót. Ennek segítségével a pontunk a modell felszínéhez, töréspontjaihoz illeszkedik. Ez nagyban megkönnyíti a 3D térben történő mozgatást. A „Snap” funkciót jelölő mágnes ikon a modelltér felső részén, középen található. Ha kékre vált a gomb háttere, akkor aktív. Válaszd ki a mágnestől jobbra található felsorolás közül a „Vertex” opciót, ez azt jelenti, hogy a modell töréspontjaihoz fog illeszkedni a referenciapontunk.

A kurzort mozgasd a pontod fölé, majd nyomd le a „G” billentyűt, ezzel megkezdheted a pontod mozgatását.

Megjegyzés: Itt már érdemes gyakran mentened a Blender projektedet, nehogy egyszer csak lefagyjon a program és az eddigi munkád elvesszen! A „File” menüpont alatt tudod elmenteni a „.blend” kiterjesztésű projektfájlt. A Blender fájlok önmagukban is tartalmazni fogják a megjelenített adatállományokat, tehát azokra nem lesz szükség külső adatforrásként.

Amennyiben sikeresen leraktál egy referenciapontot, akkor nyomd le a „Ctrl+C” és „Ctrl+V” billentyűket és másold le a réteget. A létrejött új pontot – ugyanúgy mint az előbb -, helyezd át a következő referenciapontnak kijelölt helyre, majd addig ismételd ezeket a lépéseket, amíg el nem éred az általad szükségesnek látott referenciapontok számát. Ha kész vagy a pontok lerakásával, akkor olvaszd össze az új rétegeidet eggyé. Ezt úgy tudod megtenni, ha a rétegfában kijelölöd az összes referenciapont réteget a „Ctrl+bal egérgomb” vagy a „Shift+bal egérgomb” segítségével. Mozgasd a kurzorod a modelltérbe, majd nyomd le az „F3” billentyűt és írd be a keresőbe, hogy „Join”. Az első lehetőséget választva, a Blender egy réteggé olvasztja össze a rétegeidet.

Az előbb leírt műveletsort végezd el a másik modelledre vonatkozóan is. Ha mindent úgy csináltál, ahogy azt tanácsoltam, akkor a rétegfában 4 rétegnek kell lennie a műveletsor végére.

  1. Kiinduló modell
  2. Végállapotú modell
  3. Kiinduló modell referenciapontjai
  4. Végállapotú modell referenciapontjai

Már csak annyi van vissza, hogy exportáljuk a referenciapontjainkat, amiken elvégezzük a távolságszámításokat. A rétegfában jelöld ki az egyik pont réteget, majd a „GIS” gombra kattintva válaszd ki az „Export” lehetőséget, majd a „Shapefile (.shp)” opciót. Értelemszerűen, ezután mentsd ki a másik pont réteget is.

ADATVIZSGÁLAT

Ebben a fejezetben megszületnek az első eredmények, amik már vizualizálni fogják az elmozdulások (távolságok) mértékét. A műveletet CloudCompare-ben fogjuk elvégezni! Ahogy azt korábban említettem – sok minden más mellett… –, megnézzük, hogy milyen eredményt kapunk, ha referenciapontokat vizsgálunk erősen torzult térbeli elhelyezkedés esetén, valamint milyen lesz a végkimenetel, ha egyes térrészek változnak csupán és felszíneket vizsgálunk.

Megjegyzés: Ha szükséges, akkor CloudCompare alatt elérhető, hogy kettő modellt egymáshoz illessz (georeferálj). Ez elvégezhető automatikus illesztéssel és manuálissal is. Mindkettő esetben először ki kell választani a modelleket a rétegfából. Az automatikus módszerhez a menüszalagon a „Fine Registration (ICP)” ikonra kell kattintanod. Létezik még az „Auto align clouds” funkció is, de ezt nem javaslom, elég bogarasan (bug-os) működik. A manuális módszer gyakorlatilag georeferálást takar, ezt szintén a menüszalagból éred el, az „Align (point pairs picking)” Cc pointPairAlignIcon.png eszköz segítségével.

REFERENCIAPONTOK MÉRÉSE

Nyisd meg a CloudCompare-t, majd a „File” menüpont alatt található „Open”-re kattints és importáld a Blender-ből kimentett shapefile-okat.

Úgy jelennek meg, mintha pontfelhők lennének, de ez így tökéletes lesz nekünk! Nevezd át mindkettő „Cloud #1” elnevezésű réteget (dupla kattintás a réteg nevére). Jelöld ki a rétegeket a „Ctrl” billentyű nyomva tartásával. Ezután válaszd ki a „Compute cloud/cloud distance” funkciót.

Válaszd ki, hogy melyik lesz a kiinduló állapotot reprezentáló állományod („Reference”) és melyik a végállapotot jelentő („Compared”). Most aztán jól lebuktam, hogy eddig miért ezeket az elnevezéseket használtam… 🙂

A megjelenő ablakban a függvény paramétereit állíthatod be. Fontos, hogy a „split X, Y and Z components” elé rakj egy pipát! Ez azt fogja jelenteni, hogy a CloudCompare külön kiszámítja majd az X, Y és Z tengelyek mentén a távolságokat és ezek attribútumként elérhetők lesznek majd. Nem lövöm le a poént, de ezeket használni fogjuk a későbbiekben. 

Nyomj az eltéveszthetetlenül piros „Compute” gombra, majd az „Ok”-ra! Látszólag csak annyi történt, hogy kiszíneztük a pontokat, de ez nem téveszt meg egy olyan dörzsölt térinformatikust, mint amilyenek mi vagyunk! 🙂 Jelöld ki a „Compared”-nek használt rétegedet, majd nyomd le a „Shift+C” billentyűkombinációt. Ezzel megjelent egy jelmagyarázat jobb oldalon, ami a 3D távolságokat mutatja meg (természetesen az általad használt koordináta-rendszer alapegységében). A réteg kijelölésével a rétegfa alatti „Properties” ablakban megjelent egy csomó beállítási lehetőség, például a megjelenő pontok mérete, a színskála minimum és maximum értékének átállítása.

Ezután mentsd ki a pontokat a távolságmérés eredményével együtt. Jelöld ki a „Compared” réteget, majd nyomd meg a kék floppy alakú „Save” gombot.

Válaszd ki az „ASCII cloud” opciót, majd a fájlnév után mindenképp üsd be, hogy „.txt”, mert másképp a CloudCompare egy kiterjesztés nélküli fájlt hoz létre. Végül állítsd be, hogy az oszlopelnevezések is látszódjanak. Ezt úgy tudod megtenni, ha a „Header” dobozban a „columns title” elé raksz egy pipát. Nyomj rá az „OK”-ra, itt végeztünk is!

FELSZÍNEK VIZSGÁLATA

Ebben a fejezetben megnézzük, hogy milyen eredmény érhető el, ha nem kell referenciapontok elhelyezésével bajlódni, csupán az elkészült modelleket kell összehasonlítani.

Indítsd el a CloudCompare-t, majd nyisd meg a kiinduló és a végállapot modelleket. Megnyithatsz akár pontfelhőket, akár mesh alapú modelleket is.

Amennyiben mesh állománnyal dolgozol, akkor ezt előbb pontfelhővé kell alakítani. Jelöld ki a réteget, majd használd a „Sample points on mesh” funkciót.

Állítsd be, hogy mennyi pontot akarsz kinyerni a mesh-ből, majd nyomj az „OK” gombra. Az új pontfelhő rétegeket kijelölve futtassuk le az előző fejezetben leírtak szerint a „Compute cloud/cloud distance” funkciót.

Ebben a változatban a több adatpont miatt, szembetűnőbb lesz az eredmény. Jól látható, hogy az általam bemutatott példában a referencia épületmodellen nem szerepeltek az erkélyek, míg a végállapotot bemutató modellen igen. Ez a különbség remekül látszódik az eredményen!

A réteg tulajdonságai alatt felfedezheted, hogy milyen sokféleképpen ábrázolható az eredmény. Például, beállíthatod, hogy csak az X, Y vagy a Z tengely mentén történt változásokat (távolságokat) szeretnéd megnézni.

Továbbá, az „SF display params” blokk alatt beállíthatod, hogy milyen intervallumon belül szemlélődnél. Az inaktív részek alapvetően szürkén jelennek meg.

Ha ezeket a szürke térrészeket teljesen eltüntetnéd, akkor arra is van lehetőség. A „Parameters” fül alatt kapcsold ki a „show NaN/out of range values in grey” opciót.

Ha ezt a megjelenítést mentenéd el, akkor még egy lépés vissza van, hogy ténylegesen szűrd az adatokat (ugyanis az előbb bemutatott metódus csak egy ábrázolási eljárás volt). Az „Edit” menüt lenyitva, válaszd ki a „Scalar fields” almenüt, majd a „Filter By Value” opciót.

Itt megadhatod újra a szűrés minimum és maximum értékeit. Lehetőséged van több darabra szétvágni az adattáblát a szűrésedbe eső intervallum és az azon kívül eső értékek alapján. Emellett, az „Export” gomb segítségével csak az általad szűrt tartományt is kimentheted. Nyomjuk rá erre a lehetőségre.

Egy új réteg jelent meg „.extract” végződéssel, amiben már csak az általad megadott tartomány értékei szerepelnek. Ezt kimentheted egyszerű ASCII állományként, úgy, ahogy azt az előző fejezetben megmutattam.

KIÉRTÉKELÉS ÉS MEGJELENÍTÉS

Az eddigiek során nem feltétlenül csak GIS funkciókat használtunk fel, de innentől már csak az lesz. A kiértékelések során QGIS-t fogunk felhasználni. Mondhatnád, hogy: Jó, de megvan a távolság CloudCompare-ben, akkor mit bohóckodunk még QGIS-ben is? Ennek az eljárásnak az lesz a lényege, hogy meghatározzuk minden egyes mért távolságnak az irányszögét és a dőlését. Ha tisztában vagy ezekkel az adatokkal, akkor statisztikai alapon meg tudod határozni, hogy milyen irányban és mekkora mértékkel dől a vizsgált épület.

Megjegyzés: Érdemes megemlítenem, hogy mi a QGIS – és az összes GIS szoftver – filozófiája. Vannak az adatforrások, amik jelenthetnek shapefile-okat, adatbázisok adattábláit, WFS vagy WMS kapcsolatokat, stb. Mindezek mellett, van a QGIS projektfájl, amit elmenthetsz „.qgz” vagy „.qgs” kiterjesztésekben. A projektfájl nem menti el önmagában az adatokat, csupán azok elérési útját jegyzi meg és a felhasznált beállításokat (pl. szűréseket, stílusjegyeket, rétegsorrendet). Éppen ezért figyelj oda arra, hogy az adatforrásaid mindig rendelkezésre álljanak és tudd, hogy hol tároltad el azokat. Ha felhasználnád az adattáblákat egy külső szoftverben, akkor az adott réteget exportáld és ne a QGIS projektfájlt próbáld másképp elmenteni!

REFERENCIAPONTOK

Ebben a részben importálni fogjuk a CloudCompare-ből kimentett „.txt” állományt pont shapefile-ként. Indítsd el a QGIS-t és hozz létre egy üres projektet. A felső menüszalagra kattints jobb egérgombbal, majd aktiváld a „Manage Layer Toolbar”-t. Ekkor új ikonok jelennek meg a „Browser” melletti oldalsávban. 

Az oldalsávból válaszd ki az „Add Delimited Text Layer” lehetőséget. Egy vessző alakot formáló gombot keress! Keresd ki a text fájlt, majd állítsd be az oszlopokat elválasztó karaktert. Végül add meg az X, Y, Z koordinátákat tartalmazó oszlopokat és a koordináta-rendszert, ha szükséges. Ezután kattints az „Add” gombra és zárd be az ablakot.

Gratulálok, így létrehoztuk QGIS-ben azokat a pontokat, amik már ezelőtt is megvoltak! 🙂 Na, jó… nem leszek gonosz, ezek sokkal menőbb pontok, ugyanis tartalmazzák a távolsági adatokat is. Ugyanakkor, ha mi dőlésirányt és dőlésszöget szeretnénk számolni, akkor ahhoz 3D vonalakat kell létrehoznunk. A vonalak kiinduló koordinátái rendelkezésre állnak, hiszen ezek alapján rajzoltattuk ki a pontokat, viszont a végpont koordinátáit nem tudjuk. Számoljuk ki ezeket! Kattints jobb egérgombbal a rétegre, majd nyisd meg az attribútum adattáblát („Open Attribute Table”). Nyisd meg a „Field Calculator” eszközt!

Hozzunk létre egy új oszlopot „to_X” névvel. Egyébként ennek az oszlopnak akár „kiscica” nevet is adhatnál, csak tudd, hogy ez a 3D vonal végpontjának X koordinátáját fogja jelenteni. Állítsd át az „Output field type” legördülő lista értékét „Decimal number (double)”-re. Ez azt jelenti, hogy törtszámok kerülhetnek majd ebbe az oszlopba. Ezután a következő képletet kell beírnod:

"//X" - "C2C_absolute_distances_(X)"

„//X” a kiinduló X koordinátát tartalmazó oszlop neve és “C2C_absolute_distances_(X)” a mért X távolság értékét jelentő oszlop. Ezeket az értékeket a baloldalon található keresőből is megadhatod a „Fields and Values” pont alatt.

Ugyanezt végezd el az Y és a Z koordinátákra vonatkozóan. Értelemszerűen írd át a képlet változóit, például így:

"Z" - "C2C_absolute_distances_(Z)"

Összesen három új oszlopot kell, hogy kapj. Ha kész vagy, akkor valami hasonlót kell látnod.

És most jön az a rész, amikor az olvasók fele elhagyja az oldalt, a Python alapú szkriptelés. Kérlek, várd ki a végét úgy írtam meg a kódot, hogy Neked szinte semmi dolgod nem lesz vele! Nyisd meg a „Python Console”-t. A felső menüsávban találod, kék és sárga kígyós ikon. Na, gondolhatnád kígyók is meg kódolás is, ebből már jó nem származhat. „Jó” nem is, csak 3D vonalak! 🙂

Itt egy meglehetősen baljós kép fogadja a felhasználót: szinte semmi gomb csak szöveges terület és még a sorok is sorszámozva vannak. Kattints a „Show Editor” gombra.

A jobb oldali új területbe másold be ezt a kódot: 

line_layer = QgsVectorLayer('LineStringZ?crs=epsg:3857', 'line', 'memory')
new_line = line_layer.dataProvider()
new_line.addAttributes( [ QgsField('length', QVariant.Double) ] )
line_layer.updateFields()

pointlayer = iface.activeLayer()

iter = pointlayer.getFeatures()

for feature in iter:
    geom = feature.geometry()

    p0x = feature["//X"]
    p1x = feature["to_X"]
    p0y = feature["Y"]
    p1y = feature["to_Y"]
    p0z = feature["Z"]
    p1z = feature["to_Z"]
    length3D = feature["C2C_absolute_distances"]

    line_start = QgsPoint(p0x, p0y, p0z )
    line_end = QgsPoint(p1x, p1y, p1z )

    linez = QgsFeature()
    linez.setAttributes( [length3D] )
    linez.setGeometry(QgsGeometry.fromPolyline([line_start, line_end]))

    new_line.addFeatures( [ linez ] )
    line_layer.updateExtents()
    QgsProject.instance().addMapLayers([line_layer])

Szükség esetén írd át a változókat: az epsg kódot, ha nem Pseudo-Mercator koordináta-rendszerben dolgozol vagy az oszlopelnevezéseket.

Röviden elmagyarázva, a szkript kikéri a pont adattábla minden sorából a kezdő X, Y, Z koordinátákat, ezekből pont geometriát alkot, majd a végponttal is elvégzi ugyanezt, és egy új virtuális rétegbe létrehozza a 3D vonalakat (amik az elmozdulásokat jelentik). Ha mindent jónak találsz, kattints bátran a zöld háromszög alakú „Run Script” gombra. Nyugi, szinte biztos, hogy nem fogja megsemmisíteni a világot!

Zárd be a „Python Console”-t, ezzel már nem dolgozunk többet. A térképvásznon megjelentek a várva-várt vonalak.

Nyissuk meg az új vonalak réteg attribútum tábláját. Adjunk hozzá egy új oszlopot a „Field Calculator”-ral. Ennek az új mezőnek a neve legyen „azimuth”, azaz dőlésirány. Másold be a következő parancsot.

degrees(azimuth(start_point($geometry), end_point($geometry)))

Ugyanígy a „Field Calculator” segítségével számoljuk ki a dőlésszögeket. Az új mező neve legyen „inclination”. Másold be a következő képletet.

atan((abs(z(start_point($geometry))-z(end_point($geometry)))/"length"*100)/ 100)*(180/pi())

Ha követted a leírtakat, akkor az adattábládnak úgy kell kinéznie, mint az alsó képen. Mentsd el a változtatásokat a „Save edits” gombra kattintva, majd zárd le a szerkesztést a ceruza alakú ikonra kattintva!

Mivel ez a 3D vonalakat tartalmazó állomány csak egy virtuális – memóriában létező – adattartalom, ezért javaslom, hogy mentsd el valós fájlként. Kattints a réteg nevére jobb egérgombbal, majd válaszd ki az „Export” opciót, azon belül a „Save Features As…” parancsot.

A felugró ablakon belül kiválaszthatod, hogy hova, milyen formátumban, milyen koordináta-rendszerben szeretnéd elmenteni a 3D vonalakat.

FELSZÍNEK

Ebben a fejezetben a CloudCompare-ben kinyert felszínek közötti távolságmérésen végeztem el ugyanazt a műveletsort, amit az előzőkben részletesen bemutattam. Csupán azt szeretném prezentálni, hogy mennyivel több adatunk keletkezik, ha felszínek között végzünk távolságmérést. Ebből az adattömegből már ki lehet indulni, ha statisztikai kimutatást is akarsz végezni.

ADATOK VIZUALIZÁLÁSA

Ha van még egy perced, akkor mutatok egy szép adatmegjelenítő eszközt. Menjünk vissza a Blender-be és a BlenderGIS segítségével importáljuk a kimentett 3D vonalakat és a kiinduló-, valamint végállapotot bemutató modelleket. Jól látható, hogy a referencia pontok segítségével megoldottuk a cikk elején bemutatott problémát, tehát a két modell között, ugyanazoknak az azonosítható pontoknak a térbeli változását vizsgáltuk.

A felszínek között végzett távolságmérések vektoros vonalai is szépen vizsgálhatók. Ugyanakkor, már itt is látszódik, hogy pár pont mérése nem esett jó helyre, ezért ezeket az adatokat mindig körültekintően és szigorú ellenőrzések mellett lehet csak felhasználni. Amennyiben szükséges, mindenképp szűrd le ezeket a hibás adatokat!

ZÁRÓ GONDOLATOK

Úgy gondolom, hogy ez a cikk segítségedre lesz abban, hogy egy hasonló távolságméréssel járó feladatot megoldj.

Mindezek mellett muszáj kiemelnem azt, hogy ez egy szakértői munka, így megfelelő látásmódot igényel. Ez alatt azt értem, hogy mindig gondold végig, hogy a kapott eredmények valóban megfelelnek-e a valóságban tapasztalható jelenségeknek.

Ne hidd el vakon, hogy a szoftverek függvényei tökéletes eredményt adnak vissza. Hogyan tudod ezt kiküszöbölni? Mélyedj el a szoftverekben és a felhasznált függvényekben, hogy megtanuld hogyan is működnek! Így pontosan tudni fogod, hogy mire használhatók fel és mik a korlátaik. Minden esetben gondold végig, hogy számodra (a projekt szempontjából) milyen módszer lesz megfelelő és esetleg milyen hibák jöhetnek számításba! Ha meg tudod határozni, hogy milyen hibákkal terhelt a mérésed, akkor könnyebben találsz ezekre valamilyen megoldást.

Tetszett, amit olvastál? Akarsz hasonlókat olvasni?

Ha nagyon-nagyon tetszett, amit olvastál, akkor meg is oszthatod az ismerőseiddel. Ne fogd vissza magad! 🙂