关于 roadstyle
roadstyle 是用于创建交互式道路地图的 Python 库和命令行工具,数据可来自 OpenStreetMap 地点或道路数据集。它生成独立 HTML 地图,支持道路样式、按数据着色、Street View 和 JavaScript API;其 MCP 服务可让 AI 应用无需编写代码生成地图及 PNG 预览。
主要功能
- 01从地点或道路数据渲染地图
- 02导出独立的离线 HTML 地图
- 03按数据列设置道路颜色
- 04从道路打开 Google Street View
- 05通过 JavaScript API 操作地图
- 06为 AI Agent 提供地图生成工具
适用场景
- 01根据 OpenStreetMap 创建地点道路地图
- 02用颜色展示交通量或速度数据
- 03分享独立 HTML 地图
- 04让 AI Agent 渲染地图并检查预览
MCP 相关
MCP 服务向客户端提供 `render_place`、`render_file` 和 `snapshot`。它保存 HTML 地图,并返回文件路径和 PNG 预览。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
3收录的工具列表 · 更新于 4 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| place | string | 是 | |
| options | any | 否 | |
| output_path | any | 否 | |
| network_type | string | 否 |
详细介绍
roadstyle
用 Python 创建精美的交互式道路地图。
一个离线 HTML 文件,包含真实的道路制图、Google Street View 和 JavaScript API。
安装 · 快速开始 · 图库 · 实时地图 · AI Agent · 文档

为什么选择 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 桥梁 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.mdAGENTS.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 模式使用无需密钥的嵌入式地图。获取密钥的步骤如下:
- 在 Google Cloud 控制台中创建项目并启用 Maps JavaScript API(Google 会要求为项目添加结算账号)。
- 在 APIs & Services > Credentials 下创建 API key。
- 限制密钥: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),各自有不同的署名要求和使用条款。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。





