Shapely Compute

by parcadeid07ff4b06b62No license3.9K starsListed Oct 8, 2026Updated Oct 8, 2026Repository updated 8 months ago

Computational geometry with Shapely - create geometries, boolean operations, measurements, predicates

Instructions onlyData & Analytics
AI-generated overview

Performs computational geometry with Shapely: creates shapes, runs boolean operations, tests spatial predicates and measures geometries.

What it does
This skill documents a command-line workflow for computational geometry using Shapely. It covers creating points, lines, polygons and multi-geometries from coordinate strings or WKT, applying boolean operations such as intersection, union, difference, buffer, convex hull and simplify, testing spatial predicates like contains, intersects and within, and computing measurements including area, length, distance, centroid and bounds. It also supports affine transforms, validity checking and repair, coordinate extraction and WKT parsing, with results returned as JSON.
When to use it
Use it when a task involves geometric shapes, spatial relationships or coordinate math, such as collision detection, point-in-polygon tests, area or distance calculations, buffer zones or shape combination and subtraction. It suits geometry questions that can be expressed with WKT or coordinate lists.
Requirements
Requires the Shapely Python package and a Python runtime with uv to run the referenced script; the skill itself ships instructions only, with no scripts or assets included.

Computational Geometry with Shapely

When to Use

  • Creating geometric shapes (points, lines, polygons)
  • Boolean operations (intersection, union, difference)
  • Spatial predicates (contains, intersects, within)
  • Measurements (area, length, distance, centroid)
  • Geometry transformations (translate, rotate, scale)
  • Validating and fixing invalid geometries

Quick Reference

I want to...CommandExample
Create geometrycreatecreate polygon --coords "0,0 1,0 1,1 0,1"
Intersectionop intersectionop intersection --g1 "POLYGON(...)" --g2 "POLYGON(...)"
Check containspred containspred contains --g1 "POLYGON(...)" --g2 "POINT(0.5 0.5)"
Calculate areameasure areameasure area --geom "POLYGON(...)"
Distancedistancedistance --g1 "POINT(0 0)" --g2 "POINT(3 4)"
Transformtransform translatetransform translate --geom "..." --params "1,2"
Validatevalidatevalidate --geom "POLYGON(...)"

Commands

create

Create geometric objects from coordinates.

bash
# Pointuv run python scripts/shapely_compute.py create point --coords "1,2"
# Line (2+ points)uv run python scripts/shapely_compute.py create line --coords "0,0 1,1 2,0"
# Polygon (3+ points, auto-closes)uv run python scripts/shapely_compute.py create polygon --coords "0,0 1,0 1,1 0,1"
# Polygon with holeuv run python scripts/shapely_compute.py create polygon --coords "0,0 10,0 10,10 0,10" --holes "2,2 8,2 8,8 2,8"
# MultiPointuv run python scripts/shapely_compute.py create multipoint --coords "0,0 1,1 2,2"
# MultiLineString (pipe-separated lines)uv run python scripts/shapely_compute.py create multilinestring --coords "0,0 1,1|2,2 3,3"
# MultiPolygon (pipe-separated polygons)uv run python scripts/shapely_compute.py create multipolygon --coords "0,0 1,0 1,1 0,1|2,2 3,2 3,3 2,3"

op (operations)

Boolean geometry operations.

bash
# Intersection of two polygonsuv run python scripts/shapely_compute.py op intersection \    --g1 "POLYGON((0 0,2 0,2 2,0 2,0 0))" \    --g2 "POLYGON((1 1,3 1,3 3,1 3,1 1))"
# Unionuv run python scripts/shapely_compute.py op union --g1 "POLYGON(...)" --g2 "POLYGON(...)"
# Difference (g1 - g2)uv run python scripts/shapely_compute.py op difference --g1 "POLYGON(...)" --g2 "POLYGON(...)"
# Symmetric difference (XOR)uv run python scripts/shapely_compute.py op symmetric_difference --g1 "..." --g2 "..."
# Buffer (expand/erode)uv run python scripts/shapely_compute.py op buffer --g1 "POINT(0 0)" --g2 "1.5"
# Convex hulluv run python scripts/shapely_compute.py op convex_hull --g1 "MULTIPOINT((0 0),(1 1),(0 2),(2 0))"
# Envelope (bounding box)uv run python scripts/shapely_compute.py op envelope --g1 "POLYGON(...)"
# Simplify (reduce points)uv run python scripts/shapely_compute.py op simplify --g1 "LINESTRING(...)" --g2 "0.5"

pred (predicates)

Spatial relationship tests (returns boolean).

