写在代码之前:
有一条小河,因为怕湿了脚,所以去搭桥。
结果是脚没有湿,却弄脏了全身。
谷歌地图下载器下载的图片四个角点的经纬度坐标为十进制的度,在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); } } } }