$zipFile=$args[0] $targetFolder=$args[1] # Unzip files from all subdirectories to new folder Expand-Archive -LiteralPath $zipFile -DestinationPath $targetFolder Get-ChildItem -Path "$targetFolder\*.zip" -Recurse | Move-Item -Destination $targetFolder Get-ChildItem -Path $targetFolder -Directory | Remove-Item -Recurse # Create hash of zip files, by name (location, date) $zipFileList = @{} Get-ChildItem -Path "$targetFolder\*.zip" -Name | ForEach-Object { $zipFileList.add($_, @{}) $_ -match '(\d{7})_(\d{2})' $zipFileList[$_]['location'] = $Matches.1 $zipFileList[$_]['zone'] = $Matches.2 $_ -match '[^_\d](\d{6})' $zipFileList[$_]['date'] = $Matches.1 } # $zipFileList | ConvertTo-Json # Create hash of location (date, name) $locationList = @{} $zoneCount = @{} $zipFileList.keys | ForEach-Object { if($locationList[$zipFileList[$_]['location']]) { $t = $locationList[$zipFileList[$_]['location']] $t.add($zipFileList[$_]['date'],$_) } else { $t = @{} $t.add($zipFileList[$_]['date'],$_) $locationList.add($zipFileList[$_]['location'],$t) } if($zoneCount[$zipFileList[$_]['zone']]) { $zoneCount[$zipFileList[$_]['zone']]++ } else { $zoneCount[$zipFileList[$_]['zone']] = 1 } } # $locationList | ConvertTo-Json # $zoneCount | ConvertTo-Json # Create archive folder $archiveFolder = "$targetFolder\archive" If(!(test-path $archiveFolder)) { New-Item -ItemType Directory -Force -Path $archiveFolder } # Sort each location by date desc, and move old files to /archive $locationList.keys | ForEach-Object { $i=0 $locationList[$_].GetEnumerator() | sort key -des | ForEach-Object { if ($i -eq 0) { $i++ return} else { #$_ | ConvertTo-Json $s = $_.Value Move-Item -Path "$targetFolder\$s" -Destination "$targetFolder\archive\$s" } } } # You can't build a VRT with files from a different projection, so # delete files from outside main zone # This could probably be altered to include a step to reproject those files $mainZone = '' $zoneCount.GetEnumerator() | sort value -des | select -first 1 | ForEach-Object { $mainZone = $_.Name } $zipFileList.keys | ForEach-Object { if($zipFileList[$_]['zone'] -ne $mainZone) { Remove-Item -Path "$targetFolder\$_" } } Get-ChildItem -Path "$targetFolder\*.zip" | Expand-Archive -DestinationPath $targetFolder $Env:Path += ";C:\OSGEO4~1\apps\Python27\Scripts;C:\OSGEO4~1\bin" $Env:GDAL_DATA="C:\OSGEO4~1\share\gdal" $Env:GDAL_DRIVER_PATH="C:\OSGEO4~1\bin\gdalplugins" $Env:PROJ_LIB="C:\OSGEO4~1\share\proj" Get-ChildItem -Path "$targetFolder\*.asc" | ForEach-Object { $srcFile = $_.FullName $destFile = $_.FullName -replace '.asc', '.tif' &"gdal_translate.exe" -of "GTiff" $srcFile $destFile } Get-ChildItem -Path "$targetFolder\*.asc" | Remove-Item -Recurse Get-ChildItem -Path "$targetFolder\*.html" | Remove-Item -Recurse Get-ChildItem -Path "$targetFolder\*.prj" | Remove-Item -Recurse Get-ChildItem -Path "$targetFolder\*.xml" | Remove-Item -Recurse # Create current folder $currentFolder = "$targetFolder\current" If(!(test-path $currentFolder)) { New-Item -ItemType Directory -Force -Path $currentFolder } # Move zip files to current folder Move-Item -Path "$targetFolder\*.zip" -Destination "$currentFolder" # Zip /archive & /current to new zip folder Compress-Archive -Path "$targetFolder\current", "$targetFolder\archive" -DestinationPath "$targetFolder\temp.zip" # Create 2m vrt New-Item "$targetFolder\input.txt" Get-ChildItem -Path "$targetFolder\*.tif" | Add-Content "$targetFolder\input.txt" &"gdalbuildvrt.exe" -resolution user -tr 2 2 -input_file_list "$targetFolder\input.txt" "$targetFolder\temp.vrt"