模組:CNBUS/doc

这是Module:CNBUS的文档页面

本模块是实现一系列交通相关模板功能的基础模块,支持管理各城市公共汽车系统的数据资料,目前主要用于生成一个显示公交线路资料的表格。

子模块一览

目前,各公交系统均使用独立的模板,并依赖本模块子页面的相关资料。下表为本模块已建立的子模块。您也可以仿照后文所述的格式新建子模块(并不限于中国大陆城市),并将其添加至下表。欢迎各位对已有资料进行定期维护更新。

相互引用情况

珠三角各系统
位置

Module:CNBUS/

被引用系统
肇庆 珠海 江门 中山 佛山 广州 东莞 惠州 深圳
系统 肇庆 不適用 ZQ/foshan
珠海 不適用 ZH/jiangmen ZH/data

ZH/zhongsha

江门 JM/zhuhai 不適用 JM/zhongshan JM/foshan
中山 ZS/zhuhai ZS/data 不適用 ZS/foshan
佛山 FS/zhaoqing FS/data

FS/jiangmen

FS/data

FS/zhongshan

不適用 FS/guangzhou
广州 GZ/foshan 不適用 GZ/dongguan
东莞 DG/guangzhou 不適用 DG/huizhou DG/shenzhen
惠州 HZ/dongguan 不適用 HZ/shenzhen
深圳 SZ/zhongshan SZ/dongguan SZ/huizhou 不適用
潮汕地区各系统
位置

Module:CNBUS/

被引用系统
汕头 潮州 揭阳
系统 汕头 不適用 ST/jieyang
潮州 CZ/shantou 不適用 CZ/jieyang
揭阳 JY/shantou 不適用

接口一览

直接调用接口的模板的参数表(传入)和其调用接口时显式指定的参数表(传出)都会被识别,两者优先级参见Module:Arguments。由本模块导出的模板可能还提供了其他别名。

接口参数列表
参数 说明 列表 折叠列表 运营商颜色 线路名称 别名与注释
{{{1}}} {{{2}}} 线路代码列表 需要 需要 不適用 单个
{{{city}}} 城市代码 需要 需要 需要 需要 各城市模板默认填写
{{{area}}} 区域代码 需要 需要 不適用 需要 部分模板提供{{{loc}}}别名
{{{operator}}} 运营商代码 不適用 不適用 需要 不適用 {{{company}}}
区别于{{{operators}}}
{{{start}}} 是否开始表格
输出<table>开标签及表头
可选 可选 不適用 不適用 默认为真
{{{end}}} 是否结束表格
输出</table>
可选 可选 不適用 不適用 默认为真
{{{header}}} 表格标题 可选 可选 不適用 不適用 {{{info}}} {{{station}}}
依赖于{{{start}}}
{{{type}}} 列表样式 可选 不適用 不適用 不適用 BRT:覆盖{{{fare}}}{{{operators}}}{{{vehicles}}}
{{{time}}} 是否显示时间 可选 不適用 不適用 不適用
{{{fare}}} 是否显示票价 可选 不適用 不適用 不適用 默认为真
{{{operators}}} 是否显示运营商 可选 不適用 不適用 不適用 默认为真
区别于{{{operator}}}
{{{vehicles}}} 是否显示车型 可选 不適用 不適用 不適用
{{{image}}} 是否显示图片 可选 不適用 不適用 不適用

list

通过输入一个或多个线路编号以生成包含这些线路资料的表格。目前支持起讫点、线路方向、营运公司(分公司)、票价、运营时间、车辆图片、线路配车、BRT站台信息、备注等信息。

