2025-03-26 16:56:51 +08:00
|
|
|
|
#include "Sub3Judge12Ptdt.h"
|
|
|
|
|
|
#include "HFactory.h"
|
|
|
|
|
|
|
|
|
|
|
|
Sub3Judge12Ptdt::Sub3Judge12Ptdt(TKM3Item* exam)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_exam = exam;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Sub3Judge12Ptdt::~Sub3Judge12Ptdt()
|
|
|
|
|
|
{
|
|
|
|
|
|
m_exam = nullptr;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool Sub3Judge12Ptdt::dealJudgeEnter()
|
|
|
|
|
|
{
|
|
|
|
|
|
if(m_exam->TestPro != ItemProFlagInit) return false;
|
|
|
|
|
|
// if(!m_car->rtkEnabled() || !m_car->rtkEnabled(1)) return false;
|
|
|
|
|
|
|
|
|
|
|
|
const TChuanGan* cg = m_car->historyChuanGan();
|
|
|
|
|
|
const TGpsInfo& gps = cg->real.gps;
|
|
|
|
|
|
|
|
|
|
|
|
m_itemv = TSub3Item12Ptdt();
|
|
|
|
|
|
|
|
|
|
|
|
const std::vector<std::string>& s510 = TableSysSet->asArray510();
|
|
|
|
|
|
//得到掉头项目必须的项目距离(如果到达了这个项目距离,没有完成掉头,判:不按规定考试)
|
|
|
|
|
|
m_itemv.XMJL_Mi = s510.size() > 0 && s510[0] != "" ? std::atoi(s510[0].c_str()) : 350; //完成项目的规定距离
|
|
|
|
|
|
//角度变动到多大算掉头完成(达到这个角度后,并且不压任何线,就算掉头完成)
|
|
|
|
|
|
m_itemv.FinishDiaoTou_JiaoDu_Change = s510.size() > 1 && s510[1] != "" ? std::atoi(s510[1].c_str()) : 120;
|
|
|
|
|
|
//速度阈值(必须小于设定值,认为速度合法)
|
|
|
|
|
|
m_itemv.Temp_XS = s510.size() > 2 && s510[2] != "" ? std::atoi(s510[2].c_str()) : 35; //20170824
|
|
|
|
|
|
//初始行驶距离(用于计算项目距离)
|
|
|
|
|
|
m_itemv.CSJL_Mi = cg->ai_ljjl;
|
|
|
|
|
|
//得到最多倒车次数
|
|
|
|
|
|
m_itemv.Max_DC_CiShu = s510.size() > 5 && s510[5] != "" ? std::atoi(s510[5].c_str()) : 0;
|
|
|
|
|
|
//初始GPS角度
|
|
|
|
|
|
m_itemv.CS_GPS_D = gps.hxj;
|
|
|
|
|
|
|
|
|
|
|
|
m_itemv.mapping = m_car->graphic()->mapping();
|
|
|
|
|
|
m_itemv.line = coordTransform(cg);
|
|
|
|
|
|
|
|
|
|
|
|
m_exam->TestPro = ItemProFlagJudge;
|
|
|
|
|
|
//ToDo1:播报项目语音
|
|
|
|
|
|
//ToDo2:生成进项目事件
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Sub3Judge12Ptdt::dealJudgeItem()
|
|
|
|
|
|
{
|
|
|
|
|
|
HELP_COST_TIME("");
|
|
|
|
|
|
if(m_exam->TestPro != ItemProFlagJudge) return;
|
2025-05-09 12:01:14 +08:00
|
|
|
|
if(!judgeAllowable()) return;
|
2025-03-26 16:56:51 +08:00
|
|
|
|
|
|
|
|
|
|
const TChuanGan* cg = m_car->historyChuanGan();
|
|
|
|
|
|
const TRTKResult& RTKKM3 = cg->RTKKM3;
|
|
|
|
|
|
const TGpsInfo& gps = cg->real.gps;
|
|
|
|
|
|
const TSensorInfo& sor = cg->real.sensor;
|
|
|
|
|
|
const TChuanGan* his1 = m_car->historyChuanGan(1);
|
|
|
|
|
|
const TChuanGan* his2 = m_car->historyChuanGan(2);
|
|
|
|
|
|
const TChuanGan* his3 = m_car->historyChuanGan(3);
|
|
|
|
|
|
const std::string& ksdd = TableSysSet->get211();
|
|
|
|
|
|
|
|
|
|
|
|
if(m_car->isExamMode()) //正式考试
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!m_car->isQualified())
|
|
|
|
|
|
{
|
|
|
|
|
|
m_exam->TestPro = ItemProFlagEnd;
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Update_DiaoTou_JianSuRec(m_itemv.slowDown); //, m_itemv.Temp_XS
|
|
|
|
|
|
|
|
|
|
|
|
//多次后退
|
|
|
|
|
|
if(m_itemv.Max_DC_CiShu > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(cg->move == moveBackward && his1->move == moveBackward && his2->move != moveBackward && his3->move != moveBackward)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_itemv.Max_DC_CiShu = m_itemv.Max_DC_CiShu - 1;
|
|
|
|
|
|
if(m_itemv.Max_DC_CiShu == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
//不按考试员指令驾驶
|
|
|
|
|
|
JUDGE_MARK_SUB3(12, "03", false);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
//车辆行驶中骑轧车道中心实线或者车道边缘实线
|
|
|
|
|
|
if(ksdd == siteof::xjcj)
|
|
|
|
|
|
{
|
|
|
|
|
|
const TRTKResult& RTKKM3_1 = his1->RTKKM3;
|
|
|
|
|
|
const TRTKResult& RTKKM3_2 = his2->RTKKM3;
|
|
|
|
|
|
const TRTKResult& RTKKM3_3 = his3->RTKKM3;
|
|
|
|
|
|
//InShapeAttr: Integer; //0-不在形状里 1-在人行道内 2-在网格线内
|
|
|
|
|
|
if(RTKKM3.InShapeAttr == InShapeAttr_2 && RTKKM3_1.InShapeAttr == InShapeAttr_2 &&
|
|
|
|
|
|
RTKKM3_2.InShapeAttr == InShapeAttr_0 && RTKKM3_3.InShapeAttr == InShapeAttr_0)
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
//车辆行驶中骑轧车道中心实线或者车道边缘实线
|
|
|
|
|
|
JUDGE_MARK_SUB3(20, "57", false);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
//不按规定速度行驶
|
|
|
|
|
|
if(gps.sd > 20 && his1->real.gps.sd > 20 && ksdd == siteof::lfgakm3)
|
|
|
|
|
|
{
|
|
|
|
|
|
//不按规定速度行驶
|
|
|
|
|
|
JUDGE_MARK_SUB3(20, "58", true);
|
|
|
|
|
|
}
|
|
|
|
|
|
if(ksdd == siteof::linxiahz || ksdd == siteof::guizhou)
|
|
|
|
|
|
{
|
|
|
|
|
|
const TRTKResult& RTKKM3_1 = his1->RTKKM3;
|
|
|
|
|
|
const TRTKResult& RTKKM3_2 = his2->RTKKM3;
|
|
|
|
|
|
const TRTKResult& RTKKM3_3 = his3->RTKKM3;
|
|
|
|
|
|
//记录一下第一次变道时刻的项目距离(向右边变道的)
|
|
|
|
|
|
if(RTKKM3.BaseLaneCount > 0 &&
|
|
|
|
|
|
RTKKM3_2.BasePointInLaneNo == RTKKM3_3.BasePointInLaneNo &&
|
|
|
|
|
|
RTKKM3_2.BasePointInLaneNo < RTKKM3_1.BasePointInLaneNo &&
|
|
|
|
|
|
RTKKM3_1.BasePointInLaneNo == RTKKM3.BasePointInLaneNo)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_itemv.BianDaoJL = cg->ai_ljjl;
|
|
|
|
|
|
}
|
|
|
|
|
|
//路段状况:车轮是否压线以及压线类型: 0-无 1-中心实线 2-车道分界线(虚线) 3-路右边线 4-路左边线 5-非机动车道分界线
|
|
|
|
|
|
//6:中心线虚线 7:道路分界线(实线) 8:道路边缘线(右黄)
|
|
|
|
|
|
if(RTKKM3.TouchLineType == LineType_6 &&
|
|
|
|
|
|
RTKKM3_1.TouchLineType == LineType_6 &&
|
|
|
|
|
|
RTKKM3_2.TouchLineType != LineType_6 &&
|
|
|
|
|
|
RTKKM3_3.TouchLineType != LineType_6)
|
|
|
|
|
|
{
|
|
|
|
|
|
//如果再次压中心虚线,是不是可以说:你准备再次变道了
|
|
|
|
|
|
if(cg->ai_ljjl - m_itemv.BianDaoJL < 20)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(ksdd == siteof::guizhou)
|
|
|
|
|
|
{
|
|
|
|
|
|
//连续变更两条或两条以上车道
|
|
|
|
|
|
if(!m_itemv.MarkFlag_12_45)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_itemv.MarkFlag_12_45 = true;
|
|
|
|
|
|
JUDGE_MARK_SUB3(20, "89", false);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
//不按交通信号灯、标志、标线或者民警指挥信号行驶
|
|
|
|
|
|
if(!m_itemv.MarkFlag_12_45)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_itemv.MarkFlag_12_45 = true;
|
|
|
|
|
|
JUDGE_MARK_SUB3(12, "45", false);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(m_exam->bYdt == true) //20150516 表示右掉头
|
|
|
|
|
|
{
|
|
|
|
|
|
if(m_itemv.b_FXD == false)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(sor.yfxd == SYES && sor.zfxd == SNOT)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_itemv.b_FXD = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if(m_itemv.b_FXD == true)
|
|
|
|
|
|
{
|
|
|
|
|
|
bool FindFlag = true;
|
|
|
|
|
|
if(sor.yfxd == SNOT && sor.zfxd == SYES)
|
|
|
|
|
|
{
|
|
|
|
|
|
FindFlag = false;
|
|
|
|
|
|
}
|
|
|
|
|
|
for(int i = 1; i <= 14; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
const TSensorInfo& sori = m_car->historySensor(i);
|
|
|
|
|
|
if(sori.zfxd == SYES)
|
|
|
|
|
|
{
|
|
|
|
|
|
FindFlag = false;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
if(sori.yfxd != SYES)
|
|
|
|
|
|
{
|
|
|
|
|
|
FindFlag = false;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if(FindFlag == true)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_itemv.FXD_TM_OK_Flag = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
if(m_itemv.b_FXD == false)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(sor.zfxd == SYES && sor.yfxd == SNOT)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_itemv.b_FXD = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if(m_itemv.b_FXD == true)
|
|
|
|
|
|
{
|
|
|
|
|
|
bool FindFlag = true;
|
|
|
|
|
|
if(sor.zfxd == SNOT && sor.yfxd == SYES)
|
|
|
|
|
|
{
|
|
|
|
|
|
FindFlag = false;
|
|
|
|
|
|
}
|
|
|
|
|
|
for(int i = 1; i <= 14; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
const TSensorInfo& sori = m_car->historySensor(i);
|
|
|
|
|
|
if(sori.yfxd == SYES)
|
|
|
|
|
|
{
|
|
|
|
|
|
FindFlag = false;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
if(sori.zfxd != SYES)
|
|
|
|
|
|
{
|
|
|
|
|
|
FindFlag = false;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if(FindFlag == true)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_itemv.FXD_TM_OK_Flag = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const TChuanGan* his5 = m_car->historyChuanGan(5);
|
|
|
|
|
|
|
|
|
|
|
|
//掉头角度变化 老的角度变化计算方式(windows就是这么做的)
|
|
|
|
|
|
//const TGpsInfo& gps5 = his5->real.gps;
|
|
|
|
|
|
//double a = std::abs(gps.hxj - m_itemv.CS_GPS_D);
|
|
|
|
|
|
//double b = std::abs(gps5.hxj- m_itemv.CS_GPS_D);
|
|
|
|
|
|
|
|
|
|
|
|
//***新的角度变化计算方式(这个应该更精准)注意:左上角是(0,0)点 yhy 20240823
|
|
|
|
|
|
Linei line0 = coordTransform(cg);
|
|
|
|
|
|
Linei line5 = coordTransform(his5);
|
|
|
|
|
|
double a = std::abs(GpsMath::calcAngle(line0.p2, m_itemv.line.p2, m_itemv.line.p1));
|
|
|
|
|
|
double b = std::abs(GpsMath::calcAngle(line5.p2, m_itemv.line.p2, m_itemv.line.p1));
|
|
|
|
|
|
|
|
|
|
|
|
//IGraphicAbstract* graphic = m_car->graphic();
|
|
|
|
|
|
//graphic->drawPoint({10,10},RGB_RED,10);
|
|
|
|
|
|
//graphic->drawLine(m_itemv.line,RGB_RED);
|
|
|
|
|
|
//graphic->drawLine(line0,RGB_GREEN);
|
|
|
|
|
|
//graphic->drawLine(line5,RGB_PURPLE);
|
|
|
|
|
|
//FactoryExamService->examJudgeCallbackMapImageToCaller(graphic->image(), graphic->size());
|
|
|
|
|
|
|
|
|
|
|
|
//logdebug("CS_GPS_D=%0.2f,hxj=%0.2f,hxj5=%0.2f, a=%0.2f,b=%0.2f a_=%0.2f,b_=%0.2f",
|
|
|
|
|
|
// m_itemv.CS_GPS_D, gps.hxj, gps5.hxj, a, b, a_, b_);
|
|
|
|
|
|
|
|
|
|
|
|
//528:掉头N米内不判连续变道和方向灯
|
|
|
|
|
|
if(m_car->getNJ_DiaoTou_JL() == 0 && TableSysSet->asInt528() > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(a > 90 && a < 270 && b > 90 && b < 270)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_car->setNJ_DiaoTou_JL(cg->ai_ljjl);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const std::vector<std::string>& s510 = TableSysSet->asArray510(); //StrToIntDef(getdotstr(8, sysset[510], ','), 1) = 1
|
|
|
|
|
|
int si = s510.size() > 7 && s510[7] != "" ? std::atoi(s510[7].c_str()) : 1;
|
|
|
|
|
|
//贵州地区需求
|
|
|
|
|
|
if(Tools::pos(siteof::guizhou, ksdd) == true || si == 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
// //路段状况:车轮是否压线以及压线类型: 0-无 1-中心实线 2-车道分界线(虚线) 3-路右边线 4-路左边线 5-非机动车道分界线
|
|
|
|
|
|
//6:中心线虚线 7:道路分界线(实线) 8:道路边缘线(右黄)
|
|
|
|
|
|
if(RTKKM3.TouchLineType == LineType_6 &&
|
|
|
|
|
|
his1->RTKKM3.TouchLineType == LineType_6 &&
|
|
|
|
|
|
his2->RTKKM3.TouchLineType == LineType_0)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!m_itemv.Judge_DengGuang_Flag)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_itemv.Judge_DengGuang_Flag = true;
|
|
|
|
|
|
if(!m_itemv.b_FXD)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!m_itemv.MarkFlag_12_42)
|
|
|
|
|
|
{
|
|
|
|
|
|
//掉头前未开启左转向灯
|
|
|
|
|
|
JUDGE_MARK_SUB3(12, "42", false); //20160928
|
|
|
|
|
|
m_itemv.MarkFlag_12_42 = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
//ToDo:头部姿态
|
|
|
|
|
|
}
|
|
|
|
|
|
if(ksdd == siteof::gdjykm3 || ksdd == siteof::gsgnzkm3 || ksdd == siteof::chongqingkm3 || ksdd == siteof::ynzt ||
|
|
|
|
|
|
ksdd == siteof::guizhou || ksdd == siteof::guizhouas || ksdd == siteof::shandongyt || ksdd == siteof::gxlzkm3)
|
|
|
|
|
|
{
|
|
|
|
|
|
//:对可能出现危险的情形未采取减速、鸣喇叭等安全措施
|
|
|
|
|
|
//if not Itmv12.Js_Passed then
|
|
|
|
|
|
if (m_itemv.slowDown.Js_Passed == false)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!m_itemv.MarkFlag_12_46)
|
|
|
|
|
|
{
|
|
|
|
|
|
//对可能出现危险的情形未采取减速、鸣喇叭等安全措施
|
|
|
|
|
|
JUDGE_MARK_SUB3(12, "46", false); //20170505
|
|
|
|
|
|
m_itemv.MarkFlag_12_46 = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(ksdd == siteof::dehongkm3)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(cg->ai_ljjl - m_itemv.CSJL_Mi > m_itemv.XMJL_Mi)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!m_itemv.b_FXD)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!m_itemv.MarkFlag_12_42)
|
|
|
|
|
|
{
|
|
|
|
|
|
//掉头前未开启左转向灯
|
|
|
|
|
|
JUDGE_MARK_SUB3(12, "42", false); //20160928
|
|
|
|
|
|
m_itemv.MarkFlag_12_42 = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if(!m_itemv.b_JSC)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!m_itemv.MarkFlag_12_46)
|
|
|
|
|
|
{
|
|
|
|
|
|
//对可能出现危险的情形未采取减速、鸣喇叭等安全措施
|
|
|
|
|
|
JUDGE_MARK_SUB3(12, "46", false); //20170505
|
|
|
|
|
|
m_itemv.MarkFlag_12_46 = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
m_exam->TestPro = ItemProFlagEnd;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
if(a > 50 && a < 210 && b > 50 && b < 210)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!m_itemv.Judge_DengGuang_Flag)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_itemv.Judge_DengGuang_Flag = true;
|
|
|
|
|
|
//ToDo:头部姿态
|
|
|
|
|
|
if(ksdd == siteof::gdjykm3 || ksdd == siteof::gsgnzkm3 || ksdd == siteof::chongqingkm3 || ksdd == siteof::ynzt ||
|
|
|
|
|
|
ksdd == siteof::guizhou || ksdd == siteof::guizhouas || ksdd == siteof::shandongyt || ksdd == siteof::gxlzkm3 )
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!m_itemv.slowDown.Js_Passed)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!m_itemv.MarkFlag_12_46)
|
|
|
|
|
|
{
|
|
|
|
|
|
//对可能出现危险的情形未采取减速、鸣喇叭等安全措施
|
|
|
|
|
|
JUDGE_MARK_SUB3(12, "46", false); //20170505
|
|
|
|
|
|
m_itemv.MarkFlag_12_46 = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//如果是右掉头
|
|
|
|
|
|
//制动气压不足起步(20,73) 为什么这么扣?按规则翻译即可
|
|
|
|
|
|
if(m_exam->bYdt == true) //右掉头
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!m_itemv.b_FXD)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!m_itemv.MarkFlag_20_73)
|
|
|
|
|
|
{
|
|
|
|
|
|
JUDGE_MARK_SUB3(20, "73", false); //20170505
|
|
|
|
|
|
m_itemv.MarkFlag_20_73 = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(Tools::pos(siteof::guizhou, ksdd) == true && !m_itemv.FXD_TM_OK_Flag)
|
|
|
|
|
|
{
|
|
|
|
|
|
//违反交通安全法律、法规,影响交通安全
|
|
|
|
|
|
if(!m_itemv.MarkFlag_20_20)
|
|
|
|
|
|
{
|
|
|
|
|
|
JUDGE_MARK_SUB3(20, "20", true);
|
|
|
|
|
|
m_itemv.MarkFlag_20_20 = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!m_itemv.b_FXD)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!m_itemv.MarkFlag_12_42)
|
|
|
|
|
|
{
|
|
|
|
|
|
//起步、转向、变更车道、超车、靠边停车前不使用或错误使用转向灯
|
|
|
|
|
|
JUDGE_MARK_SUB3(12, "42", false); //20160928
|
|
|
|
|
|
m_itemv.MarkFlag_12_42 = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
if(ksdd == siteof::hebeihskm3)
|
|
|
|
|
|
{
|
|
|
|
|
|
//起步、转向、变更车道、超车、靠边停车前,开转向灯少于3s即转向
|
|
|
|
|
|
if(!m_itemv.FXD_TM_OK_Flag) //20141107
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!m_itemv.MarkFlag_12_43)
|
|
|
|
|
|
{
|
|
|
|
|
|
JUDGE_MARK_SUB3(12, "43", false);
|
|
|
|
|
|
m_itemv.MarkFlag_12_43 = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//20171109 贵州个性需求
|
|
|
|
|
|
if(Tools::pos(siteof::guizhou, ksdd) == true && !m_itemv.FXD_TM_OK_Flag)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!m_itemv.MarkFlag_20_20)
|
|
|
|
|
|
{
|
|
|
|
|
|
JUDGE_MARK_SUB3(20, "20", false); //20160928
|
|
|
|
|
|
m_itemv.MarkFlag_20_20 = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(a > m_itemv.FinishDiaoTou_JiaoDu_Change && a < 210 && b > m_itemv.FinishDiaoTou_JiaoDu_Change && b < 210)
|
|
|
|
|
|
{
|
|
|
|
|
|
//路段状况:车轮是否压线以及压线类型: 0-无 1-中心实线 2-车道分界线(虚线) 3-路右边线 4-路左边线 5-非机动车道分界线
|
|
|
|
|
|
//6:中心线虚线 7:道路分界线(实线) 8:道路边缘线(右黄)
|
|
|
|
|
|
if(RTKKM3.TouchLineType == LineType_0)
|
|
|
|
|
|
{
|
|
|
|
|
|
m_exam->TestPro = ItemProFlagEnd;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if(cg->ai_ljjl - m_itemv.CSJL_Mi > m_itemv.XMJL_Mi)
|
|
|
|
|
|
{
|
|
|
|
|
|
JUDGE_MARK_SUB3(12, "41", false); //20160928
|
|
|
|
|
|
m_exam->TestPro = ItemProFlagEnd;
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if JUDGE_USE_INSPECT //无锡所送检转向灯少于3s即转向
|
|
|
|
|
|
if(m_itemv.b_FXD)
|
|
|
|
|
|
{
|
|
|
|
|
|
if(m_exam->TestPro == ItemProFlagEnd)
|
|
|
|
|
|
{
|
|
|
|
|
|
//开转向灯少于3s即转向
|
|
|
|
|
|
if(!m_itemv.FXD_TM_OK_Flag) //20141107
|
|
|
|
|
|
{
|
|
|
|
|
|
if(!m_itemv.MarkFlag_12_43)
|
|
|
|
|
|
{
|
|
|
|
|
|
JUDGE_MARK_SUB3(12, "43", false);
|
|
|
|
|
|
m_itemv.MarkFlag_12_43 = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
char buf[128] = {0};
|
|
|
|
|
|
SafeSprintf(buf, sizeof(buf), JUDGE_UTF8S("结束距离=%d,当前距离=%d;角度阈值=%d,当前角度变化=%0.2f,a=%0.2f,b=%0.2f"),
|
|
|
|
|
|
m_itemv.XMJL_Mi, cg->ai_ljjl-m_itemv.CSJL_Mi, m_itemv.FinishDiaoTou_JiaoDu_Change, gps.hxj-m_itemv.CS_GPS_D,a,b);
|
|
|
|
|
|
std::string str = buf;
|
|
|
|
|
|
showStatus(JUDGE_UTF8S("[普通掉头]") + str);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Linei Sub3Judge12Ptdt::coordTransform(const TChuanGan* cg)
|
|
|
|
|
|
{
|
|
|
|
|
|
const TGPSPoint center = cg->real.gps.to();
|
|
|
|
|
|
Linei line = GpsMath::coordMapping(TGPSLine(cg->body.b1_a, cg->body.b2_a), center, m_itemv.mapping);
|
|
|
|
|
|
return line;
|
|
|
|
|
|
}
|