高手救命!! 急!!!100分

whzhong1 2006-10-27 02:09:43
我是写程序的新手,刚到公司就让我用asp.net,Web Services和GDI+做东西。可是我原来都没有碰过这些方面的东西,只好重头学起,边学边做。公司让做3个功能,经过1个多星期的努力我用Web Services和asp.net实现了前两个功能,可是第3个是要用Web Services和GDI+做图 我现在把Web Services写好了,可是GDI+一点都不知道做不了啊。明天就必须交上去,直到现在(2点了已经 我哭....)我才在家里刚把第三个功能的Web Services写完,实在没有办法只好在这里求助于各位了 如果哪位有这样的程序请发一份上来 多谢了!!! 有高手能帮忙做一下那就更是感激不尽!! 实在是因为逼的太紧,请大家多多帮忙!!! 对与我来说是个难题,也许对于您来说可能就觉得不值一提,希望大家能帮忙我。也许你一会的工夫做的就要比我冥思苦想N久都来的好的多!!
我要实现的功能是利用Web Services里边的返回的一个数组来做纵坐标,时间间隔ts做横坐标,原点是传入的参数BeginTime 然后根据数组里边的值在坐标轴上显示出来并用线连接起来 (就是一个船舶在不同时刻的坐标图,也就相当于是在一段时间内的航线图)
我把我写的 Web Services发一下请各位帮忙看一下 看该怎么实现功能
[WebMethod]
public float[] RouteDiagram(string ShipID, DateTime BeginTime, DateTime EndTime, int IntervalHour, int IntervalMinute, int IntervalSecond)
{
//存放求出坐标的经度
float longitude;
//存放求出坐标的纬度
float latitude;
//设置连接数据库的字符串
string connectionString = "workstation id=localhost;database=whzhong;UserID=sa;Password=";
SqlConnection str = new SqlConnection(connectionString);
string queryString="select LONGITUDE,LATITUDE,OPERATIONTIME from TELEGRAPHNO1 where MMSI='" + ShipID + "' and OPERATIONTIME between'" + BeginTime + "' and '" + EndTime + "' union select LONGITUDE,LATITUDE,OPERATIONTIME from HISTORYTELENO1 where MMSI='" + ShipID + "' and OPERATIONTIME between'" + BeginTime + "' and '" + EndTime + "' order by OPERATIONTIME ";
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand(queryString, str);
//关闭连接
str.Close();
//填充数据集
DataSet ds = new DataSet();
da.Fill(ds);
DataTable dt = ds.Tables[0];
//根据传入的参数进行时间间隔的设置
TimeSpan ts = new TimeSpan(IntervalHour, IntervalMinute, IntervalSecond);
//计算开始时间和截止时间之间的时间差,单位为秒 并把它赋给变量IntervalFull
boat bt = new boat();
float IntervalFull =Convert.ToSingle(bt.DateDiff(EndTime, BeginTime));
//把间隔的时间换算为以秒为单位
float IntervalPart = System.Convert.ToSingle((IntervalHour * 60 * 60 + IntervalMinute * 60 + IntervalSecond));
//计算开始时间和截止时间之间有多少时间间隔
int IntervalNum = Convert.ToInt16(IntervalFull / IntervalPart);
//用于存放程序输出坐标的经纬度
float[] coordinate = new float[2*IntervalNum];
//当i小于结束时间减去开始时间的时间间隔数时进行循环
for (int i = 0; i < IntervalNum; i++)
{
//开始时间自动增加间隔时间
BeginTime = BeginTime.Add(ts);
int dtrow = dt.Rows.Count;
for(int j=0; j<dtrow;j++)
{
if( System.Convert.ToDateTime(dt.Rows[j][2].ToString().Trim()) == BeginTime )
{
longitude= System.Convert.ToSingle(dt.Rows[j][0].ToString().Trim());
latitude= System.Convert.ToSingle(dt.Rows[j][1].ToString().Trim());
break;
}
else if(System.Convert.ToDateTime(dt.Rows[j][2].ToString().Trim()) > BeginTime )
{
if(j==0)
{
//欠缺代码 明天到公司补上
}
else
{
float dt1longitude= System.Convert.ToSingle(dt.Rows[j-1][0].ToString().Trim());
float dt1latitude = System.Convert.ToSingle(dt.Rows[j-1][1].ToString().Trim());
DateTime dt1time=System.Convert.ToDateTime(dt.Rows[j-1][2].ToString().Trim());
float dt2longitude= System.Convert.ToSingle(dt.Rows[j][0].ToString().Trim());
float dt2latitude = System.Convert.ToSingle(dt.Rows[j][1].ToString().Trim());
DateTime dt2time=System.Convert.ToDateTime(dt.Rows[j][2].ToString().Trim());
float time1 =Convert.ToSingle(bt.DateDiff(dt1time, dt2time));
float time2 =Convert.ToSingle(bt.DateDiff(BeginTime,dt2time));
longitude = (dt2longitude * time1 + dt1longitude * time2 ) / (time1 + time2);
latitude = (dt2latitude * time1 + dt1latitude * time2) / (time1 + time2);
coordinate[2 * i] = longitude;
coordinate[2 * i + 1] = latitude;
break;
}
}
}
}
return coordinate;
}
中间调用的一个计算时间差的函数:
public float DateDiff(DateTime DateTime1, DateTime DateTime2)
{
float dateDiff = 0;
TimeSpan ts1 = new TimeSpan(DateTime1.Ticks);
TimeSpan ts2 = new TimeSpan(DateTime2.Ticks);
TimeSpan ts = ts1.Subtract(ts2).Duration();
int c = Int32.Parse(ts.Days.ToString());
int a = Int32.Parse(ts.Hours.ToString());
int d = Int32.Parse(ts.Seconds.ToString());
int b = Int32.Parse(ts.Minutes.ToString());
dateDiff = Convert.ToSingle(c * 86400 + a * 3600 + b * 60 + d);
return dateDiff;
}
请大家帮忙 感激不尽!!!!
新手分不多 100分表示下意思 请各位见谅!

