mtl_gis_oo/basic_functions.py
2024-08-05 17:55:32 -04:00

75 lines
2.2 KiB
Python

"""
basic_functions module
A number of functionalities that help the project
but cannot be a part of the PyQGIS tool.
Project Developer: Alireza Adli alireza.adli@concordia.ca
"""
import os
import glob
import processing
from qgis.core import QgsApplication
from qgis.analysis import QgsNativeAlgorithms
def find_shp_files(root_folder):
shp_files = []
# Sort folders alphabetically
for foldername, _, _ in sorted(os.walk(root_folder)):
for filename in sorted(glob.glob(os.path.join(foldername, '*.shp'))):
new_file_name = filename.replace('\\', r'/')
shp_files.append(new_file_name)
return shp_files
def find_las_files(root_folder):
las_files = []
# Sort folders alphabetically
for foldername, _, _ in sorted(os.walk(root_folder)):
for filename in sorted(glob.glob(os.path.join(foldername, '*.las'))):
new_file_name = filename.replace('\\', r'/')
las_files.append(new_file_name)
return las_files
def create_folders(directory, num_folders):
"""
Create a specified number of folders in the given directory.
Args:
- directory (str): The directory where folders will be created.
- num_folders (int): The number of folders to create.
"""
# Check if the directory exists, if not, create it
if not os.path.exists(directory):
os.makedirs(directory)
# Create folders
for i in range(num_folders):
folder_name = f"layer_{i}"
folder_path = os.path.join(directory, folder_name)
os.makedirs(folder_path)
print(f"Created folder: {folder_path}")
def create_output_folders(paths_dict, output_dir):
for path in paths_dict.keys():
new_folder = path.lower().replace(' ', '_')
output_path = output_dir + '/' + new_folder
os.mkdir(output_path)
if path[-1] != 's':
paths_dict[path] = output_path + f'/{new_folder}.shp'
else:
paths_dict[path] = output_path
def merge_las_layers(layers_path, mergeded_layer_path):
merging_layers = find_las_files(layers_path)
QgsApplication.processingRegistry().addProvider(QgsNativeAlgorithms())
params = {'LAYERS': merging_layers,
'CRS': None,
'OUTPUT': mergeded_layer_path}
processing.run("native:mergevectorlayers", params)