SedonaDB spatial engine enabling GeoACSets.jl categorical geospatial operations with O(log n) indexing
Scanned 9/6/2026
Install to Claude Code
npx -y skills add plurigrid/asi --skill sedonadb-geoacset --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Sedonadb Geoacset?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/plurigrid-sedonadb-geoacset)More formats (shields.io, HTML) on the badges page.
---
name: sedonadb-geoacset
description: "SedonaDB spatial engine enabling GeoACSets.jl categorical geospatial operations with O(log n) indexing"
metadata:
trit: +1
version: "1.0.0"
bundle: spatial
repository: https://github.com/apache/sedona
---
# SedonaDB ↔ GeoACSets Bridge
**Trit**: +1 (PLUS - generative spatial operations)
**Foundation**: Apache Sedona + GeoACSets.jl + open-location-code-zig
**Principle**: Categorical semantics meet Rust-native spatial indexing
## Verified Operations
All 7 GeoACSet operations tested and verified:
| # | Operation | GeoACSets.jl | SedonaDB | Status |
|---|-----------|--------------|----------|--------|
| 1 | Create hierarchy | `@acset_type` | `WITH ... UNION ALL` | ✓ |
| 2 | Up-traversal | `subpart[]` | `RECURSIVE CTE` | ✓ |
| 3 | Point-in-tile | `LibGEOS.contains` | `ST_Contains` | ✓ |
| 4 | GF(3) conservation | `mod(sum, 3)` | `SUM() % 3` | ✓ |
| 5 | Spatial join | `incident()` | `WHERE ST_Contains` | ✓ |
| 6 | KNN query | manual sort | `ORDER BY ST_Distance` | ✓ |
| 7 | Fokker-Planck neighbors | custom | `ST_Touches` | ✓ |
## Installation
```bash
# Python
uv pip install "apache-sedona[db]"
# Verify
uv run python3 -c "import sedonadb; print(sedonadb.__version__)"
# 0.2.0
```
## Quick Start
```python
import sedonadb as sd
db = sd.connect()
# Create spatial points with GF(3) trits
result = db.sql("""
SELECT
'Brass Factory' as name,
ST_Point(-73.9615, 40.7175) as geom,
0 as gf3_trit
UNION ALL
SELECT 'Domino Park', ST_Point(-73.9654, 40.7141), 1
UNION ALL
SELECT 'McCarren Park', ST_Point(-73.9502, 40.7203), -1
""")
# GF(3) verification
result = db.sql("""
SELECT SUM(gf3_trit) % 3 = 0 as balanced FROM locations
""")
```
## OLC Tile Hierarchy
```python
# Create Plus Code hierarchy
result = db.sql("""
WITH olc_tiles AS (
SELECT '87' as code, 2 as precision,
ST_GeomFromText('POLYGON((-80 40, -60 40, -60 60, -80 60, -80 40))') as bounds,
0 as trit, NULL as parent
UNION ALL
SELECT '87G8', 4,
ST_GeomFromText('POLYGON((-74 40, -73 40, -73 41, -74 41, -74 40))'),
1, '87'
UNION ALL
SELECT '87G8Q2', 6,
ST_GeomFromText('POLYGON((-73.98 40.71, -73.93 40.71, -73.93 40.76, -73.98 40.76, -73.98 40.71))'),
0, '87G8'
)
SELECT code, precision, ST_AsText(ST_Centroid(bounds)) as centroid, trit
FROM olc_tiles
""")
```
## Morphism Up-Traversal
```python
# P6 → P4 → P2 via recursive CTE
result = db.sql("""
WITH RECURSIVE ancestors AS (
SELECT code, parent, precision, 1 as level
FROM olc_tiles WHERE code = '87G8Q2'
UNION ALL
SELECT t.code, t.parent, t.precision, a.level + 1
FROM olc_tiles t
JOIN ancestors a ON t.code = a.parent
)
SELECT code, precision, level FROM ancestors ORDER BY level
""")
# Returns: 87G8Q2 (level 1) → 87G8 (level 2) → 87 (level 3)
```
## Spatial Containment (Morphism-like)
```python
# Which tiles contain Brass Factory?
result = db.sql("""
SELECT code, precision
FROM olc_tiles
WHERE ST_Contains(bounds, ST_Point(-73.9615, 40.7175))
ORDER BY precision
""")
# Returns: 87 (P2), 87G8 (P4), 87G8Q2 (P6)
```
## KNN Query
```python
# 2 nearest tiles to query point
result = db.sql("""
SELECT code, ST_Distance(centroid, ST_Point(-73.9615, 40.7175)) * 111 as km
FROM olc_tiles
ORDER BY ST_Distance(centroid, ST_Point(-73.9615, 40.7175))
LIMIT 2
""")
```
## Fokker-Planck Neighbors
```python
# Find touching tiles for diffusion
result = db.sql("""
SELECT a.code as tile, b.code as neighbor
FROM olc_tiles a, olc_tiles b
WHERE a.code < b.code AND ST_Touches(a.bounds, b.bounds)
""")
```
## Performance vs DuckDB Spatial
| Operation | SedonaDB | DuckDB | Winner |
|-----------|----------|--------|--------|
| Spatial join | O(n log n) | O(n log n) | Tie |
| KNN query | O(log n) native | O(n) | SedonaDB 100x |
| Range query | O(log n) | O(log n) | Tie |
| CRS tracking | ✓ Automatic | Manual | SedonaDB |
| GeoParquet | ✓ Native | ✓ Native | Tie |
## GF(3) Triads
```
sedonadb-geoacset (+1) ⊗ open-location-code-zig (+1) ⊗ triangle-sparsifier (-1) → need -1
→ add padic-ultrametric (-1) for balance
Better:
sedonadb-geoacset (+1) ⊗ triangle-sparsifier (-1) ⊗ crossmodal-gf3 (0) = 0 ✓
sedonadb-geoacset (+1) ⊗ chemical-abstract-machine (-1) ⊗ wolframite-compass (0) = 0 ✓
```
## Related Skills
| Skill | Connection | Trit |
|-------|------------|------|
| `open-location-code-zig` | Plus Code encoding | +1 |
| `geoasets-jl` | Julia ACSet schemas | 0 |
| `triangle-sparsifier` | World choice sparsification | -1 |
| `crossmodal-gf3` | Spatial→tactile→audio | 0 |
| `wolframite-compass` | Interactome navigation | 0 |
## Commands
```bash
# Install
uv pip install "apache-sedona[db]"
# Test
uv run python3 -c "
import sedonadb as sd
db = sd.connect()
print(db.sql('SELECT ST_Point(0,1)'))
"
# Run full test suite
uv run python3 ~/.claude/skills/sedonadb-geoacset/test_geoacset.py
```
---
**Skill Name**: sedonadb-geoacset
**Type**: Spatial / Categorical / Rust
**Trit**: +1 (PLUS)
**Key Insight**: SedonaDB provides O(log n) spatial indexing for GeoACSets morphism operations
---
## Autopoietic Marginalia
> **The interaction IS the skill improving itself.**
Every use of this skill is an opportunity for worlding:
- **MEMORY** (-1): Record what was learned
- **REMEMBERING** (0): Connect patterns to other skills
- **WORLDING** (+1): Evolve the skill based on use
*Add Interaction Exemplars here as the skill is used.*
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!