#include "convert.h"
#include <windows.h>
#include <ctmstrconvert.h>
static wstring kml_S = L"<kml xmlns=\"http://earth.google.com/kml/2.0\">\r\n";
static wstring kmlFolder_S = L"<Folder>\r\n";
static wstring kmlPlacemark_S = L"<Placemark>";
static wstring kmlDescription_S = L"<description>";
static wstring kmlDescription_E = L"</description>";
static wstring kmlName_S = L"<name>";
static wstring kmlName_E = L"</name>";
static wstring kmlLookat_S = L"<LookAt>";
static wstring kmlLon_S = L"<longitude>";
static wstring kmlLon_E = L"</longitude>";
static wstring kmlLat_S = L"<latitude>";
static wstring kmlLat_E = L"</latitude>";
static wstring kmlRange_S = L"<range>";
static wstring kmlRange_E = L"</range>";
static wstring kmlTilt_S = L"<tilt>";
static wstring kmlTilt_E = L"</tilt>";
static wstring kmlHeading_S = L"<heading>";
static wstring kmlHeading_E = L"</heading>";
static wstring kmlLookat_E = L"</LookAt>";
static wstring kmlPoint_S = L"<Point>";
static wstring kmlCoordinates_S = L"<coordinates>";
static wstring kmlCoordinates_E = L"</coordinates>";
static wstring kmlPoint_E = L"</Point>";
static wstring kmlPlacemark_E = L"</Placemark>\r\n";
static wstring kmlFolder_E = L"</Folder>\r\n";
static wstring kml_E = L"</kml>\r\n";
static wstring kml_default_range = L"20000";
static wstring kml_default_tilt = L"0";
static wstring kml_default_heading = L"3";
static string kml_default_altitude = "0";
static wstring kml_default_pointSetName = L"Positions";
// 实现差分前后的数据处理
//
static char exampleGGA[4][128] = {"$GPGGA,062926.000,4538.7429,N,12639.4155,E,2,08,1.0,196.6,M,0.0,M,23,1544*6C",
"$GPGGA,062926.000,4538.7429,N,12639.4155,W,2,08,1.0,196.6,M,0.0,M,23,1544*6C",
"$GPGGA,062926.000,4538.7429,S,12639.4155,E,2,08,1.0,196.6,M,0.0,M,23,1544*6C",
"$GPGGA,062926.000,4538.7429,N,12639.4155,W,2,08,1.0,196.6,M,0.0,M,23,1544*6C"};
// 将std::string 转为 利用UTF-8编码的std::string
// step1: 将std::string 转为 std::wstring
// 方法1:
BOOL StringToWString(const std::string &str,std::wstring &wstr)
{
int nLen = (int)str.length();
wstr.resize(nLen,L' ');
int nResult = MultiByteToWideChar(CP_ACP,0,(LPCSTR)str.c_str(),nLen,(LPWSTR)wstr.c_str(),nLen);
if (nResult == 0)
{
return FALSE;
}
return TRUE;
}
//wstring高字节不为0,返回FALSE
BOOL WStringToString(const std::wstring &wstr,std::string &str)
{
int nLen = (int)wstr.length();
str.resize(nLen,' ');
int nResult = WideCharToMultiByte(CP_ACP,0,(LPCWSTR)wstr.c_str(),nLen,(LPSTR)str.c_str(),nLen,NULL,NULL);
if (nResult == 0)
{
return FALSE;
}
return TRUE;
}
std::string to_utf8(const wchar_t* buffer, int len)
{
int nChars = ::WideCharToMultiByte(
CP_UTF8,
0,
buffer,
len,
NULL,
0,
NULL,
NULL);
if (nChars == 0) return "";
string newbuffer;
newbuffer.resize(nChars) ;
::WideCharToMultiByte(
CP_UTF8,
0,
buffer,
len,
const_cast< char* >(newbuffer.c_str()),
nChars,
NULL,
NULL);
return newbuffer;
}
// std::string 转为 std::string UTF-8
std::string to_utf8(const std::wstring& str)
{
return to_utf8(str.c_str(), (int)str.size());
}
// NMEA GGA 数据分析
int splitString1(string lineBuf, vector<string>& subStrs, char dim)
{
size_t startPos = lineBuf.find('$');
size_t endPos = lineBuf.find('*');
int iter;
int count = 0;
char subStr[64] = {0};
int findGGA = 0;
if(startPos != string::npos && endPos != string::npos)
{
for(iter = startPos + 1; iter < endPos; ++iter)
{
char ch = lineBuf.at(iter);
if(ch == dim)
{
string tmp = string(subStr);
if(tmp.find("GGA") != string::npos)
{
findGGA = 1;
}
subStrs.push_back(string(subStr));
memset(subStr,0, sizeof(subStr));
count = 0;
}
else
{
subStr[count] = lineBuf.at(iter);
count++;
}
}
subStrs.push_back(string(subStr));
}
if(findGGA)
{
return 0;
}
else
{
return -1;
}
}
// DD.DDDD ==> ddmm.mmmm
int fromDegreeToDM(double ddPointDDDD, double& ddmmPointMMMM)
{
int tmpInt = (int)floor(ddPointDDDD);
double tmpFloat = ddPointDDDD - tmpInt;
ddmmPointMMMM = tmpInt * 100 + tmpFloat * 60;
return 0;
}
// ddmm.mmmm ==> DD.DDDD
int fromDMToDegree(double ddmmPointMMMM, double& ddPointDDDD)
{
int tmpInt = floor(ddmmPointMMMM / 100);
double tmpFloat = ddmmPointMMMM - tmpInt * 100;
ddPointDDDD = tmpInt + tmpFloat / 60;
return 0;
}
// nmea 计算检查和
unsigned char checkSum(const char* buf)
{
int isStart = 0;
int iter = 0;
unsigned char checksum = 0;
while(1)
{
if((unsigned char)buf[iter] == '$')
{
isStart = 1;
++iter;
continue;
}
if(isStart)
{
if((unsigned char)buf[iter] == '*')
{
break;
}
checksum ^= buf[iter];
}
++iter;
}
// cout << "checksum = " << checksum << endl;
return checksum;
}
// KML: 保存为KML文件, 包含点的名称
// strs: 分别包含: 描述
// 名称
// 经度
// 纬度
// 注意:坐标点的高度默认设置为0
int convertToKMLWithName(vector<string>& pointInfo, ofstream* pOfstr, int Mode)
{
wstring utf8wStr = L""; // 宽字符
string utf8Str = ""; // UTF-8字符串
if(Mode == 0)
{
utf8Str = to_utf8(kml_S);
// pOfstr->write(kml_S.c_str(), kml_S.length());
pOfstr->write(utf8Str.c_str(), utf8Str.length());
utf8Str.clear();
utf8Str = to_utf8(kmlFolder_S);
// pOfstr->write(kmlFolder_S.c_str(), kmlFolder_S.length());
pOfstr->write(utf8Str.c_str(), utf8Str.length());
utf8Str.clear();
// 名称: kml文件的名称
utf8Str = to_utf8(kmlName_S);
//pOfstr->write(kmlName_S.c_str(), kmlName_S.length());
pOfstr->write(utf8Str.c_str(), utf8Str.length());
utf8Str.clear();
StringToWString(pointInfo[0], utf8wStr);
utf8Str = to_utf8(utf8wStr);
//pOfstr->write(pointInfo[0].c_str(), pointInfo[0].length());
pOfstr->write(utf8Str.c_str(), utf8Str.length());
utf8Str.clear();
utf8wStr.clear();
utf8Str = to_utf8(kmlName_E);
// pOfstr->write(kmlName_E.c_str(), kmlName_E.length());
pOfstr->write(utf8Str.c_str(), utf8Str.length());
utf8Str.clear();
// 点集合名称: kml
string outputPath = pointInfo[0];
size_t pos = outputPath.find_last_of('/');
if(pos != string::npos)
{// 用输出文件的名称
utf8Str = to_utf8(kmlName_S);
//pOfstr->write(kmlName_S.c_str(), kmlName_S.length());
pOfstr->write(utf8Str.c_str(), utf8Str.length());
utf8Str.clear();
// utf8Str = to_utf8(kml_default_pointSetName);
//pOfstr->write(kml_default_pointSetName.c_str(), kml_default_pointSetName.length());
CTMStrConvert converter;
wstring wPointsetName = converter.StringToWString(outputPath
没有合适的资源?快使用搜索试试~ 我知道了~
GPS分析工具
共54个文件
dll:23个
qm:16个
cpp:4个
5星 · 超过95%的资源 需积分: 49 91 下载量 24 浏览量
2018-03-29
22:49:59
上传
评论 2
收藏 13.52MB RAR 举报
温馨提示
该工具以QT为开发工具,在windows下可用的GPS NMEA数据转google Earth的KML文件格式数据的工具
资源推荐
资源详情
资源评论
收起资源包目录
GpsToKML.rar (54个子文件)
GpsToKML
GpsToKML
Qt5Svg.dll 350KB
libGLESV2.dll 2.19MB
Qt5Widgets.dll 6.23MB
gpsImage.jpg 125KB
iconengines
qsvgicon.dll 44KB
libwinpthread-1.dll 48KB
Qt5Gui.dll 5.4MB
Qt5Core.dll 5.13MB
GpsToKML-V1.0.exe 121KB
libgcc_s_dw2-1.dll 117KB
libEGL.dll 21KB
platforms
qwindows.dll 1.42MB
opengl32sw.dll 14.52MB
D3Dcompiler_47.dll 3.5MB
translations
qt_fi.qm 157KB
qt_cs.qm 155KB
qt_ca.qm 170KB
qt_lv.qm 150KB
qt_uk.qm 155KB
qt_sk.qm 123KB
qt_pl.qm 139KB
qt_hu.qm 89KB
qt_ru.qm 154KB
qt_en.qm 23B
qt_it.qm 157KB
qt_de.qm 169KB
qt_fr.qm 162KB
qt_he.qm 136KB
qt_ja.qm 127KB
qt_ko.qm 121KB
libstdc++-6.dll 1002KB
imageformats
qtga.dll 27KB
qgif.dll 33KB
qwebp.dll 358KB
qtiff.dll 485KB
qwbmp.dll 27KB
qsvg.dll 28KB
qicns.dll 46KB
qdds.dll 58KB
qjpeg.dll 246KB
qico.dll 35KB
src
convert.h 951B
mainwindow.ui 4KB
testGoogleEarth.pro.user.fe6d872 23KB
gpsImage.jpg 125KB
convert.cpp 27KB
ctmstrconvert.cpp 7KB
mainwindow.cpp 19KB
testGoogleEarth.pro.user.334b81c 23KB
main.cpp 211B
testGoogleEarth.pro.user 23KB
testGoogleEarth.pro 1KB
mainwindow.h 1KB
ctmstrconvert.h 1KB
共 54 条
- 1
资源评论
- qswsl2020-05-11很好用,赞一个
Hit_HSW
- 粉丝: 641
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功