mcpField
R
roadstyle

roadstyle

本地服务
khoshkhah.github.io地图与出行11 天前更新

关于 roadstyle

roadstyle 是用于创建交互式道路地图的 Python 库和命令行工具,数据可来自 OpenStreetMap 地点或道路数据集。它生成独立 HTML 地图,支持道路样式、按数据着色、Street View 和 JavaScript API;其 MCP 服务可让 AI 应用无需编写代码生成地图及 PNG 预览。

主要功能

  1. 01从地点或道路数据渲染地图
  2. 02导出独立的离线 HTML 地图
  3. 03按数据列设置道路颜色
  4. 04从道路打开 Google Street View
  5. 05通过 JavaScript API 操作地图
  6. 06为 AI Agent 提供地图生成工具

适用场景

  1. 01根据 OpenStreetMap 创建地点道路地图
  2. 02用颜色展示交通量或速度数据
  3. 03分享独立 HTML 地图
  4. 04让 AI Agent 渲染地图并检查预览

MCP 相关

MCP 服务向客户端提供 `render_place`、`render_file` 和 `snapshot`。它保存 HTML 地图,并返回文件路径和 PNG 预览。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"khoshkhah-roadstyle": {
"command": "uvx",
"args": [
"roadstyle-mcp"
],
"env": {
"CARTO_API_KEY": "<CARTO_API_KEY>"
}
}
}
}
启动命令uvx roadstyle-mcp
需要配置的环境变量
CARTO_API_KEY密钥CARTO basemap key; without it maps use the keyless esri_street base map

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypiroadstyle-mcp0.25.0

工具

3

收录的工具列表 · 更新于 4 天前

参数类型必填说明
placestring是
optionsany否
output_pathany否
network_typestring否

详细介绍

roadstyle 标志

roadstyle

用 Python 创建精美的交互式道路地图。
一个离线 HTML 文件,包含真实的道路制图、Google Street View 和 JavaScript API。

PyPI Python 版本 测试 文档 许可证:MIT

安装 · 快速开始 · 图库 · 实时地图 · AI Agent · 文档

一幅 Monaco 的 3D roadstyle 地图:桥梁、隧道和环岛按顺序绘制,选中了 Rue de la Colle,悬浮的 Street View 窗口展示了该道路

为什么选择 roadstyle

  • 真实的道路制图。 包括描边和填充、随缩放变化的宽度、街道名称、单行道箭头、隧道绘制在下方、桥梁绘制在上方,以及可选的 3D 桥面。
  • 一个离线文件。 地图、数据和样式都在一个 HTML 页面中:无需服务即可打开,也可以通过电子邮件发送,或放到任何网站上。
  • 内置 Street View。 点击任意道路,即可在 Google Street View 中查看,并面向道路的延伸方向。
  • 支持任意道路数据。 GeoDataFrame、文件、DuckDB、Arrow、osmnx 或 duckOSM。
  • 按数据着色。 可根据速度、交通流量或任意列着色,并提供图例和着色方式菜单。
  • 可脚本化。 提供 window.rs* JavaScript API 和事件,可用于构建自己的仪表板。
  • 适用于 AI Agent。 提供 MCP 服务和 Agent 技能。

安装

pip install roadstyle              # core
pip install "roadstyle[all]"       # + studio, numeric ramps, vector tiles, lonboard, DuckDB, …

Python ≥ 3.10。单独的可选依赖和开发环境配置请参阅:安装。

快速开始

从 OpenStreetMap 获取数据,无需准备数据。 可查询任意地点,使用 osmnx(pip install osmnx):

import osmnx as ox
import roadstyle as rs

G = ox.graph_from_place("Tartu, Estonia", network_type="drive", simplify=False)
G = ox.simplify_graph(G, edge_attrs_differ=["bridge", "tunnel"])   # keep tunnels and bridges apart
rs.render_edges(ox.graph_to_gdfs(G, nodes=False)).save("tartu.html")

使用自己的数据。 支持任意包含线几何和 highway 列的文件或 GeoDataFrame:

import geopandas as gpd
import roadstyle as rs

