private void cmbWind_SelectedIndexChanged(object sender, EventArgs e)
        {
            gPath.DrawImage((Bitmap)bmpWind.Clone(), 0, 0);
            System.Xml.XmlDocument xmlDoc;
            System.Xml.XmlNodeList xmlnl;            xmlDoc = ReadXml(fileInfo[cmbWind.SelectedIndex]);            xmlnl = xmlDoc.GetElementsByTagName("TFLJ");
            points = new Point[xmlnl.Count];
            int i = 0;
            foreach (XmlElement xmle in xmlnl)
            {
                points[i].X = (int)(((double.Parse(xmle["EASTLONG"].InnerText.ToString())) - 105.0) * tX);
                points[i].Y = (int)(215.0 - ((double.Parse(xmle["NORTHLAT"].InnerText.ToString())) * tY));
                i++;
            }            gPath.DrawLines(new Pen(Color.Red, 1), points);
            foreach (Point p in points)
            {
                gPath.DrawEllipse(new Pen(Color.Blue, 1), new Rectangle(p.X - 1, p.Y - 1, 2, 2));
            }            xmlnl = xmlDoc.GetElementsByTagName("TFXX_x0009_");
            int R;
            foreach (XmlElement xmle in xmlnl)
            {
                lstPathDesc.Items.Clear();
                lstPathDesc.Items.Add(xmle["TPTIME"].InnerText.Remove(xmle["TPTIME"].InnerText.IndexOf("T"),
                                      xmle["TPTIME"].InnerText.Length - xmle["TPTIME"].InnerText.IndexOf("T")));
                lstPathDesc.Items.Add("东经" + xmle["NORTHLAT"].InnerText);
                lstPathDesc.Items.Add("北纬" + xmle["EASTLONG"].InnerText);
                lstPathDesc.Items.Add("气压" + xmle["CENAIRPRE"].InnerText);
                lstPathDesc.Items.Add("风速" + xmle["MAXSPEED"].InnerText);
                R = (int)(double.Parse(xmle["RADIISIX"].InnerText.ToString()) / 5.5);
                gPath.DrawEllipse(new Pen(Color.Red, 1),
                                  new Rectangle((int)(((double.Parse(xmle["EASTLONG"].InnerText.ToString())) - 105.0) * tX) - R / 2,
                                                (int)(215.0 - ((double.Parse(xmle["NORTHLAT"].InnerText.ToString()))) * tY) - R / 2,
                                                 R, R)
                                 );
            }
            picWind.Refresh();        }

