在代码中怎么倒入公式 以及GDI+的应用(是坐标问题)高手指点下 谢谢!!

whzhong1 2006-10-25 03:54:14
用到的数据库表: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


...全文
150 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
whzhong1 2006-10-25
  • 打赏
  • 举报
回复
楼上的:你发的那个网址是处理图片的,说实话我看不怎么明白
    我是想通过传入一个数组集 然后把数组对应的点在坐标轴上显示并连接起来
    就是实现一个折线图来的  主要怎么传入数据和连线我都不明白
    关于GDI+最基本的东西我都不懂的 直接让我看那个有点过犹不及啊
ybcsqq 2006-10-25
  • 打赏
  • 举报
回复
GDI+ 创建图形图像
GDI+ 绘制文本
GDI+ 绘制线条和形状
参数化绘图程序等
在MSDN上都有,我就是在那上面入门的
要书的话有本(GDI+图形程序设计)不错, [美]MAHESH CHAND著
Eddie005 2006-10-25
  • 打赏
  • 举报
回复
GDI+参考:
http://www.cnblogs.com/lovecherry/archive/2006/05/17/402541.html
whzhong1 2006-10-25
  • 打赏
  • 举报
回复
在线等  有方法可以随时告诉我  
万分感激!!!
相关推荐
发帖
.NET社区

6.1w+

社区成员

.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
帖子事件
创建了帖子
2006-10-25 03:54
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。