示例#1
0
文件: Test.cs 项目: gahadzikwa/GAPP
    public string DTMatrix()
    {
        string strDiffTerrCombi = "Difficulty / Terrain combination";
        string strDifficulty = "Difficulty";
        string strTerrain = "Terrain";

        RegisterText(new string[]{
		strDiffTerrCombi,
		strDifficulty,
		strTerrain
		});

        Layout skin = new Layout(1);
        Layout.Statistics stats = new Layout.Statistics(Translate(strDiffTerrCombi, false));
        skin.StatisticsBlocks[0] = stats;
        stats.Width = "60%";
        stats.Align = "center";
        stats.AxisLabelX = Translate(strTerrain, false);
        stats.AxisLabelY = Translate(strDifficulty, false);

        Layout.Statistics.Row row = new Layout.Statistics.Row();
        stats.Rows.Add(row);

        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = " ";

        for (double d = 1; d < 5.1; d += 0.5)
        {
            row.Items.Add(new Layout.Statistics.Item());
            row.Items[row.Items.Count - 1].Text = d.ToString("0.#");
            row.Items[row.Items.Count - 1].Width = "10%";
            row.Items[row.Items.Count - 1].Align = "center";
            row.Items[row.Items.Count - 1].IsMarker = true;
        }
        for (double d = 1; d < 5.1; d += 0.5)
        {
            row = new Layout.Statistics.Row();
            stats.Rows.Add(row);

            string sd = d.ToString("0.#");

            row.Items.Add(new Layout.Statistics.Item());
            row.Items[row.Items.Count - 1].Text = d.ToString("0.#");
            row.Items[row.Items.Count - 1].Width = "10%";
            row.Items[row.Items.Count - 1].Align = "center";
            row.Items[row.Items.Count - 1].IsMarker = true;

            for (double t = 1; t < 5.1; t += 0.5)
            {
                string st = t.ToString("0.#");
                int cnt = (from mf in _myFinds where mf.gc.Difficulty.ToString("0.#") == sd && mf.gc.Terrain.ToString("0.#") == st select mf).Count();

                row.Items.Add(new Layout.Statistics.Item());
                row.Items[row.Items.Count - 1].Text = cnt.ToString();
                row.Items[row.Items.Count - 1].Width = "10%";
                row.Items[row.Items.Count - 1].Align = "center";
            }
        }
        return stats.ToString();
    }
