Парсер GPS Parser (NMEA / GPRMC)

sergeyberezhnoy

Новичок
Добрый день!

Возник вопрос насчет работы парсера.

Мне нужно получить данные с контрольной суммы широту и долготу и отобразить их в Googla maps

Дословно из спецификации:
'Контрольная сумма: 8-битовая сумма (XOR) ASCII кодов всех символов (включая ',') в выражении между символами '$' и '*' (исключая их). результат сложения записываеться в явном виде после '*'.'
Вот несколько 'правильных' строк с правильными значения Контрольной суммы:
$GPRMC,084609.000,A,4640.9561,N,03235.3739,E,0.00,349.30,011214,,,D*66
$GPRMC,084610.000,A,4640.9561,N,03235.3739,E,0.00,349.30,011214,,,D*6E

Я беру считываю контрольную сумму $GPRMC с файла resource.txt . Но мне нужно сделать чтобы данные $GPRMC считывались с таблицы базы данных mysql а не с файла
Сам парсер который нашел.

<?php

// Converts DMS ( Degrees / minutes / seconds )
// to decimal format longitude / latitude
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);
}

//Set timezone
date_default_timezone_set('Asia/Manila');

//Connect to GPS
$gps = fopen("resource.txt", "r+");


//Read data from GPS
while($gps){
$buffer = fgets($gps);
if(substr($buffer, 0, 6)=='$GPRMC'){
echo $buffer."\n";

$gprmc = explode(',',$buffer);
$data['timestamp'] = strtotime('now');
$data['sat_status'] = $gprmc[2];

$data['lattitude_dms'] = $gprmc[3];
$data['lattitude_decimal'] = DMStoDEC($gprmc[3],'lattitude');
$data['lattitude_direction'] = $gprmc[4];

$data['longitude_dms'] = $gprmc[5];
$data['longitude_decimal'] = DMStoDEC($gprmc[5],'longitude');
$data['longitude_direction'] = $gprmc[6];

$data['speed_knots'] = $gprmc[7];

$data['bearing'] = $gprmc[8];

$data['google_map'] = '.','.$data['longitude_decimal'].'+(PHP']http://maps.google.com/maps?q='.$data['lattitude_decimal'].','.$data['longitude_decimal'].' (PHP Decoded)&iwloc=A';

print_r($data);
echo "\n\n";
}
}


?>
 
Последнее редактирование:

Активист

Активист
Команда форума
1. Научитесь нормально ставить вопрос, а еще излагать свои мысли правильно, а то Вас могут понять не только лишь все, мало кто может Вас понять;
2. Используйте знаки препинания;
3. Причем тут контрольная сумма и функция перевода широты и долготы, в числовую интерпретацию?
4. Из контрольной суммы вы никогда не получите широту, долготу и т.п.
 

sergeyberezhnoy

Новичок
1. Научитесь нормально ставить вопрос, а еще излагать свои мысли правильно, а то Вас могут понять не только лишь все, мало кто может Вас понять;
2. Используйте знаки препинания;
3. Причем тут контрольная сумма и функция перевода широты и долготы, в числовую интерпретацию?
4. Из контрольной суммы вы никогда не получите широту, долготу и т.п.
Хорошо. Объясню не спеша. Есть GPS модуль EB-500 который отправляет спутнику информацию передвижение и местонахождение транспорта. Мне нужно с помощью PHP обработать данные с GPS модуля о местонахождение объекта и передвижения. И отобразить в Googla Maps

 

Вурдалак

Продвинутый новичок
Просто вот взять и переписать код под MySQL — это скорее на фриланс, раздел «Работа» и т.д.
 

Активист

Активист
Команда форума
И? В чем проблема?
1. RMC самое полезное сообщение, содержит всю самую необходимую информацию. Содержит данные о времени, местоположении, курсе и скорости. Контрольная сумма обязательна для этого сообщения, интервалы передачи не должны превышать 2 секунды.
$GPRMC,181057.000,A,5542.2389,N,03741.6063,E,0.47,74.50,190311,,,A*51
  • 181057.000 — время 18.10.57.
  • A — данные достоверны, V — недостоверны..
  • 5542.2389,N — широта («N» для северной или «S» для южной широты).
  • 03741.60637,E — долгота («E» для восточной или «W» для западной долготы).
  • 0.47 — скорость (узлов в час).
  • 74.50 — путевой угол (направление скорости) в градусах. Число с плавающей точкой. Целая и дробная части переменной длины. Значение равное 0 соответствует движению на север, 90 — восток, 180 — юг, 270 — запад.
  • 190311 — дата 19.03.2011.
  • — магнитное склонение в градусах, рассчитанное по некоторой модели, отсутствует.
  • — направление магнитного склонения, отсутствует.
  • A — режим: «A» — автономный, «D» — дифференциальный, «E» — аппроксимация, «N» — недостоверные данные.
  • *51 — контрольная сумма.
По русски и понятно: https://ru.wikipedia.org/wiki/NMEA_0183
 
Последнее редактирование:

Активист

Активист
Команда форума
Какие еще примеры? Вы же код привели. В нем есть все. Или градусы (минуты и секунды) перевести в градусы с десятичной дробью? (ну во первых в вашей копипасте есть уже функция), но все же это математика хз какой класс. Можно посмотреть здесь например. Конкретно, что вам не ясно?
 

sergeyberezhnoy

Новичок
Какие еще примеры? Вы же код привели. В нем есть все. Или градусы (минуты и секунды) перевести в градусы с десятичной дробью? (ну во первых в вашей копипасте есть уже функция), но все же это математика хз какой класс. Можно посмотреть здесь например. Конкретно, что вам не ясно?
Не запускается файл php (долго думает) с функцией которая открывает файл resource.txt и считывает строку с данными $GPRMC,084608.000,A,4640.9561,N,03235.3739,E,0.00,349.30,011214,,,D*67 . Решил попробывать прочесть данные с файла а потом переписать для Mysql а он не в какую
 

Активист

Активист
Команда форума
Потому что там ошибка. Цикл while у вас никогда не завершиться. Открываете ссылку http://php.net/fgets , и читаете. Там есть пример "построчное чтение файла".
 
Сверху