Ejemplo n.º 1
0
        private void rangeXXkmToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ToolStripMenuItem item = sender as ToolStripMenuItem;

            if (null == item)
            {
                return;
            }

            maxSpeed = (int)item.Tag;

            GraphControlLibrary.GraphSet gset = _graphView.Items[0];

            GraphControlLibrary.ScaleSet ss2 = new GraphControlLibrary.ScaleSet("時速", "km/h", new GraphControlLibrary.ScaleData("0 km", 0), new GraphControlLibrary.ScaleData(string.Format("{0:F2}", maxSpeed), (float)maxSpeed), new HogeY());
            ss2.Items.Add(new GraphControlLibrary.ScaleData(string.Format("{0:F0}", maxSpeed / 2), (Single)(maxSpeed / 2)));
            ss2.Items.Add(new GraphControlLibrary.ScaleData(string.Format("{0:F0}", maxSpeed), (Single)(maxSpeed)));
            GraphControlLibrary.GraphSet newGset = new GraphControlLibrary.GraphSet(gset.XScale, ss2, true);

            newGset.Items.AddRange(gset.Items);

            _graphView.BegineUpdate();

            _graphView.Items.Clear();
            _graphView.Items.Add(newGset);

            _graphView.EndUpdate();
        }
Ejemplo n.º 2
0
        private void SetGraphData()
        {
            bykIFv1.Point start = _trackItem.Items[0];
            bykIFv1.Point end   = _trackItem.Items[_trackItem.Items.Count - 1];


            List <GraphControlLibrary.PointData> speedList = new List <GraphControlLibrary.PointData>();

            {
                double range = 60;
                {
                    TimeSpan ts = _trackItem.Items[_trackItem.Items.Count - 1].Time - _trackItem.Items[0].Time;
                    if (1 >= ts.TotalMinutes)
                    {
                        range = 1;
                    }
                }

                // 1分平均(データが1分以下なら平均しないよ)
                for (DateTime time = start.Time; time <= end.Time; time = time.AddSeconds(60))
                {
                    DateTime work = time.AddSeconds(60);
                    // 60分いないのデータ一覧を取得
                    var q = _trackItem.Items.Where(x => time <= x.Time && work > x.Time).OrderBy(x => x.Time);

                    // 取得したデータ一覧で速度を求める
                    bykIFv1.Point p1        = null;
                    double        speed     = 0;
                    int           itemCount = 0;
                    foreach (bykIFv1.Point p in q)
                    {
                        if (null == p1)
                        {
                            // 最初の一湖なので、データを取り出すだけね。
                            speed     = p.Speed;
                            itemCount = 1;
                        }
                        else
                        {
                            // 前回値との差分から速度をみるよ
                            double speedSrc = GetSpeed(p, p1);
                            if (0 < speedSrc)
                            {
                                speed += speedSrc;
                                ++itemCount;
                            }
                        }
                        p1 = p;
                    }
                    TimeSpan s2 = time - start.Time;

                    // 速度を平均とkm/hへ変換する
                    if (0 < itemCount)
                    {
                        speed /= itemCount;
                        // m/sからkm/hへ
                        speed *= 3600;
                        speed /= 1000;
                    }
                    else
                    {
                        speed = 0;
                    }

                    // 登録
                    speedList.Add(new GraphControlLibrary.PointData((Single)s2.TotalSeconds, (Single)speed));
                }
            }

            TimeSpan s            = end.Time - start.Time;
            Single   TotalSeconds = (Single)s.TotalSeconds;

            GraphControlLibrary.ScaleData xMin = new GraphControlLibrary.ScaleData(start.Time.ToString(), 0);
            GraphControlLibrary.ScaleData xMax = new GraphControlLibrary.ScaleData(end.Time.ToString(), TotalSeconds);
            GraphControlLibrary.ScaleSet  ss   = new GraphControlLibrary.ScaleSet("時間", "s", xMin, xMax, new HogeX(start.Time));

            if (1 <= s.TotalDays)
            {
                // 一日以上の差があるので、0:00にだけ線を引く
                DateTime scale = new DateTime(start.Time.Year, start.Time.Month, start.Time.Day, 0, 0, 0);
                while (end.Time > scale)
                {
                    scale = scale.AddDays(1);
                    TimeSpan s2 = scale - start.Time;
                    if (end.Time > scale)
                    {
                        ss.Items.Add(new GraphControlLibrary.ScaleData(scale.ToLocalTime().ToString("yyyy/MM/dd"), (Single)s2.TotalSeconds));
                    }
                    else
                    {
                        break;
                    }
                }
            }
            else
            {
                if (1 <= s.TotalHours)
                {
                    // 一時間以上差があるので、x:00に線を引く
                    DateTime scale = new DateTime(start.Time.Year, start.Time.Month, start.Time.Day, start.Time.Hour, 0, 0);
                    while (end.Time > scale)
                    {
                        scale = scale.AddHours(1);
                        TimeSpan s2 = scale - start.Time;
                        if (end.Time > scale)
                        {
                            if (0 >= ss.Items.Count)
                            {
                                ss.Items.Add(new GraphControlLibrary.ScaleData(scale.ToLocalTime().ToString("yyyy/MM/dd HH:mm"), (Single)s2.TotalSeconds));
                            }
                            else
                            {
                                ss.Items.Add(new GraphControlLibrary.ScaleData(scale.ToLocalTime().ToString("HH:mm"), (Single)s2.TotalSeconds));
                            }
                        }
                        else
                        {
                            break;
                        }
                    }
                }
                else
                {
                    if (1 <= s.TotalMinutes)
                    {
                        // 1分以上差があるので、5分ごとに線を引く
                        DateTime scale = new DateTime(start.Time.Year, start.Time.Month, start.Time.Day, start.Time.Hour, start.Time.Minute, 0);
                        while (end.Time > scale)
                        {
                            scale = scale.AddMinutes(5);
                            TimeSpan s2 = scale - start.Time;
                            if (end.Time > scale)
                            {
                                if (0 >= ss.Items.Count)
                                {
                                    ss.Items.Add(new GraphControlLibrary.ScaleData(scale.ToLocalTime().ToString("yyyy/MM/dd HH:mm"), (Single)s2.TotalSeconds));
                                }
                                else
                                {
                                    ss.Items.Add(new GraphControlLibrary.ScaleData(scale.ToLocalTime().ToString("HH:mm"), (Single)s2.TotalSeconds));
                                }
                            }
                            else
                            {
                                break;
                            }
                        }
                    }
                }
            }

            GraphControlLibrary.ScaleSet ss2 = new GraphControlLibrary.ScaleSet("時速", "km/h", new GraphControlLibrary.ScaleData("0 km", 0), new GraphControlLibrary.ScaleData(string.Format("{0:F2}", maxSpeed), (float)maxSpeed), new HogeY());
            ss2.Items.Add(new GraphControlLibrary.ScaleData(string.Format("{0:F0}", maxSpeed / 2), (Single)(maxSpeed / 2)));
            ss2.Items.Add(new GraphControlLibrary.ScaleData(string.Format("{0:F0}", maxSpeed), (Single)(maxSpeed)));
            GraphControlLibrary.GraphSet gset = new GraphControlLibrary.GraphSet(ss, ss2, true);

            gset.Items.AddRange(speedList);

            _graphView.BegineUpdate();

            _graphView.Items.Add(gset);

            _graphView.EndUpdate();
        }