诚心求教 如果能帮忙解决有机会的话定当面感谢!!(本人现居深圳市罗湖区清水河 手机:13424349507 鄙姓王)
...全文
209 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
whzhong1 2006-10-28
  • 打赏
  • 举报
回复
bestyangfeng()
请问你的QQ号码是多少啊?因为我是刚开始做编程,绘图也是刚接触,所以可能会有很多不明白的地方方便的话可以在QQ上向你请教问题 我的是121034051
whzhong1 2006-10-27
  • 打赏
  • 举报
回复
下班太晚去买书买不到啊

在图书馆里有管GDI+的都被人借出去了

请高手帮忙!!
实在是时间太紧!!!

有写过类似GDI+程序的帮忙发一份看下 
感激不尽!!!!!
yurongsheng 2006-10-27
  • 打赏
  • 举报
回复
找本C#GDI绘图的书看看,
bestyangfeng 2006-10-27
  • 打赏
  • 举报
回复
绝对好使:),我正在做图形方面的开发,欢迎交流。
whzhong1 2006-10-27
  • 打赏
  • 举报
回复
正在参考

谢谢楼上!

晚一点我会看代码的含金量给分的 ^-^
whzhong1 2006-10-27
  • 打赏
  • 举报
回复
熬不住了 明天还要上班 希望各位多多帮忙 谢谢!!!!
bestyangfeng 2006-10-27
  • 打赏
  • 举报
回复
绘制坐标系的
bestyangfeng 2006-10-27
  • 打赏
  • 举报
回复
private void DrawAxes(Graphics g, bool flipY)
{
//Hold the old transform of g
Matrix mm = g.Transform;

//Clear the transform of g
g.Transform = new Matrix();
//Create a red pen
Pen p = new Pen(Brushes.Red, 1);

Matrix m = new Matrix();

//move the origin to 200,200
m.Translate(200, 200);
//apply the transformation
g.Transform = m;

//draw the axes
g.DrawLine(p, -200, 0, 200, 0); //horizontal
g.DrawLine(p, 0, -200, 0, 200); //vetical


for (int i = -150; i <= 150; i += 50)
{
//calibrate the vertical axis with horizontal text
if (flipY)
g.DrawString(i.ToString(), this.Font, Brushes.Red, 5, -i);
else
g.DrawString(i.ToString(), this.Font, Brushes.Red, 5, i);

//tick the vertical axis with horizontal ticks
g.DrawLine(p, -5, i, 5, i);
//tick the horizontal axis with vertical ticks
g.DrawLine(p, i, -5, i, 5);

}

//prepend the 90 deg clockwise rotation
//so now m would be a matix for a 90 deg clockwise rotation
//followed by translation by 200,200
m.Rotate(90, MatrixOrder.Prepend);

//override with the new transformation
g.Transform = m;

for (int i = -150; i <= 150; i += 50)
{
//calibrate the horizontal axis with vertical text
//|
//|
//|100
//|
//|
//after the rotation would be
//
//_____________
// _
// O
// O
//
g.DrawString(i.ToString(), this.Font, Brushes.Red, 5, -i);
}

//Restore the old transform of g
g.Transform = mm;

}

4,816

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