Сообщение «GNS» описано, например, here
Из Вашего сообщения мы можем извлечь
4054,34347, N = широта
02916,99092, E = долгота
Широта:
два первые цифры (pa с нулевым значением 0) в зависимости от широты (40 в вашем примере) - это градусы. Остальные (54.34347) - минуты. «N» - северное полушарие («S» будет южным).
Конверсия плавать в два раза будет
function TGpsMsg.LatStrToDouble(Lat: string; NS: char): double;
begin
result := StrToFloat(LeftStr(Lat, 2));
result := result + StrToFloat(MidStr(Lat, 3, 8))/60;
if (NS = 'S') or (NS = 's') then
result := -result;
end;
Ваш образец 40,9057245 N
Долгота:
В три первые цифры (проложенные с 0, если это необходимо) из долгота (029) - это градусы. Остальные (16.99092) - минуты. «E» находится к востоку от 0-меридиана (Гринвич) («W» будет на западе).
function TGpsMsg.LngStrToDouble(Lng: string; EW: char): double;
begin
result := StrToFloat(LeftStr(Lng, 3));
result := result + StrToFloat(MidStr(Lng, 4, 8))/60;
if (EW = 'W') or (EW = 'w') then
result := -result;
end;
Ваш образец 29,283182 E
Я думаю, вам нужно определить проблему более точно. –
Я получил координацию формата WGS84 от gps-устройства (comport), но для этого требуется проекция (для карты) lat long, я получил эту координату: $ GPGNS, 080219.00,4054.34347, N, 02916.99092, E, AN, 11,0.89 , 134.1,37.7 ,, * 7B Map Lat: 40.9057 Карта Длинные: 29.2831 –
Этот формат называется NMEA и хорошо документирован, например здесь http://www.gpsinformation.org/dale/nmea.htm – dummzeuch