|
|
#include "stdafx.h"
|
|
|
#include "angle.h"
|
|
|
#include "math.h"
|
|
|
#define _USE_MATH_DEFINES // 使用math.h中的M_PI宏定义需要
|
|
|
|
|
|
const double EPSILON=1.0E-12;
|
|
|
const double PI = M_PI;
|
|
|
|
|
|
Angle::Angle(void)
|
|
|
{
|
|
|
}
|
|
|
|
|
|
|
|
|
Angle::~Angle(void)
|
|
|
{
|
|
|
}
|
|
|
|
|
|
//度 转 度分秒
|
|
|
void Angle::DegtoDms(double deg, int &d, int &m, double &s)
|
|
|
{
|
|
|
d = int(deg + EPSILON);//整数部分度
|
|
|
double dTmp = (deg - d) * 60;//小数部分转换成分
|
|
|
m = int(dTmp+ EPSILON);//取分的整数部分
|
|
|
s = (dTmp - m) * 60;//截取秒
|
|
|
}
|
|
|
|
|
|
//角度 转弧度
|
|
|
void Angle::DegtoRad(double deg, double &rad)
|
|
|
{
|
|
|
rad = deg * PI/180;
|
|
|
}
|
|
|
|
|
|
//角度 转 十进制度
|
|
|
void Angle::DegtodDeg(double deg, int &d, double &m)
|
|
|
{
|
|
|
d = int(deg + EPSILON);//整数部分度
|
|
|
m = (deg - d) * 60;//小数部分转换成分
|
|
|
}
|
|
|
|
|
|
// 度分秒 转 度
|
|
|
void Angle::DmstoDeg(int d, int m, double s, double °)
|
|
|
{
|
|
|
deg = d + (m / 60.0) + (s / 3600.0);
|
|
|
}
|
|
|
|
|
|
//度分秒 转 十进制度
|
|
|
void Angle::DmstodDeg(int d, int m, double s, int &dDeg, double &dm)
|
|
|
{
|
|
|
dDeg = d;
|
|
|
dm = m + s/60;
|
|
|
}
|
|
|
|
|
|
|
|
|
string Angle::DoubleToString(double num,int precision)
|
|
|
{
|
|
|
char tmp[10];
|
|
|
sprintf_s(tmp,"%d",precision);
|
|
|
string str_p = tmp;
|
|
|
string format = "%." + str_p + "f";
|
|
|
|
|
|
char buffer[20];
|
|
|
sprintf_s(buffer,format.data(),num);
|
|
|
string str = buffer;
|
|
|
return str;
|
|
|
}
|
|
|
|
|
|
string Angle::IntToString(int num)
|
|
|
{
|
|
|
char tmp[100];
|
|
|
sprintf_s(tmp,"%d",num);
|
|
|
string str = tmp;
|
|
|
return str;
|
|
|
}
|
|
|
|
|
|
|
|
|
//字符串分割函数
|
|
|
vector<string> Angle::split(string str, string pattern)
|
|
|
{
|
|
|
/*
|
|
|
string::size_type pos;
|
|
|
vector<string> result;
|
|
|
str += pattern;//扩展字符串以方便操作
|
|
|
int size = str.size();
|
|
|
for (int i = 0; i < size; i++)
|
|
|
{
|
|
|
|
|
|
pos = str.find(pattern, i);
|
|
|
if (pos < size)
|
|
|
{
|
|
|
|
|
|
string s = str.substr(i, pos - i);
|
|
|
result.push_back(s);
|
|
|
i = pos + pattern.size() - 1;
|
|
|
}
|
|
|
}
|
|
|
return result;*/
|
|
|
|
|
|
char *ptr;
|
|
|
char *buf;
|
|
|
ptr = strtok_s((char*)str.data(),pattern.data(),&buf);
|
|
|
string tmp;
|
|
|
vector<string> vec_str;
|
|
|
while(ptr != NULL)
|
|
|
{
|
|
|
tmp = ptr;
|
|
|
vec_str.push_back(tmp);
|
|
|
ptr = strtok_s(NULL, pattern.data(), &buf);
|
|
|
}
|
|
|
return vec_str;
|
|
|
}
|
|
|
|
|
|
// wstring=>string
|
|
|
std::string Angle::WString2String(const std::wstring &ws)
|
|
|
{
|
|
|
std::string strLocale = setlocale(LC_ALL, "");
|
|
|
const wchar_t *wchSrc = ws.c_str();
|
|
|
size_t nDestSize = wcstombs(NULL, wchSrc, 0) + 1;
|
|
|
char *chDest = new char[nDestSize];
|
|
|
memset(chDest, 0, nDestSize);
|
|
|
wcstombs(chDest, wchSrc, nDestSize);
|
|
|
std::string strResult = chDest;
|
|
|
delete[] chDest;
|
|
|
setlocale(LC_ALL, strLocale.c_str());
|
|
|
return strResult;
|
|
|
}
|
|
|
|
|
|
// string => wstring
|
|
|
std::wstring Angle::String2WString(const std::string &s)
|
|
|
{
|
|
|
std::string strLocale = setlocale(LC_ALL, "");
|
|
|
const char *chSrc = s.c_str();
|
|
|
size_t nDestSize = mbstowcs(NULL, chSrc, 0) + 1;
|
|
|
wchar_t *wchDest = new wchar_t[nDestSize];
|
|
|
wmemset(wchDest, 0, nDestSize);
|
|
|
mbstowcs(wchDest, chSrc, nDestSize);
|
|
|
std::wstring wstrResult = wchDest;
|
|
|
delete[] wchDest;
|
|
|
setlocale(LC_ALL, strLocale.c_str());
|
|
|
return wstrResult;
|
|
|
}
|
|
|
|
|
|
void Angle::getDMSString(double lon,double lat,string &str_lon,string &str_lat)
|
|
|
{
|
|
|
std::string dSymbol = "°";
|
|
|
std::string mSymbol = "′";
|
|
|
std::string sSymbol = "\"";
|
|
|
int lon_d,lon_m,lat_d,lat_m;
|
|
|
double lon_s,lat_s;
|
|
|
DegtoDms(lon,lon_d,lon_m,lon_s);
|
|
|
DegtoDms(lat,lat_d,lat_m,lat_s);
|
|
|
|
|
|
string str_lat_s = DoubleToString(lat_s,4);
|
|
|
string str_lon_s = DoubleToString(lon_s,4);
|
|
|
|
|
|
str_lon = IntToString(lon_d) + dSymbol + IntToString(lon_m) + mSymbol + str_lon_s + sSymbol;
|
|
|
str_lat = IntToString(lat_d) + dSymbol + IntToString(lat_m) + mSymbol + str_lat_s + sSymbol;
|
|
|
}
|
|
|
|