示例#2
0
文件: Test.cs 项目: gahadzikwa/GAPP
    private string totalFoundsPerMonthGraph()
    {
        string strTotalPerMonth = "Total founds per month";

        RegisterText(new string[]{
		strTotalPerMonth
		});

        Layout skin = new Layout(1);
        Layout.Statistics stats = new Layout.Statistics(Translate(strTotalPerMonth, false));
        skin.StatisticsBlocks[0] = stats;
        stats.Rows.Add(new Layout.Statistics.Row());
        stats.Rows[0].Items.Add(new Layout.Statistics.Item());

        //graph
        //http://chart.apis.google.com/chart?cht=lxy&chs=740x300&chf=bg,s,FFF4F4&chxt=r,x,y&chxr=0,0,2693|2,0,1612&chxs=0,0000FF|2,FF0000&chd=e:__,BIDKE5GPG3KGMPPnS3YKbcfxiijhl8potKxB0V82.-,AADMGZJmMz,B5FRILKcLe,MzP.TMWZZmcyf.jMmZplsyv.zM,AAFZI-OmUCc5iXpmuPv3z66E..,zM2Y5l8y..,AAGbL.aMfb&chxl=1:|2010|||||2011||||||||||||2012|||&chco=0000ff,ff0000,ff0000,ff0000&chm=B,76A4FBB0,0,0,0|v,6060FF,0,4,1.0|v,6060FF,0,16,1.0&chg=0,6.2&chls=2,1,0|2,2,4|2,2,4|2,2,4
        Dictionary<string, string> pars = new Dictionary<string, string>();

        //fixed (data independant)
        pars.Add("cht", "ls");
        pars.Add("chs", "740x300");
        pars.Add("chf", "bg,s,FFF4F4");
        pars.Add("chxt", "r,x,y");
        pars.Add("chxs", "0,0000FF|2,FF0000");
        pars.Add("chco", "0000ff,ff0000,ff0000,ff0000");
        pars.Add("chm", "B,76A4FBB0,0,0,0|v,6060FF,0,4,1.0|v,6060FF,0,16,1.0");
        pars.Add("chg", "0,6.2");
        pars.Add("chls", "2,1,0|2,2,4|2,2,4|2,2,4");
        pars.Add("chds", "a");
        //pars.Add("chdl", "Total found|Yearly found");

        //variable, data dependant
        //pars.Add("chxr", "");
        pars.Add("chd", "");
        pars.Add("chxl", "");

        DateTime startAt = (from mf in _myFinds where mf.logDate.Year >= 2000 orderby mf.logDate.Year select mf.logDate).FirstOrDefault();
        if (startAt.Year >= 2000)
        {
            startAt = new DateTime(startAt.Year, startAt.Month, 1);
            DateTime endAt = startAt.AddMonths(1);
            DateTime startOfInterval = startAt;
            StringBuilder chxl = new StringBuilder();
            StringBuilder serie1 = new StringBuilder();
            StringBuilder serie2 = new StringBuilder();

            while (startAt <= DateTime.Now)
            {
                if (chxl.Length == 0 || startAt.Month == 1)
                {
                    chxl.AppendFormat("|{0}", startAt.Year);
                    startOfInterval = startAt;
                }
                else
                {
                    chxl.Append("|");
                }
                if (serie1.Length == 0)
                {
                    serie1.AppendFormat("{0}", (from mf in _myFinds where mf.logDate < endAt select mf).Count());
                    serie2.AppendFormat("{0}", (from mf in _myFinds where mf.logDate >= startOfInterval && mf.logDate < endAt select mf).Count());
                }
                else
                {
                    serie1.AppendFormat(",{0}", (from mf in _myFinds where mf.logDate < endAt select mf).Count());
                    serie2.AppendFormat(",{0}", (from mf in _myFinds where mf.logDate >= startOfInterval && mf.logDate < endAt select mf).Count());
                }


                startAt = endAt;
                endAt = endAt.AddMonths(1);
            }
            //pars["chd"] = string.Format("t:{0}|{1}", serie1.ToString(), serie2.ToString());
            pars["chd"] = string.Format("t:{0}", serie1.ToString());
            pars["chxl"] = string.Format("1:{0}", chxl.ToString());
            //pars["chxr"] = _myFinds.Count.ToString();
        }

        stats.Rows[0].Items[0].Text = googleChartImgUrl(pars);
        stats.Rows[0].Items[0].IsHtml = true;

        return stats.ToString();
    }