edges = gpd.read_file("edges.gpkg")        # LineStrings + a `highway` column, any CRS
rs.render_edges(edges).save("map.html")    # open map.html: no server (Street View needs one)

更多样式:

rs.render_edges(edges, basemap="dark_matter", view_3d=True)            # dark, 3D bridge decks
rs.render_edges(edges, palette="carto", basemap="positron")            # the classic OSM look
rs.render_edges(edges, color_by="aadt", cmap="viridis")                # colour by your data
rs.render_edges(edges, palette="mono", color_options={                 # several colourings,
    "Traffic": {"color_by": "aadt", "cmap": "viridis"},                #   switched in the browser
    "Speed":   {"color_by": "maxspeed_kmh", "cmap": "magma"}})
rs.render_edges(edges, tiles=True)                                     # 100k+ edges
rs.render_dashboard(edges).save("dashboard.html")                      # map + query sidebar
rs.render_street_view(edges).save("street_view.html")                  # map and Street View side by side

没有安装 Python?运行 roadstyle edges.gpkg -o map.html --basemap dark_matter,或者在 workbench 中逐步操作:pip install "roadstyle[studio]" && roadstyle studio。

图库

道路地图风格
道路地图风格
rs.render_edges(edges)
桥梁和隧道
桥梁和隧道
rs.render_edges(edges)
按数据着色
按数据着色
color_by="maxspeed_kmh"
3D 桥梁
3D 桥梁
view_3d=True
街景
街景
点击道路
仪表板
仪表板
rs.render_dashboard(edges)

每种风格均附带代码:图库。

输入内容

只需要 geometry 和 highway。其他列可启用相应功能:

列用途
geometry(LineString,任意 CRS)道路边。每条边都有方向:双向道路由两条几何方向相反的边表示
highway(OSM 类别)颜色、宽度、描边、绘制顺序
name街道标签、弹出窗口标题
oneway方向箭头
bridge / tunnel / layer立体交叉:隧道位于下方,桥梁架于上方
edge_id弹出窗口;64 位 ID 可精确保留
其他任意列显示在弹出窗口中,可通过 JavaScript 查询

duckOSM(duckosm export-gis)可准确导出此格式;osmnx 的边数据也可直接使用:rs.render_edges(ox.graph_to_gdfs(G, nodes=False))。

通过 JavaScript 驱动

保存的页面会公开 window.rs* 函数和 rs:* 事件:

const ids = rsQuery(p => p.maxspeed_kmh > 30); // feature ids whose properties match
rsColor(ids, "#ff00aa");  rsFocus(ids);       // paint them, fit the camera
document.addEventListener("rs:select", e => console.log(e.detail.properties));

所有函数和事件详见:JavaScript API。

面向 AI Agent

MCP 服务。 让任何支持 MCP 的 AI 应用(Claude Code、Claude Desktop、Cursor 等)无需编写代码即可绘制道路地图:render_place("Tartu, Estonia")、render_file("roads.gpkg") 和 snapshot。每次调用都会保存一张 HTML 地图,并返回其路径以及 Agent 可以查看的 PNG 预览。

claude mcp add roadstyle -- uvx roadstyle-mcp
Claude Desktop,以及地图的保存位置

在 claude_desktop_config.json 中:

{"mcpServers": {"roadstyle": {"command": "uvx", "args": ["roadstyle-mcp"]}}}

地图保存在 ~/roadstyle-maps/ 中。PNG 预览需要安装 Chromium,只需安装一次: uvx --from roadstyle-mcp playwright install chromium。

Claude Code 插件。 一次安装即可使用 MCP 服务和下方的技能:

/plugin marketplace add Khoshkhah/roadstyle
/plugin install roadstyle@roadstyle

适用于会编写代码的 Agent:

  • skills/roadstyle/SKILL.md:供使用 roadstyle 的 Agent 使用的技能(包含一次调用、数据约定、JS API 和注意事项)。 为 Claude Code 安装:
    mkdir -p ~/.claude/skills/roadstyle && curl -fsSL -o ~/.claude/skills/roadstyle/SKILL.md \
      https://raw.githubusercontent.com/Khoshkhah/roadstyle/main/skills/roadstyle/SKILL.md
    
  • AGENTS.md:供参与此代码库开发的 Agent 使用。
  • llms.txt:面向大模型的文档站点链接列表。

