寫在代碼之前:
有一條小河,因為怕濕了腳,所以去搭橋。
結果是腳沒有濕,卻弄臟了全身。
谷歌地圖下載器下載的圖片四個角點的經緯度坐標為十進制的度,在ArcGIS里做配准,由於圖比較大,導出的時候做了分割,
分割成了很多張圖片。需要找出其中一張與研究區一致的影像,一個個配准需要輸入經緯度,但ArcGIS中輸入的是度分秒,
所以,寫程序對txt文件進行批量處理。代碼如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; namespace 十進制度轉度分秒 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } string folderpath = ""; private void button1_Click(object sender, EventArgs e) { FolderBrowserDialog fbd = new FolderBrowserDialog(); fbd.Description = "選擇包含谷歌地圖下載器經緯度的文件夾"; if (fbd.ShowDialog() == DialogResult.OK) { folderpath = fbd.SelectedPath; } textBox1.Text = folderpath; } private void button2_Click(object sender, EventArgs e) { char[] split = new char[] { ':', ',' }; //分割字符串 folderpath = textBox1.Text; //獲取所選文件夾路徑下的所有txt文檔 List<string> list = new List<string>(); string[] strlist = Directory.GetFiles(folderpath); for (int i = 0; i < strlist.Length; i++) { FileInfo f = new FileInfo(strlist[i]); if (f.Extension == ".txt") list.Add(strlist[i]); } for (int i = 0; i < list.Count; i++) { try { StringBuilder sb = new StringBuilder(); StreamReader sr = new StreamReader(list[i],Encoding.GetEncoding(936),true); string s; while (!sr.EndOfStream) { s = sr.ReadLine(); string[] tempstr = s.Split(split); if (!tempstr[0].Contains("角")) { MessageBox.Show("所選擇的不是谷歌地圖下載器的坐標文件"); return; } else { //轉換並寫入文件 double[] dt1 = trandu2m(tempstr[1]); double[] dt2 = trandu2m(tempstr[2]); string s1 = tempstr[0]+dt1[0].ToString() + "°" + dt1[1].ToString()+"′"+dt1[2].ToString()+"″"; string s2 = dt2[0].ToString() + "°" + dt2[1].ToString() + "′" + dt2[2].ToString() + "″"; sb.AppendLine(s1 + "," + s2); } } sr.Close(); FileStream fs = new FileStream(list[i], FileMode.Append); StreamWriter sw = new StreamWriter(fs,Encoding.GetEncoding(936)); sw.WriteLine(); //寫入一空行 sw.WriteLine(sb); sw.Close(); } catch (System.Exception ex) { throw new Exception(ex.Message); } } MessageBox.Show("操作成功"); } /// <summary> /// 十進制度轉化為度分秒 /// </summary> /// <param name="str"></param> /// <returns></returns> private double[] trandu2m(string str) { try { //double dd = Convert.ToDouble(str); double[] dt = new double[3]; dt[0] = Convert.ToDouble(str.ToString().Substring(0, str.IndexOf("."))); string str1= str.Substring(str.IndexOf(".")+1); str1 = "0." + str1; string str2 = (Convert.ToDouble(str1) * 60).ToString(); dt[1] = Convert.ToDouble(str2.Substring(0,str2.IndexOf("."))); string str3 = str2.Substring(str2.IndexOf(".") + 1); str3 = "0." + str3; string str4 = (Convert.ToDouble(str3) * 60).ToString(); dt[2] = Convert.ToDouble(str4); return dt; } catch (System.Exception ex) { throw new Exception(ex.Message); } } } }