示例#3
0
文件: Test.cs 项目: gahadzikwa/GAPP
    private string daysCached()
    {
        string strDaysCached = "Days cached";
        string strEvery = "every";
        string strDaysOr = "days or";
        string strMostConsec = "Most consecutive days with founds";
        string strMostOneMonth = "Most in 1 month";
        string strMostConsecW = "Most consecutive days without founds";

        RegisterText(new string[]{
		strDaysCached,
		strEvery,
		strDaysOr,
		strMostConsec,
		strMostOneMonth,
		strMostConsecW
		});

        Layout skin = new Layout(1);
        Layout.Statistics stats = new Layout.Statistics(Translate(strDaysCached, false));
        skin.StatisticsBlocks[0] = stats;

        Layout.Statistics.Row row = new Layout.Statistics.Row();
        stats.Rows.Add(row);

        int uniqueDays = (from mf in _myFinds select mf.logDate.ToString("d")).Distinct().Count();
        DateTime minDate = _myFinds.Min(x => x.logDate);
        DateTime maxDate = _myFinds.Max(x => x.logDate);
        TimeSpan ts = (maxDate - minDate);

        DateTime startInterval = minDate;
        DateTime endInterval = minDate;
        DateTime startIntervalMarker = minDate;
        DateTime endIntervalMarker = minDate;
        for (int i = 1; i < _myFinds.Count; i++)
        {
            string send = endInterval.ToString("d");
            string slg = _myFinds[i].logDate.ToString("d");
            if (slg == send)
            {
                //same day
            }
            else if (endInterval.AddDays(1).ToString("d") == slg)
            {
                //next day
                endInterval = _myFinds[i].logDate;
            }
            else
            {
                //interval determined
                if ((int)(endIntervalMarker - startIntervalMarker).TotalDays < (int)(endInterval - startInterval).TotalDays)
                {
                    //new record
                    startIntervalMarker = startInterval;
                    endIntervalMarker = endInterval;
                }
                startInterval = _myFinds[i].logDate;
                endInterval = _myFinds[i].logDate;
            }
        }

        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = Translate(strDaysCached, false);
        row.Items[row.Items.Count - 1].IsMarker = true;
        row.Items[row.Items.Count - 1].Width = "15%";
        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = string.Format("{0} ({3} {1:0.0} {4} {2:0.0}%)", uniqueDays, ts.TotalDays / (double)uniqueDays, 100.0 * (double)uniqueDays / ts.TotalDays, Translate(strEvery, false), Translate(strDaysOr, false));
        row.Items[row.Items.Count - 1].Width = "35%";
        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = Translate(strMostConsec, false);
        row.Items[row.Items.Count - 1].IsMarker = true;
        row.Items[row.Items.Count - 1].Width = "20%";
        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = string.Format("{0} (<span style=\"font-size:75%\">{1} - {2}</span>)", (int)(endIntervalMarker - startIntervalMarker).TotalDays + 1, startIntervalMarker.ToString("d"), endIntervalMarker.ToString("d"));
        row.Items[row.Items.Count - 1].IsHtml = true;
        row.Items[row.Items.Count - 1].Width = "30%";

        row = new Layout.Statistics.Row();
        stats.Rows.Add(row);

        startInterval = minDate;
        endInterval = minDate;
        DateTime prevFoundDate = minDate;
        startIntervalMarker = minDate;
        endIntervalMarker = minDate;
        for (int i = 1; i < _myFinds.Count; i++)
        {
            string send = prevFoundDate.ToString("d");
            string slg = _myFinds[i].logDate.ToString("d");
            if (slg == send)
            {
                //same day
            }
            else if (prevFoundDate.AddDays(1).ToString("d") == slg)
            {
                //next day
            }
            else
            {
                //start of new gap
                startInterval = _myFinds[i - 1].logDate.AddDays(1);
                endInterval = _myFinds[i].logDate.AddDays(-1);

                //interval determined
                if ((int)(endIntervalMarker - startIntervalMarker).TotalDays < (int)(endInterval - startInterval).TotalDays)
                {
                    //new record
                    startIntervalMarker = startInterval;
                    endIntervalMarker = endInterval;
                }
                prevFoundDate = _myFinds[i].logDate;
            }
        }

        string[] udays = (from mf in _myFinds select mf.logDate.ToString("yyyy-MM-dd")).Distinct().ToArray();
        var cdayGroup =
            (from mf in udays
             group mf by mf.Substring(0, 7) into g
             select new { Month = g.Key, Days = g }).OrderByDescending(x => x.Days.Count()).FirstOrDefault();

        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = Translate(strMostOneMonth, false);
        row.Items[row.Items.Count - 1].IsMarker = true;
        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = string.Format("{0} (<span style=\"font-size:75%\">{1}</span>)", cdayGroup.Days.Count(), cdayGroup.Month);
        row.Items[row.Items.Count - 1].IsHtml = true;
        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = Translate(strMostConsecW, false);
        row.Items[row.Items.Count - 1].IsMarker = true;
        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = string.Format("{0} (<span style=\"font-size:75%\">{1} - {2}</span>)", (int)(endIntervalMarker - startIntervalMarker).TotalDays + 1, startIntervalMarker.ToString("d"), endIntervalMarker.ToString("d"));
        row.Items[row.Items.Count - 1].IsHtml = true;

        return stats.ToString();
    }