{{#invoke:CNBUS |list |city=#包含系统 }}

编号线路及运营时间收费运营商备注
1芳村花园南门
6:00–22:30
东山署前路
6:00–22:30
2元一汽一分

或者,线路也可以使用单个模式匹配表达式(必须以^开头)指定,用例参见重庆公交线路列表 (中心城区)。常用的代码匹配方式如:

  • ^T:所有T开头的线路;
  • ^%d%d%D*$:所有两位数的线路(允许非数字后缀,不允许更多数字);
  • ^1%d%d%D*$:1开头三位数的线路(允许非数字后缀,不允许更多数字)。

注意,输出的线路将按照线路代码以字符串排序,这意味着2会排在10的后面;此情形下建议配合{{{start}}}{{{end}}}将不同位数代码分拆多个表格显示。

collapsibleList

类似list,但只会生成一个的简化版的表格。目前仅支持起讫点和线路方向。

{{#invoke:CNBUS |collapsibleList |city=#包含系统 }}

color

属于辅助功能,可输出代表线路运营商的颜色代号。list 已集成该功能。

lineName

展示简短行内链接。如{{惠州巴士路线极简列表|1}}:公交路线:1

数据格式

本模块约定将数据存储在子模块中。

城市总表模块

在将本模块引入公交系统前,首先需要建立一个子模块作为该系统的数据模块。请将该子模块命名为Module:CNBUS/<城市代码>,其基本框架为:

local xx = {
    areas = { },
    operators = { }
}

xx.areas['xx'] = {
    name = "<区域名>",
    page = "<线路列表条目名>",
    source = "Module:CNBUS/XX/data", -- 对应模块
    aliases = { "XX", "理塘", "default" } -- 
}

xx.operators['bus'] = {
    color = "red",
    aliases = { "Bus", "公交集团" }
}
xx.operators['transport'] = {
    color = "silver",
    aliases = { "交运集团" }
}

return xx

区域表

每个子模块可包含一个或多个子区域,可分别存放城区、郊区、外市路线的资料。在本模块设置各区域资料的例子如下:

gz.areas['guangzhou'] = {
	name = "广州",
	page = "广州巴士路线列表",
	source = "Module:CNBUS/GZ/data",
	aliases = { "Guangzhou", "GZ", "gz", "广州", "廣州", "default" }
}
gz.areas['nansha'] = {
	name = "南沙",
	page = "南沙巴士路线列表",
	source = "Module:CNBUS/GZ/nansha",
	aliases = { "Nansha", "NS", "ns", "南沙" }
}
gz.areas['foshan'] = {
	name = "佛山",
	page = "佛山巴士路线列表",
	source = "Module:CNBUS/GZ/foshan",
	aliases = { "Foshan", "FS", "fs", "佛山" }
}

其中,source的值为子区域各线路的详细资料;pagename用于设置list和collapsibleList的标题中指向列表条目的内部链接([[page|name]],如[[广州巴士路线列表|广州]]);aliases 则包含了该子区域的别名,由area参数调用。

本例中共有3个区域,分别为“guangzhou”、“nansha”和“foshan”。在未提供area参数的值,或area参数的值为“guangzhou”、“Guangzhou”、“GZ”、“gz”、“广州”、“廣州”时,则选择区域“guangzhou”。“nansha”和“foshan”同理。

运营商表

在本模块设置各运营商颜色的例子如下:

xx.operators['bus1'] = {
    color = "orange", -- 颜色
    aliases = { "一汽一分", "一汽二分" } -- 别名。键值本身(此处为bus1)不需要包含其中
}
xx.operators['bus3'] = {
    color = "#fff600",
    aliases = { "三汽一分", "三汽二分" }
}
xx.operators['other'] = {
    color = "white",
}
xx.operators['multi'] = {
    color = "black",
}

在本例中,一汽和三汽公司的代码分别为bus1bus3,则运营商为“一汽一分”和“一汽二分”的代表色为“orange”(橙色),“三汽一分”和“三汽二分”的代表色为“#fff600”(近似于黄色)。此外,还需要设置“other”和“multi”,分别代表模块中未列出的运营商(显示为白色)和多于一个运营商(显示为黑色)。

线路表模块

此后,便是为各个区域添加具体的线路(line)资料。请在该子模块下再新建一个二级子模块,并命名为“Module:CNBUS/<城市代码>/<区域代码>”,其基本框架如下:

local p = {
-- 常规线路
['1'] = { name = "线路名", mark = "线路名标注", fare = "票价", operators = "运营商", vehicles = { "配车1", "..." }, note = "备注", image = "[[File:示例.jpg|128px]]",
	{ { "左起讫点", time = "发车时间" }, { "方向箭头", mark = "方向标注" }, { "右起讫点", time = "发车时间" } }, --[[区间1]]
	{ { "左起讫点", time = "发车时间" }, { "方向箭头", mark = "方向标注" }, { "右起讫点", time = "发车时间" } }, --[[区间2]]
	{ --[[…]] }, --[[任意数量区间]] },
-- BRT线路
['B1'] = { name = "线路名", mark = "线路名标注", fare = "票价" --[[BRT样式下不可见]], operator = "运营商", note = "备注", image = "[[File:图片.jpg|x128px]]", brt = { { "驶入BRT通道车站", "经停BRT车站数", "驶出BRT通道车站" --[[右向]] }, { "驶出BRT通道车站", "经停BRT车站数", "驶入BRT通道车站" --[[左向车站定义位置相反]] } }
	{ { "左起讫点", time = "发车时间" }, { "→" --[[完整列表BRT样式下由brt字段自动确定;单向线路需要为其他情况填写]], mark = "方向标注" }, { "右起讫点", time = "发车时间" } }, },

-- 停办线路
['114'] = { name = "线路名", mark = "线路名标注", status = { -1, date = "日期" } },
-- 暂时停运线路
['514'] = { name = "线路名", mark = "线路名标注", status = { 0, date = "日期" } },
}

-- 导入其他模块的线路资料。请注意,引用的线路代码不能是重定向
p._external = {
	['Module:CNBUS/XX/data'] = {
    	['1'] = '1',
        ['114'] = { '514', override = { name = '114' } }, -- 支持覆写部分属性
    },
	['Module:CNBUS/YY/data'] = {
    	['2'] = '2',
    },
}

-- 定义线路编号重定向
p._map = {
	['01'] = '1',
	['BRT1'] = 'B1',
}

return p
  • 线路代码['line']区分简体/繁体和英文大写/小写的,因此在使用时不可混用,建议统一同城市下各子系统的简繁和大小写规则。其他参数内容不受限制。
  • 如需在名词中使用连字符,请使用“-”而非“-”或“-”等。为使用方便,连字暨减号-U+002D)在线路名称、时间、票价和备注中,与数字字母相邻时将被替换为半宽连接号U+2013),其余情形下将被替换为全宽连接号U+2014)。
  • name必填,<区间>[1][1]<区间>[2][1]<区间>[3][1]fareoperatornote参数建议填写(<区间>相关补全规则见#区间子表)。
  • operatorsvehicles既可以是字符串,也可以是数组(显示时分行)。数组表示的operators会直接被视为多运营商。
  • 若需要显示BRT信息,则右向<BRT>[1][1]<BRT>[1][2]<BRT>[1][3]和左向<BRT>[2][1]<BRT>[2][2]<BRT>[2][3]参数需要至少填入一组。右向为空时需要显式置nil方能填写左向数据;若实际存在但缺少相关资料,则应将对应方向置为空表{ }
  • 各参数值可以加入内部链接及换行符<br />,但来源引用<ref>和各类模板是无法使用的。

区间子表

为使用简便,一部分置空的值会使用邻近的值进行取代。补全的顺序遵循区间定义的顺序,区间内部则依次为左、右、方向。首个区间(route)和后继区间的回落规则有所不同。

对于每条线路的首个区间

  • 左起讫点保持原样(as-is),除表不存在(nil或未定义)时转化为空表;
  • 右起讫点若无效(表不存在;表首位的字符串不存在或长度为0),复制左起讫点的名称,附属属性保持原样;
  • 方向若无效(表不存在;表首位的字符串不存在或长度为0),左右起讫点(回落补全后)若相等则视作逆时针循环线,否则视为往返线,附属属性保持原样。
{ },
-- 等价于
{ { }, { "↺" }, { } },

{ { "火车站" }, { mark = "直" }, { "机场" } },
-- 等价于
{ { "火车站" }, { "⇆", mark = "直" }, { "机场" } },

{ { "火车站", time = "10:00" }, nil, { time = "20:00" } },
-- 等价于
{ { "火车站", time = "10:00" }, { "↺" }, { "火车站", time = "20:00" } },

对于后继区间

  • 左右起讫点若表不存在,则复制上一区间对应起讫点的所有属性;若表首位的字符串(名称)不存在或长度为0,则只复制上一区间对应起讫点的名称,附属属性保持原样;
  • 方向的行为与首个区间相同。
-- 假定补全后的上一区间
{ { "火车站", time = "10:00" }, { "⇆", mark = "快" }, { "机场", time = "20:00" } },

{ },
-- 等价于
{ { "火车站", time = "10:00" }, { "⇆" }, { "机场", time = "20:00" } },

{ nil, { mark = "直" }, { "" } },
-- 等价于
{ { "火车站", time = "10:00" }, { "⇆", mark = "直" }, { "机场" } },

用例

常见错误

在条目中使用引用了本模块的模板后,可能会提示以下错误:

错误提示 错误原因 解决方法
错误 Module:CNBUS不存在“XXX”的公交系统数据 Module:CNBUS/XXX不存在 检查模板中 city=<城市代码> 的<城市代码>是否填写错误
错误 “city”参数为空,请输入城市代码 模板未填入 city 的值 填写模板中 city=<城市代码> 的<城市代码>
错误 Module:CNBUS/XXX中未包含“yyy”的资料模块 Module:CNBUS/XXX/yyy不存在 检查模板中 loc=<子系统代码> 的<子系统代码>是否填写错误
错误 资料模块Module:CNBUS/XXX/yyy出现错误,请前往检查 Module:CNBUS/XXX/yyy出现错误 大多为资料模块导入其他模块时输入错误(本说明文档示例中的“导入其他模块的线路资料”部分),请仔细检查资料模块中该部分代码是否有误。如无法定位错误,可借助编辑框下方的“调试控制台”寻找出错行数。不知道怎么用?最简单的方法是输入 print(p) 后回车,如提示“Lua错误”,即可找到出错的变量及其位置。
无输入 请输入线路编号 使用模板时填入线路编号,或去除多余的“|”
295 数据模块Module:CNBUS/XXX/yyy出现错误 Module:CNBUS/XXX/yyy没有结尾 在相应模块添加return linereturn xxxbusline
308 模块Module:CNBUS/XXX/zzz引用的数据模块Module:CNBUS/XXX/yyy出现错误
1234 本线已于0202年1月1日停办,请移除 使用模板时删除该线路
5678 本线自0202年1月1日起暂停服务 使用模板时视情况删除或保留该线路
9012 本线并非BRT线路 线路缺少 brt_b 参数 如该线路并非BRT线路,使用模板时请勿选择 style=BRT 样式;如该线路的确为BRT线路,请补充完整该线路在BRT通道的行驶信息,否则使用模板时请勿选择 style=BRT 样式。

备注

本模块的相关功能以先前广州巴士路线列表的样式排版设计。模块前身为{{廣州巴士路線}};为优化页面加载速度和方便在不同系统间调用资料,模板于2019年中进行模块化改版(Module:GZBUS);为方便各模块的维护管理,2020年5月再将原先各模块合并于此。

遇线路调整需要修改模块数据时,请留意调整所根据的来源性质(不是要求将来源写入模块中,这样做反而可能导致代码兼容问题),依据近期WP:RSN共识,巴士档案站(buspedia.top)通常不可靠,请勿单纯根据该网站盲目修改。

如您在使用本模块时遇到问题或有任何建议,欢迎在模块讨论页中提出。