跟踪设备有$GPRMC
中发送的数据,而不是我在我的代码中使用的数据是谷歌搜索PHP转换方法到十进制格式无济于事。
刚刚得到解决方案的问题不得不放在$GPRMC
的内容上
样本格式,例如$GPRMC,001225,A,2832.1834,N,08101.0536,W,12,25,251211,1.2,E,A*03
其中:
RMC Recommended Minimum sentence C
123519 Fix taken at 12:35:19 UTC
A Status A=active or V=Void.
4807.038,N Latitude 48 deg 07.038' N
01131.000,E Longitude 11 deg 31.000' E
022.4 Speed over the ground in knots
084.4 Track angle in degrees True
230394 Date - 23rd of March 1994
003.1,W Magnetic Variation
*6A The checksum data, always begins with *
代码:
$gps = $_REQUEST['gps'];
if($gps){
$buffer = $gps;
if(substr($buffer, 0, 5)=='GPRMC'){
$gprmc = explode(',',$buffer);
$data1['lattitude_decimal'] = DMStoDEC($gprmc[3],'lattitude');
$data2['longitude_decimal'] = DMStoDEC($gprmc[5],'longitude');
$data = 'http://maps.google.com/maps?q='.$data1['lattitude_decimal'].','.$data2['longitude_decimal'].'+(PHP Decoded)&iwloc=A';
print_r($data);
echo "\n\n";
}
}
function DMStoDEC($dms, $longlat){
if($longlat == 'lattitude'){
$deg = substr($dms, 0, 2);
$min = substr($dms, 2, 8);
$sec = '';
}
if($longlat == 'longitude'){
$deg = substr($dms, 0, 3);
$min = substr($dms, 3, 8);
$sec='';
}
return $deg+((($min*60)+($sec))/3600);
}
?>
希望这会有所帮助
答案 0 :(得分:0)
这是典型的帖子请求:
POST /RoyS/?acct=1234&dev=null&gprmc=$GPRMC,132201,A,3128.7540,N,14257.6714,W,000.0,000.0,290314,,*e HTTP/1.1" 200 33 "-" "-"
该行应为$gps = $_REQUEST['gprmc'];
。你确定这条线吗?
if(substr($buffer, 0, 5)=='GPRMC') {
不应该是:
if(substr($buffer, 1, 5)=='GPRMC') {
? 你肯定忽略了NWSE的字母!
答案 1 :(得分:-2)
list($dato1, $dato2, $dato3, $lat, $dato5, $lon, $dato7, $velocidad, $dato9, $dato10, $dato11, $dato12) = explode(',', $input_gps);
$resultado_lat = $lat / 100;
list ($latitud_entero, $latitud_decimal) = explode('.', $resultado_lat);
$resultado_lat_minutos = $lat - ($latitud_entero * 100);
$resultado_lat_segundos = ($resultado_lat_minutos / 60);
$resultado_lat_final = $latitud_entero + $resultado_lat_segundos;
if ($dato5 == 'S'){
$resultado_lat_final = $resultado_lat_final * -1;
}
$resultado_lon = $lon / 100;
list ($longitud_entero, $longitud_decimal) = explode('.', $resultado_lon);
$resultado_lon_minutos = $lon - ($longitud_entero * 100);
$resultado_lon_segundos = ($resultado_lon_minutos / 60);
$resultado_lon_final = $longitud_entero + $resultado_lon_segundos;
if ($dato7 == 'W'){
$resultado_lon_final = $resultado_lon_final * -1;
}