📘 Khy-OS 文档站 🧭 新手先读：核心概念

# cli-anything-qgis

name: "cli-anything-qgis"
description: Stateful QGIS CLI for projects, writable layers, features, layouts, exports, and qgis_process operations using the real QGIS runtime.

# cli-anything-qgis#

Use this skill when you need to inspect or modify QGIS projects from the terminal through the real QGIS runtime.

## Requirements#

- QGIS installed with `qgis_process` on `PATH`
- PyQGIS importable from the Python environment running the CLI
- Python 3.10+

## Agent guidance#

- Prefer `--json` for all machine-driven use.
- For one-shot commands, pass `--project <path>` when operating on an existing project.
- Running `cli-anything-qgis` with no subcommand starts a stateful REPL.
- Layout export is backed by real QGIS processing algorithms:
  - `native:printlayouttopdf`
  - `native:printlayouttoimage`

## What this CLI covers#

- create, open, save, and inspect `.qgs` / `.qgz` projects
- create writable GeoPackage-backed vector layers
- add features via WKT geometry and typed `key=value` attributes
- create print layouts and add map/label items
- export layouts to PDF or image
- inspect and run generic `qgis_process` algorithms
- inspect session status and history

## Command groups#

### `project`#

- `new -o/--output [--title] [--crs]`
- `open PATH`
- `save [PATH]`
- `info`
- `set-crs CRS`

### `layer`#

- `create-vector --name --geometry --crs [--field name:type ...]`
- `list`
- `info LAYER`
- `remove LAYER`

### `feature`#

- `add --layer LAYER --wkt WKT [--attr key=value ...]`
- `list --layer LAYER [--limit N]`

### `layout`#

- `create --name [--page-size] [--orientation]`
- `list`
- `info LAYOUT`
- `remove LAYOUT`
- `add-map --layout LAYOUT --x --y --width --height [--extent xmin,ymin,xmax,ymax]`
- `add-label --layout LAYOUT --text TEXT --x --y --width --height [--font-size N]`

### `export`#

- `presets`
- `pdf OUTPUT --layout LAYOUT [--dpi] [--force-vector] [--force-raster] [--georeference/--no-georeference] [--overwrite]`
- `image OUTPUT --layout LAYOUT [--dpi] [--overwrite]`

### `process`#

- `list`
- `help ALGORITHM_ID`
- `run ALGORITHM_ID [--param KEY=VALUE ...]`

### `session`#

- `status`
- `history [--limit N]`

## Examples#

### Create a project and add a writable layer#

    cli-anything-qgis --json project new -o demo.qgz --title "Demo" --crs EPSG:4326
    cli-anything-qgis --json --project demo.qgz layer create-vector \
      --name places \
      --geometry point \
      --field name:string \
      --field score:int

### Add features and inspect them#

    cli-anything-qgis --json --project demo.qgz feature add \
      --layer places \
      --wkt "POINT(1 2)" \
      --attr name=HQ \
      --attr score=5

    cli-anything-qgis --json --project demo.qgz feature list --layer places --limit 10

### Create and export a layout#

    cli-anything-qgis --json --project demo.qgz layout create --name Main
    cli-anything-qgis --json --project demo.qgz layout add-map --layout Main --x 10 --y 20 --width 180 --height 120
    cli-anything-qgis --json --project demo.qgz layout add-label --layout Main --text "Demo map" --x 10 --y 8 --width 100 --height 10
    cli-anything-qgis --json --project demo.qgz export pdf output.pdf --layout Main --overwrite

### Inspect or run processing algorithms#

    cli-anything-qgis --json process help native:buffer
    cli-anything-qgis --json --project demo.qgz process run native:buffer \
      --param INPUT=/tmp/demo_data.gpkg|layername=places \
      --param DISTANCE=1 \
      --param SEGMENTS=8 \
      --param END_CAP_STYLE=0 \
      --param JOIN_STYLE=0 \
      --param MITER_LIMIT=2 \
      --param DISSOLVE=false \
      --param OUTPUT=/tmp/buffer.geojson

### REPL#

    cli-anything-qgis

Example interactive flow:

    project new -o demo.qgz --title "Demo"
    layer create-vector --name places --geometry point --field name:string
    feature add --layer places --wkt "POINT(1 2)" --attr name=HQ
    layout create --name Main
    session status
    quit