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,有偿服务,无意者勿扰。