I'm new in coding. I have a shapefile (points) and some raster files. My purpose is get the values from all raster to point (each point will get value from 2 or 3 nearest cell,the value on the value of cell and distance of the point to cell). I already built code for that and it is working but it takes so much time for running.
Could you optimize the code to make it run faster?
import rioxarray as rxr
import geopandas as gpd
### definition extract_raster:
def extract_raster(points_gdf, raster_xarray):
extracted_values = []
for _, point in points_gdf.iterrows():
value = raster_xarray.interp(x=point.geometry.x, y=point.geometry.y)
extracted_values.append(value.values)
column_name = 'raw'
points_gdf[column_name] = extracted_values
points_gdf[column_name] = points_gdf[column_name].astype(float)
return points_gdf
# import data
lidar_chm_path = r"D:\CHM\CHM.tif"
lidar_chm_xr = rxr.open_rasterio(lidar_chm_path, masked=True).squeeze()
NFI_path = r"D:\SHP_file\Final_NFI.shp"
NFI_data = gpd.read_file(NFI_path)
##CHM
extract_raster(NFI_data, lidar_chm_xr)
NFI_data.rename(columns={'raw': 'CHM'}, inplace=True)