API 密钥

两个密钥都是可选的。roadstyle 无需密钥也能运行,只是功能会少一些。

  • CARTO,用于默认底图。没有密钥时,地图图块会显示 API KEY REQUIRED;请设置 CARTO_API_KEY,或使用无需密钥的底图(esri_street、esri_dark_gray、osm、blank)。
  • Google Maps,用于街景。无需密钥即可使用街景。添加密钥后会启用 Linked 模式:显示真实全景,地图标记会随你移动和转向。
设置 CARTO 密钥

默认底图(voyager)、positron 和 dark_matter 来自 CARTO。没有密钥时,地图图块会显示 API KEY REQUIRED。在 carto.com/basemaps/apikey 免费获取密钥,然后任选以下一种方式使用:

export CARTO_API_KEY="…"                                          # environment variable
{ "config": { "api_keys": { "carto": "…" } } }

将该 JSON 保存为 ~/.config/roadstyle/roadstyle.json,或保存为你运行命令所在文件夹中的 roadstyle.json。在 Python 中,也可以改为传入 rs.render_edges(edges, api_key="…")。完全不使用密钥时,请使用无需密钥的底图:esri_street、esri_dark_gray、osm 或 blank。

设置 Google Maps 密钥

无需密钥即可使用街景:使用无需密钥的 Google 嵌入式地图。使用 Google Maps JavaScript API 密钥后,街景面板和窗口中会出现 Linked / Classic 切换选项。Linked 模式显示真实全景:地图标记会随你移动和转向,且只显示 Google 自有的街景照片。Classic 模式使用无需密钥的嵌入式地图。获取密钥的步骤如下:

  1. 在 Google Cloud 控制台中创建项目并启用 Maps JavaScript API(Google 会要求为项目添加结算账号)。
  2. 在 APIs & Services > Credentials 下创建 API key。
  3. 限制密钥:Application restrictions = Websites,并列出你的网站地址(例如 https://example.com/*);API restrictions = 仅限 Maps JavaScript API。

然后传入密钥:

rs.render_edges(edges, street_view_key="AIza…")         # the floating Street View window
rs.render_street_view(edges, street_view_key="AIza…")   # the side-by-side page

和所有浏览器密钥一样,该密钥会写入页面,因此第 3 步中的网站限制是保护密钥的关键。这也意味着 Linked 模式只能在你列出的网站地址上运行:要在 localhost 上试用,请将 http://localhost:*/* 添加到列表中。不要将密钥提交到 git,例如,可以将其设为环境变量。

更多信息:设置与底图 · Google Street View。

文档

khoshkhah.github.io/roadstyle,每个页面都提供可交互地图。

位置内容
开始使用安装、创建第一张地图,以及数据要求
指南设置道路样式 · 根据数据着色 · 自定义图层 · Google Street View · 大型路网 · 仪表板与 JavaScript · 在网站上使用
图库每种样式都配有图片和一行代码
Rust 引擎engine="rust"(实验性):相同的地图,速度提升 3 到 12 倍;浏览器包和 crates
参考所有参数 · JavaScript API · 设置与底图 · 命令行
更新日志各个版本的变更内容

构建基础

  • MapLibre GL JS(BSD-3-Clause)负责绘制所有网页地图:roadstyle 编写其样式和数据,并将 MapLibre 的副本内嵌到每个已保存的页面中,以便离线打开。
  • OpenStreetMap 数据(© OpenStreetMap 贡献者,ODbL)和 openstreetmap-carto 样式;roadstyle 遵循其中的道路类别、颜色和宽度设置。
  • HiGHS 通过 SciPy 求解道路绘制的叠放顺序。
  • GeoPandas 和 Shapely 用于处理几何数据;lonboard(deck.gl)和 folium 用于笔记本后端。

许可证

MIT。底图图块来自第三方服务(CARTO、OSM、Esri),各自有不同的署名要求和使用条款。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。