出租轨迹数据计算

目录

1.数据文件读取

2.创建基本类元素

3.计算儒略日

4.计算相邻时段长度

5.计算相邻时段速度

6.计算方位角

7.窗口代码

8.原始数据

9.解算结果

 一、数据文件读取

 private void 打开数据文件ToolStripMenuItem_Click(object sender, EventArgs e){try{OpenFileDialog opf = new OpenFileDialog();opf.Filter = "文本文件|*.txt";opf.Title = "请选择你要导入的文件";if (opf.ShowDialog() == DialogResult.OK){StreamReader sr = new StreamReader(opf.FileName);//设置分割符号读取文件string[] line = sr.ReadLine().Trim().Split(',', ',');data = new DataCenter();Epoch epoch = new Epoch();data.epochs = new List();//循环读取知道为空while (!sr.EndOfStream){epoch = new Epoch();line = sr.ReadLine().Trim().Split(',', ',');epoch.ID = line[0];epoch.status = int.Parse(line[1]);epoch.Btime = long.Parse(line[2]);epoch.x = double.Parse(line[3]);epoch.y = double.Parse(line[4]);epoch.year = (int)(epoch.Btime / 1e+10);epoch.month = (int)(epoch.Btime / (1e+8) % 100);epoch.day = (int)(epoch.Btime / 1000 / 1000 % 100);epoch.hour = (int)(epoch.Btime / 10000 % 100);epoch.minute = (int)(epoch.Btime / 100 % 100);epoch.second = (int)(epoch.Btime % 100);              data.epochs.Add(epoch);};}}catch (Exception){MessageBox.Show("读取文件有误");throw;}}

 二、创建基本类

 internal class Epoch{public string ID;       //车辆标识public int status;      //运营状态public long Btime;       //北京时间public double x;        //x坐标分量public double y;        //y坐标分量public double mjd;      //儒略日public double Vsu;      //速度public double angle;    //坐标方位角public double length;   //长度public double year;     public double month;public double day;public double hour;public double minute;public double second;   }

三、计算儒略日

 public void Mjd(Epoch epoch)
        {
            epoch.mjd = -678987 + 367 * epoch.year - (int)(7 / 4.0 * (epoch.year + (int)((epoch.month + 9.0) / 12.0))) +
                (int)(275 * epoch.month / 9.0)+ epoch.day + epoch.hour /24.0+ epoch.minute /1440.0+ epoch.second/ 86400.0;            
        }

四、计算长度

//获取长度public double GetLong(Epoch start,Epoch end){double dx=end.x- start.x;double dy=end.y- start.y;double length=Math.Sqrt(dx*dx+dy*dy)/1000.0;return length;         }

五、获取速度

 public double GetVsu(Epoch start,Epoch end){double Vsu;double dt=(end.mjd-start.mjd)*24;Vsu=GetLong(start,end)/dt;return Vsu;  }

六、获取方位角

//获取方位角public double GetAngle(Epoch start,Epoch end) {double eps = 1e-5;double dx = end.x - start.x;double dy = end.y - start.y;double angle;if(Math.Abs(dx) < eps) {if(Math.Abs(dy) < eps){angle = 0;}else if(dy>0){angle = 0.5 * Math.PI;}else{angle = 1.5 * Math.PI;}}else{angle=Math.Atan2(dy, dx);               if(dx<0){angle += Math.PI;}   }if(angle<0){angle += 2*Math.PI;}else if(angle>2*Math.PI){angle -= 2 * Math.PI; }angle *= 180 / Math.PI;return angle;}

七、窗口代码

 private void 打开数据文件ToolStripMenuItem_Click(object sender, EventArgs e){try{OpenFileDialog opf = new OpenFileDialog();opf.Filter = "文本文件|*.txt";opf.Title = "请选择你要导入的文件";if (opf.ShowDialog() == DialogResult.OK){StreamReader sr = new StreamReader(opf.FileName);//设置分割符号读取文件string[] line = sr.ReadLine().Trim().Split(',', ',');data = new DataCenter();Epoch epoch = new Epoch();data.epochs = new List();//循环读取知道为空while (!sr.EndOfStream){epoch = new Epoch();line = sr.ReadLine().Trim().Split(',', ',');epoch.ID = line[0];epoch.status = int.Parse(line[1]);epoch.Btime = long.Parse(line[2]);epoch.x = double.Parse(line[3]);epoch.y = double.Parse(line[4]);epoch.year = (int)(epoch.Btime / 1e+10);epoch.month = (int)(epoch.Btime / (1e+8) % 100);epoch.day = (int)(epoch.Btime / 1000 / 1000 % 100);epoch.hour = (int)(epoch.Btime / 10000 % 100);epoch.minute = (int)(epoch.Btime / 100 % 100);epoch.second = (int)(epoch.Btime % 100);              data.epochs.Add(epoch);};}}catch (Exception){MessageBox.Show("读取文件有误");throw;}}private void 计算ToolStripMenuItem_Click(object sender, EventArgs e){Algo algo = new Algo();for (int i = 0; i < data.epochs.Count; i++){algo.Mjd(data.epochs[i]);}//循环解算for (int i = 0; i < data.epochs.Count-1; i++){int j = i + 1;data.epochs[i].length= algo.GetLong(data.epochs[i], data.epochs[j]);data.epochs[i].angle=algo.GetAngle(data.epochs[i], data.epochs[j]);data.epochs[i].Vsu=algo.GetVsu(data.epochs[i ], data.epochs[j]);}//输出dataGridView1.RowCount = data.epochs.Count;       for (int i=0; i < data.epochs.Count-1; i++){dataGridView1.Rows[i ].Cells[0].Value = i;dataGridView1.Rows[i ].Cells[1].Value = data.epochs[i].mjd;dataGridView1.Rows[i ].Cells[2].Value = data.epochs[i+1].mjd;dataGridView1.Rows[i ].Cells[3].Value = data.epochs[i].Vsu;dataGridView1.Rows[i ].Cells[4].Value = data.epochs[i].angle;}}

八、原始数据(部分)

车辆标识,运营状态,时间(YYYYMMDDHHNNSS),x(m),y(m)T2,0,20170706123247,4406023.008,522527.941 T2,0,20170706123340,4404760.859,522966.967 T2,0,20170706123434,4404320.939,524120.696 T2,0,20170706123525,4404971.927,525174.235 T2,0,20170706123620,4405145.897,526401.122 T2,0,20170706123715,4404969.163,527571.039 T2,0,20170706123901,4404771.901,530189.557 T2,0,20170706123951,4404468.483,531314.392 T2,0,20170706124041,4403225.367,531629.348 T2,0,20170706124135,4402593.718,532410.002 T2,0,20170706124229,4402988.916,533694.337 T2,0,20170706124322,4403398.169,534947.760 T2,0,20170706124417,4404306.169,535751.572 T2,0,20170706124510,4405337.935,536109.508 T2,0,20170706124603,4406129.248,536932.496 T2,0,20170706124703,4406242.241,538293.890 T2,0,20170706124753,4406677.312,539311.147 T2,0,20170706124846,4407692.609,540050.815 T2,0,20170706124941,4408659.552,541003.526

九、解算结果

 

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部