我有包含經緯度值,如CSV文件的最簡單的方法:什麼是緯度和經度轉換爲雙值
「25°36'55.57」,「E」,「45 °39'12.52「」N「
任何人都有一個快速和簡單的C#代碼片將其轉換爲雙值?
感謝
我有包含經緯度值,如CSV文件的最簡單的方法:什麼是緯度和經度轉換爲雙值
「25°36'55.57」,「E」,「45 °39'12.52「」N「
任何人都有一個快速和簡單的C#代碼片將其轉換爲雙值?
感謝
如果你的意思是C#代碼來做到這一點:
結果= 25 +(36/60)+(55.57/3600)
首先,您需要解析表達式與正則表達式或其他一些機制,並將其分割成單獨的部分。然後:
String hour = "25";
String minute = "36";
String second = "55.57";
Double result = (hour) + (minute)/60 + (second)/3600;
當然還有一個切換標誌,取決於N/S或E/S。維基百科有一點:
對於計算,西/東後綴在西半球用負號代替。令人困惑的是,有時也會看到東方消極的慣例。首選的公約 - 東方國家是積極的 - 與北極的右手笛卡爾座標系一致。然後可以將特定的經度與特定的緯度(在北半球通常爲正值)相結合,以便在地球表面上給出精確的位置。 (http://en.wikipedia.org/wiki/Longitude)
你想把它表示成什麼?弧秒? 然後每分鐘60分鐘,每分鐘60秒。 然後你必須自己保留E和N.
但這並不是通常的做法。
我見過的最簡單的代表是在地球上繪製的一個點,它的起源是通過地球的中心。[因此一個很好的位置矢量。]這個問題是雖然使用這些數據很容易,但是正確地將其導入系統並將其導出系統可能會很困難,因爲地球不是圓形的,或者是統一的。
感謝您的所有快速解答。基於amdfan的回答,我將這些代碼放在一起,完成了C#中的工作。
/// <summary>The regular expression parser used to parse the lat/long</summary>
private static Regex Parser = new Regex("^(?<deg>[-+0-9]+)[^0-9]+(?<min>[0-9]+)[^0-9]+(?<sec>[0-9.,]+)[^0-9.,ENSW]+(?<pos>[ENSW]*)$");
/// <summary>Parses the lat lon value.</summary>
/// <param name="value">The value.</param>
/// <remarks>It must have at least 3 parts 'degrees' 'minutes' 'seconds'. If it
/// has E/W and N/S this is used to change the sign.</remarks>
/// <returns></returns>
public static double ParseLatLonValue(string value)
{
// If it starts and finishes with a quote, strip them off
if (value.StartsWith("\"") && value.EndsWith("\""))
{
value = value.Substring(1, value.Length - 2).Replace("\"\"", "\"");
}
// Now parse using the regex parser
Match match = Parser.Match(value);
if (!match.Success)
{
throw new ArgumentException(string.Format(CultureInfo.CurrentUICulture, "Lat/long value of '{0}' is not recognised", value));
}
// Convert - adjust the sign if necessary
double deg = double.Parse(match.Groups["deg"].Value);
double min = double.Parse(match.Groups["min"].Value);
double sec = double.Parse(match.Groups["sec"].Value);
double result = deg + (min/60) + (sec/3600);
if (match.Groups["pos"].Success)
{
char ch = match.Groups["pos"].Value[0];
result = ((ch == 'S') || (ch == 'W')) ? -result : result;
}
return result;
}
你在代碼次要錯誤 - 第二分區(秒)應通過3600 – 2008-09-19 15:55:51
正確公式爲:結果=度+(分鐘/ 60)+(秒/ 3600); – holiveira 2009-05-15 23:31:36