2017-03-11 1 views
0

Ich arbeite an Lidar (Light Detection and Ranging) Daten, um eine Ausgabe namens CHM (Baldachin Höhe Modell) zu erzeugen. Ich brauche zwei Arten von Dateien mit der gleichen Erweiterung, die in zwei verschiedenen Ordnern gespeichert ist. Im Grunde haben diese beiden Dateien nicht die gleichen Eigenschaften, also versuche ich, unterschiedliche Funktionen für die in zwei Ordnern gespeicherten Dateien anzuwenden. Zum Beispiel, hier ist der Code, den ichWie verarbeitet man mehrere Dateien aus zwei Ordnern in einer Schleife mit R

Einstellen des Verzeichnisses für eine Art von Dateien

setwd("D:\\Raw_RS_Data\\LiDAR_Ground")

getwd()

fileList <- list.files(path "D:\\Raw_RS_Data\\LiDAR_Ground", pattern = ".las") filelist

for (i in 1:length(fileList)) # apply loop function for all the files in this folder 

{

ausführen möchten

MyLas <- readLAS(fileList[i]) # Lesen Sie alle las Dateien im Verzeichnis MyDTM <- grid_terrain(MyLas, res = 0.5, method = "knnidw", k = 6) # DTM von den las Dateien # Benötigen Sie das Verzeichnis für andere Dateien zu ändern, in dem Ordner gespeichert erstellen „D: \ Raw_RS_Data \ LiDAR_Non_Ground“ und führen Sie die Funktion lasnormalize in der

gleiche Schleife

MyNorm <- lasnormalize(MyLas, MyDTM) # Normalisieren der lasfiles

der endgültige Ausgang ich brauche CHM ist und hier ist die Funktion für CHM

MyCHM = grid_canopy(MyNorm, res = 0.5, start = c(0, 0))

}

Alternativ, wenn ich diese Dateien in dem anderen Ordner kombinieren kann, könnte ich die Funktion mit nur einer Schleife anwenden. Also, weiß auch nicht, wie man die Dateien aus verschiedenen Ordnern zu einem zusammenfügt.

Danke und Grüße, Yogendra

+0

Ich bin mir nicht sicher, ob ich Ihre Frage verstehe. Benötigen Sie die Dateien in den zwei separaten Ordnern, die innerhalb von Iterationen verarbeitet werden sollen, oder ist es aus praktischen Gründen nicht möglich, sie in derselben Schleife zu verarbeiten? –

+0

Ich möchte sie (Dateien in zwei Ordnern gespeichert) in der gleichen Schleife aber mit unterschiedlicher Funktion verarbeiten. –

+0

könnten Sie bitte auch den Code in der Frage formatieren? –

Antwort

0

Würde die folgende Arbeit? Die Frage ist ein bisschen zweideutig, aber hier ist mein Schuss auf der Interpretation:

#note that in general using "/" is better than "\" 
file_path.1 = "D:/folder/non_ground" 
file_path.2 = "D:/folder/ground" 

#get the files of interest with full path name 
files_non_ground = paste(file_path.1,dir(file_path.1, ".las"), sep='/') 
files_ground = paste(file_path.1,dir(file_path.2, ".las"), sep='/') 

#concatenate them into a single vector 
files = c(files_non_ground, files_ground) 

#initiate some storage container 
out.list = list() 

#iterate over files: 
for(f in files){ 
    MyLas <- readLAS(f) 
    MyDTM <- grid_terrain(MyLas, res = 0.5, method = "knnidw", k = 6) 
    MyNorm <- lasnormalize(MyLas, MyDTM) 
    writeLAS(MyNorm,sub(".las", "norm.las", f)) 
    #out.list[f] = MyNorm 
} 

Nur bitte beachten Sie, dass ich nicht sicher bin, was im Innern der for Schleife passiert, das oben ist nur meine Vermutung. Außerdem denke ich, dass es im Allgemeinen vorzuziehen ist, vollständige Dateipfadnamen anstelle von Verzeichnissen zu verwenden, insbesondere wenn es sich um mehrere Ordner handelt.

+0

Hallo, ich habe den Code, den Sie vorgeschlagen haben, versucht, es funktioniert. Aber wie könnte ich die MyNorm-Datei mit den gleichen oder einem Teil der Zeichen des Dateinamens aus der Dateiliste in einem meiner Ordner speichern? Kann ich auch eine neue Ausgabedatei in derselben Schleife erstellen, die im angegebenen Pfad gespeichert wird? Hier ist mein Code, den ich die Ausgabedatei in einer Schleife nach dem Erstellen der MyNorm-Datei speichern möchte. 'output <- paste0 (substr (Dateien [i], Start = 1, Stopp = 11)," norm.las ")' 'dir.create (paste0 ("NORM"), showWarnings = FALSCH) ' ' NormLas <- writeLAS (MyNorm, Datei.Pfad (paste0 ("NORM"), Ausgabe)) ' –

+0

Also im Grunde möchten Sie die MyNorm-Datei speichern mit dem '" norm.las "' ersetzen den ".las" 'Teil der Datei? 'f' enthält den gesamten Dateipfad, also muss man nur' writeLAS (MyNorm, sub (". las", "norm.las", f)) ' –

+0

Es hat nur die selbe Datei umgeschrieben (gleiche Dateigröße) mit einem anderen Namen, führte jedoch die Funktion "MyDTM" nicht aus dem anderen Ordner aus. Ich denke, es dauerte nur die Dateien aus einem Ordner namens "Boden" und neu in den gleichen Ordner geschrieben, während ich die Dateien aus "Grund" Ordner verwenden wollte, um MyDTM zu erstellen, die nach MyNorm-Funktion verwendet werden. Die Dateien aus dem Ordner "non_ground" werden für die MyNorm-Funktion zusammen mit MyDTM verwendet. Eigentlich möchte ich die Dateien aus zwei Ordnern verwenden, eine für eine Funktion namens MyDTM und eine andere für MyNorm, die auch die MyDTM verwendet. –

Verwandte Themen