A VLOS területek kijelölése kiemelten fontos egy drónos térképező projekt során. A belátható területek, azaz VLOS számítás azt jelenti, hogy kimutatjuk, mely pontról állva láthatja a drónpilóta szabad szemmel a drónt, miközben az elvégzi a térképező missziót. Mi is az a VLOS?
A VLOS a Visual Line of Sight rövidítése, ami azt jelenti, hogy a drónnak a teljes repülési küldetés alatt jól láthatónak kell lennie a drón kezelője számára minden további segítség nélkül.
Az EVLOS az Extended Visual Line of Sight rövidítése. Ez lehetővé teszi a drónok VLOS-nál távolabbi működtetését egy vagy több vizuális megfigyelő használatával. A repülés során a megfigyelők vizuális kapcsolatot tartanak a drónnal, és kommunikálnak a drón kezelőjével és szükség esetén riasztják a pilótát.
A BVLOS a Beyond Visual Line of Sight rövidítése. Ebben az üzemmódban a drón kezelője nem látja végig a drónt a misszió alatt. A drón képes végrehajtani a küldetést megfigyelők segítsége nélkül. A drón kezelője távoli pilótaállomást vagy földi irányító állomást használ a küldetés figyelésére és irányítására.
A meghatározások és az infografika a Fixar.pro-ról származnak.
A VLOS kiszámítására kettő függvény is használható az ingyenes QGIS-ben: GRASS és GDAL. Mindkettő „Viewshed” néven érhető el. A VLOS kiszámítására alkalmas függvény csak pontokkal képes számolni. A Viewshed függvény alapja az a pont geometria, ahonnan érdemes elindítanod a drónt a térképezéshez. A függvény a belátható területeket (VLOS) ebből a pontból számolja ki.
Bonyolítja a helyzetet, hogy valószínűleg nem tudod, hogy hol is lehetnek az optimális pontok. Viszont az is elegendő, ha több területet jelölsz ki, amiken belül keresed, hogy hol kell állnod, hogy ráláss a drónra.
A következő részfeladatokra lehet bontani a VLOS kiszámítását:
- Első lépésben egy területet kell kijelölni.
- A területen belül pontokat kell generálni.
- Harmadik lépésként az összes szóba jöhető pontra le kell futtatni a „Viewshed” függvényt, majd ki kell számolni mindegyik pont belátható területeit hektárban.
- Végezetül, kiválasztjuk azt a pontot, amelyről a legnagyobb terület látható be.
A VLOS területek kijelölése
Amennyiben egy drónos térképező projektben akarsz VLOS térképet generálni, úgy mindenképp szükséged lesz egy domborzatmodellre (DEM). Ha nincs megfelelő DEM-ed, akkor annak beszerzéséről és létrehozásáról már korábban írtunk, ezt mindenképp csekkold.
QGIS-ben a „New Shapefile Layer…” opciót használva hozz létre egy új fájlt. A shapefile-t szerkesztve bejelölheted azokat a területeket, amiket szeretnél megvizsgálni VLOS szempontból. A QGIS szerkesztésről korábban írtunk, ha elakadnál, akkor ezt a cikket olvasd el.
AZ OPTIMÁLIS TERÜLETEN BELÜLI VLOS PONTOK KIOSZTÁSA
A területeken belül a potenciális pontokat választjuk ki. A vizsgálandó VLOS pontok illesztését megteheted, ha a „Vector/Research Tools/Random Points Inside Polygons…” funkciót indítod.
A függvény segítségével a leválogatott területünkön belül szabályos mintázatban elhelyezhetünk pontokat. Válaszd ki az „Input layer” esetében a kijelölt területet, majd állítsd be, hogy mennyi pontot szeretnél elhelyezni a területen belül „Points count”. Itt érdemes nem irreálisan magas számot megadni, hiszen ne feledd, hogy mindegyik pontra különálló térképeket is létre kell hozni! Én beállítottam a minimális távolságot is a pontok között („Minimum distance between points”), hogy egyenletesebb legyen a térbeli kiosztás. Az eredmény egy jól kivehető, szabályos mintázatú ponthalmaz lett.
VLOS TÉRKÉP GENERÁLÁSA drónos térképezéshez
Talán a beláthatóság (viewshed) térkép gyártása jelenti a legnagyobb problémát. Gondolj csak bele, hogy akár 50 pontra manuálisan kell lefuttatni a „Viewshed” függvényt, majd mindegyikre ki kell számolni a belátható területek mértékét. Ha ez több potenciális helyet vagy nagyobb mintavételi sűrűséget jelentene, akkor akár napok elmennének ezzel a lépéssel. De nem nekünk! A lusta ember – mint amilyen én is vagyok – megtanul folyamatokat automatizálni és hagyja, hogy a számítógép dolgozzon helyette. Ráadásul, a kóddal megismételhetővé, ellenőrizhetővé válik egy teljes folyamat. Írjunk egy Python kódot, ami elvégzi helyettünk a piszkos munkát! 🙂
Nyisd meg a „Python Console”-t, majd a „Show Editor” gombot nyomd meg. A szöveges területbe másold be a következő kódot.
Megjegyzés: Mielőtt használnád a szkriptet, pár fontos információt megosztok veled. A kódban kommentelve jeleztem (a # jel utáni szövegrész), hogy milyen változókat kell átírnod. Tehát a kódsorban felülről lefelé haladva: DEM réteg neve; a pontokat tartalmazó réteg neve; a „viewshed” térképek kimentésének abszolút elérési útja a fájl nevével, a “.tif” végződés nélkül. Ügyelj arra, hogy az elérési utat normál perjellel „/” add meg és ne fordított perjellel „\”.
A másik fontos dolog, hogy GDAL függvénnyel írtam meg a kódot. Ha erről többet szeretnél megtudni, akkor itt elolvashatod a részletes leírást.
A maximális VLOS távolságot (‘MAX_DISTANCE’) 100 méterre, az drón magasságát (‘TARGET_HEIGHT’) 50 méterre, míg az ‘OBSERVER_HEIGHT’ értékét 1.8 méterre állítottam be, azaz egy átlagos drónpilóta magasságát. 🙂
A GDAL viewshed függvényhez hozzáadhatod az atmoszférikus hatást is: ‘EXTRA’:’-cc 0.85714′, ezzel még pontosabb eredményt érhetsz el a VLOS számításakor.
import processing
import numpy as np
from osgeo import gdal
i = 0
# Enter the name of the DEM layer
rasterLayer = QgsProject.instance().mapLayersByName('dem')[0]
# Enter the name of the Points layer
pointlayer = QgsProject.instance().mapLayersByName('Random points')[0]
# Enter the file path of the output raster
outputFile = 'C:/Users/.../YOUR FOLDER/viewshed'
new_column = pointlayer.dataProvider()
new_column.addAttributes([QgsField('area', QVariant.Double)])
pointlayer.updateFields()
iter = pointlayer.getFeatures()
for feature in iter:
outputFileTif = outputFile + str(i) + '.tif'
geom = feature.geometry()
observerxy = geom.asPoint()
strobserverxy = str(observerxy[0]) + "," + str(observerxy[1])
processing.run("gdal:viewshed", {
'INPUT': rasterLayer,
'BAND':1,
'OUTPUT': outputFileTif,
'OBSERVER': strobserverxy,
'OBSERVER_HEIGHT': 1.8,
'MAX_DISTANCE': 100,
'TARGET_HEIGHT': 50
})
viewshedLayer = QgsRasterLayer(outputFileTif)
pixel_size_x = viewshedLayer.rasterUnitsPerPixelX()
pixel_size_y = viewshedLayer.rasterUnitsPerPixelY()
hectare_per_cell = pixel_size_x * pixel_size_y / 10000
ds = gdal.Open(outputFileTif)
raster = ds.ReadAsArray()
all_pixels = np.where(raster != 255, np.nan, raster)
total_pixel_area = np.nansum(all_pixels)
total_area_raster = total_pixel_area * hectare_per_cell
atts = {pointlayer.fields().lookupField('area'):float(total_area_raster)}
new_column.changeAttributeValues({feature.id(): atts})
i += 1
Miután beállítottál mindent, nyomj rá a zöld háromszög gombra („Run Script”). A VLOS számítás pár másodperc alatt végbemegy.
Az OPTIMÁLIS HELY KIVÁLASZTÁSA
A szkript futtatása után az eredmény könnyen leolvasható a térképről, ha megnyitjuk a pontok attribútum tábláját. Ezt úgy teheted meg, ha jobb egérgombbal kattintasz a rétegre, majd kiválasztod az „Open Attribute Table” opciót.
Kattints kétszer az új „area” nevű oszlop fejlécére, így az értékeket csökkenő sorrendbe állíthatod. Így már csak a sor elején lévő számra kell kattintani, majd kiválaszthatjuk a legmagasabb értéket. Ez azt jelenti, hogy ebből a kiválasztott pontból látható be a legnagyobb terület. A kód megírása során a területegységeket hektárban határoztam meg.
A drónos térképező projekt tervének megosztása
Amennyiben valakivel szeretnéd megosztani a VLOS számítás eredményeit, úgy ezeket a térképeket könnyen megoszthatod a SurveyTransfer-rel. A repülés eredményeit ezután szintén feltöltheted a SurveyTransfer projektedbe, ahonnan elérhetővé válik a projekt összes tériformatikai adatkészlete.
Töltsd le, nézd meg a SurveyTransfer demo “VLOS számítás” projektet:
Ha nagyon-nagyon tetszett, amit olvastál, akkor meg is oszthatod az ismerőseiddel. Ne fogd vissza magad! 🙂
Tetszett, amit olvastál? Akarsz hasonlókat olvasni?