gpt4 book ai didi

c++ - 使用 C++ 处理 GPS 输出

转载 作者:搜寻专家 更新时间:2023-10-31 02:16:44 26 4
gpt4 key购买 nike

您好,我正在处理 GPS 输出。更准确地说,我正在使用 $GPRMC 输出。现在我得到的输出是以下形式:

$GPRMC,225446,A,4916.45 N,12311.12 W,000.5,054.7,191194,020.3 E,*68"

此输出包括时间、纬度、经度、节速、航向信息、日期、磁差和强制校验和。

The image that I have attached shows the current result I'm getting as I'm taking out the sub strings from the string.

现在我得到的是 hhmmss 格式的时间。我想要它的 hh:mm:ss 格式。另外我得到的经度是 4916.45 N。我想得到它是 49 度 16' 45"。纬度为 123 度 11' 12"。我是初学者,所以我真的不知道如何转换格式。我还在下面附上了我的代码。

#include<iostream>
#include<string>
#include<sstream>
#include<stdio.h>
#include<conio.h>
using namespace std;
int main()
{

std::string input = "$GPRMC,225446,A,4916.45 N,12311.12 W,000.5,054.7,191194,020.3 E,*68";
std::istringstream ss(input);
std::string token;

string a[10];
int n = 0;
while (std::getline(ss, token, ','))
{
//std::cout << token << '\n';
a[n] = token;
n++;
}
cout << a[0] << endl << endl;
cout << "Time=" << a[1] << endl << endl;
cout << "Navigation receiver status:" << a[2] << endl << endl;
cout << "Latitude=" << a[3] << endl << endl;
cout << "Longitude=" << a[4] << endl << endl;
cout << "Speed over ground knots:" << a[5] << endl << endl;
cout << "Course made good,True:" << a[6] << endl << endl;
cout << "Date of Fix:" << a[7] << endl << endl;
cout << "Magnetic variation:" << a[8] << endl << endl;
cout << "Mandatory Checksum:" << a[9] << endl << endl;

_getch();
return 0;
}

最佳答案

首先,您的 NMEA 语句是错误的,N 和 W 之前应该有逗号 ',',因此您实际上必须解析“12311.12”而不是“12311.12 W”。你可以在这个网站上查看:http://aprs.gids.nl/nmea/#rmc ,您还应该始终检查句子的校验和 - 对于在线检查,请使用:http://www.hhhh.org/wiml/proj/nmeaxor.html .

为了解析经度和纬度,我建议使用正则表达式,我并不是说这是正则表达式是正确的——它只解析您提供的数据:

#include <iostream>
#include <string>
#include <regex>
#include <iostream>

std::tuple<int,int,int> parseLonLat(const std::string& s) {
std::regex pattern("(\\d{2,3})(\\d+{2})\\.(\\d+{2})" );

// Matching single string
std::smatch sm;
if (std::regex_match(s, sm, pattern)) {
return std::make_tuple(std::stoi(sm[1]), std::stoi(sm[2]), std::stoi(sm[3]));
}
return std::make_tuple(-1,-1,-1);
}

int main (int argc, char** argv) {
auto loc1 = parseLonLat("4916.45");
std::cout << std::get<0>(loc1) << ", " << std::get<1>(loc1) << ", " << std::get<2>(loc1) << "\n";
// output: 49, 16, 45

auto loc2 = parseLonLat("12311.12");
std::cout << std::get<0>(loc2) << ", " << std::get<1>(loc2) << ", " << std::get<2>(loc2) << "\n";
// output: 123, 11, 12
}

http://coliru.stacked-crooked.com/a/ce6bdb1e551df8b5

关于c++ - 使用 C++ 处理 GPS 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36616171/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com