本发明属于公共交通信息化领域,涉及一种通过对公共交通基础数据运算自动生成公交线路牌图片的方法。
背景技术:
随着社会的发展,城市变化日新,公交线路变化频繁,增加新的公交线路,增加新的站点,减少站点,修改冠名,增加冠名,删除冠名等情况几乎每天都要发生,每一次的变化都需要做新的线路牌,少则涉及单条线路几十个线路牌需要重新制作更换,多则涉及多条公交线路几百个线路牌图片需要重新制作更换。
技术实现要素:
本发明要解决的技术问题是提出一种自动生成公交线路牌图片的方法。
步骤1,系统要自动获取线路所涉及的基础信息并且自动选择导入需要的线路牌模板图片流。
步骤2,初始化设置各部分信息在线路牌模板中的排版的起始坐标、结束坐标。预先定义参数(x0,y0)线路名称打印点坐标。定义参数x1为线路中第一个站点名称或冠名在线路牌模板上的图片上的x坐标。定义参数x3为最后一个站点名称或者冠名的x坐标。参数y1为所有站点名称和冠名第一个字的y坐标。参数y2为所有站点名称和冠名最后一个字的坐标。定义途径点信息字体大小字典库smaps,不同的站点或冠名个数设置不同的字体大小。打印线路途径点信息之前根据该线路最长途径站点名称或冠名的数字来获取该途径点的字体大小。
步骤4,计算得到途径点排版数据排版打印,首先定义途径点信息字体类型stype,然后计算得到途径站点字号及途径点坐标,最后在线路牌模板流中写入途径点信息,具体步骤如下:1)根据字典库smaps获取该条线路途径点信息字体大小号。2)根据线路中途径点个数scount,途径站点冠名个数tcount,途径点起始站x坐标x1,途径点末站x坐标x3计算每个途径点的x坐标。要求写入途径点区域且每个途径点之间的间距是相同的。3)打印当前途径点信息,所有途径站点名和冠名最后显示出来都是等高的,途径站点和冠名是一个字一个字垂直打印出来,要求每个字之间间距必须是相等的。根据这个要求循环计算出每个途径点每个字的y坐标。4)循环执行第3)步,打印出该线路的每一个途径点信息,直到所有途径点信息打印完毕。
步骤5,计算得到排版数据,排版打印下一站信息。设置线路牌下一站信息打印的字体类型nexttype和默认的字号nextsize,计算线路牌上下一站写入坐标,下一站信息写入分为两种情况:情况一、没有冠名情况,下一站位置信息只写入下一站站名,要求下一站站名,给定起始点、结束点坐标站名各字字间距相同。情况二、有冠名的情况,下一站位置信息需要打印下一站站名和冠名,按照情况一的方式分别打印站名及冠名。
步骤6,所有信息排版打印完毕后,系统开始生成线路牌图片文件,多少个途径点就生成多少个图片文件,一个途径点对应一个线路牌图片文件,每个图片文件尺寸都是根据对应站牌尺寸大小决定的。
本发明属于信息化产物。本发明与现有线路制作方法相比,本发明具有以下特点:(1)、效率高,系统一键生成。(2)、错误率低,线路牌中所需要的基础信息都是系统自动从数据库中获取,不会有错。(3)、精度高,线路牌中所显示的基本信息排版位置,字体大小都是综合多方面数据通过严格的算法计算得来的,误差率很低。
附图说明
图1是本发明流程图。
图2是实例中线路牌模板初始化坐标图示。
图3是实例中线路牌模板图片。
图4是实例中自动生成的线路牌。
图5是实例中线路牌的线路名信息打印。
图7是实例中线路牌中下一站信息打印,无冠名情况。
图8是实例中线路牌中下一站信息打印,有冠名情况。
图9是实例中线路中途径点信息显示。
具体实施方式
本发明的基本思想是,当公交线路信息有所改变需要重新制作线路牌图片,首先系统会自动从数据库中获取到该线路的基本信息,然后系统根据该线路的基本信息来计算得到信息在线路牌模板中所显示排版参数,如:字体大小、每一个字的位置、字间距、列间距等。根据不同的途径点信息生成不同的线路牌图片。有多少途径点就生成多少个线路牌图片,每个生成的线路牌图片与途径点都是一一对应的关系,如:尺寸大小,当前站点颜色等。具体包括几个要点:1).每条线路牌的模板图片根据当前线路信息自动选择获取。2).线路牌上基本信息按照规定的字体格式进行打印。3).线路牌上的下一站信息要分为有冠名和无冠名的情况,且打印需要排版整齐,字间距相同。4).途径站点信息打印字体的大小、排版位置全部需要动态计算得到。各途径点之间等距排版,各途径站点中字间距等距排版(包括冠名)。5).多少个途径点就生成多少个线路牌图片文件,途径点与生成的线路牌图片一一对应,生成的线路牌图片和途径点现场线路牌大小尺寸相同,可以直接进行印刷制作。
步骤2,初始化各部分信息在线路牌模板中的排版的起始坐标、结束坐标。预先定义参数(x0,y0)线路名称打印点坐标。定义参数x1为线路中第一个站点名称或冠名在线路牌模板上的图片上的x坐标。参数x3为最后一个站点名称或者冠名的x坐标。参数y1为所有站点名称和冠名第一个字的y坐标。参数y2为所有站点名称和冠名最后一个字的坐标。
smaps={(2,380)(3,320)(3,320)…(n,size)};
n:该线路字数最多的途径站点名称或冠名
size:所对应途径点信息打印字体号。
步骤4,计算得到排版参数后排版打印打印途径点信息。定义途径点字体类型stype,计算得到途径站点字号及途径点坐标,线路牌模板中打印途径点信息,具体步骤如下:1).根据当前线路途径点信息情况从smaps中获取对应的途径点信息打印字号。2).根据线路中途径点个数scount,途径站点冠名个数tcount,途径点起始站x坐标x1,途径点末站x坐标x3计算每个途径点的x坐标。要求是每个途径点之间的间距是相等的,即
sitlen=(x3-x1-tcount*cw)/(scount-1)
sitlen:途径点间距
cw:途径点信息字号确定后单个字符的宽度
3).设置途径点信息打印字体类型和字号打印当前途径点信息,所有途径站点名和冠名打印出来都是等高的,有冠名先打印冠名再打印站点信息,途径站点和冠名是单字垂直打印出来,要求每个字之间间距必须是相等的。根据这个要求循环计算出每个途径点每个字的y坐标y,进行打印。计算公式
toff=(maxlen-tlen)×v/(tlen-1)
y=y1+((n-1)×v)+(n-1)×toff
off:站点名或冠名垂直字符字符偏移量
maxlen:该条线路字符最多的站点名称或者冠名的字符个数
tlen:当前站点名称
v:当前字号的单个字符垂直高度
n:当前打印的字符序号
y:第n个打印的字符y坐标
4).循环执行第3)步,打印出该线路的每一个途径点信息,直到所有途径点信息打印完毕。
步骤5,计算得到排版参数后排版打印下一站信息。设置线路牌下一站打印信息字体类型nexttype和字体大小nextsize,计算线路牌上下一站打印坐标。下一站打印分为两种情况:情况一、没有冠名情况,下一站位置信息只打印下一站站名,根据给定起始点(x4,y4)、结束点(x5,y5)坐标,循环计算出下一站站点名称每个字符的x坐标进行打印
nextoff=(x5-x4)/(nextsitelen-1)
x=x4+nextoff*(n-1)
nextoff:下一站站点名称字符x坐标偏移量
nextsitelen:下一站站点名称字符个数
x:第n个字符x坐标
情况二、有冠名的情况,下一站位置信息需要打印下一站站名和冠名,按照情况一的方式分别打印站名及冠名。给定下一站站点名称起始点坐标(x6,y6)、终端坐标(x7,y7)循环计算出下一站站点名称每个字符的x坐标进行打印。给定下一站站点名称起始点坐标(x8,y8)、终端坐标(x9,y9)循环计算出下一站站点名称每个字符的x坐标进行打印
nextoff=(x7-x6)/(nextsitelen-1)
x=x4+nextoff×(n-1)
nextoff=(x9-x8)/(nextsitelen-1)
x=x4+nextoff×(n-1)。
步骤6,信息打印完毕,根据站牌尺寸自动生成相同尺寸的线路牌图片文件。
步骤7,重复步骤3直到所经站点的所有线路牌图片生成完成。
下面结合附图及实施例对本发明作进一步描述。
步骤1,根据所属公交公司读入湖南巴士线路牌图片模板,获取线路104路基本信息。如图2。
步骤4,计算排版参数排版打印站点信息,总共有29个途径点,有5个冠名。字符最多的途径点字符数为9,在字典smap中获取到的对应字符号为152,则可以获取到当前字号单个字符的宽度cw,高度v。途径点起始点x1=250,x3=9600,y1=1150计算得到途径点间隔tlen=(9600-250-charwidth×5)/(29-1)。如图9。具体步骤如下:(1)、设置途径点打印字符大小我152号,设置字符类型为“文鼎cd大黑”。(2)、循环打印每一个途径点信息,从首站“九峰公园公交首末站”到“长沙火车站”。例打印途径点“窑岭北”站,该途径点包括冠名“湖南省图书馆”,所以需要先打印冠名再打印站名。首先计算出该途径点冠名的字符打印偏移量,该线路最长字符为9,当前冠名字符数为6,当前冠名数与最大数相差3个字符,应将这3个字符高度平均分配给其它6个字符的坐标、。根据公式计算偏移量toff=(9-6)*v/(6-1),根据计算公式y=y1+((n-1)*v)+(n-1)*toff那冠名中的字符y坐标分别为:“湖”1150+0,“南”1150+v+toff,“省”1150+2*v+2*toff,“图”1150+3*v+3*toff,“书”1150+4*v+4*toff,“馆”1150+5*v+5*toff。字符逐个打印出来。站点名称打印原理相同。
步骤5,计算排版参数排版打印下一站信息,y坐标都相同则只需要计算每一个字符的x坐标。根据公式计算出下一站每个字符的x坐标。x=x4+((x7-x6)/(nextsitelen-1))*(n-1)。例如下一站为“长沙火车站”。则:每个字符的x坐标分别为:“长”x4+(6700-480)/(5-1)*0,“沙”x4+(6700-480)/(5-1)*1,“火”x4+(6700-480)/(5-1)*2,“车”x4+(6700-480)/(5-1)*3,“站”x4+(6700-480)/(5-1)*4。如图7图8。
步骤6,信息打印完毕,根据站牌尺寸自动生成相同尺寸的线路牌图片文件。如“长沙火车站”线路牌宽度为“4600*1280”那生成的线路牌图片就是“4600*1200”大小。
步骤7,重复步骤3循环生成所有途径点线路牌共计29个。如图4。