Back to skills
SKILL.md
Sedonadb Geoacset
ASecuritySedonaDB spatial engine enabling GeoACSets.jl categorical geospatial operations with O(log n) indexing
- 61 stars
- 0 votes
- 0 copies
- 1 view
- Added September 6, 2026
Security analysis
96/100- Installs packages at runtime which could introduce malicious dependencies
Pro scans all 3 files and shows the line behind each finding
npx -y skills add plurigrid/asi --skill sedonadb-geoacset --agent claude-codeAre you the author of Sedonadb Geoacset?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/plurigrid-sedonadb-geoacset)---
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.*
Files in this skill
- CONCOMITANT_SKILLS.md
- SKILL.md
- test_geoacset.py
Attribution
Comments
Loading comments…