Spaces:
Sleeping
Sleeping
| import pandas as pd | |
| import geopandas as gpd | |
| from shapely.geometry import Point | |
| import re | |
| import os | |
| # Assuming __file__ contains the absolute path to the current file | |
| current_dir = os.path.dirname(__file__) | |
| shapefile_path = os.path.join(current_dir, "soil/30169_L93/30169_L93.shp") | |
| stu_path = os.path.join(current_dir,'soil/stu.csv') | |
| smu_path = os.path.join(current_dir,'soil/smu.csv') | |
| stuorg_path = os.path.join(current_dir,'soil/stuorg.csv') | |
| smu_stu_path = os.path.join(current_dir,'soil/attricod.txt') | |
| def read_soil_types(file_path): | |
| soil_types = {} | |
| with open(file_path, 'r') as file: | |
| for line in file: | |
| # Using regular expression to match short name and full name | |
| match = re.match(r'^\s*([A-Za-z]+)\s+(.*)\s*$', line) | |
| if match: | |
| short_name, full_name = match.groups() | |
| soil_types[short_name] = full_name.strip() | |
| return soil_types | |
| def get_full_soil_names(short_names, soil_types): | |
| full_names = [] | |
| for short_name in short_names: | |
| full_name = soil_types.get(short_name) | |
| if full_name: | |
| full_names.append(full_name) | |
| return full_names | |
| def get_soil_types(lat, lon): | |
| 'SOIL Full 1974 (modified CEC 1985) FAO-Unesco legend soil name.' | |
| gdf = gpd.read_file(shapefile_path) | |
| gdf = gdf.to_crs(4326) | |
| stu = pd.read_csv(stu_path, delimiter=";") | |
| smu = pd.read_csv(smu_path, delimiter=";") | |
| stuorg = pd.read_csv(stuorg_path, delimiter=";") | |
| point = Point(lon, lat) | |
| for idx, row in gdf.iterrows(): | |
| if row.geometry.contains(point): | |
| break | |
| smu = row['SMU'] | |
| stu_list = stuorg[stuorg["smu"] == smu]['stu'].tolist() | |
| all_stu = stu[stu["stu"].isin(stu_list)] | |
| soiltypes_shortnames = all_stu['soil'].tolist() | |
| soiltypes = read_soil_types(smu_stu_path) | |
| soiltypes_fullnames = get_full_soil_names(soiltypes_shortnames, soiltypes) | |
| return soiltypes_fullnames | |