Continuous-Claude-v3 shapely-compute
Computational geometry with Shapely - create geometries, boolean operations, measurements, predicates
install
source · Clone the upstream repo
git clone https://github.com/parcadei/Continuous-Claude-v3
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/parcadei/Continuous-Claude-v3 "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/shapely-compute" ~/.claude/skills/parcadei-continuous-claude-v3-shapely-compute && rm -rf "$T"
manifest:
.claude/skills/shapely-compute/SKILL.mdsource content
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... | Command | Example |
|---|---|---|
| Create geometry | | |
| Intersection | | |
| Check contains | | |
| Calculate area | | |
| Distance | | |
| Transform | | |
| Validate | | |
Commands
create
Create geometric objects from coordinates.
# Point uv 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 hole uv 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" # MultiPoint uv 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.
# Intersection of two polygons uv 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))" # Union uv 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 hull uv 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).
# 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.
# 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)" # Centroid uv 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 once uv run python scripts/shapely_compute.py measure all --geom "POLYGON((0 0,2 0,2 2,0 2,0 0))"
distance
Distance between geometries.
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.
# 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 # Skew uv run python scripts/shapely_compute.py transform skew \ --geom "POLYGON(...)" --params "15,0" # params: xs,ys (degrees)
validate / makevalid
Check and fix geometry validity.
# Check if valid uv 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.
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.
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
- Single coordinate (x, y) or (x, y, z)point
/line
- Sequence of connected pointslinestring
- Closed shape with optional holespolygon
,multipoint
,multilinestring
- Collectionsmultipolygon
Input Formats
- Coordinates string:
(space-separated x,y pairs)"0,0 1,0 1,1 0,1" - WKT:
"POLYGON((0 0, 1 0, 1 1, 0 1, 0 0))"
Output Format
All commands return JSON with:
: WKT representation of result geometrywkt
: Geometry type (Point, LineString, Polygon, etc.)type
: (minx, miny, maxx, maxy)bounds
,is_valid
: Validity flagsis_empty- Measurement-specific fields (area, length, distance, etc.)
Common Use Cases
| Use Case | Command |
|---|---|
| Collision detection | |
| Point-in-polygon | |
| Area calculation | |
| Buffer zones | |
| Shape combination | |
| Shape subtraction | |
| Bounding box | or |
| Simplify path | |
Related Skills
- Full math orchestration (SymPy, Z3)/math-mode
- Visualization with matplotlib/math-plot