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())); }
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")); }