Beispiel #1
0
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() ) ;
}
Beispiel #2
0
// 将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 ;
}