解决方案 »

  1.   

    看起来不是很难懂,不过你这里有些东西是干嘛的没阐述清楚,比如cmbWind,lstPathDesc这些控件都干嘛的?
      

  2.   

    各位大大~~控件先不管了~~主要是语法还有含义不大懂
    cmbWind_SelectedIndexChanged
    是读取本地WIND文件的~
      

  3.   

    这应该是个地图的部分代码吧,,从xml中读取坐标点,指示出台风(猜的)的移动方向
    用gdi+实现画图吧。。没什么复杂的 哪看不懂了?
      

  4.   

    private void cmbWind_SelectedIndexChanged(object sender, EventArgs e)
            {
                gPath.DrawImage((Bitmap)bmpWind.Clone(), 0, 0);//GDI+画图
                System.Xml.XmlDocument xmlDoc;
                System.Xml.XmlNodeList xmlnl;            xmlDoc = ReadXml(fileInfo[cmbWind.SelectedIndex]);//载入xml文件            xmlnl = xmlDoc.GetElementsByTagName("TFLJ");//获取xml节点
                points = new Point[xmlnl.Count]; //定义坐标集
                int i = 0;
                foreach (XmlElement xmle in xmlnl)//将通过xml节点的值实例化坐标集
                {
                    points[i].X = (int)(((double.Parse(xmle["EASTLONG"].InnerText.ToString())) - 105.0) * tX);
                    points[i].Y = (int)(215.0 - ((double.Parse(xmle["NORTHLAT"].InnerText.ToString())) * tY));
                    i++;
                }            gPath.DrawLines(new Pen(Color.Red, 1), points);//将坐标点连起来
                foreach (Point p in points)//在坐标点上画2×2大小的方形
                {
                    gPath.DrawEllipse(new Pen(Color.Blue, 1), new Rectangle(p.X - 1, p.Y - 1, 2, 2));
                }            xmlnl = xmlDoc.GetElementsByTagName("TFXX_x0009_");
                int R;
                foreach (XmlElement xmle in xmlnl)//通过xml文件画出“东经”"北纬"等相应的值
                {
                    lstPathDesc.Items.Clear();
                    lstPathDesc.Items.Add(xmle["TPTIME"].InnerText.Remove(xmle["TPTIME"].InnerText.IndexOf("T"),
                                          xmle["TPTIME"].InnerText.Length - xmle["TPTIME"].InnerText.IndexOf("T")));
                    lstPathDesc.Items.Add("东经" + xmle["NORTHLAT"].InnerText);
                    lstPathDesc.Items.Add("北纬" + xmle["EASTLONG"].InnerText);
                    lstPathDesc.Items.Add("气压" + xmle["CENAIRPRE"].InnerText);
                    lstPathDesc.Items.Add("风速" + xmle["MAXSPEED"].InnerText);
                    R = (int)(double.Parse(xmle["RADIISIX"].InnerText.ToString()) / 5.5);
                    gPath.DrawEllipse(new Pen(Color.Red, 1),
                                      new Rectangle((int)(((double.Parse(xmle["EASTLONG"].InnerText.ToString())) - 105.0) * tX) - R / 2,
                                                    (int)(215.0 - ((double.Parse(xmle["NORTHLAT"].InnerText.ToString()))) * tY) - R / 2,
                                                     R, R)
                                     );
                }
                picWind.Refresh();        }
      

  5.   

    private void cmbWind_SelectedIndexChanged(object sender, EventArgs e)
    {
    //通过路径获得背景图片并将它显示
    gPath.DrawImage((Bitmap)bmpWind.Clone(), 0, 0);
    //实例化一个xml文档
    System.Xml.XmlDocument xmlDoc;
    //实例化一个节点集合
    System.Xml.XmlNodeList xmlnl;
    //读取xml文件
    xmlDoc = ReadXml(fileInfo[cmbWind.SelectedIndex]);
    //获得子元素列表
    xmlnl = xmlDoc.GetElementsByTagName("TFLJ");
    //获得坐标点的个数
    points = new Point[xmlnl.Count];

    int i = 0;
    //通过循环得到各个点的坐标
    foreach (XmlElement xmle in xmlnl)
    {

    points[i].X = (int)(((double.Parse(xmle["EASTLONG"].InnerText.ToString())) - 105.0) * tX);

    points[i].Y = (int)(215.0 - ((double.Parse(xmle["NORTHLAT"].InnerText.ToString())) * tY));

    i++;

    }
    //利用gdi+画出坐标线
    gPath.DrawLines(new Pen(Color.Red, 1), points);

    foreach (Point p in points)
    {
    //兰色画笔画圆和并移动矩形坐标
    gPath.DrawEllipse(new Pen(Color.Blue, 1), new Rectangle(p.X - 1, p.Y - 1, 2, 2));

    }
    //获得节点名字属性的列
    xmlnl = xmlDoc.GetElementsByTagName("TFXX_x0009_");

    int R;
    //通过这列获得坐标(东经XX 北纬XX 气压 XX 风速XX)的属性 画出风暴移动的路线
    foreach (XmlElement xmle in xmlnl)
    {
    //清除xx控件的内容
    lstPathDesc.Items.Clear();
    //添加TPTIME点 并通过开头是T的搜索到TPTIME并删除原先的TPTIME点 不断更新TPTIME坐标
    lstPathDesc.Items.Add(xmle["TPTIME"].InnerText.Remove(xmle["TPTIME"].InnerText.IndexOf("T"),
    //以下代码是实现TPTIME坐标的更新
    xmle["TPTIME"].InnerText.Length - xmle["TPTIME"].InnerText.IndexOf("T")));

    lstPathDesc.Items.Add("东经" + xmle["NORTHLAT"].InnerText);

    lstPathDesc.Items.Add("北纬" + xmle["EASTLONG"].InnerText);

    lstPathDesc.Items.Add("气压" + xmle["CENAIRPRE"].InnerText);

    lstPathDesc.Items.Add("风速" + xmle["MAXSPEED"].InnerText);
    //获得风暴半径
    R = (int)(double.Parse(xmle["RADIISIX"].InnerText.ToString()) / 5.5);
    //画出风暴(圈圈)
    gPath.DrawEllipse(new Pen(Color.Red, 1),

    new Rectangle((int)(((double.Parse(xmle["EASTLONG"].InnerText.ToString())) - 105.0) * tX) - R / 2,
    (int)(215.0 - ((double.Parse(xmle["NORTHLAT"].InnerText.ToString()))) * tY) - R / 2,
    R, R)
    );

    }
    //刷新空间,实现重绘
    picWind.Refresh(); }******************************************]
    因为这电脑上没有vs2003所以不能解释的很详细 不过应该能让楼主明白了吧
    大家看看有没有什么错误