# Map Grabber

> Fetch OpenStreetMap vector data (streets, buildings) for an address and export to SVG, GeoPackage, or DXF for CAD/Rhino.

- Skill: `johnalbertini14-glitch/map-grabber` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add johnalbertini14-glitch/map-grabber`
- Raw SKILL.md: https://api.skillmd.com/api/skills/johnalbertini14-glitch/map-grabber/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: johnalbertini14-glitch (https://skillmd.com/u/johnalbertini14-glitch)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/johnalbertini14-glitch/map-grabber

---


# Map Grabber

Get site base maps from OpenStreetMap: provide an address, receive street network and optional building footprints as vector data (SVG, GeoPackage, or DXF) for use in CAD or Rhino.

## Dependencies

- `osmnx` (OSM data and graph; requires `geopandas`, `networkx`)
- `ezdxf` (optional; for DXF export)

**Setup:** OpenClaw does not install Python packages automatically. After installing this skill, run once: `pip install -r requirements.txt` (from the skill folder). If a script fails with `ModuleNotFoundError`, install the missing package (osmnx pulls geopandas; for DXF add ezdxf).

## Usage

### Grab map by address

**Parameters:**

- `address`: Address or place name (e.g. "SoHo, New York" or "123 Main St, Los Angeles").
- `--dist`: Radius in meters around the point (default 500).
- `--buildings`: Also download building footprints.
- `--svg`: Output path for SVG (street network plot).
- `--png`: Output path for PNG (same map as image; use for Telegram or preview).
- `--gpkg`: Output path for GeoPackage (streets and optionally buildings as layers).
- `--dxf`: Output path for DXF (requires ezdxf; for CAD/Rhino).

At least one of `--svg`, `--png`, `--gpkg`, or `--dxf` is required.

```bash
# PNG for Telegram + GeoPackage
python3 scripts/grab_map.py "Times Square, New York" --dist 400 --png site.png --gpkg site.gpkg

# With buildings and DXF
python3 scripts/grab_map.py "Shanghai Tower, Shanghai" --dist 500 --buildings --png site.png --gpkg site.gpkg --dxf site.dxf
```

Output: street network (and optionally buildings) in the requested formats.

## Sending images to Telegram

Used from the OpenClaw Telegram conversation. To show the user the map: run the script with **`--png <path>.png`** (e.g. `--png site.png`), then **send that PNG** to the conversation via the OpenClaw message/media tool. Use `--png` (not only `--svg`) when the user expects an image in chat.

**OpenClaw allowed paths:** The message tool only sends files from allowed dirs (`~/.openclaw/media/`, `~/.openclaw/agents/`, or `/tmp`). Use e.g. `--png ~/.openclaw/media/site.png` or `--png /tmp/site.png`; do not use the skill install directory or sending will fail.

**Agent behavior:** When the user asks for a site map, base map, or OSM map (by address or place name), **run the script directly** using `exec`: call `grab_map.py` with the given address, `--png <path>.png` with `<path>` under an allowed dir (and optional `--dist`, `--buildings`), then send the generated PNG to the user. Do not ask for confirmation; execute and return the image and a short confirmation.

## Examples

**User:** "Get me a site base map for 123 Main St" or "抓一张这个地址的场地底图."  
**Action:** Run `grab_map.py "123 Main St" --png /tmp/site.png` (or similar path), then send the PNG to the user and confirm.

**User:** "Get me a site base map for 123 Main St as SVG and DXF."  
**Action:** Run `grab_map.py` with that address, `--svg`, `--dxf`, and optionally `--png` for chat; return the file paths and confirmation.

**User:** "I need OSM data for this address with building footprints for Rhino."  
**Action:** Run with `--buildings`, `--gpkg` and optionally `--dxf`; if they want an image in chat, also use `--png` and send it.

