1111import shapely
1212import numpy
1313from typing import Optional
14+ from osgeo import gdal
1415
1516
1617class Sampler (ABC ):
@@ -74,7 +75,7 @@ def __init__(self, decimation: int = 1):
7475
7576 @beartype .beartype
7677 def sample (
77- self , spatial_data : geopandas .GeoDataFrame , dtm_data : Optional [geopandas . GeoDataFrame ] = None , geology_data : Optional [geopandas .GeoDataFrame ] = None
78+ self , spatial_data : geopandas .GeoDataFrame , dtm_data : Optional [gdal . Dataset ] = None , geology_data : Optional [geopandas .GeoDataFrame ] = None
7879 ) -> pandas .DataFrame :
7980 """
8081 Execute sample method takes full point data, samples the data and returns the decimated points
@@ -88,10 +89,16 @@ def sample(
8889 data = spatial_data .copy ()
8990 data ["X" ] = data .geometry .x
9091 data ["Y" ] = data .geometry .y
91- data ["Z" ] = set_z_values_from_raster_df (dtm_data , data )["Z" ]
92- data ["layerID" ] = geopandas .sjoin (
93- data , geology_data , how = 'left'
94- )['index_right' ]
92+ if dtm_data is not None :
93+ data ["Z" ] = set_z_values_from_raster_df (dtm_data , data )["Z" ]
94+ else :
95+ data ["Z" ] = None
96+ if geology_data is not None :
97+ data ["layerID" ] = geopandas .sjoin (
98+ data , geology_data , how = 'left'
99+ )['index_right' ]
100+ else :
101+ data ["layerID" ] = None
95102 data .reset_index (drop = True , inplace = True )
96103
97104 return pandas .DataFrame (data [:: self .decimation ].drop (columns = "geometry" ))
0 commit comments