public string MakeToAscii()
        {
            GrayScaleValues = new int[InputImage.Width, InputImage.Height];

            makeGrayScale();

            if (BlackToWhite == false)
            {
                char[] charArray = AsciiValues.ToCharArray();
                Array.Reverse(charArray);
                AsciiValues = new string(charArray);
            }

            return(avgBlocks(AsciiHeight, AsciiWidth));
        }
Exemple #2
0
        public JsonResult ConvexHull(int Id, int Forecast)
        {
            if (Forecast > 0)
            {
                using (MeteoDataEntities me = new MeteoDataEntities())
                {
                    var    asciiResult = me.IndexMaps.Where(x => x.Id == Id).Select(x => x.IndexMapZipAscii).First();
                    Byte[] ascii       = ex.Uncompress(asciiResult);
                    //System.IO.File.WriteAllBytes(@"C:\Static\test.asc", ascii);

                    #region Read ascii

                    List <AsciiValues> listasp = new List <AsciiValues>();
                    int    counter             = 0;
                    string line;
                    int    ncols        = 0;
                    int    nrows        = 0;
                    int    xllcorner    = 0;
                    int    yllcorner    = 0;
                    int    cellsize     = 0;
                    int    NODATA_value = 0;
                    using (MemoryStream memoryStream = new MemoryStream(ascii))
                    {
                        using (StreamReader st = new StreamReader(memoryStream))
                        {
                            while ((line = st.ReadLine()) != null)
                            {
                                //System.Console.WriteLine(line);
                                if (!string.IsNullOrWhiteSpace(line))
                                {
                                    counter++;

                                    #region ASC Details

                                    if (counter < 7)
                                    {
                                        string[] result = line.Split(' ');
                                        if (result[0].Contains("ncols"))
                                        {
                                            for (int i = 1; i < result.Length; i++)
                                            {
                                                if (!String.IsNullOrWhiteSpace(result[i]))
                                                {
                                                    int number;
                                                    if (int.TryParse(result[i], out number))
                                                    {
                                                        ncols = number;
                                                    }
                                                }
                                            }
                                        }
                                        if (result[0].Contains("nrows"))
                                        {
                                            for (int i = 1; i < result.Length; i++)
                                            {
                                                if (!String.IsNullOrWhiteSpace(result[i]))
                                                {
                                                    int number;
                                                    if (int.TryParse(result[i], out number))
                                                    {
                                                        nrows = number;
                                                    }
                                                }
                                            }
                                        }

                                        if (result[0].Contains("xllcorner"))
                                        {
                                            for (int i = 1; i < result.Length; i++)
                                            {
                                                if (!String.IsNullOrWhiteSpace(result[i]))
                                                {
                                                    int number;
                                                    if (int.TryParse(result[i], out number))
                                                    {
                                                        xllcorner = number;
                                                    }
                                                }
                                            }
                                        }
                                        if (result[0].Contains("yllcorner"))
                                        {
                                            for (int i = 1; i < result.Length; i++)
                                            {
                                                if (!String.IsNullOrWhiteSpace(result[i]))
                                                {
                                                    int number;
                                                    if (int.TryParse(result[i], out number))
                                                    {
                                                        yllcorner = number;
                                                    }
                                                }
                                            }
                                        }
                                        if (result[0].Contains("cellsize"))
                                        {
                                            for (int i = 1; i < result.Length; i++)
                                            {
                                                if (!String.IsNullOrWhiteSpace(result[i]))
                                                {
                                                    int number;
                                                    if (int.TryParse(result[i], out number))
                                                    {
                                                        cellsize = number;
                                                    }
                                                }
                                            }
                                        }
                                        if (result[0].Contains("NODATA_value"))
                                        {
                                            for (int i = 1; i < result.Length; i++)
                                            {
                                                if (!String.IsNullOrWhiteSpace(result[i]))
                                                {
                                                    int number;
                                                    if (int.TryParse(result[i], out number))
                                                    {
                                                        NODATA_value = number;
                                                    }
                                                }
                                            }
                                        }
                                    }

                                    #endregion ASC Details

                                    else
                                    {
                                        string[] result = line.Split(' ');
                                        for (int i = 0; i < result.Length; i++)
                                        {
                                            int number;
                                            if (int.TryParse(result[i], out number))
                                            {
                                                AsciiValues aspul = new AsciiValues()
                                                {
                                                    X     = xllcorner + (i * cellsize),
                                                    Y     = (yllcorner + (nrows * cellsize)) - (cellsize * (counter - 7)),
                                                    Value = number
                                                };
                                                AsciiValues aspur = new AsciiValues()
                                                {
                                                    X     = xllcorner + (i * cellsize) + cellsize,
                                                    Y     = (yllcorner + (nrows * cellsize)) - (cellsize * (counter - 7)),
                                                    Value = number
                                                };
                                                AsciiValues aspdl = new AsciiValues()
                                                {
                                                    X     = xllcorner + (i * cellsize),
                                                    Y     = (yllcorner + (nrows * cellsize)) - (cellsize * (counter - 7)) - cellsize,
                                                    Value = number
                                                };
                                                AsciiValues aspdr = new AsciiValues()
                                                {
                                                    X     = xllcorner + (i * cellsize) + cellsize,
                                                    Y     = (yllcorner + (nrows * cellsize)) - (cellsize * (counter - 7)) - cellsize,
                                                    Value = number
                                                };
                                                listasp.Add(aspul);
                                                listasp.Add(aspur);
                                                listasp.Add(aspdl);
                                                listasp.Add(aspdr);
                                            }
                                        }
                                    }
                                }
                            }
                            counter.ToString();
                        }
                    }

                    #endregion Read ascii

                    var points      = listasp.Where(x => x.Value <= Forecast && x.Value > 0);
                    var finalpoints = points.Select(x => new Point <double>()
                    {
                        X = x.X, Y = x.Y
                    }).ToList();
                    var ConvexHullresult = PointMath.ComputeConvexHull(finalpoints, true);
                    return(this.Json(ConvexHullresult, JsonRequestBehavior.AllowGet));
                }
            }
            else
            {
                return(this.Json(null, JsonRequestBehavior.AllowGet));
            }
        }