AIS数据延迟解决方案

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Data.OleDb;
using System.Collections;
using Npgsql;
namespace zhixian
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
      
        public double [,] lat=new double[500,5000];
        public double[,] latdiff = new double[500,5000];
        public double[,] sdiff = new double[500,5000];
        public double[,] lon = new double[500, 5000];
        public double[,] londiff = new double[500,5000];
        public double[,] speed = new double[500,5000];
        public double[,] course = new double[500,5000];
        public string[,] time = new string[500,5000];
        public int[,] zhenshi = new int[500, 5000];
        public int[] zsgs = new int[600];//记录真实值个数
       
        public int jishu=0;//存取是否超时时到表格的第几行
        public int[] lieshu = new int[500];//,目标个数
        public int[,] zxlieshu = new int[600, 600];//记录真实值的位置
        public DataSet ds ,ds1,df;
        public string time_tmp;
        public String PtPath;
        public ArrayList mmid = new ArrayList();
        public int N = 99;
        Timer timer = new Timer();
        dadizhuti zhengjie = new dadizhuti();
        dadifanjie fanjie = new dadifanjie();
        PF lizilb = new PF();
        JWZH jwzh = new JWZH();
        public NpgsqlConnection conn;
        public NpgsqlCommand command;
        public NpgsqlDataAdapter dataAdapter;
        // 创建文件。如果文件存在则覆盖
        #region 读取数据
        public void button1_Click(object sender, EventArgs e)
        {
            
            String Path = "C:\\Users\\晓\\Desktop\\UKF滤波实验函数\\ais.xlsx";
          PtPath = "Host=localhost;Port=5432;Username=postgres;Password=516916441;Database=gis";
            ds = ExcelToDS(Path);
           
            ds1 = PtToDS(PtPath);

            for (int i =0; i < ds.Tables["table1"].Rows.Count; i++) {

                mmid.Add(ds.Tables["table1"].Rows[i][3].ToString()); //读取表中的值
                lat[i,0] = Convert.ToDouble(ds.Tables["table1"].Rows[i][1].ToString());
                lon[i,0]= Convert.ToDouble(ds.Tables["table1"].Rows[i][2].ToString());
                course[i,0]= Convert.ToDouble(ds.Tables["table1"].Rows[i][0].ToString());
                speed[i,0]= Convert.ToDouble(ds.Tables["table1"].Rows[i][5].ToString());
                time[i, 0] = ds.Tables["table1"].Rows[i][6].ToString();
                PointF point1 = new PointF(Convert.ToSingle(lat[1, 0]), Convert.ToSingle(lon[1, 0]));
                PointF point2 = new PointF(Convert.ToSingle(lat[1, 0]), Convert.ToSingle(lon[1, 0]));
                PaintEventArgs pe = new PaintEventArgs(this.CreateGraphics(), this.ClientRectangle);
                DrawLinePointF(pe,point1,point2);
                lieshu[i] = 0;
            }
            time_tmp = time[ds.Tables["table1"].Rows.Count - 1, 0];
            ceshi.Text = mmid[0].ToString();
        }
        #endregion
        #region 读入数据
        public DataSet PtToDS(string connString)
        {
            conn = new NpgsqlConnection(connString);

            conn.Open();

            // Retrieve all rows
            string sql = "SELECT  course,lat ,lon,mmsi,postime,speed ,messageid ,shipstatus  FROM ais.ais_ship_dyna";
             command = new NpgsqlCommand(sql, conn);
           // string mySQL = "update ais.his set j=0 where  mmsi=345678912;";
           // NpgsqlCommand cmd = new NpgsqlCommand(mySQL, conn);
         command.ExecuteNonQuery();
            dataAdapter = new NpgsqlDataAdapter(sql, conn);
            ds1 = new DataSet();
            dataAdapter.Fill(ds1, "ais.ais_ship_dyna");

            //DataTable myDataTable = new DataTable("pictures");
            //ds.Tables.Add(myDataTable);
            //            //设置字段
            //DataColumn myColumn1 = myDataTable.Columns.Add("viedoID", Type.GetType("System.Int64"));
            //myDataTable.Columns.Add("Time", Type.GetType("System.Int64"));
            //myDataTable.Columns.Add("picturePath", Type.GetType("System.String"));
            //DataRow myRow = myDataTable.NewRow();
            //    //重点在这里,对数据进行循环插入,具体你要插入什么数据,自己读取,之后放在DataSet里面
            //    myRow["viedoID"] = 0;
            //    myRow["time"] = 1;
            //    myRow["picturePath"] = "image/0/" + "1" + ".jpg";
            //   ds.Tables[0].Rows.Add(myRow);

            //ds.Tables["his"].Rows[0][0] = 29;

            //  NpgsqlDataAdapter myAdapter = new NpgsqlDataAdapter(mySQL, conn);
            //  NpgsqlCommandBuilder myCommendBuilder = new NpgsqlCommandBuilder(myAdapter);
            //更新
            //  myAdapter.Update(ds, "ais.ais_ship_dyna");
            conn.Close();
            return ds1;

        }
        public DataSet ExcelToDS(string Path)
        {
            string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties=Excel 8.0;";
            OleDbConnection conn = new OleDbConnection(strConn);

            conn.Open();
            string strExcel = "";
            OleDbDataAdapter myCommand = null;
            ds = null;
            strExcel = "select * from [chushi$]";
            myCommand = new OleDbDataAdapter(strExcel, strConn);
            ds = new DataSet();
            myCommand.Fill(ds, "table1");
            return ds;
        }
        public DataSet ExcelToDS1(string Path)
        {
            string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties=Excel 8.0;";
            OleDbConnection conn = new OleDbConnection(strConn);
            conn.Open();
            string strExcel = "";
            OleDbDataAdapter myCommand = null;
            ds1 = null;
            strExcel = "select * from [ais.ais_ship_dyna$]";
            myCommand = new OleDbDataAdapter(strExcel, strConn);
            ds1 = new DataSet();
            myCommand.Fill(ds1, "ais.ais_ship_dyna");
            return ds1;
        }
        #endregion
        #region//画点

        public void DrawLinePointF(PaintEventArgs e, PointF point1, PointF point2)
        {

    // Create pen.
    Pen blackPen = new Pen(Color.Black, 13);

    // Create points that define line.
    //PointF point1 = new PointF(100.0F, 100.0F);
    //PointF point2 = new PointF(500.0F, 100.0F);

    // Draw line to screen.
    e.Graphics.DrawLine(blackPen, point1, point2);
}
        #endregion
        #region 保存数据
        public void baocun(double course,double lat,double lon,double mmsi,DateTime postime,double speed)
        {
            String mySQL = "insert into ais.his(course,lat,lon,mmsi,postime,speed) values(" + course + ","+lat+","+lon+","+mmsi+",'"+postime+"',"+speed+") ";
            NpgsqlCommand cmd = new NpgsqlCommand(mySQL, conn);
            cmd.ExecuteNonQuery();
        }
        #endregion
            #region 直线
        private void tmDate_Tick_1(object sender, EventArgs e)
        {
            ds1 = PtToDS(PtPath);
            //String Path = "C:\\Users\\晓\\Desktop\\UKF滤波实验函数\\ais.xlsx";


            //ds1 = ExcelToDS1(Path);
            //FileStream f2 = File.Open(@"C:\Users\晓\Desktop\UKF滤波实验函数\f2.txt", FileMode.Append);
            //// 创建写入流

            //StreamWriter w2 = new StreamWriter(f2);

            DateTime dt = DateTime.Now;
            string date = dt.ToLongDateString();
            string ti = dt.ToLongTimeString();
           
            int i,shu, time_diff,pp;
            string mmid_tmp;
            string Time;
          double s;
            //真实目标过多便对所在目标的行数进行数据轮回
            for (int j = 0; j < mmid.Count; j++)
            {
                baocun(course[j, lieshu[j]],lat[j, lieshu[j]], lon[j, lieshu[j]], Convert.ToDouble(mmid[j]), Convert.ToDateTime(time[j, lieshu[j]]),speed[j,lieshu[j]] );
                int p = N ;
                if (zsgs[j]>= N)
                {
                   
                        lat[j, zxlieshu[j, 0]] = lat[j, zxlieshu[j, p]];
                        lon[j, zxlieshu[j,0]] = lon[j, zxlieshu[j, p]];
                        sdiff[j, zxlieshu[j, 0]] = sdiff[j, zxlieshu[j, p]];
                        time[j, zxlieshu[j, 0]] = time[j, zxlieshu[j, p]];
                        course[j, zxlieshu[j,0]] = course[j, zxlieshu[j, p]];
                        speed[j, zxlieshu[j, 0]] = speed[j, zxlieshu[j, p]];
                        zxlieshu[j, 0] = 0;
                       
                    //初始化目标所在行数的位置
                    zsgs[j] = 0;
                    lieshu[j] = 0;
                 
                }
            }
           // w1.WriteLine("MMSI" + "\t" + "纬度" + "\t" + "经度" + "\t" + "距离差" + "\t" + "时间戳" + "\t" + "速度" + "\t" + "航向");
            //所有已有的目标进行5秒的预测
            for (int j = 0; j < mmid.Count; j++)
            { lieshu[j]=lieshu[j] + 1;
                if ((lieshu[j] - 1) > 2)
                {
                    s = speed[j, lieshu[j] - 1] * 1852 / 3600 * 5+0.5*(speed[j,lieshu[j]-3]-speed[j, lieshu[j]-2])*5;//考虑加速度
                }
                else
                {
                    s = speed[j, lieshu[j] - 1] * 1852 / 3600 * 5;//还未考虑加速度
                }

                zhengjie.dadizhutizj(lat[j, lieshu[j]-1]*Math.PI/180, lon[j, lieshu[j]-1]*Math.PI/180, course[j, lieshu[j]-1]*Math.PI/180,s);
                lat[j, lieshu[j]] = zhengjie.B2*180/Math.PI;
                lon[j, lieshu[j] ]= zhengjie.L2*180/Math.PI;
                speed[j, lieshu[j]] = speed[j, lieshu[j] - 1];
                course[j,lieshu[j]]=course[j, lieshu[j] - 1];
                time[j,lieshu[j]]= Convert.ToString(Convert.ToDateTime(time[j, lieshu[j] - 1]).AddSeconds(5));
                sdiff[j, lieshu[j]] = 0;
                latdiff[j, lieshu[j]] = 0;
                londiff[j, lieshu[j]] = 0;
            }
            time_tmp = time[0, lieshu[0]];
            t.Text = "当前时间:\n" + time_tmp;
            //增加未知的目标
            for ( i = jishu; i < ds1.Tables["ais.ais_ship_dyna"].Rows.Count; i++)
            {
            Time = ds1.Tables["ais.ais_ship_dyna"].Rows[i][4].ToString();
            time_diff= Convert.ToDateTime(Time.Substring(0, 19)).Subtract(Convert.ToDateTime(time_tmp)).Seconds;
                if (time_diff <= 5)
                {
                     mmid_tmp = ds1.Tables["ais.ais_ship_dyna"].Rows[i][3].ToString();
                    pp = mmid.Count;
                    shu = mmidcomp(mmid_tmp);//是否是新目标,如果是返回新目标所在的索引,如果不是,预测的值用更新的值代替
                    if (shu == pp)
                    {
                        lat[shu, 0] = Convert.ToDouble(ds1.Tables["ais.ais_ship_dyna"].Rows[i][1].ToString());
                        lon[shu, 0] = Convert.ToDouble(ds1.Tables["ais.ais_ship_dyna"].Rows[i][2].ToString());
                        course[shu, 0] = Convert.ToDouble(ds1.Tables["ais.ais_ship_dyna"].Rows[i][0].ToString());
                        time[shu, 0] = ds1.Tables["ais.ais_ship_dyna"].Rows[i][4].ToString().Substring(0, 19);
                        speed[shu, 0] = Convert.ToDouble(ds1.Tables["ais.ais_ship_dyna"].Rows[i][5].ToString());
                        lieshu[shu] = 0;
                        zsgs[shu]++;
                        zxlieshu[shu, 0] = 0;
                    }
                    else
                    {
                       sdiff[shu, lieshu[shu]] = fanjie.dadizhutifj(lat[shu, lieshu[shu]] * Math.PI / 180, lon[shu, lieshu[shu]] * Math.PI / 180, Convert.ToDouble(ds1.Tables["ais.ais_ship_dyna"].Rows[i][1].ToString())*Math.PI/180, Convert.ToSingle(ds1.Tables["ais.ais_ship_dyna"].Rows[i][2].ToString()) * Math.PI / 180);
                        df = new DataSet();

                        latdiff[shu, lieshu[shu]] = lat[shu, lieshu[shu]] - Convert.ToDouble(ds1.Tables["ais.ais_ship_dyna"].Rows[i][1].ToString());
                        londiff[shu, lieshu[shu]] = lon[shu, lieshu[shu]] - Convert.ToDouble(ds1.Tables["ais.ais_ship_dyna"].Rows[i][2].ToString());
                        lat[shu, lieshu[shu]] = Convert.ToDouble(ds1.Tables["ais.ais_ship_dyna"].Rows[i][1].ToString());
                        lon[shu, lieshu[shu]] = Convert.ToDouble(ds1.Tables["ais.ais_ship_dyna"].Rows[i][2].ToString());
                        speed[shu, lieshu[shu]] = Convert.ToDouble(ds1.Tables["ais.ais_ship_dyna"].Rows[i][5].ToString());
                        course[shu, lieshu[shu]] = Convert.ToDouble(ds1.Tables["ais.ais_ship_dyna"].Rows[i][0].ToString());
                        time[shu, lieshu[shu]] = ds1.Tables["ais.ais_ship_dyna"].Rows[i][4].ToString().Substring(0, 19);
                        xianshi.Text = latdiff[shu, lieshu[shu]].ToString();
                        zsgs[shu]++;
                        zxlieshu[shu, zsgs[shu]] = lieshu[shu];
                        // 
                    }
                 
                }
                else
                {
                    jishu = i;
                  
                    // 关闭写入流
                 
                    break;
                }

                //for (int j = 0; j < mmid.Count; j++)
                //{
                   
                //    w2.WriteLine(mmid[j] + "\t" + (lat[j, lieshu[j]]).ToString() + "\t" + (lon[j, lieshu[j]]).ToString() + "\t" + (sdiff[j, lieshu[j]]).ToString() + "\t" + time[j, lieshu[j]] + "\t" + speed[j, lieshu[j]]
                //        +"\t"+course[j,lieshu[j]]);

                //    w2.Flush();

                //}
               


            }
            //w2.Close();
            //f2.Close();
            // 关闭文件
            /**/ /**/
                 //int ts = Convert.ToDateTime(time[4, 0]).Subtract(Convert.ToDateTime(time[2, 0])).Seconds;

        }
        #endregion

        #region//比较mmid
        public int mmidcomp(string m)
        { int j;
            int k=0;

            for (j = 0; j < mmid.Count; j++)
            {
                if (String.Equals(m, mmid[j]))
                { k=1; break; }
              
            }
            if (k==1)
            { return j; }
            else
            { mmid.Add(m); return mmid.Count-1; } 

        }
        #endregion
        private void xianshi_Click(object sender, EventArgs e)
        {

        }
        #region 最小二乘法
        private void zx_Tick(object sender, EventArgs e)
        {
            ds1 = PtToDS(PtPath);
            // FileStream f1 = File.Open(@"C:\Users\晓\Desktop\UKF滤波实验函数\f1.txt", FileMode.Append);
            //// 创建写入流
            // // ds1 = ExcelToDS1(Path);
            // StreamWriter w1 = new StreamWriter(f1);
            DateTime dt = DateTime.Now;
            string date = dt.ToLongDateString();
            string ti = dt.ToLongTimeString();
            t.Text = "当前时间:\n" + time_tmp;
            int i, shu, time_diff, pp;
            string mmid_tmp;
            string Time;
            double s;
            double[] n=new double[6];
            double[] T = new double[6];;
            double[] xishu = new double[4];
            //真实目标过多便对所在目标的行数进行数据轮回
            for (int j = 1; j < mmid.Count; j++)
            {
                int p = N-5;

                if (zsgs[j]>= N)
                {
                    for (i = N; i >= N-5; i--)
                    {
                        lat[j, zxlieshu[j, zsgs[j] - i]] = lat[j, zxlieshu[j,p]];
                        lon[j, zxlieshu[j, zsgs[j] - i]] = lon[j, zxlieshu[j, p]];
                       sdiff[j, zxlieshu[j, zsgs[j] - i]] = sdiff[j, zxlieshu[j, p]];
                        time[j, zxlieshu[j, zsgs[j] - i]] = time[j, zxlieshu[j, p]];
                        course[j, zxlieshu[j, zsgs[j] - i]] = course[j, zxlieshu[j, p]];
                        speed[j, zxlieshu[j, zsgs[j] - i]] = speed[j, zxlieshu[j, p]];
                        zxlieshu[j, zsgs[j]-i] = p-N+5;
                        p++;
                    }

                    zsgs[j] = 6;
                    lieshu[j] = 6;
                }
                //初始化目标所在行数的位置
               
            }
           // w1.WriteLine("MMSI" + "\t" + "纬度" + "\t" + "经度" + "\t" + "距离差" + "\t" + "时间戳" + "\t" + "速度" + "\t" + "航向");
            //所有已有的目标进行5秒的预测
            for (int j = 0; j < mmid.Count; j++)
            {
                lieshu[j] = lieshu[j] + 1;
                sdiff[j, lieshu[j]] = 0;
                latdiff[j, lieshu[j]] = 0;
                londiff[j, lieshu[j]] = 0;
                if ((lieshu[j] - 1)>=6)
                {
                    if (zsgs[j] >= 5&&speed[j, zsgs[j] - 1]>0&& speed[j, zsgs[j] - 2]>0 && speed[j, zsgs[j] - 3] > 0 && speed[j, zsgs[j] - 4] > 0 && speed[j, zsgs[j] - 2] > 0&& speed[j, zsgs[j] - 5] > 0)
                    {
                        n[0] = lat[j, zxlieshu[j, zsgs[j] -5] ];
                        n[1] = lat[j, zxlieshu[j, zsgs[j] - 4] ];
                        n[2] = lat[j, zxlieshu[j, zsgs[j] - 3]];
                        n[3] = lat[j, zxlieshu[j, zsgs[j] - 2]];
                        T[0] = lon[j, zxlieshu[j, zsgs[j] -5]];
                        T[1] = lon[j, zxlieshu[j, zsgs[j] - 4]];
                        T[2] = lon[j, zxlieshu[j, zsgs[j] - 3]];
                        T[3] = lon[j, zxlieshu[j, zsgs[j] - 2]];
                        n[4] = lat[j, zxlieshu[j, zsgs[j] - 1]];
                        n[5] = lat[j, zxlieshu[j, zsgs[j] ]];

                        T[4] = lon[j, zxlieshu[j, zsgs[j] -1]];
                        T[5] = lon[j, zxlieshu[j, zsgs[j] ]];
                        xishu = MultiLine(n, T, 6, 3);
                        double x, y;

                        s = speed[j, lieshu[j] - 1] * 1852 / 3600 * 5 + 0.5 * (speed[j, lieshu[j] - 3] - speed[j, lieshu[j] - 2]) * 1852 / 3600 * 5;//还未考虑加速度
                        zhengjie.dadizhutizj(lat[j, lieshu[j] - 1] * Math.PI / 180, lon[j, lieshu[j] - 1] * Math.PI / 180, course[j, lieshu[j] - 1] * Math.PI / 180, s);
                        lat[j, lieshu[j]] = zhengjie.B2 * 180 / Math.PI;
                        lon[j, lieshu[j]] = zhengjie.L2 * 180 / Math.PI;
                        jwzh.jingwei(zhengjie.B2 * 180 / Math.PI, zhengjie.L2 * 180 / Math.PI);
                        y = lat[j, lieshu[j]];
                        //  y = jwzh.y1;
                        x = xishu[0] + xishu[1] * y + xishu[2] * y * y + xishu[3] * y * y * y;
                        //jwzh.moka(y,x);
                        //lat[j, lieshu[j]] = jwzh.B1;
                        //lon[j, lieshu[j]] = jwzh.L1;

                        lon[j, lieshu[j]] = x;
                        speed[j, lieshu[j]] = speed[j, lieshu[j] - 1];
                        course[j, lieshu[j]] = course[j, lieshu[j] - 1];
                        time[j, lieshu[j]] = Convert.ToString(Convert.ToDateTime(time[j, lieshu[j] - 1]).AddSeconds(5));
                        zhenshi[j, lieshu[j]] = 0;

                    }
                     else
                    {
                        s = speed[j, lieshu[j] - 1] * 1852 / 3600 * 5;//还未考虑加速度
                        zhengjie.dadizhutizj(lat[j, lieshu[j] - 1] * Math.PI / 180, lon[j, lieshu[j] - 1] * Math.PI / 180, course[j, lieshu[j] - 1] * Math.PI / 180, s);
                        lat[j, lieshu[j]] = zhengjie.B2 * 180 / Math.PI;
                        lon[j, lieshu[j]] = zhengjie.L2 * 180 / Math.PI;
                        speed[j, lieshu[j]] = speed[j, lieshu[j] - 1];
                        course[j, lieshu[j]] = course[j, lieshu[j] - 1];
                        time[j, lieshu[j]] = Convert.ToString(Convert.ToDateTime(time[j, lieshu[j] - 1]).AddSeconds(5));
                        zhenshi[j, lieshu[j]] = 0;
                    }
                }
                else
                {
                    s = speed[j, lieshu[j] - 1] * 1852 / 3600 * 5;//还未考虑加速度
                    zhengjie.dadizhutizj(lat[j, lieshu[j] - 1] * Math.PI / 180, lon[j, lieshu[j] - 1] * Math.PI / 180, course[j, lieshu[j] - 1] * Math.PI / 180, s);
                    lat[j, lieshu[j]] = zhengjie.B2 * 180 / Math.PI;
                    lon[j, lieshu[j]] = zhengjie.L2 * 180 / Math.PI;
                    speed[j, lieshu[j]] = speed[j, lieshu[j] - 1];
                    course[j, lieshu[j]] = course[j, lieshu[j] - 1];
                    time[j, lieshu[j]] = Convert.ToString(Convert.ToDateTime(time[j, lieshu[j] - 1]).AddSeconds(5));
                    zhenshi[j, lieshu[j]] = 0;
                }
            }
               
            time_tmp = time[0, lieshu[0]];
      
         
        }
        #endregion
        private void zuixiao_Click(object sender, EventArgs e)
        {
            zx.Enabled = true;
        }
        #region//粒子预测
        private void lizi_Tick(object sender, EventArgs e)
        {
            ds1 = PtToDS(PtPath);

            //String Path = "C:\\Users\\晓\\Desktop\\UKF滤波实验函数\\ais.xlsx";


            // ds1 = ExcelToDS1(Path);
            //FileStream f1 = File.Open(@"C:\Users\晓\Desktop\UKF滤波实验函数\f1.txt", FileMode.Append);
            //// 创建写入流

            //StreamWriter w1 = new StreamWriter(f1);
            DateTime dt = DateTime.Now;
            string date = dt.ToLongDateString();
            string ti = dt.ToLongTimeString();
            t.Text = "当前时间:\n" + time_tmp;
            int i, shu, time_diff, pp;
            string mmid_tmp;
            string Time;
            double s;
            //真实目标过多便对所在目标的行数进行数据轮回
            for (int j = 0; j < mmid.Count; j++)
            {
                int p = N;
                if (zsgs[j] == N)
                {

                    lat[j, zxlieshu[j, 0]] = lat[j, zxlieshu[j, p]];
                    lon[j, zxlieshu[j, 0]] = lon[j, zxlieshu[j, p]];
                    sdiff[j, zxlieshu[j, 0]] = sdiff[j, zxlieshu[j, p]];
                    time[j, zxlieshu[j, 0]] = time[j, zxlieshu[j, p]];
                    course[j, zxlieshu[j, 0]] = course[j, zxlieshu[j, p]];
                    speed[j, zxlieshu[j, 0]] = speed[j, zxlieshu[j, p]];
                    zxlieshu[j, 0] = 0;

                    //初始化目标所在行数的位置
                    zsgs[j] = 0;
                    lieshu[j] = 0;
                }
            }
           // w1.WriteLine("MMSI" + "\t" + "纬度" + "\t" + "经度" + "\t" + "距离差" + "\t" + "时间戳" + "\t" + "速度" + "\t" + "航向");
            //所有已有的目标进行5秒的预测
            for (int j = 0; j < mmid.Count; j++)
            {
                lieshu[j] = lieshu[j] + 1;
                if ((lieshu[j] - 1) > 2)
                {
                    s = speed[j, lieshu[j] - 1] * 1852 / 3600 * 5;// +0.5*( speed[j, lieshu[j] - 2]- speed[j, lieshu[j] - 3])*1852/3600*5;//考虑加速度

                }
                else
                {
                    s = speed[j, lieshu[j] - 1] * 1852 / 3600 * 5;//还未考虑加速度
                   
                }
                jwzh.jingwei(lat[j, lieshu[j] - 1], lon[j, lieshu[j] - 1]);
                lizilb.lizilvbo(jwzh.y1, jwzh.x1, s, course[j, lieshu[j] - 1]);
                jwzh.moka(lizilb.PCenter[0, 1], lizilb.PCenter[1, 1]);
                lat[j, lieshu[j]] = jwzh.B1;
                lon[j, lieshu[j]] = jwzh.L1;
                speed[j, lieshu[j]] = speed[j, lieshu[j] - 1];
                course[j, lieshu[j]] = course[j, lieshu[j] - 1];
                time[j, lieshu[j]] = Convert.ToString(Convert.ToDateTime(time[j, lieshu[j] - 1]).AddSeconds(5));
                sdiff[j, lieshu[j]] = 0;
                latdiff[j, lieshu[j]] = 0;
                londiff[j, lieshu[j]] = 0;
            }
            time_tmp = time[0, lieshu[0]];
          
           }
    
    }
}
需要完整代码和解决方案加微信lyj1575304183,有偿服务,无意者勿扰。

发布了39 篇原创文章 · 获赞 16 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_34763204/article/details/85113846