To convert each feature in a GeoDataFrame to a raster and ensure that the raster aligns with the integer coordinates of the resolution given an upper-left x (ulx) and upper-left y (uly) coordinate for the output coordinate system, you can follow these steps:
-
Install Required Libraries: Ensure you have geopandas
, rasterio
, and shapely
installed. You can install them using pip if you haven't already:
pip install geopandas rasterio shapely
-
Load the GeoDataFrame: Load your vector data into a GeoDataFrame.
-
Define the Rasterization Function: Create a function to rasterize each feature.
-
Align the Raster to the Given Coordinates: Ensure the raster aligns with the integer coordinates of the resolution given the ulx and uly.
Here's a complete example:
import geopandas as gpd
import rasterio
from rasterio.features import rasterize
from shapely.geometry import mapping
import numpy as np
def rasterize_feature(feature, ulx, uly, resolution, width, height, out_path):
"""
Rasterize a single feature ensuring alignment with the given ulx, uly, and resolution.
Parameters:
- feature: The feature to rasterize (GeoSeries).
- ulx: Upper-left x coordinate.
- uly: Upper-left y coordinate.
- resolution: The resolution of the raster.
- width: Width of the raster in pixels.
- height: Height of the raster in pixels.
- out_path: Output path for the raster file.
"""
# Create an affine transform for the raster
transform = rasterio.transform.from_origin(ulx, uly, resolution, resolution)
# Create an empty array for the raster
raster = np.zeros((height, width), dtype=np.uint8)
# Rasterize the feature
shapes = [(mapping(feature.geometry), 1)]
raster = rasterize(shapes, out_shape=raster.shape, transform=transform, fill=0, dtype=np.uint8)
# Write the raster to a file
with rasterio.open(
out_path,
'w',
driver='GTiff',
height=height,
width=width,
count=1,
dtype=raster.dtype,
crs=feature.crs,
transform=transform,
) as dst:
dst.write(raster, 1)
# Load your GeoDataFrame
gdf = gpd.read_file('path_to_your_vector_file.shp')
# Define the parameters
ulx = 100000 # Example upper-left x coordinate
uly = 200000 # Example upper-left y coordinate
resolution = 10