最近做关于地图的基础操作,接触读取相片的GPS,有些GPS需要转换自己写了一个方法:
/// <summary>
/// GPS度分秒和小数互转
/// 14°19′12〃
/// 36.12432314
/// </summary>
/// <param name="_sGPS">
/// 格式如:14°19′12〃
/// 或
/// 36.12432314
/// </param>
/// <param name="_nNum">
/// 1:将度分秒转换为小数
/// 2:将小数转换为度分秒
/// </param>
/// <param name="_nLatLon">
/// 1:经度
/// 2:纬度
/// </param>
/// <returns></returns>
private string fnGps(string _sGPS, int _nNum, int _nLatLon)
{
string sGPS = string.Empty;
if (string.IsNullOrWhiteSpace(_sGPS))
{
MessageBox.Show("请输入GPS点!");
return sGPS;
}
if (_nNum <= 0 || _nNum >= 3)
{
MessageBox.Show("请输入正确转换标识!");
return sGPS;
}
if (_nLatLon <= 0 || _nLatLon >= 3)
{
MessageBox.Show("请输入正确经纬度标识!");
return sGPS;
}
if (_nNum == 1)//转换为小数
{
string[] sArrDegreeChar = _sGPS.Split('°');
if (_nLatLon == 1
&& Convert.ToDouble(sArrDegreeChar[0]) > 180)
{
MessageBox.Show("请输入正确经度GPS点!");
return sGPS;
}
if (_nLatLon == 2
&& Convert.ToDouble(sArrDegreeChar[0]) > 90)
{
MessageBox.Show("请输入正确纬度GPS点!");
return sGPS;
}
//度
if (sArrDegreeChar.Length == 1)
{
sGPS = sArrDegreeChar[0].ToString();
return sGPS;
}
double dDegreeChar = Convert.ToDouble(sArrDegreeChar[0]);
//分
string[] sArrMinutesChar = sArrDegreeChar[1].Split('′');
if (string.IsNullOrWhiteSpace(sArrMinutesChar[0].ToString())) return sGPS;
if (sArrMinutesChar.Length == 1)
{
sGPS += dDegreeChar + Convert.ToDouble(sArrMinutesChar[0]) / 60;
return sGPS;
}
double dMinutesChar = dDegreeChar + Convert.ToDouble(sArrMinutesChar[0]) / 60;
sGPS = dMinutesChar.ToString();
//秒
if (string.IsNullOrWhiteSpace(sArrMinutesChar[1].ToString().Replace("″", ""))) return sGPS;
double dSecondChar = dMinutesChar + Convert.ToDouble(sArrMinutesChar[1].ToString().Replace("″", "")) / 3600;
sGPS = dSecondChar.ToString();
}
else if (_nNum == 2)//转换度分秒
{
string[] sArrDegree = _sGPS.Split('.');
if (_nLatLon == 1
&& Convert.ToDouble(sArrDegree[0]) > 180)
{
MessageBox.Show("请输入正确经度GPS点!");
return sGPS;
}
if (_nLatLon == 2
&& Convert.ToDouble(sArrDegree[0]) > 90)
{
MessageBox.Show("请输入正确纬度GPS点!");
return sGPS;
}
if (sArrDegree.Length == 1)
{
sGPS = sArrDegree[0].ToString() + "°";
return sGPS;
}
sGPS += sArrDegree[0].ToString() + "°";
string sMinutes = "0." + sArrDegree[1];
double dMinutes = Convert.ToDouble(sMinutes) * 60;
string[] sArrMinutes = dMinutes.ToString().Split('.');
if (sArrMinutes.Length == 1)
{
//sGPS += nMinutes + "′";
sGPS += sArrMinutes[0] + "′";
return sGPS;
}
sGPS += sArrMinutes[0] + "′";
sGPS += (Convert.ToDouble("0." + sArrMinutes[1]) * 60).ToString("##.##");
sGPS += "″";
}
else
{
MessageBox.Show("对不起,GPS点不正确或者标识输入错误!");
return sGPS;
}
return sGPS;
}