4.1 KiB
4.1 KiB
Geometric Operations
GeoPandas provides extensive geometric manipulation through Shapely integration.
Constructive Operations
Create new geometries from existing ones:
Buffer
Create geometries representing all points within a distance:
# Buffer by fixed distance
buffered = gdf.geometry.buffer(10)
# Negative buffer (erosion)
eroded = gdf.geometry.buffer(-5)
# Buffer with resolution parameter
smooth_buffer = gdf.geometry.buffer(10, resolution=16)
Boundary
Get lower-dimensional boundary:
# Polygon -> LineString, LineString -> MultiPoint
boundaries = gdf.geometry.boundary
Centroid
Get center point of each geometry:
centroids = gdf.geometry.centroid
Convex Hull
Smallest convex polygon containing all points:
hulls = gdf.geometry.convex_hull
Concave Hull
Smallest concave polygon containing all points:
# ratio parameter controls concavity (0 = convex hull, 1 = most concave)
concave_hulls = gdf.geometry.concave_hull(ratio=0.5)
Envelope
Smallest axis-aligned rectangle:
envelopes = gdf.geometry.envelope
Simplify
Reduce geometric complexity:
# Douglas-Peucker algorithm with tolerance
simplified = gdf.geometry.simplify(tolerance=10)
# Preserve topology (prevents self-intersections)
simplified = gdf.geometry.simplify(tolerance=10, preserve_topology=True)
Segmentize
Add vertices to line segments:
# Add vertices with maximum segment length
segmented = gdf.geometry.segmentize(max_segment_length=5)
Union All
Combine all geometries into single geometry:
# Union all features
unified = gdf.geometry.union_all()
Affine Transformations
Mathematical transformations of coordinates:
Rotate
# Rotate around origin (0, 0) by angle in degrees
rotated = gdf.geometry.rotate(angle=45, origin='center')
# Rotate around custom point
rotated = gdf.geometry.rotate(angle=45, origin=(100, 100))
Scale
# Scale uniformly
scaled = gdf.geometry.scale(xfact=2.0, yfact=2.0)
# Scale with origin
scaled = gdf.geometry.scale(xfact=2.0, yfact=2.0, origin='center')
Translate
# Shift coordinates
translated = gdf.geometry.translate(xoff=100, yoff=50)
Skew
# Shear transformation
skewed = gdf.geometry.skew(xs=15, ys=0, origin='center')
Custom Affine Transform
from shapely import affinity
# Apply 6-parameter affine transformation matrix
# [a, b, d, e, xoff, yoff]
transformed = gdf.geometry.affine_transform([1, 0, 0, 1, 100, 50])
Geometric Properties
Access geometric properties (returns pandas Series):
# Area
areas = gdf.geometry.area
# Length/perimeter
lengths = gdf.geometry.length
# Bounding box coordinates
bounds = gdf.geometry.bounds # Returns DataFrame with minx, miny, maxx, maxy
# Total bounds for entire GeoSeries
total_bounds = gdf.geometry.total_bounds # Returns array [minx, miny, maxx, maxy]
# Check geometry types
geom_types = gdf.geometry.geom_type
# Check if valid
is_valid = gdf.geometry.is_valid
# Check if empty
is_empty = gdf.geometry.is_empty
Geometric Relationships
Binary predicates testing relationships:
# Within
gdf1.geometry.within(gdf2.geometry)
# Contains
gdf1.geometry.contains(gdf2.geometry)
# Intersects
gdf1.geometry.intersects(gdf2.geometry)
# Touches
gdf1.geometry.touches(gdf2.geometry)
# Crosses
gdf1.geometry.crosses(gdf2.geometry)
# Overlaps
gdf1.geometry.overlaps(gdf2.geometry)
# Covers
gdf1.geometry.covers(gdf2.geometry)
# Covered by
gdf1.geometry.covered_by(gdf2.geometry)
Point Extraction
Extract specific points from geometries:
# Representative point (guaranteed to be within geometry)
rep_points = gdf.geometry.representative_point()
# Interpolate point along line at distance
points = line_gdf.geometry.interpolate(distance=10)
# Interpolate point at normalized distance (0 to 1)
midpoints = line_gdf.geometry.interpolate(distance=0.5, normalized=True)
Delaunay Triangulation
# Create triangulation
triangles = gdf.geometry.delaunay_triangles()