spatial — скилл для Claude Code: что делает и как установить
Скилл помогает анализировать географические координаты, границы и файлы GeoJSON или GeoParquet через DuckDB, а также искать объекты в Overture Maps.
npx skills add duckdb/duckdb-skills --skill spatial -a claude-codeЧто делает spatial
Скилл подключает расширение spatial для DuckDB и выполняет геопространственные запросы через Bash. Если локальных файлов нет, агент подтягивает данные об улицах, зданиях и местах напрямую из открытых датасетов Overture Maps на S3 без ключей API.
Под капотом инструмент генерирует SQL-запросы с функциями ST_Contains, ST_Read и ST_Distance_Spheroid, а также может строить гексагональную сетку H3. При работе с Overture Maps обязательно используется фильтрация по bbox до вызова функций, чтобы читать Parquet без скачивания всего массива данных.
Для правильных расчётов скилл выставляет geometry_always_xy = true, иначе координаты перепутаются местами. Для работы нужен установленный в системе DuckDB. Если бинарник отсутствует, потребуется сначала поставить сам DuckDB.
Какие задачи решает
- рассчитать реальное расстояние между координатами на эллипсоиде WGS84
- найти здания или объекты инфраструктуры через Overture Maps
- проверить попадание точек в полигоны через
ST_Contains - конвертировать треки GPX или Shapefile в формат GeoJSON
Примеры запросов агенту
- Найди ближайшие кафе в заданном полигоне через Overture Maps
- Проверь, какие точки из файла
deliveries.csvпопадают в границыzones.geojson - Экспортируй полигоны из
parcels.gpkgв GeoParquet с помощью DuckDB
Как установить spatial
1Через Skills CLI (Vercel)
npx skills add duckdb/duckdb-skills --skill spatial -a claude-code2Вручную: положить файлы
~/.claude/skills/spatial/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/spatial/
1Через Skills CLI (Vercel)
npx skills add duckdb/duckdb-skills --skill spatial -a codex2Вручную: положить файлы
.agents/skills/spatial/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add duckdb/duckdb-skills --skill spatial -a cursor2Вручную: положить файлы
.cursor/skills/spatial/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install duckdb/duckdb-skills spatial2Вручную: положить файлы
.github/skills/spatial/SKILL.md1Через Skills CLI (Vercel)
npx skills add duckdb/duckdb-skills --skill spatial -a gemini-cli2Командой платформы
gemini skills install https://github.com/duckdb/duckdb-skills --path skills/spatialВручную: положить файлы
.devin/skills/spatial/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add duckdb/duckdb-skills --skill spatial -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о spatial
Как установить spatial в Claude Code?
Выполните команду npx skills add duckdb/duckdb-skills --skill spatial -a claude-code.
Откуда скилл берёт данные о зданиях и дорогах, если нет своих файлов?
Агент обращается к открытым датасетам Overture Maps в хранилище S3 через модуль httpfs. Для таких запросов не нужны ключи API.
Почему для вычисления расстояний нужен тип POINT_2D?
Функция ST_Distance_Spheroid требует именно POINT_2D на эллипсоиде WGS84. Геометрия из Overture Maps имеет тип GEOMETRY('OGC:CRS84'), поэтому координаты извлекаются через ST_Point(ST_X(geometry), ST_Y(geometry))::POINT_2D.
Исходный текст
SKILL.md · MIT
---
name: spatial
description: >
Answer questions about spatial data using DuckDB. Use when the user mentions locations,
coordinates, lat/lng, distances, maps, addresses, "near", "within", "closest", geographic
names, or spatial file formats (GeoJSON, Shapefile, GeoPackage, GPX, GeoParquet). Also
triggers when the user wants to find places, buildings, or roads — Overture Maps provides
free global data on S3 with zero API keys. Handles spatial joins, distance calculations,
containment checks, density analysis, and format conversions for geographic data.
argument-hint: <question or file> [additional context]
allowed-tools: Bash
---
You are answering spatial questions using DuckDB's spatial extension and, when needed, Overture Maps as a free global data source.
Question or file: `$0`
Additional context: `${1:-}`
## Step 1 — Understand what the user needs
Classify the question:
| Pattern | Data source | Key functions |
|---------|-------------|---------------|
| "Find X near Y" (no user file) | Overture Maps on S3 | `ST_Distance_Spheroid`, bbox filtering |
| "How far between A and B" | Geocode or user data | `ST_Distance_Spheroid` |
| "Which points fall inside polygons" | User files | `ST_Contains` |
| "Analyze this GeoJSON/Shapefile/GPX" | User file | `ST_Read`, measurement functions |
| "Show density/hotspots" | User or Overture data | H3 hex binning |
| "Convert to GeoJSON/GeoPackage" | User file | `COPY TO (FORMAT GDAL)` |
| "Count buildings/roads in area" | Overture Maps | bbox filtering + aggregation |
If the question involves real-world places, POIs, buildings, roads, or boundaries and the user hasn't provided a file, use **Overture Maps** — read `references/overture.md` for S3 paths and schema.
For spatial function syntax, read `references/functions.md`.
## Step 2 — Write and run the query
Always start with:
```sql
LOAD spatial;
SET geometry_always_xy = true;
```
Add extensions as needed:
- Overture/remote data: `LOAD httpfs; CREATE SECRET (TYPE S3, PROVIDER config, REGION 'us-west-2');`
- H3 hex binning: `INSTALL h3 FROM community; LOAD h3;`
### Key principles
**bbox filtering first** — When querying Overture, always filter on `bbox.xmin/xmax/ymin/ymax` before any spatial function. This uses Parquet predicate pushdown and avoids downloading the full dataset.
**Always set `geometry_always_xy = true`** — This ensures all spatial functions interpret coordinates as longitude, latitude (the standard for Overture, GeoJSON, and most data sources). Without it, spheroid functions assume latitude first and return wrong results.
**Use spheroid functions for real-world distances** — `ST_Distance_Spheroid` returns meters on the WGS84 ellipsoid. Plain `ST_Distance` uses planar coordinates and gives meaningless results for lat/lng. **Important:** spheroid functions (`ST_Distance_Spheroid`, `ST_Area_Spheroid`, etc.) require `POINT_2D` inputs, not generic `GEOMETRY`. Overture geometry columns are typed `GEOMETRY('OGC:CRS84')` and cannot be cast directly. Extract coordinates first:
```sql
ST_Point(ST_X(geometry), ST_Y(geometry))::POINT_2D
```
**CSV with lat/lng needs conversion** — `ST_Point(longitude, latitude)` (longitude first). This is the most common gotcha.
Run the query in a single bash call:
```bash
duckdb -c "
LOAD spatial;
<ADDITIONAL_SETUP>
<YOUR_QUERY>
"
```
## Step 3 — Present results
- For tabular results: show the data directly
- For spatial results: consider exporting to GeoJSON for visualization (`COPY TO 'result.geojson' WITH (FORMAT GDAL, DRIVER 'GeoJSON')`)
- For distance/area results: use human-readable units (km for large distances, m for small)
- For density/hotspot results: describe the pattern and offer to export for visualization
If the query fails:
- **`duckdb: command not found`** → delegate to `/duckdb-skills:install-duckdb`
- **Missing extension** → `INSTALL spatial; LOAD spatial;` or `INSTALL h3 FROM community; LOAD h3;`
- **S3 access denied** → suggest checking AWS credentials
- **No results with Overture** → widen the bbox, check the category spelling, or try a broader search
© duckdb · MIT · duckdb/duckdb-skills