首页/指南/开发者
开发者

如何在自己的网站中集成一张移动地图?

在您的网站中集成ROOTE地图:响应式iframe,自行车、厕所、公交和有轨电车过滤器,城市搜索及参数传递。

By ROOTE·7分钟阅读
如何在自己的网站中集成一张移动地图?
一张实用的地图,集成在您的页面中。

要点速览

使用指向 embed.roote.ai 的 iframe 并通过其 URL 传递地点、缩放和出行模式。区分摄像机位置和搜索点,保持参数传递至 map.roote.ai,并验证移动端显示效果。

想在您的网站中集成一张移动地图,而无需构建完整界面,可使用ROOTE的iframe。该嵌入支持城市搜索和页面对应的过滤器:自行车用于骑行指南,厕所用于洗手间指南,公交和有轨电车用于交通出行。

本指南中的示例使用 embed.roote.ai,这一域名已在ROOTE指南中集成。通用文档也描述了 map.roote.ai 的集成方法,并区分了摄像机参数与完整搜索参数。

添加响应式iframe

此代码块开启了波尔多的自行车搜索,缩放级别为15。URL在代码中构建;iframe的标题为屏幕阅读器用户描述其内容。请根据页面语言调整该标题。

<iframe
  title="Carte ROOTE — vélos à Bordeaux"
  src="https://embed.roote.ai/?q=Bordeaux&amp;modes=bicycle&amp;zoom=15"
  width="100%"
  height="480"
  loading="lazy"
  allow="geolocation"
  style="display:block; width:100%; min-height:360px; border:0; border-radius:16px;"
></iframe>

在HTML属性中,分隔符&应写为&amp;。宽度100%跟随容器宽度。保持适合移动端的高度,避免将必需控件置于不可见区域。

选择与页面相符的出行模式

需求嵌入参数
自行车modes=bicycle
厕所modes=toilets
公交modes=bus
有轨电车modes=tram
公交和有轨电车modes=bus,tram
自行车和厕所modes=bicycle,toilets

这些值对应ROOTE的嵌入路径,涵盖出行、服务和通勤三大类。它们不能替代REST参数:服务类用types,通勤类用modes。一张以城市为中心的地图不保证每个分类都有数据。

区分摄像机位置与搜索起点

lat和lon定位摄像机视角。但在地图的文档协议中,这不足以创建临近搜索。还需使用search_lat、search_lon和search_label参数,配合出行模式和缩放级别,以还原已知搜索。

https://embed.roote.ai/?search_lat=44.8416106&search_lon=-0.5810938&search_label=Bordeaux&zoom=15&modes=bus,tram

以上坐标是波尔多的参考点,不是用户位置。如果也加入摄像机参数,可以在保持距离计算点的同时显示其他区域。仅在需要区分时使用此方法。

ROOTE地图参数文档

构建URL时避免特殊字符丢失

建议使用URL和URLSearchParams对象,而非手动拼接字符串。它们会正确编码空格、重音符号和分隔符。以下代码适用于浏览器,从输入的地点生成iframe地址。

const embedUrl = new URL('https://embed.roote.ai/');
embedUrl.searchParams.set('q', 'Place des Quinconces, Bordeaux');
embedUrl.searchParams.set('modes', 'bicycle,toilets');
embedUrl.searchParams.set('zoom', '15');
document.querySelector('iframe').src = embedUrl.toString();

保持状态传递至完整地图

指向 map.roote.ai 的链接应包含当前搜索状态。重建没有参数的URL会丢失城市、出行模式或缩放信息。维护一个统一的URL对象,页面更新时同步其参数。

const fullMapUrl = new URL('https://map.roote.ai/');
fullMapUrl.search = embedUrl.search;
const link = document.querySelector('[data-open-map]');
link.href = fullMapUrl.toString();
link.target = '_blank';
link.rel = 'noopener noreferrer';

此代码保持父页面已知参数。若用户在iframe内修改搜索,父页面无法直接读取跨域的iframe URL。需要明确实现且有文档支持的机制,例如通过postMessage并校验来源来传递状态。不要凭空发明iframe未支持的事件名称。

管理定位和移动端交互

allow="geolocation"允许iframe请求定位权限,但需用户同意并符合网站权限策略。拒绝定位请求时应允许城市搜索功能正常使用。不要在用户未经选择时页面加载即请求位置。

文章中主动激活地图能避免地图滚动和缩放阻拦阅读手势。控件必须键盘可达且明确标识。检测设备转向和窄屏,兼顾移动端与桌面视角。

检查结果显示及异常状态

测试每个过滤条件、一个已知城市、数据稀少区域、无效搜索及无可用分类。地图无标记时无法单独区分搜索结果为空还是接口故障。保留嵌入消息及可用的完整地图访问。

区分无结果与API错误

选择使用embed、API还是MCP

寻找厕所功能演示指南示例

为开发者提供ROOTE 出行API

关注某点的出行信息。
直接集成进您的应用。

  • 搜索
    指定位置周边
  • 获取
    出行数据
  • 集成到
    您的应用

告别单纯地图,使用ROOTE API搜索附近的出行和服务数据。

常见问题

iframe需要API密钥吗?

此处展示的公开URL均不包含密钥。不要将秘密放在嵌入URL或客户端代码中。

zoom=15是否扩大搜索半径?

缩放控制视图范围,不能等同于API请求半径。请确认您使用的接口中搜索参数的具体含义。

父页面是否知晓iframe中的变动?

父页面仅知道传入的参数。iframe内部变更需双方跨域通信机制并有文档支持。

何不环顾四周?

用ROOTE探索您的社区,发现可用的出行信息,轻松规划出行。

探索ROOTE地图 ↗