示例#4
0
文件: Test.cs 项目: gahadzikwa/GAPP
    private string history()
    {
        string strHistory = "History";
        string strYear = "Year";
        string strTotalFound = "Total found";
        string strDaysCachedFreq = "Days cached / frequency";
        string strCachesPerDay = "Caches/day";
        string strEvery = "Every";
        string strDays = "days";

        RegisterText(new string[]{
		strHistory,
		strYear,
		strTotalFound,
		strDaysCachedFreq,
		strCachesPerDay,
		strEvery,
		strDays
		});


        Layout skin = new Layout(1);
        Layout.Statistics stats = new Layout.Statistics(Translate(strHistory, false));
        skin.StatisticsBlocks[0] = stats;

        Layout.Statistics.Row row = new Layout.Statistics.Row();
        stats.Rows.Add(row);

        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = Translate(strYear, false);
        row.Items[row.Items.Count - 1].IsMarker = true;
        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = Translate(strTotalFound, false);
        row.Items[row.Items.Count - 1].IsMarker = true;
        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = Translate(strCachesPerDay, false);
        row.Items[row.Items.Count - 1].IsMarker = true;
        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = Translate(strDaysCachedFreq, false);
        row.Items[row.Items.Count - 1].IsMarker = true;

        DateTime startAt = (from mf in _myFinds where mf.logDate.Year >= 2000 orderby mf.logDate.Year select mf.logDate).FirstOrDefault();
        int startYear = startAt.Year;
        if (startYear >= 2000)
        {
            for (int y = startYear; y <= DateTime.Now.Year; y++)
            {
                int cnt = (from mf in _myFinds where mf.logDate.Year == y select mf).Count();
                int diny;
                DateTime start = new DateTime(y, 1, 1);
                DateTime end;
                if (y == startYear)
                {
                    start = startAt;
                }
                else
                {
                    start = new DateTime(y, 1, 1);
                }
                if (y == DateTime.Now.Year)
                {
                    end = DateTime.Now;
                }
                else
                {
                    end = new DateTime(y, 12, 31);
                }
                diny = (int)(end - start).TotalDays;
                if (diny == 0) diny++;

                int udays = (from mf in _myFinds where mf.logDate >= start && mf.logDate <= end select mf.logDate.ToString("d")).Distinct().Count();

                row = new Layout.Statistics.Row();
                stats.Rows.Add(row);

                row.Items.Add(new Layout.Statistics.Item());
                row.Items[row.Items.Count - 1].Text = y.ToString();
                row.Items[row.Items.Count - 1].IsMarker = true;
                row.Items.Add(new Layout.Statistics.Item());
                row.Items[row.Items.Count - 1].Text = cnt.ToString();
                row.Items.Add(new Layout.Statistics.Item());
                row.Items[row.Items.Count - 1].Text = ((double)cnt / (double)diny).ToString("0.00");
                row.Items.Add(new Layout.Statistics.Item());
                if (udays == 0)
                {
                    row.Items[row.Items.Count - 1].Text = udays.ToString();
                }
                else
                {
                    row.Items[row.Items.Count - 1].Text = string.Format("{0} / {2} {1:0.0} {3}", udays, (double)diny / (double)udays, Translate(strEvery, false), Translate(strDays, false));
                }
            }
        }

        return stats.ToString();
    }
