具体实施方式
下面结合附图和实施例对本发明作进一步详细说明。
本发明使用的已有技术平台包括:GIS模块、GPS获取模块、语音合成模块。
本发明采用的现有方法包括:公开方法一:泰森多边形生成算法(张宏,温永宁,刘爱利.地理信息***算法基础[M].科学出版社,2006:176页);公开方法二:点是否在多边形内判断算法(张宏,温永宁,刘爱利.地理信息***算法基础[M].科学出版社,2006:26页);公开方法三:直接***排序法(严蔚敏,吴伟民.数据结构(C语言版)[M].清华大学出版社:265页);公开方法四:多边形与多边形关系判断算法(张宏,温永宁,刘爱利.地理信息***算法基础[M].科学出版社,2006:32页);公开方法五:点是否在圆内判断算法(张宏,温永宁,刘爱利.地理信息***算法基础[M].科学出版社,2006:33页);公开方法六:圆是否在圆内判断算法(张宏,温永宁,刘爱利.地理信息***算法基础[M].科学出版社,2006:33页)。同时也使用到了公开号为CN102142215A、发明名称为“一种顾及位置与速度的地理信息自适应语音讲解方法”的专利申请中的某些步骤。
本***处理景点与景点之间播报冲突模块的具体工作流程(见图2):
利用已有的GIS模块将经度和纬度转化为特定地图投影中的坐标,记录为(X,Y),其中X为纬度在特定地图投影中的坐标,Y为经度在特定地图投影中的坐标(下文中的X均为纬度在特定地图投影中的坐标,Y均为经度在特定地图投影中的坐标)。用户规划线路是指从用户运动起点到用户运动终点之间的路径,由一系列坐标点构成。
(1)设定景点位置集合为P={pi=(Xi,Yi)|i=1……n,n为景点数量};用户规划线路为R={ri=(Xi,Yi)|i=1……m,m为用户规划线路中的坐标点数量};景点泰森多边形集合为VoroA;候选有效讲解路径为CSR;候选有效讲解路径集合为CSRA;临时候选有效讲解路径集合为TCSRA;有效讲解路径为VSR;有效讲解路径长度为S;距离控制阈值为D,是指以景点为圆心的圆形缓冲区的半径,用于控制是否触发语音导游讲解;有效讲解时间为T;语音合成速度为VT,是指语音合成模块单位时间内可合成的文字数量;有效讲解文字长度为C;讲解段选择集合为SELECT;当前讲解景点为CSP;用户当前位置为UP;用户当前运动速度为V;位置偏差阈值为L,是指用户当前位置相对于用户规划线路上的坐标点ri的距离;已输出讲解段序号M初始值设为1;
(2)采用公开方法一“泰森多边形生成算法”,根据景点位置集合P生成景点泰森多边形集合VoroA={voroi=(idi,pointi)|i=1……n,n为景点数量},idi为泰森多边形的编号,其值与下标i(同P中的下标编号)相同,pointi为泰森多边形中包含的坐标点信息结构,具体表示为pointi={ponj=(Xj,Yj)|j=1……k,k为该泰森多边形顶点的数量};
(3)根据用户规划线路R和景点泰森多边形集合VoroA,执行候选有效讲解路径集合判断,得到候选有效讲解路径集合CSRA(如图3所示);
(4)执行当前讲解景点判断,得到当前讲解景点CSP;
(5)根据当前讲解景点CSP在候选有效讲解路径集合CSRA中选取与CSP的id相同的候选有效讲解路径,组成临时候选有效讲解路径集合TCSRA={tcsri=(idi,pointi)|i=1……n,n为临时候选有效讲解路径数量},idi为该候选有效讲解路径所属景点的编号(同该景点的泰森多边形编号),pointi为该候选有效讲解路径中的坐标点信息结构,具体表示为pointi={ponj=(Xj,Yj)|j=1……l,l为候选有效讲解路径中的坐标点数量};
(6)根据临时候选有效讲解路径集合TCSRA和用户当前位置UP,执行候选有效讲解路径判断,得到候选有效讲解路径CSR;
(7)根据候选有效讲解路径CSR、距离控制阈值D和当前讲解景点CSP,执行有效讲解路径判断,得到有效讲解路径VSR;
(8)根据有效讲解路径VSR和用户当前位置UP,执行有效讲解路径长度判断,得到有效讲解路径长度S;若S=0,则执行当前讲解景点判断后比较当前讲解景点是否相同,若不相同转到步骤(5),否则重复步骤(8);
(9)利用GPS获取的用户当前运动速度V和有效讲解路径长度S,执行如下语音导游讲解过程(引自现有公开专利申请CN102142215A中的步骤):
(a)若V≠0,则有效讲解时间T=S÷V,转步骤(b);若V=0,有效讲解时间T使用一个特定数值表示,转步骤(c);
(b)计算有效讲解文字长度C,C=VT×T;
(c)根据当前讲解景点CSP的讲解文本、有效讲解文字长度C和已输出讲解段序号M,执行地理信息匹配,获取到讲解段选择集合SELECT;
(d)对于讲解段选择集合SELECT,执行语音转换和输出;
定时执行当前讲解景点判断,若当前讲解景点的编号发生变化,则停止步骤(9)流程,已输出讲解段序号M设为1,转到步骤(5),若当前景点的编号未发生变化,则执行有效讲解路径长度判断,得到新的有效讲解路径长度后与当前的有效讲解路径长度进行比较,若不相等,则重新执行步骤(9);若用户选择退出语音导游讲解,则转到步骤(10);
(10)结束。
候选有效讲解路径集合判断流程(见图3):
(1)遍历用户规划线路R中的坐标点,采用公开方法二“点是否在多边形内判断算法”,在景点泰森多边形集合VoroA中计算R中每个坐标点所属的景点泰森多边形,并形成集合DSCRA={dscri=(Xi,Yi,idi)|i=1……n,n为规划线路R中的坐标点数量},idi为所属景点的泰森多边形的编号;
(2)设置比较开始位置mark=i,遍历DSCRA,比较dscri和dscri+1的id值是否相同,若相同则使i=i+1,继续比较;当dscri和dscri+1的id值不相同时使i=i+1转到步骤(3);若遍历完DSCRA后,所有的dscri的id值都相同,则执行完步骤(3)后转到步骤(4),否则直接转到步骤(4);
(3)将dscrmark到dscri-1之间(包括dscrmark和dscri-1)的元素添加到候选有效讲解路径集合CSRA={csrj=(idj,pointj)|j=1……t,t为候选有效讲解路径数量}中,idj为该候选有效讲解路径所属景点的泰森多边形编号,pointj为该候选有效讲解路径中的坐标点信息结构(即dscrmark到dscri-1之间(包括dscrmark和dscri-1)的所有坐标点),具体表示为pointj={ponk=(Xk,Yk)|k=1……m,m为dscrmark到dscri-1(包括dscrmark和dscri-1)之间的坐标点数量};添加完毕后转到步骤(2);
(4)结束;
当前讲解景点判断流程:
(1)利用GPS获取用户当前位置UP=(X,Y);
(2)根据用户当前位置UP和景点泰森多边形集合VoroA,采用公开方法二“点是否在多边形内判断算法”,获得当前讲解景点CSP={csp=(id,X,Y)},id为当前讲解景点的编号;
(3)结束;
候选有效讲解路径判断流程:
(1)若Len(TCSRA)=1,则将TCSRA中的唯一的坐标点信息结构添加到CSR中,即CSR={csi=(Xi,Yi)|i=1……l,l为坐标点数量};若Len(TCSRA)>1,转步骤(2);Len(TCSRA)是指TCSRA中的元素数量;
(2)遍历TCSRA,依次计算pointi中的第一个坐标点与用户当前位置UP的距离 将所有的dis添加到集合TPA={tpj=(disj,idj)|j=1……n,n为Len(TCSRA)}中,idj为pointi的下标号i的值;
(3)采用公开方法三“直接***排序法”,对集合TPA中的元素以disj值升序排序,排序完毕后在TCSRA中查找与tp1的id值相同的元素,并将其中的坐标点信息结构添加到CSR中,即CSR={csi=(Xi,Yi)|i=1……l,l为坐标点数量};
(4)结束;
有效讲解路径判断流程:
(1)遍历候选有效讲解路径CSR,依次计算其中的坐标点与当前讲解景点CSP的距离 若Dis≤D,则将此坐标点添加到有效讲解路径VSR中;
(2)结束;
有效讲解路径长度判断流程:
(1)遍历有效讲解路径VSR,依次计算VSR中的坐标点和用户当前位置UP=(X,Y)的距离 定位到dis最小的点(Xi,Yi),若此dis>L,则有效讲解路径长度S=0,转步骤(3),否则转步骤(2);
(2)计算从(Xi,Yi)开始到(XLen(VSR),YLen(VSR))的长度,即有效讲解路径长度 其中,Len(VSR)是指VSR包含的坐标点数量;
(3)结束;
本***处理景点与路口之间播报冲突模块的具体工作流程(见图5):
依据路口及景点将区域划分为路口播报区域Rci和景点讲解区域Rpi,将当前GPS位置Pgps至下一个未播报路口Ci之间所涉及的Rpi和Rci称作一个混合播报单元Ui,将景点讲解区域在规划线路前进方向的触发点至路口Ci之间的线路长度标识为Lpc,将规划线路在Rpi内的线路长度称为景点的有效播报长度Lpi,将规划线路在Rci内的线路长度称为Ci的有效播报长度Lci,用户沿规划线路前进时判断Pgps所属播报区域:若Pgps属于路口播报区域Rci,则先启动路口Ci的转向信息播报,待播报结束后再判断是否在景点讲解区域Rpi内,从而决定是否启动景点讲解工作;若当前位置属于景点讲解区域Rpi,则先判断路口播报区域Rci与景点讲解区域Rpi的空间关系,并结合两播报区域触发点之间的Lpc、Lpi以及Lci之间的距离关系(如附图6所示),适时提前或延迟路口信息播报。
(1)初始化Pgps,获取当前用户的位置信息并确定Ui;
(2)在Ui内采用公开方法获取POI区域Rpi的有效播报长度Lpi、路口播报区域Rci的有效播报长度Lci以及Lpc的值;
(3)判断当前Pgps所属播报区域,若Pgps同时不属于Rci和Rpi,则返回步骤(1),否则进行下一步;
(4)若Pgps属于路口播报区域Rci,则首先播报路口信息Ci,否则进行下一步;
(5)设定提前或延迟路口播报信息时两个播报区域间的距离阀值为L0,若Pgps属于POI区域Rpi,则根据POI讲解区域Rpi与路口播报区域Rci的空间位置关系判断播报方式:
(a)如果两者在规划线路上相离,即不存在包含或相交关系,则开启POI区域讲解,待讲解结束后再判断用户当前位置是否属于路口播报区域,若属于则开启路口播报;
(b)如果Rpi与Rci在规划线路上相交但不包含,则开启POI讲解;判断Ui内0≤Lpc–(Lpi+Lci)≤L0是否成立,若成立则暂停启动路口Ci播报,直到POI讲解结束后再启动,不论用户当前位置是否在路口播报区域中;否则转到(c);
(c)判断当前Pgps是否在路口播报区域Rci内,若成立则***路口Ci的播报信息,否则继续POI区域讲解,转到(7);
(6)两播报区域在规划线路上相包含或相内切,判断Ui内0≤Lpc–Lpi≤L0是否成立,若成立则暂停启动POI区域讲解,提前播报路口Ci的转弯信息,结束后开启POI区域讲解;若不成立则直接开启POI区域讲解,之后转到(c);
(7)结束一个混合播报单元Ui,返回(1);
处理景点与景点之间播报冲突模块实施例(如图4所示):
GPS位置获取模块由移动设备自带的GPS芯片提供,地理信息***(GIS)模块基于ESRI公司的ArcGISMobile10软件的二次开发实现,通过相关接口直接驱动GPS芯片设备,获取用当前经纬度位置等信息,语音输出模块中合成语音的输出使用捷通华声公司的语音合成引擎ejTTS6.0及其接口实现,而基于音频播报的语音输出则使用微软提供的专门用于移动设备的Interop.WMPLib.dll文件来完成。
图4是实施案例中的景点分布图,在实施案例中,景区由7个景点组成,图中粗线为用户规划线路,图中景点周边的虚线圆形为圆形缓冲区,其半径即为距离控制阈值D。图中坐标均为通用横轴墨卡托投影下的坐标,景点位置集合
P={(57,131),(49,89),(108,143),(91,107),(103,63),(144,104),(158,150)},用户规划线路R={(37,152),(43,135),(53,134),(63,131),(73,126),(77,117),(89,115),(99,120),(103,128),(113,130),(121,129),(125,137),(131,142),(141,142),(146,138),(149,134),(144,124),(147,116),(139,100),(124,102),(113,96),(107,97),(101,95),(100,89),(109,80),(118,76),(113,76),(142,82),(150,80),(159,57)},距离控制阈值D=20米,位置偏差阈值L=5米。
首先生成景点泰森多边形,即图4中景点周围的多边形,可以看到每个泰森多边形内均只包含一个景点。其具体数据为景点泰森多边形集合
VoroA={(1,point1),(2,point2),(3,point3),(4,point4),(5,point5),(6,point6),(7,point7)},其中
point1={(36,140),(60,150),(88,130),(68,114),(34,114)};
point2={(16,78),(68,54),(76,80),(68,114),(34,114)};
point3={(60,150),(88,130),(116,118),(142,131),(124,163),(84,162)};
point4={(88,130),(68,114),(76,80),(116,90),(116,118)};
point5={(80,38),(124,40),(136,68),(116,90),(76,80),(68,54)};
point6={(168,86),(172,116),(142,131),(116,118),(116,90),(136,68)};
point7={(182,149),(152,180),(124,163),(142,131),(172,116)};
根据用户规划线路R和景点泰森多边形集合VoroA,执行候选有效讲解路径集合判断,得到候选有效讲解路径集合CSRA。
CSRA={(1,point1),(2,point2),(3,point3),(4,point4),(5,point5),(6,point6),(7,point7),(5,point8)},其中
point1={(43,135),(53,134),(63,131),(73,126)};
point2={(77,117),(89,115),(99,120)};
point3={(103,128),(113,130),(121,129),(125,137),(131,142)};
point4={(141,142),(146,138),(149,134)};
point5={(144,124),(147,116),(139,100),(124,102)};
point6={(113,96),(107,97),(101,95),(100,89)};
point7={(109,80),(118,76)};point8={(113,76),(142,82),(150,80)}。
根据GPS模块获取的坐标,计算用户当前所在的泰森多边形。用户当前位置UP=(42,137),通过计算后得到当前讲解景点CSP={(1,57,131)}。
根据当前讲解景点CSP在候选有效讲解路径集合CSRA中选取与CSP的id相同的候选有效讲解路径,组成临时候选有效讲解路径集合TCSRA。当前讲解景点CSP的id=1,CSRA中只有一条候选有效讲解路径的id与CSP的id相等,因此CSRA={(1,point1)},其中point1={(43,135),(53,134),(63,131),(73,126)}。
根据临时候选有效讲解路径集合TCSRA和用户当前位置UP,执行候选有效讲解路径判断,得到候选有效讲解路径CSR。因为CSRA只有一条候选有效讲解路径,因此CSR={(1,point1)},其中point1={(43,135),(53,134),(63,131),(73,126)}。
根据候选有效讲解路径CSR、距离控制阈值D和当前讲解景点CSP,执行有效讲解路径判断,得到有效讲解路径VSR。遍历候选有效讲解路径CSR,依次计算其中的坐标点与当前讲解景点CSP的距离,结果为DisA={14,5,6,16}(四舍五入),均小于距离控制阈值D=20,所以有效讲解路径
VSR={(43,135),(53,134),(63,131),(73,126)}。
根据有效讲解路径VSR,执行有效讲解路径长度判断,得到有效讲解路径长度S。遍历有效讲解路径VSR,依次计算VSR中的坐标点和用户当前位置
UP=(42,137)的距离,得到集合DisA={2,11,22,33}(四舍五入),由距离关系可以判断出用户当前位置与有效讲解路径VSR中的(43,135)最为接近,且小于位置偏差阈值L,因此根据本发明中的方法求得有效讲解路径长度S=31米(四舍五入)。
利用GPS获取的用户当前运动速度V=0.2米/秒和有效讲解路径长度S=31米,进行语音导游讲解。设定按照现有公开专利申请CN102142215A中提出的讲解文本规则存储的当前讲解景点的导游讲解词为:“/SI1TY1AM37这里谷底潭深水碧,古代传有龙居,两峰对峙俨如山门,岸边古洞遗存幽幽深深,故名龙门洞。/SI2TY1AM63以前这里飞瀑流泉,林深谷幽,随着人类活动范围的扩大,自然王国的领地日渐缩小,原始生态的身影向深山退却,所以龙门瀑布的壮观已成为历史的记载。/SI3TY1AM29游客们,现在峨眉山已被***列入人类自然与文化遗产而加以保护。/SI4TY1AM64为了我们能再次目睹龙门昔日的仙姿,也为了把大自然馈赠给我们的峨眉山这座绿岛完整地交给我们的子孙后代,让我们自觉地加入环境保护者的行列。”其中,SI表示sidi,TY表示typei,AM表示amounti,SI、TY、AM的下标表示此参数的值。执行现有公开专利申请CN102142215A中的语音导游讲解过程以后,得到的待讲解导游内容为“这里谷底潭深水碧,古代传有龙居,两峰对峙俨如山门,岸边古洞遗存幽幽深深,故名龙门洞。以前这里飞瀑流泉,林深谷幽,随着人类活动范围的扩大,自然王国的领地日渐缩小,原始生态的身影向深山退却,所以龙门瀑布的壮观已成为历史的记载。游客们,现在峨眉山已被***列入人类自然与文化遗产而加以保护。”利用语音合成引擎输出此讲解内容进行语音导游讲解。
处理景点与路口之间播报冲突模块实施例:
附图8为实施案例中的工作流程示例图,POI讲解区域Rpi包含了路口讲解区域Rci,其中POI区域的讲解内容为:“前面就是拂水山庄,一座明清风格的园林别墅。占地60多亩,建筑面积3048平方米。整个山庄,临水而筑,粉墙黛瓦,小桥流水,曲廊逶迤,庭院深深。恢复了朝阳榭、耦耕堂、花信楼、山楼、明发堂、梅圃溪堂、秋水阁等建筑,使拂水山庄八景得以重现。”,路口播报区域的内容为:“前方请右转”;Pgps为用户当前的位置坐标;设定提前或延迟路口播报信息时两个播报区域间的距离阀值为L0=10米,***通过如下步骤实施:
(1)根据公开方法二判断Pgps坐标当前所处位置不属于路口播报区域Rci,但属于POI讲解区域Rpi;
(2)判断Rpi与Rci的空间位置关系,两者存在包含关系;
(3)判断0≤Lpc–Lpi≤L0(阀值:L0=10米)成立,则暂停启动POI区域讲解(尽管此时Pgps属于POI讲解区域Rpi),提前播报路口Ci的转弯信息,结束后再开启POI区域讲解,此时的播报内容应该为:“「前方请右转」(路口转弯信息提前播报并结束后);前面就是拂水山庄,一座明清风格的园林别墅。占地60多亩,建筑面积3048平方米。整个山庄,临水而筑,粉墙黛瓦,小桥流水,曲廊逶迤,庭院深深。恢复了朝阳榭、耦耕堂、花信楼、山楼、明发堂、梅圃溪堂、秋水阁等建筑,使拂水山庄八景得以重现。”。
(4)本次Ui内信息播报结束;
(5)依此类推完成整条规划线路的播报;
当Rpi与Rci的空间位置关系如附图6(a)所示时,如果判断0≤Lpc–(Lpi+Lci)≤L0的条件成立,则此时的播报内容为:“前面就是拂水山庄,一座明清风格的园林别墅。占地60多亩,建筑面积3048平方米。整个山庄,临水而筑,粉墙黛瓦,小桥流水,曲廊逶迤,庭院深深。恢复了朝阳榭、耦耕堂、花信楼、山楼、明发堂、梅圃溪堂、秋水阁等建筑,使拂水山庄八景得以重现(POI讲解信息结束后);「前方请右转」”。
在一个Ui内POI讲解区域Rpi与路口播报区域Rci相包含如附图7(c)(d),且不满足冲突处理条件时,只需在讲解POI区域的过程中暂停,随即***路口转向信息播报即可,则此时的播报内容为:“前面就是拂水山庄,一座明清风格的园林别墅。占地60多亩,建筑面积3048平方米。(POI讲解信息未结束,***路口播报)「前方请右转」;整个山庄,临水而筑,粉墙黛瓦,小桥流水,曲廊逶迤,庭院深深。恢复了朝阳榭、耦耕堂、花信楼、山楼、明发堂、梅圃溪堂、秋水阁等建筑,使拂水山庄八景得以重现”。