{
  "schemaVersion": "1.0",
  "item": {
    "slug": "map-grabber",
    "name": "Map Grabber",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/QROST/map-grabber",
    "canonicalUrl": "https://clawhub.ai/QROST/map-grabber",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/map-grabber",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=map-grabber",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "clawhub.json",
      "requirements.txt",
      "scripts/grab_map.py"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/map-grabber"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/map-grabber",
    "agentPageUrl": "https://openagent3.xyz/skills/map-grabber/agent",
    "manifestUrl": "https://openagent3.xyz/skills/map-grabber/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/map-grabber/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Map Grabber",
        "body": "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."
      },
      {
        "title": "Dependencies",
        "body": "osmnx (OSM data and graph; requires geopandas, networkx)\nezdxf (optional; for DXF export)\n\nSetup: 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)."
      },
      {
        "title": "Grab map by address",
        "body": "Parameters:\n\naddress: Address or place name (e.g. \"SoHo, New York\" or \"123 Main St, Los Angeles\").\n--dist: Radius in meters around the point (default 500).\n--buildings: Also download building footprints.\n--svg: Output path for SVG (street network plot).\n--png: Output path for PNG (same map as image; use for Telegram or preview).\n--gpkg: Output path for GeoPackage (streets and optionally buildings as layers).\n--dxf: Output path for DXF (requires ezdxf; for CAD/Rhino).\n\nAt least one of --svg, --png, --gpkg, or --dxf is required.\n\n# PNG for Telegram + GeoPackage\npython3 scripts/grab_map.py \"Times Square, New York\" --dist 400 --png site.png --gpkg site.gpkg\n\n# With buildings and DXF\npython3 scripts/grab_map.py \"Shanghai Tower, Shanghai\" --dist 500 --buildings --png site.png --gpkg site.gpkg --dxf site.dxf\n\nOutput: street network (and optionally buildings) in the requested formats."
      },
      {
        "title": "Sending images to Telegram",
        "body": "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.\n\nOpenClaw 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.\n\nAgent 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."
      },
      {
        "title": "Examples",
        "body": "User: \"Get me a site base map for 123 Main St\" or \"抓一张这个地址的场地底图.\"\nAction: Run grab_map.py \"123 Main St\" --png /tmp/site.png (or similar path), then send the PNG to the user and confirm.\n\nUser: \"Get me a site base map for 123 Main St as SVG and DXF.\"\nAction: Run grab_map.py with that address, --svg, --dxf, and optionally --png for chat; return the file paths and confirmation.\n\nUser: \"I need OSM data for this address with building footprints for Rhino.\"\nAction: Run with --buildings, --gpkg and optionally --dxf; if they want an image in chat, also use --png and send it."
      }
    ],
    "body": "Map Grabber\n\nGet 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.\n\nDependencies\nosmnx (OSM data and graph; requires geopandas, networkx)\nezdxf (optional; for DXF export)\n\nSetup: 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).\n\nUsage\nGrab map by address\n\nParameters:\n\naddress: Address or place name (e.g. \"SoHo, New York\" or \"123 Main St, Los Angeles\").\n--dist: Radius in meters around the point (default 500).\n--buildings: Also download building footprints.\n--svg: Output path for SVG (street network plot).\n--png: Output path for PNG (same map as image; use for Telegram or preview).\n--gpkg: Output path for GeoPackage (streets and optionally buildings as layers).\n--dxf: Output path for DXF (requires ezdxf; for CAD/Rhino).\n\nAt least one of --svg, --png, --gpkg, or --dxf is required.\n\n# PNG for Telegram + GeoPackage\npython3 scripts/grab_map.py \"Times Square, New York\" --dist 400 --png site.png --gpkg site.gpkg\n\n# With buildings and DXF\npython3 scripts/grab_map.py \"Shanghai Tower, Shanghai\" --dist 500 --buildings --png site.png --gpkg site.gpkg --dxf site.dxf\n\n\nOutput: street network (and optionally buildings) in the requested formats.\n\nSending images to Telegram\n\nUsed 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.\n\nOpenClaw 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.\n\nAgent 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.\n\nExamples\n\nUser: \"Get me a site base map for 123 Main St\" or \"抓一张这个地址的场地底图.\"\nAction: Run grab_map.py \"123 Main St\" --png /tmp/site.png (or similar path), then send the PNG to the user and confirm.\n\nUser: \"Get me a site base map for 123 Main St as SVG and DXF.\"\nAction: Run grab_map.py with that address, --svg, --dxf, and optionally --png for chat; return the file paths and confirmation.\n\nUser: \"I need OSM data for this address with building footprints for Rhino.\"\nAction: Run with --buildings, --gpkg and optionally --dxf; if they want an image in chat, also use --png and send it."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/QROST/map-grabber",
    "publisherUrl": "https://clawhub.ai/QROST/map-grabber",
    "owner": "QROST",
    "version": "1.1.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/map-grabber",
    "downloadUrl": "https://openagent3.xyz/downloads/map-grabber",
    "agentUrl": "https://openagent3.xyz/skills/map-grabber/agent",
    "manifestUrl": "https://openagent3.xyz/skills/map-grabber/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/map-grabber/agent.md"
  }
}