Beispiel #1
0
        public ActionResult TestIDW(DateTime time)
        {
            IDW     idw;
            Kriging kriging;

            using (DataCenterServiceClient client = new DataCenterServiceClient())
            {
                StationHourData[] data = client.GetStationHourDataListFromHistoryByTime("GDAEIB", "2019!@GD", time);
                data = data.Where(o => o.AQI != "—").ToArray();
                double[] X = new double[data.Length], Y = new double[data.Length], T = new double[data.Length];
                for (int i = 0; i < data.Length; i++)
                {
                    StationHourData item = data[i];
                    double          x = double.Parse(item.Longitude), y = double.Parse(item.Latitude);
                    double          t = double.Parse(item.AQI);
                    X[i] = x;
                    Y[i] = y;
                    T[i] = t;
                }
                idw     = new IDW(X, Y, T);
                kriging = new Kriging(X, Y, T);
            }
            double temp = idw.Predict(112, 36);

            kriging.Train(KrigingModel.Exponential, 0, 100);
            temp = kriging.Predict(112, 36);
            return(Content(temp.ToString()));
        }
Beispiel #2
0
        public ActionResult GetChinaAirQualityPNG()
        {
            List <double> t = new List <double>(), x = new List <double>(), y = new List <double>();

            //double[] extent = new double[] { 73.2, 17.8, 135.4, 53.8 };
            double[] extent = new double[] { 73.502355, 3.397162, 135.095670, 53.563269 };
            string   fileName;

            using (DataCenterServiceClient client = new DataCenterServiceClient())
            {
                StationHourData[] data = client.GetStationHourDataListFromLive("GDAEIB", "2019!@GD");
                data = data.Where(o => o.AQI != "—").ToArray();
                int    i = 0;
                double max = 0, lonm = 0, latm = 0, w = 0.5, h = 0.5;
                for (double lon = extent[0]; lon <= extent[2]; lon += w)
                {
                    for (double lat = extent[1]; lat <= extent[3]; lat += h)
                    {
                        max = 0;
                        for (i = 0; i < data.Length; i++)
                        {
                            StationHourData item = data[i];
                            double          xi = double.Parse(item.Longitude), yi = double.Parse(item.Latitude);
                            if (xi >= lon && xi <= lon + w && yi >= lat && yi <= lat + w)
                            {
                                double ti = double.Parse(item.AQI);
                                if (ti > max)
                                {
                                    max  = ti;
                                    lonm = xi;
                                    latm = yi;
                                }
                            }
                        }
                        if (max > 0)
                        {
                            t.Add(max);
                            x.Add(lonm);
                            y.Add(latm);
                        }
                    }
                }
                fileName = string.Format("D:\\{0}_IDW.png", data.First().TimePoint.ToString("yyyyMMddHH"));
            }
            double resolution = (extent[2] - extent[0]) / 1023;

            BitmapHelper.DrawGridByIDW(t.ToArray(), x.ToArray(), y.ToArray(), extent, resolution, fileName);
            return(Content("Done"));
        }