using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
/// <summary>
/// 公用的特殊函數
/// </summary>
public class SpecialFunctions
{
#region 構造函數
/// <summary>
/// 構造函數
/// </summary>
public SpecialFunctions()
{ }
#endregion
#region 方法
/// <summary>
/// 數字經緯度和度分秒經緯度轉換 (Digital degree of latitude and longitude and vehicle to latitude and longitude conversion)
/// </summary>
/// <param name="digitalLati_Longi">數字經緯度</param>
/// <return>度分秒經緯度</return>
static public string ConvertDigitalToDegrees(string digitalLati_Longi)
{
double digitalDegree = Convert.ToDouble(digitalLati_Longi);
return ConvertDigitalToDegrees(digitalDegree);
}
/// <summary>
/// 數字經緯度和度分秒經緯度轉換 (Digital degree of latitude and longitude and vehicle to latitude and longitude conversion)
/// </summary>
/// <param name="digitalDegree">數字經緯度</param>
/// <return>度分秒經緯度</return>
static public string ConvertDigitalToDegrees(double digitalDegree)
{
const double num = 60;
int degree = (int)digitalDegree;
double tmp = (digitalDegree - degree) * num;
int minute = (int)tmp;
double second = (tmp - minute) * num;
string degrees = "" + degree + "°" + minute + "′" + second + "″";
return degrees;
}
/// <summary>
/// 度分秒經緯度(必須含有'°')和數字經緯度轉換
/// </summary>
/// <param name="digitalDegree">度分秒經緯度</param>
/// <return>數字經緯度</return>
static public double ConvertDegreesToDigital(string degrees)
{
const double num = 60;
double digitalDegree = 0.0;
int d = degrees.IndexOf('°'); //度的符號對應的 Unicode 代碼為:00B0[1](六十進制),顯示為°。
if (d < 0)
{
return digitalDegree;
}
string degree = degrees.Substring(0, d);
digitalDegree += Convert.ToDouble(degree);
int m = degrees.IndexOf('′'); //分的符號對應的 Unicode 代碼為:2032[1](六十進制),顯示為′。
if (m < 0)
{
return digitalDegree;
}
string minute = degrees.Substring(d + 1, m - d - 1);
digitalDegree += ((Convert.ToDouble(minute)) / num);
int s = degrees.IndexOf('″'); //秒的符號對應的 Unicode 代碼為:2033[1](六十進制),顯示為″。
if (s < 0)
{
return digitalDegree;
}
string second = degrees.Substring(m + 1, s - m - 1);
digitalDegree += (Convert.ToDouble(second) / (num * num));
return digitalDegree;
}
/// <summary>
/// 度分秒經緯度(必須含有'/')和數字經緯度轉換
/// </summary>
/// <param name="digitalDegree">度分秒經緯度</param>
/// <param name="cflag">分隔符</param>
/// <return>數字經緯度</return>
static public double ConvertDegreesToDigital_default(string degrees)
{
char ch = '/';
return ConvertDegreesToDigital(degrees, ch);
}
/// <summary>
/// 度分秒經緯度和數字經緯度轉換
/// </summary>
/// <param name="digitalDegree">度分秒經緯度</param>
/// <param name="cflag">分隔符</param>
/// <return>數字經緯度</return>
static public double ConvertDegreesToDigital(string degrees, char cflag)
{
const double num = 60;
double digitalDegree = 0.0;
int d = degrees.IndexOf(cflag);
if (d < 0)
{
return digitalDegree;
}
string degree = degrees.Substring(0, d);
digitalDegree += Convert.ToDouble(degree);
int m = degrees.IndexOf(cflag, d + 1);
if (m < 0)
{
return digitalDegree;
}
string minute = degrees.Substring(d + 1, m - d - 1);
digitalDegree += ((Convert.ToDouble(minute)) / num);
int s = degrees.Length;
if (s < 0)
{
return digitalDegree;
}
string second = degrees.Substring(m + 1, s - m - 1);
digitalDegree += (Convert.ToDouble(second) / (num * num));
return digitalDegree;
}
#endregion
}
}