bool PConvert::split2map( const std::string &s , MapString &val ) { vector<string> vec ; // 处理所有逗号分割处理 if ( ! splitvector( s , vec, "," , 0 ) ) { return false ; } string temp ; size_t pos = 0 , end = 0 ; // 解析参数 for ( pos = 0 ; pos < vec.size(); ++ pos ) { temp = vec[pos] ; end = temp.find( ":" ) ; if ( end == string::npos ) { continue ; } val.insert( pair<string,string>( temp.substr(0,end), temp.substr( end+1 ) ) ) ; } // 解析出监控平台参数部分 return ( ! val.empty() ) ; }
// 将GPS数据转成GNSS bool PConvert::convert_gps_info( MapString &mp, GnssData &gps ) { if ( mp.empty() ) return false ; gps.state = 0x00 ; gps.alarm = 0x00 ; int nval = 0 ; if ( get_map_integer( mp, "1", nval ) ) { nval = nval * 10 / 6 ; } // 处理经度不在中国范围内 619066885 if ( nval < 72000000 || nval > 140000000 ){ // 经度范围72-136 OUT_ERROR( NULL, 0, NULL, "error lon %u", nval ) ; return false ; } gps.lon = ntouv32( nval ) ; if ( get_map_integer( mp, "2", nval ) ) { nval = nval * 10 / 6 ; } // 处理纬度不在中国范围内 if ( nval < 18000000 || nval > 55000000 ) { // 纬度范围18-54 OUT_ERROR( NULL, 0, NULL, "error lat %u", nval ) ; return false ; } gps.lat = ntouv32( nval ) ; if ( get_map_integer( mp, "3", nval ) ) { nval = nval/10 ; // 速度808中为1/10km/h } // 处理速度不正确 if ( nval > 220 ) { // 220km/h OUT_ERROR( NULL, 0, NULL, "error speed %u", gps.vec1 ) ; return false ; } gps.vec1 = ntouv16( nval ) ; if ( get_map_integer( mp, "7", nval ) ) { nval = nval/10 ; // 行驶记录仪速度808中为1/10km/h } gps.vec2 = ntouv16( nval ) ; if ( gps.vec2 == 0 ) { gps.vec2 = gps.vec1 ; } string sval ; if ( ! get_map_string( mp, "4", sval ) ) { OUT_ERROR( NULL, 0, NULL, "error time empty" ) ; // 如果没有时间就直接返回了 return false ; } int nyear = 0 , nmonth = 0 , nday = 0 , nhour = 0 ,nmin = 0 , nsec = 0 ; sscanf( sval.c_str(), "%04d%02d%02d/%02d%02d%02d", &nyear, &nmonth, &nday, &nhour, &nmin, &nsec ) ; // 检测时间是否正确 if ( ! checktime( nyear, nmonth, nday, nhour, nmin, nsec ) ) { OUT_ERROR( NULL, 0, NULL, "error time %s", sval.c_str() ) ; return false ; } gps.date[3] = nyear % 256 ; gps.date[2] = nyear / 256 ; gps.date[1] = nmonth ; gps.date[0] = nday ; gps.time[0] = nhour ; gps.time[1] = nmin ; gps.time[2] = nsec ; if ( get_map_integer( mp, "5", nval ) ){ gps.direction = ntouv16( nval ) ; } // 方向在0-360度之间 if ( nval > 360 ) { OUT_ERROR( NULL,0, NULL, "error direction %d", nval ) ; return false ; } if ( get_map_integer( mp, "15", nval ) ) { gps.state = (nval) ? gps.state | 0x02 : gps.state ; } // 报警 if ( get_map_integer( mp, "20" , nval ) ) { gps.alarm = nval ; } if ( get_map_integer( mp, "9" , nval ) ) { gps.vec3 = ntouv32( nval / 10 ); } // 状态 if ( get_map_integer( mp, "8" , nval ) ) { gps.state = nval ; } gps.state = ntouv32( gps.state ) ; gps.alarm = ntouv32( gps.alarm ) ; return true ; }