示例#5
0
文件: Test.cs 项目: gahadzikwa/GAPP
    private string foundCaches()
    {
        string strFoundCaches = "Found caches";
        string strTotalFound = "Total found";
        string strFound = "Found";
        string strAverage = "Average";
        string strPerDay = "per day";
        string strPerWeek = "per week";
        string strPerYear = "per year";
        string strArchived = "Archived";
        string strAvgDiff = "Avg. Diff. / Terr.";
        string strAvgOnOneDay = "Avg. on 1 day";
        string strOldestCache = "Oldest cache";
        string strPublishedOn = "published on";
        string strMostOnOneDay = "Most on 1 day";
        string strMostOnOneMonth = "Most on 1 month";

        RegisterText(new string[]{
		strFoundCaches,
		strTotalFound,
		strFound,
		strAverage,
		strPerDay,
		strPerWeek,
		strPerYear,
		strArchived,
		strAvgDiff,
		strAvgOnOneDay,
		strOldestCache,
		strPublishedOn,
		strMostOnOneDay,
		strMostOnOneMonth
		});

        Layout skin = new Layout(1);
        Layout.Statistics stats = new Layout.Statistics(Translate(strFoundCaches, false));
        skin.StatisticsBlocks[0] = stats;

        Layout.Statistics.Row row = new Layout.Statistics.Row();
        stats.Rows.Add(row);

        DateTime minDate = _myFinds.Min(x => x.logDate);
        DateTime maxDate = _myFinds.Max(x => x.logDate);
        TimeSpan ts = (maxDate - minDate);

        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = Translate(strTotalFound, false);
        row.Items[row.Items.Count - 1].IsMarker = true;
        row.Items[row.Items.Count - 1].Width = "15%";
        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = string.Format("{0} # {1}", _myFinds.Count, Translate(strFound, false));
        row.Items[row.Items.Count - 1].Width = "35%";
        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = Translate(strAverage, false);
        row.Items[row.Items.Count - 1].IsMarker = true;
        row.Items[row.Items.Count - 1].Width = "20%";
        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = string.Format("{0:0.00} {3} ({1:0.0} {4}, {2:0.0} {5})", (double)_myFinds.Count / ts.TotalDays, 7.0 * (double)_myFinds.Count / ts.TotalDays, 365.0 * (double)_myFinds.Count / ts.TotalDays, Translate(strPerDay, false), Translate(strPerWeek, false), Translate(strPerYear, false));
        row.Items[row.Items.Count - 1].Width = "30%";

        row = new Layout.Statistics.Row();
        stats.Rows.Add(row);

        int arch = (from mf in _myFinds where mf.gc.Archived select mf).Count();

        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = Translate(strArchived, false);
        row.Items[row.Items.Count - 1].IsMarker = true;
        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = string.Format("{0} ({1:0.0}%)", arch, 100.0 * (double)arch / (double)_myFinds.Count);
        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = Translate(strAvgDiff, false);
        row.Items[row.Items.Count - 1].IsMarker = true;
        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = string.Format("{0:0.00} / {1:0.00}", _myFinds.Average(x => x.gc.Difficulty), _myFinds.Average(x => x.gc.Terrain));

        row = new Layout.Statistics.Row();
        stats.Rows.Add(row);

        int uniqueDays = (from mf in _myFinds select mf.logDate.ToString("d")).Distinct().Count();
        DateTime minPub = _myFinds.Min(x => x.gc.PublishedTime);
        Geocache gc = (from mf in _myFinds where mf.gc.PublishedTime == minPub select mf.gc).FirstOrDefault();

        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = Translate(strAvgOnOneDay, false);
        row.Items[row.Items.Count - 1].IsMarker = true;
        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = string.Format("{0:0.00}", (double)_myFinds.Count / (double)uniqueDays);
        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = Translate(strOldestCache, false);
        row.Items[row.Items.Count - 1].IsMarker = true;
        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = string.Format("<a href=\"{1}\" target=\"_blank\">{0}</a> (<span style=\"font-size:75%\">{2} {4} {3})</span>", ToHtml(gc.Name), gc.Url, ToHtml(gc.Code), ToHtml(gc.PublishedTime.ToString("d")), Translate(strPublishedOn));
        row.Items[row.Items.Count - 1].IsHtml = true;

        row = new Layout.Statistics.Row();
        stats.Rows.Add(row);
        
        var cdayGroup =
            (from mf in _myFinds
             group mf by mf.logDate.ToString("d") into g
             select new { Day = g.Key, Founds = g }).OrderByDescending(x => x.Founds.Count()).FirstOrDefault();
        var cmonthGroup =
            (from mf in _myFinds
             group mf by mf.logDate.ToString("yyyy-MM") into g
             select new { Month = g.Key, Founds = g }).OrderByDescending(x => x.Founds.Count()).FirstOrDefault();

        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = Translate(strMostOnOneDay, false);
        row.Items[row.Items.Count - 1].IsMarker = true;
        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = string.Format("{0} (<span style=\"font-size:75%\">{1}</span>)", cdayGroup.Founds.Count(), ToHtml(cdayGroup.Day));
        row.Items[row.Items.Count - 1].IsHtml = true;
        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = Translate(strMostOnOneMonth, false);
        row.Items[row.Items.Count - 1].IsMarker = true;
        row.Items.Add(new Layout.Statistics.Item());
        row.Items[row.Items.Count - 1].Text = string.Format("{0} (<span style=\"font-size:75%\">{1}</span>)", cmonthGroup.Founds.Count(), ToHtml(cmonthGroup.Month));
        row.Items[row.Items.Count - 1].IsHtml = true;

        return stats.ToString();
    }