parcadei

shapely-compute

3,433
266
# Install this skill:
npx skills add parcadei/Continuous-Claude-v3 --skill "shapely-compute"

Install specific skill from multi-skill repository

# Description

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

# SKILL.md


name: shapely-compute
description: Computational geometry with Shapely - create geometries, boolean operations, measurements, predicates
triggers: ["geometry", "polygon", "intersection", "area", "contains", "distance between points", "buffer", "convex hull", "centroid", "WKT"]


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 create create polygon --coords "0,0 1,0 1,1 0,1"
Intersection op intersection op intersection --g1 "POLYGON(...)" --g2 "POLYGON(...)"
Check contains pred contains pred contains --g1 "POLYGON(...)" --g2 "POINT(0.5 0.5)"
Calculate area measure area measure area --geom "POLYGON(...)"
Distance distance distance --g1 "POINT(0 0)" --g2 "POINT(3 4)"
Transform transform translate transform translate --geom "..." --params "1,2"
Validate validate validate --geom "POLYGON(...)"

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

  • 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 Case Command
Collision detection pred intersects
Point-in-polygon pred contains
Area calculation measure area
Buffer zones op buffer
Shape combination op union
Shape subtraction op difference
Bounding box op envelope or measure bounds
Simplify path op simplify
  • /math-mode - Full math orchestration (SymPy, Z3)
  • /math-plot - Visualization with matplotlib

# Supported AI Coding Agents

This skill is compatible with the SKILL.md standard and works with all major AI coding agents:

Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.