/// <summary> /// Loads the historical data according to the defined filter. /// </summary> /// <param name="measuresFilters">List of filters to be applied.</param> /// <returns></returns> public override async Task LoadMeasuresAsync(MeasuresFilters measuresFilters) { _valueIndex = 0; MeasureScale measureScale = GetScaleFromDateRange(_dateBegin, _dateEnd); _measuresData = await _aPICommands.GetMeasure(BaseId, measureScale, measuresFilters, _dateBegin, _dateEnd, Id).ConfigureAwait(false); if (_measuresData == null) { return; } // Wind if (measuresFilters.HasFlag(MeasuresFilters.WindStrength)) { LoadData(_measuresData, HistoryWindStrength); } if (measuresFilters.HasFlag(MeasuresFilters.WindAngle)) { LoadData(_measuresData, HistoryWindAngle); } // Gust if (measuresFilters.HasFlag(MeasuresFilters.GustStrength)) { LoadData(_measuresData, HistoryGustStrength); } if (measuresFilters.HasFlag(MeasuresFilters.GustAngle)) { LoadData(_measuresData, HistoryGustAngle); } if (measuresFilters.HasFlag(MeasuresFilters.DateMaxGust)) { LoadData(_measuresData, HistoryDateMaxGust); } }
internal static string ToJsonString(this MeasureScale value) { switch (value) { case MeasureScale.Max: return("max"); case MeasureScale.OneDay: return("1day"); case MeasureScale.OneHour: return("1hour"); case MeasureScale.OneMonth: return("1month"); case MeasureScale.OneWeek: return("1week"); case MeasureScale.ThirtyMinutes: return("30min"); case MeasureScale.ThreeHours: return("3hours"); default: throw new ArgumentException(stringManager.GetString("invalideValueForMeasureScale", CultureInfo.CurrentUICulture), nameof(value)); } }
/// <summary> /// 从xml文件中读取所有的scale /// </summary> /// <returns></returns> private List <MeasureScale> loadAllScalesFromXml() { List <MeasureScale> scaleList = new List <MeasureScale>(); XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(ProgramConstants.DEFAULT_PROGRAM_CONFIG_FILE_PATH); XmlElement root = xmldoc.DocumentElement; XmlNode scaleRootNode = root.SelectSingleNode("Scales"); foreach (XmlNode scaleNode in scaleRootNode.ChildNodes) { if (scaleNode is XmlElement) { XmlElement scaleElement = scaleNode as XmlElement; string scaleName = scaleElement.GetAttribute("Name"); double pixels = double.Parse(scaleElement.GetAttribute("Pixels")); double unitValue = double.Parse(scaleElement.GetAttribute("UnitValue")); int unitType = int.Parse(scaleElement.GetAttribute("UnitType")); MeasureScale measureScale = new MeasureScale(); measureScale.Name = scaleName; measureScale.Pixels = pixels; measureScale.UnitValue = unitValue; measureScale.UnitType = (UnitTypeDef)UnitType; scaleList.Add(measureScale); } } return(scaleList); }
//--------------statistic //TODO:这部分逻辑需要重构 public List <MeasureListItem> GetMeasureListData(MeasureScale scale) { List <MeasureListItem> list = new List <MeasureListItem>(); for (int i = 0; i < this.GraphicsList.Count; i++) { DrawObject drawObj = this.GraphicsList[i]; //TODO: 计算测量的逻辑应该从绘图对象中分离出来 MeasureListItem item = drawObj.GetMeasureListItem(); if (item != null) { //如果已经定过标,将值进行转换 if (scale != null && scale.UnitType != Constants.UnitTypeDef.Pixel) { double ratio = scale.UnitValue / scale.Pixels; item.AdjustByScale(ratio); item.Unit = scale.UnitTypeDisplayName; } else { item.Unit = "像素"; } list.Add(item); } } return(list); }
//public void SetUnit(double pxPerUm) //{ // if(DrawForm != null) // DrawForm.SetUnit(pxPerUm); //} public void SetScale(MeasureScale scale) { if (DrawForm != null) { DrawForm.SetScale(scale); } }
public void SetScale(MeasureScale scale) { this.measureScale = scale; if (mainForm != null) { mainForm.UpdateScaleLabel(scale.ToString()); } }
/// <summary> /// Loads the historical data according to the defined filter. /// </summary> /// <param name="measuresFilters">List of filters to be applied.</param> /// <returns></returns> public override async Task LoadMeasuresAsync(MeasuresFilters measuresFilters) { _valueIndex = 0; MeasureScale measureScale = GetScaleFromDateRange(_dateBegin, _dateEnd); _measuresData = await _aPICommands.GetMeasure(BaseId, measureScale, measuresFilters, _dateBegin, _dateEnd, Id).ConfigureAwait(false); if (_measuresData == null) { return; } // Temperatures if (measuresFilters.HasFlag(MeasuresFilters.Temperature)) { LoadData(_measuresData, HistoryTemperatures); } if (measuresFilters.HasFlag(MeasuresFilters.MinTemperature)) { LoadData(_measuresData, HistoryMinTemperatures); } if (measuresFilters.HasFlag(MeasuresFilters.MaxTemperature)) { LoadData(_measuresData, HistoryMaxTemperatures); } // Co2 if (measuresFilters.HasFlag(MeasuresFilters.Co2)) { LoadData(_measuresData, HistoryCo2); } if (measuresFilters.HasFlag(MeasuresFilters.DateMinCo2)) { LoadData(_measuresData, HistoryDateMinCo2); } if (measuresFilters.HasFlag(MeasuresFilters.DateMaxCo2)) { LoadData(_measuresData, HistoryDateMaxCo2); } // Humidity if (measuresFilters.HasFlag(MeasuresFilters.Humidity)) { LoadData(_measuresData, HistoryHumidity); } if (measuresFilters.HasFlag(MeasuresFilters.MinHumidity)) { LoadData(_measuresData, HistoryMinHumidity); } if (measuresFilters.HasFlag(MeasuresFilters.MaxHumidity)) { LoadData(_measuresData, HistoryMaxHumidity); } if (measuresFilters.HasFlag(MeasuresFilters.DateMaxHumidity)) { LoadData(_measuresData, HistoryDateMaxHumidity); } }
/// <summary> /// 添加新的标尺 /// </summary> private void btnOK_Click(object sender, EventArgs e) { try { if (!double.TryParse(tbUnit.Text, out this.unitNum)) { XMessageDialog.Warning("请输入数字!"); } if (unitNum == 0) { XMessageDialog.Warning("请输入大于0的值!"); return; } if (String.IsNullOrEmpty(tbNewScaleName.Text)) { XMessageDialog.Warning("请输入标尺名!"); return; } if (this.scaleList.Exists(x => x.Name == tbNewScaleName.Text)) { XMessageDialog.Warning("无法添加,存在重名标尺!"); return; } //保存标尺到配置文件 MeasureScale newScale = new MeasureScale() { Name = tbNewScaleName.Text, Pixels = pixels, UnitValue = unitNum, UnitType = (UnitTypeDef)(this.cbUnits.SelectedIndex) }; scaleList.Add(newScale); updateAllScalesToXml(); this.gcScales.RefreshDataSource(); //pixelsPerUnit = pixels / unitNum; //设置当前的标尺 if (drawArea != null) { drawArea.SetScale(newScale); } //drawArea.SetUnit(pixelsPerUnit); } catch (Exception ex) { logger.Error(ex.Message); } }
internal async Task <MeasuresData> GetMeasure(string deviceId, MeasureScale scale, MeasuresFilters measureType, DateTime?dateBegin, DateTime?dateEnd, string moduleId = "", int limit = 1024) { if (!await CheckConnectionAsync().ConfigureAwait(false)) { return(null); } var parameters = HttpUtility.ParseQueryString(string.Empty); parameters["access_token"] = _accessToken; parameters["device_id"] = deviceId; parameters["scale"] = scale.ToJsonString(); parameters["type"] = measureType.ToJsonString(); if (dateBegin != null) { parameters["date_begin"] = dateBegin.FromLocalDateTime().ToString(CultureInfo.InvariantCulture); } if (dateEnd != null) { parameters["date_end"] = dateEnd.FromLocalDateTime().ToString(CultureInfo.InvariantCulture); } parameters["optimize"] = true.ToString(CultureInfo.InvariantCulture).ToUpperInvariant(); parameters["limit"] = limit.ToString(CultureInfo.InvariantCulture); if (moduleId.Length > 0) { parameters["module_id"] = moduleId; } using (HttpClient client = new HttpClient()) using (HttpRequestMessage request = new HttpRequestMessage()) { request.Method = HttpMethod.Post; request.RequestUri = new Uri(host + apiPath + "/getmeasure"); request.Content = new StringContent(parameters.ToString(), Encoding.UTF8, "application/x-www-form-urlencoded"); HttpResponseMessage response = await client.SendAsync(request).ConfigureAwait(false); string responseBody = await response.Content.ReadAsStringAsync().ConfigureAwait(false); MeasuresData measuresData = new MeasuresData().FromJson(responseBody); if (measuresData.Content == null) { ErrorMessageData errorMessageData = new ErrorMessageData().FromJson(responseBody); _errorMessage = errorMessageData.Error.Message; return(null); } return(measuresData); } }
/// <summary> /// Loads the historical data according to the defined filter. /// </summary> /// <param name="measuresFilters">List of filters to be applied.</param> /// <returns></returns> public override async Task LoadMeasuresAsync(MeasuresFilters measuresFilters) { _valueIndex = 0; MeasureScale measureScale = GetScaleFromDateRange(_dateBegin, _dateEnd); _measuresData = await _aPICommands.GetMeasure(BaseId, measureScale, measuresFilters, _dateBegin, _dateEnd, Id).ConfigureAwait(false); if (_measuresData == null) { return; } if (measuresFilters.HasFlag(MeasuresFilters.Rain)) { LoadData(_measuresData, HistoryRain); } if (measuresFilters.HasFlag(MeasuresFilters.SumRain)) { LoadData(_measuresData, HistorySumRain); } }
public List <MeasureStatisticItem> GetMeasureStatisticData(MeasureScale scale) { List <MeasureStatisticItem> list = new List <MeasureStatisticItem>(); List <MeasureListItem> measureList = this.GetMeasureListData(scale); List <MeasureListItem> lineList = new List <MeasureListItem>(); List <MeasureListItem> rectangleList = new List <MeasureListItem>(); List <MeasureListItem> polylineList = new List <MeasureListItem>(); List <MeasureListItem> ellipseList = new List <MeasureListItem>(); foreach (var listItem in measureList) { if (listItem.ToolType == "直线") { lineList.Add(listItem); } if (listItem.ToolType == "曲折线") { polylineList.Add(listItem); } if (listItem.ToolType == "矩形") { rectangleList.Add(listItem); } if (listItem.ToolType == "椭圆") { ellipseList.Add(listItem); } } string unit = "像素"; if (measureList.Count != 0) { unit = measureList[0].Unit; } if (lineList.Count != 0) { MeasureStatisticItem lineLenItem = new MeasureStatisticItem(); lineLenItem.ToolType = "直线"; lineLenItem.StatisticType = MeasureStatisticTypeDef.LENGTH; lineLenItem.Count = lineList.Count; lineLenItem.AverageValue = lineList.Sum(x => x.Length) / lineList.Count; lineLenItem.MinValue = lineList.Min(x => x.Length); lineLenItem.MaxValue = lineList.Max(x => x.Length); lineLenItem.Unit = unit; list.Add(lineLenItem); } if (rectangleList.Count != 0) { MeasureStatisticItem rectAreaItem = new MeasureStatisticItem(); rectAreaItem.ToolType = "矩形"; rectAreaItem.StatisticType = MeasureStatisticTypeDef.AREA; rectAreaItem.Count = rectangleList.Count; rectAreaItem.AverageValue = rectangleList.Sum(x => x.Area) / rectangleList.Count; rectAreaItem.MinValue = rectangleList.Min(x => x.Area); rectAreaItem.MaxValue = rectangleList.Max(x => x.Area); rectAreaItem.Unit = unit; list.Add(rectAreaItem); MeasureStatisticItem rectPerimeterItem = new MeasureStatisticItem(); rectPerimeterItem.StatisticType = MeasureStatisticTypeDef.PERIMETER; rectPerimeterItem.Count = rectangleList.Count; rectPerimeterItem.AverageValue = rectangleList.Sum(x => x.Perimeter) / rectangleList.Count; rectPerimeterItem.MinValue = rectangleList.Min(x => x.Perimeter); rectPerimeterItem.MaxValue = rectangleList.Max(x => x.Perimeter); rectPerimeterItem.Unit = unit; list.Add(rectPerimeterItem); } if (polylineList.Count != 0) { MeasureStatisticItem polyLenItem = new MeasureStatisticItem(); polyLenItem.ToolType = "曲折线"; polyLenItem.StatisticType = MeasureStatisticTypeDef.AREA; polyLenItem.Count = polylineList.Count; polyLenItem.AverageValue = polylineList.Sum(x => x.Length) / polylineList.Count; polyLenItem.MinValue = polylineList.Min(x => x.Length); polyLenItem.MaxValue = polylineList.Max(x => x.Length); polyLenItem.Unit = unit; list.Add(polyLenItem); } if (ellipseList.Count != 0) { MeasureStatisticItem ellipseAreaItem = new MeasureStatisticItem(); ellipseAreaItem.ToolType = "椭圆"; ellipseAreaItem.StatisticType = MeasureStatisticTypeDef.AREA; ellipseAreaItem.Count = ellipseList.Count; ellipseAreaItem.AverageValue = ellipseList.Sum(x => x.Area) / ellipseList.Count; ellipseAreaItem.MinValue = ellipseList.Min(x => x.Area); ellipseAreaItem.MaxValue = ellipseList.Max(x => x.Area); ellipseAreaItem.Unit = unit; list.Add(ellipseAreaItem); MeasureStatisticItem ellipsePerimeterItem = new MeasureStatisticItem(); ellipsePerimeterItem.StatisticType = MeasureStatisticTypeDef.PERIMETER; ellipsePerimeterItem.Count = ellipseList.Count; ellipsePerimeterItem.AverageValue = ellipseList.Sum(x => x.Perimeter) / ellipseList.Count; ellipsePerimeterItem.MinValue = ellipseList.Min(x => x.Perimeter); ellipsePerimeterItem.MaxValue = ellipseList.Max(x => x.Perimeter); ellipsePerimeterItem.Unit = unit; list.Add(ellipsePerimeterItem); } return(list); }
public Scale(MeasureScale scale) { _scale = scale; }
internal async Task <RoomMeasures> GetRoomMeasures(string homeId, string roomId, MeasureScale scale, MeasuresFilters measureType, DateTime?dateBegin, DateTime?dateEnd, int limit = 1024) { if (!await CheckConnectionAsync().ConfigureAwait(false)) { return(null); } var parameters = HttpUtility.ParseQueryString(string.Empty); parameters["home_id"] = homeId; parameters["room_id"] = roomId; parameters["scale"] = scale.ToJsonString(); parameters["type"] = measureType.ToJsonString(); if (dateBegin != null) { parameters["date_begin"] = dateBegin.FromLocalDateTime().ToString(CultureInfo.InvariantCulture); } if (dateEnd != null) { parameters["date_end"] = dateEnd.FromLocalDateTime().ToString(CultureInfo.InvariantCulture); } parameters["optimize"] = true.ToString(CultureInfo.InvariantCulture).ToUpperInvariant(); parameters["limit"] = limit.ToString(CultureInfo.InvariantCulture); using (HttpClient client = new HttpClient()) using (HttpRequestMessage request = new HttpRequestMessage()) { request.Method = HttpMethod.Post; request.RequestUri = new Uri(host + apiPath + "/getroommeasure"); request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", _accessToken); request.Content = new StringContent(parameters.ToString(), Encoding.UTF8, "application/x-www-form-urlencoded"); HttpResponseMessage response = await client.SendAsync(request).ConfigureAwait(false); string responseBody = await response.Content.ReadAsStringAsync().ConfigureAwait(false); RoomMeasures roomMeasures = new RoomMeasures().FromJson(responseBody); if (roomMeasures.Body == null) { ErrorMessageData errorMessageData = new ErrorMessageData().FromJson(responseBody); _errorMessage = errorMessageData.Error.Message; return(null); } return(roomMeasures); } }