Geoprocessing
This section provides an overview of the features for processing rasters and shapefiles.
Class Instance
To begin, instantiate the required classes as follows:
import GeoAnalyze
raster = GeoAnalyze.Raster()
shape = GeoAnalyze.Shape()
visual = GeoAnalyze.Visual()
Raster Array from a Shapefile
To generate the stream network raster from the shapefile produced in the Delineation Outputs section, use the following code:
# stream raster with a mask file
raster.array_from_geometries(
shape_file=r"C:\users\username\folder\stream_lines.shp",
value_column='flw_id',
mask_file=r"C:\users\username\folder\dem_clipped.tif",
output_file=r"C:\users\username\folder\stream_lines.tif"
)
# stream raster without mask
raster.array_from_geometries_without_mask(
shape_file=r"C:\users\username\folder\stream_lines.shp",
value_column='flw_id',
resolution=16,
output_file=r"C:\users\username\folder\stream_lines.tif"
)
Rescaling Raster Resolution
To rescale the raster resolution (e.g., from 15.49 m to 20 m), use the following code:
# rescaling raster resolution
raster.resolution_rescaling(
input_file=r"C:\users\username\folder\dem_clipped.tif",
target_resolution=20,
resampling_method='bilinear',
output_file=r"C:\users\username\folder\dem_clipped_20m.tif"
)
Linear Transformation of Raster Values
To apply a linear transformation to the raster values, use the following code:
# linear transformation of raster values (scale * array + offset)
raster.value_scale_and_offset(
input_file=r"C:\users\username\folder\input.tif",
output_file=r"C:\users\username\folder\output.tif"
scale=10,
offset=5
)
Clipping a Raster Using a Shapefile
To clip a raster using the extent of a shapefile, use the following code:
# raster clipping using a shapefile
raster.clipping_by_shapes(
input_file=r"C:\users\username\folder\dem.tif",
shapefile=r"C:\users\username\folder\area.shp",
output_file=r"C:\users\username\folder\dem_clipped.tif"
)
Overlaying Geometries onto a Raster
To overlay geometries from a shapefile onto a raster, use the following code:
# overlaying geometries to a raster
raster.overlaid_with_geometries(
input_file=r"C:\users\username\folder\landuse.tif",
shapefile=r"C:\users\username\folder\stream.shp",
value_column='flw_id',
output_file=r"C:\users\username\folder\landuse_stream.tif"
)
Reprojecting Coordinate Reference System (CRS)
To reproject rasters and shapefiles to a different Coordinate Reference System (CRS), use the following code:
# reprojecting raster CRS
raster.crs_reprojection(
input_file=r"C:\users\username\folder\dem.tif",
resampling_method='bilinear',
target_crs='EPSG:3067',
output_file=r"C:\users\username\folder\dem_crs.tif"
)
# reprojecting shapefile CRS
shape.crs_reprojection(
input_file=r"C:\users\username\folder\dem_boundary.shp",
target_crs='EPSG:3067',
output_file=r"C:\users\username\folder\dem_boundary_crs.shp"
)
Generating Boundaries of a Raster
To generate the boundary polygons of a raster, use the following code:
# extracting raster boundaries
raster.boundary_polygon(
raster_file=r"C:\users\username\folder\dem.tif",
shape_file=r"C:\users\username\folder\dem_boundary.shp"
)
Trimming a Raster
To trim rows and columns that contain only NoData values, use the following code:
# trimming NoData rows and columns
raster.nodata_extent_trimming(
input_file=r"C:\users\username\folder\dem.tif",
output_file=r"C:\users\username\folder\dem_nodata_trim.tif"
)
Extending a Raster Spatial Extent
To extend the spatial extent of a raster and reclassify values outside its original boundary, use the following code:
# extend the spatial extent of an area raster using an extent raster
raster.reclassify_value_outside_boundary(
area_file=r"C:\users\username\folder\area.tif",
extent_file=r"C:\users\username\folder\extent.tif",
outside_value=1,
output_file=r"C:\users\username\folder\area_extended.tif"
)
Note
This function can also be used to fill missing values in the area raster by providing an extent raster that has the same spatial extent and contains valid values in the missing regions.
Computing Raster Statistics
To compute basic statistics from a raster file, use the following code:
# raster statistics
raster.statistics_summary(
raster_file=r"C:\users\username\folder\landuse.tif"
)
To compute summary statistics based on reference zones, use the following code:
# raster statistics by reference zone
output = raster.statistics_summary_by_reference_zone(
value_file=r"C:\users\username\folder\dem.tif",
zone_file=r"C:\users\username\folder\landuse.tif",
csv_file=r"C:\users\username\folder\statistics_dem_by_landuse.csv"
)
Counting Raster Values
To count different types of values in a raster, use the following code:
# counting unique values
raster.count_unique_values(
raster_file=r"C:\users\username\folder\landuse.tif",
csv_file=r"C:\users\username\folder\landuse_count.csv"
)
# counting valid data cells
raster.count_data_cells(
raster_file=r"C:\users\username\folder\landuse.tif"
)
# counting Nodata cells
raster.count_nodata_cells(
raster_file=r"C:\users\username\folder\landuse.tif"
)
Extracting Raster Values by Mask
To extract values from an input raster based on a mask raster, use the following code:
# extracting raster values by mask
raster.extract_value_by_mask(
input_file=r"C:\users\username\folder\flwdir.tif",
mask_file=r"C:\users\username\folder\stream.tif",
output_file=r"C:\users\username\folder\flwdir_extract.tif"
)
Merging Raster Files
To merge raster files of the same type, store them in a folder (without mixing other rasters), and use the following code:
# merging raster files
raster.merging_files(
folder_path=r"C:\users\username\raster_folder",
raster_file=r"C:\users\username\folder\merge.tif"
)
Changing Raster Driver
To rewrite a raster file using a different driver, use the following code:
# changing raster driver
raster.driver_convert(
input_file=r"C:\users\username\folder\input.tif",
target_driver='RST',
output_file=r"C:\users\username\folder\output.rst"
)
Vectorizing Raster Array
To generate the geometries for selected values in a raster, use the following code:
# raster to geometries
raster.array_to_geometries(
raster_file=r"C:\users\username\folder\subbasin.tif",
select_value=[5, 6],
shapefile_file=r"C:\users\username\folder\subbasin.shp"
)
Aggregating Geometries
To aggregate geometries of a specified type from shapefiles in a folder, use the following code:
# aggregating polygon geometries
aggregate_gdf = shape.aggregate_geometries(
folder_path=r"C:\users\username\shapefile_folder",
geometry_type='Polygon',
column_name='pid',
output_file=r"C:\users\username\folder\aggregate_polygons.shp"
)
Geometry Area by Target Column
To calculate the area of geometries grouped by the unique values in a specific column, use the following code:
shape.column_area_by_value(
shape_file=r"C:\users\username\folder\input.shp",
column_name='id',
csv_file=r"C:\users\username\folder\area.csv"
)
Extract Geometries by Spatial Join
To extract lakes that intersect with the stream network generated in the Delineation Outputs section, use the following code:
# lake extraction
extract_gdf = shape.extract_spatial_join_geometries(
input_file=r"C:\users\username\folder\lake_fill.shp",
overlay_file=r"C:\users\username\folder\stream_lines.shp",
output_file=r"C:\users\username\folder\lake_extracted.shp"
)
Filling Polygons
The following code merges overlapping polygons, explodes multipart geometries, and fills any holes within polygons.
In this example, we use the lake shapefile obtained from the GeoAnalyze.PackageData class.
Before filling, we perform column operations to assign and retain an ID for each lake polygon.
# accessing lake shapefile
lake_gdf = packagedata.geodataframe_lake
lake_file = r"C:\users\username\folder\lake.shp"
lake_gdf.to_file(lake_file)
# adding ID column
lake_gdf = shape.column_add_for_id(
input_file=lake_file,
column_name='lid',
output_file=lake_file
)
# retaining ID column only
lake_gdf = shape.column_retain(
input_file=lake_file,
retain_cols=['lid'],
output_file=lake_file
)
# fill polygons after merging, if any
lake_gdf = shape.polygon_fill_after_merge(
input_file=lake_file,
column_name='lid',
output_file=r"C:\users\username\folder\lake_fill.shp"
)
Quick Visualization of Geospatial Data
To get a quick view of the input geospatial data without customization, use the following code:
# raster quick view
visual.quickview_raster(
raster_file=r"C:\users\username\folder\input_raster.tif",
figure_file=r"C:\users\username\folder\output_figure.png",
gui_window=False
)
# raster quick view with color map in log scale
visual.quickview_raster(
raster_file=r"C:\users\username\folder\input_raster.tif",
figure_file=r"C:\users\username\folder\output_figure.png",
log_scale=True,
gui_window=False
)
# shapefile column quick view
visual.quickview_geometry(
shape_file=r"C:\users\username\folder\input_shape.tif",
column_name='target_column'
figure_file=r"C:\users\username\folder\output_figure.png"
)