bash
# Does polygon contain point?uv run python scripts/shapely_compute.py pred contains \    --g1 "POLYGON((0 0,2 0,2 2,0 2,0 0))" \    --g2 "POINT(1 1)"
# Do geometries intersect?uv run python scripts/shapely_compute.py pred intersects --g1 "..." --g2 "..."
# Is g1 within g2?uv run python scripts/shapely_compute.py pred within --g1 "POINT(1 1)" --g2 "POLYGON(...)"
# Do geometries touch (share boundary)?uv run python scripts/shapely_compute.py pred touches --g1 "..." --g2 "..."
# Do geometries cross?uv run python scripts/shapely_compute.py pred crosses --g1 "LINESTRING(...)" --g2 "LINESTRING(...)"
# Are geometries disjoint (no intersection)?uv run python scripts/shapely_compute.py pred disjoint --g1 "..." --g2 "..."
# Do geometries overlap?uv run python scripts/shapely_compute.py pred overlaps --g1 "..." --g2 "..."
# Are geometries equal?uv run python scripts/shapely_compute.py pred equals --g1 "..." --g2 "..."
# Does g1 cover g2?uv run python scripts/shapely_compute.py pred covers --g1 "..." --g2 "..."
# Is g1 covered by g2?uv run python scripts/shapely_compute.py pred covered_by --g1 "..." --g2 "..."

measure

Geometric measurements.

bash
# Area (polygons)uv run python scripts/shapely_compute.py measure area --geom "POLYGON((0 0,1 0,1 1,0 1,0 0))"
# Length (lines, polygon perimeter)uv run python scripts/shapely_compute.py measure length --geom "LINESTRING(0 0,3 4)"
# Centroiduv run python scripts/shapely_compute.py measure centroid --geom "POLYGON((0 0,2 0,2 2,0 2,0 0))"
# Bounds (minx, miny, maxx, maxy)uv run python scripts/shapely_compute.py measure bounds --geom "POLYGON(...)"
# Exterior ring (polygon only)uv run python scripts/shapely_compute.py measure exterior_ring --geom "POLYGON(...)"
# All measurements at onceuv run python scripts/shapely_compute.py measure all --geom "POLYGON((0 0,2 0,2 2,0 2,0 0))"

distance

Distance between geometries.

bash
uv run python scripts/shapely_compute.py distance --g1 "POINT(0 0)" --g2 "POINT(3 4)"# Returns: {"distance": 5.0, "g1_type": "Point", "g2_type": "Point"}

transform

Affine transformations.

bash
# Translate (move)uv run python scripts/shapely_compute.py transform translate \    --geom "POLYGON((0 0,1 0,1 1,0 1,0 0))" --params "5,10"# params: dx,dy or dx,dy,dz
# Rotate (degrees, around centroid by default)uv run python scripts/shapely_compute.py transform rotate \    --geom "POLYGON((0 0,1 0,1 1,0 1,0 0))" --params "45"# params: angle or angle,origin_x,origin_y
# Scale (from centroid by default)uv run python scripts/shapely_compute.py transform scale \    --geom "POLYGON((0 0,1 0,1 1,0 1,0 0))" --params "2,2"# params: sx,sy or sx,sy,origin_x,origin_y
# Skewuv run python scripts/shapely_compute.py transform skew \    --geom "POLYGON(...)" --params "15,0"# params: xs,ys (degrees)

validate / makevalid

Check and fix geometry validity.

bash
# Check if validuv run python scripts/shapely_compute.py validate --geom "POLYGON((0 0,1 0,1 1,0 1,0 0))"# Returns: {"is_valid": true, "type": "Polygon", ...}
# Fix invalid geometry (self-intersecting, etc.)uv run python scripts/shapely_compute.py makevalid --geom "POLYGON((0 0,2 2,2 0,0 2,0 0))"

coords

Extract coordinates from geometry.

bash
uv run python scripts/shapely_compute.py coords --geom "POLYGON((0 0,1 0,1 1,0 1,0 0))"# Returns: {"coords": [[0,0],[1,0],[1,1],[0,1],[0,0]], "type": "Polygon"}

fromwkt

Parse WKT and get geometry information.

bash
uv run python scripts/shapely_compute.py fromwkt "POLYGON((0 0,1 0,1 1,0 1,0 0))"# Returns: {"type": "Polygon", "bounds": [...], "area": 1.0, ...}

Geometry Types

  • point - Single coordinate (x, y) or (x, y, z)
  • line/linestring - Sequence of connected points
  • polygon - Closed shape with optional holes
  • multipoint, multilinestring, multipolygon - Collections

Input Formats

  • Coordinates string: "0,0 1,0 1,1 0,1" (space-separated x,y pairs)
  • WKT: "POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))"

Output Format

All commands return JSON with:

  • wkt: WKT representation of result geometry
  • type: Geometry type (Point, LineString, Polygon, etc.)
  • bounds: (minx, miny, maxx, maxy)
  • is_valid, is_empty: Validity flags
  • Measurement-specific fields (area, length, distance, etc.)

Common Use Cases

Use CaseCommand
Collision detectionpred intersects
Point-in-polygonpred contains
Area calculationmeasure area
Buffer zonesop buffer
Shape combinationop union
Shape subtractionop difference
Bounding boxop envelope or measure bounds
Simplify pathop simplify

Related Skills

  • /math-mode - Full math orchestration (SymPy, Z3)
  • /math-plot - Visualization with matplotlib

Source and attribution

Source:parcadei/continuous-claude-v3in.claude/skills/shapely-computeat commitd07ff4b

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal