在代码中怎么倒入公式 以及GDI+的应用(是坐标问题)高手指点下 谢谢!!
用到的数据库表:TELEGRAPHNO1
列:编号(MMSI),经度(LONGITUDE),纬度(LATITUDE),日期(OPERATIONTIME)
传入的参数:编号ShipID,开始时间BeginTime,截止时间EndTime,间隔的小时数IntervalHour,间隔的分钟数IntervalMinute,间隔的秒IntervalSecond
目的:当传入一组参数时,根据开始时间,截止时间和时间间隔来取出离开始时间最近的两个点的坐标 然后根据比例关系计算对应编号的船舶在开始时间这一个点上的坐标 然后用GDI+做一个曲线图把这些点连起来作为船舶航线图
遇到的问题:1.不知道怎么定义计算公式,以及怎么把计算公式放到代码里边
2.不会用GDI+啊 从来没有接触过 想让高人给指点下怎么才能实现那个航线图
说明:数据库为oracle 我是在vs2005里边做的Web Services
发现我写的程序有问题并告诉我改进方法的或者能够解决我的问题的我都会给分
因为是新手 分不多 所以解决问题的话会送50分 如果发现我写的代码有问题并提出解决方法的看情况给分了
其实主要目的是想解决掉问题 希望知道的朋友帮忙解决一下 万分感激!!
我写的部分代码:
[WebMethod]
public float[] RouteDiagram(string ShipID, string BeginTime, string EndTime, int IntervalHour, int IntervalMinute, int IntervalSecond)
{
DataSet ds = new DataSet();
DataSet ds1 = new DataSet();
DataSet ds2 = new DataSet();
DataTable dt = new DataTable();
DataTable dt1=new DataTable();
DataTable dt2=new DataTable();
//设置连接数据库的字符串
string connectionString = "User ID=boat;Password=boat;Data Source=WHZHONG";
//根据传入的参数进行时间间隔的设置
TimeSpan ts = new TimeSpan(IntervalHour,IntervalMinute,IntervalSecond);
//计算开始时间和截止时间之间的时间差,单位为秒 并把它赋给变量IntervalFull
string Interval = "select 86400*( to_date('" + EndTime + "','yyyy-MM-dd hh24:mi:ss')-to_date(' " + BeginTime + " ','yyyy-MM-dd hh24:mi:ss')) from dual";
OracleConnection oracleconn = new OracleConnection(connectionString);
oracleconn.Open();
OracleDataAdapter da = new OracleDataAdapter();
da.SelectCommand = new OracleCommand(Interval, oracleconn);
oracleconn.Close();
da.Fill(ds);
dt = ds.Tables[0];
float IntervalFull = System.Convert.ToSingle( dt.Rows[0][0].ToString().Trim());
//把间隔的时间换算为以秒为单位
float IntervalPart = System.Convert.ToSingle( (IntervalHour * 60 * 60 + IntervalMinute * 60 + IntervalSecond));
//计算开始时间和截止时间之间有多少时间间隔
float IntervalNum =(IntervalFull/IntervalPart);
//当i小于结束时间减去开始时间的时间间隔数时进行循环
for(int i=0; i< IntervalNum; i++)
{
//开始时间自动增加间隔时间
BeginTime = BeginTime.Add(ts);
string str = "MMSI=ShipID";
//取出在表TELEGRAPHNO1中当时间在开始时间和截止时间之间时按照时间列OPERATIONTIME升序排序的第一行中的经纬度值
string queryString1 = "select * from (select LONGITUDE,LATITUDE,OPERATIONTIME from TELEGRAPHNO1 where '" + str + "' and to_char(OPERATIONTIME,'yyyy-MM-dd HH24-mi-ss') between BeginTime and EndTime order by OPERATIONTIME ) where rownum=1";
//取出在表TELEGRAPHNO1中当时间在开始时间之前时按照时间列OPERATIONTIME降序排序的第一行中的经纬度值
string queryString2 = "select * from (select LONGITUDE,LATITUDE,OPERATIONTIME from TELEGRAPHNO1 where '" + str + "' and to_char(OPERATIONTIME,'yyyy-MM-dd HH24-mi-ss') < BeginTime order by OPERATIONTIME desc ) where rownum=1";
oracleconn = new OracleConnection(connectionString);
//打开连接
oracleconn.Open();
OracleDataAdapter da1 = new OracleDataAdapter();
da1.SelectCommand = new OracleCommand(queryString1, oracleconn);
//关闭连接
oracleconn.Close();
//填充数据集
da1.Fill(ds1);
dt1 = ds1.Tables[0];
oracleconn = new OracleConnection(connectionString);
//打开连接
oracleconn.Open();
OracleDataAdapter da2 = new OracleDataAdapter();
da2.SelectCommand = new OracleCommand(queryString2, oracleconn);
//关闭连接
oracleconn.Close();
//填充数据集
da2.Fill(ds2);
dt2 = ds2.Tables[0];
//把取出的数据赋给变量
float dt1longitude = System.Convert.ToSingle( dt1.Rows[i][0].ToString().Trim());
float dt1latitude = System.Convert.ToSingle( dt1.Rows[i][1].ToString().Trim());
float dt2longitude = System.Convert.ToSingle( dt2.Rows[i][0].ToString().Trim());
float dt2latitude = System.Convert.ToSingle( dt2.Rows[i][1].ToString().Trim());
DateTime dt1time = Convert.ToDateTime(dt1.Rows[i][2].ToString().Trim());
DateTime dt2time = Convert.ToDateTime(dt2.Rows[i][2].ToString().Trim());
}
写到这里我写不下去了 请高手指点
注:float longitude (求出的经度) float latitude(求出的纬度)
公式: ((longitude - dt1longitude) * (longitude - dt1longitude) + (latitude - dt1latitude) * (latitude - dt1latitude)) / ((dt2longitude - longitude) * (dt2longitude - longitude) + (dt2latitude - latitude) * (dt2latitude - latitude)) == ((BeginTime - dt1time) * (BeginTime - dt1time)) / ((dt2time - BeginTime) * (dt2time - BeginTime));
((longitude - dt1longitude) * (longitude - dt1longitude) + (latitude - dt1latitude) * (latitude - dt1latitude)) / ((dt2longitude - dt1longitude) * (dt2longitude - dt1longitude) + (dt2latitude - dt1latitude) * (dt2latitude - dt1latitude)) == ((BeginTime - dt1time) * (BeginTime - dt1time)) / ((dt2time - dt1time) * (dt2time - dt1time));
公式是根据比例算的 x,y表示坐标 是y轴 t表示时间 是x轴 比如说有点(x1,y1,t1),(x,y,t),(x2,y2,t2)已知x1,x2,y1,y2,t1,t2求x,y 有2个等式:
((x-x1)(x-x1)+(y-y1)(y-y1)) / ((x2-x)(x2-x)+(y2-y)(y2-y)) = (t-t1)(t-t1) / (t2-t)(t2-t)
((x-x1)(x-x1)+(y-y1)(y-y1)) /((x2-x1)(x2-x1)+(y2-y1)(y2-y1)) = (t-t1)(t-t1) / (t2-t1)(t2-t1)
遇到的问题:1.不知道怎么定义计算公式,以及怎么把计算公式放到代码里边
2.不会用GDI+啊 从来没有接触过 想让高人给指点下怎么才能实现那个航线图
说明:数据库为oracle 我是在vs2005里边做的Web Services