internal static string ToJson(ThemeRange themeRange) { string json = "{"; List<string> list = new List<string>(); if (themeRange.Items != null && themeRange.Items.Count >= 1) { List<string> tempTUI = new List<string>(); foreach (var item in themeRange.Items) { tempTUI.Add(ThemeRangeItem.ToJson(item)); } list.Add(string.Format("\"items\":[{0}]", String.Join(",", tempTUI.ToArray()))); } else { list.Add("\"items\":[]"); } list.Add(string.Format("\"rangeParameter\":\"{0}\"", themeRange.RangeParameter.ToString())); list.Add(string.Format("\"rangeMode\":\"{0}\"", themeRange.RangeMode)); list.Add(string.Format("\"colorGradientType\":\"{0}\"", themeRange.ColorGradientType.ToString())); if (!string.IsNullOrEmpty(themeRange.RangeExpression)) { list.Add(string.Format("\"rangeExpression\":\"{0}\"", themeRange.RangeExpression)); } else { list.Add("\"rangeExpression\":\"\""); } if (themeRange.MemoryData != null) { list.Add("\"memoryData\":" + themeRange.ToJson(themeRange.MemoryData)); } else { list.Add("\"memoryData\":null"); } list.Add("\"type\":\"RANGE\""); json += string.Join(",", list.ToArray()); json += "}"; return json; }
//点击生成专题图触发事件 private async void commit_Click(object sender, RoutedEventArgs e) { //设置专题图子项 List<ThemeRangeItem> themeRangeItems = new List<ThemeRangeItem> { new ThemeRangeItem { Start = 0.0, End = 59973, Visible = true, Style = new ServerStyle { FillForeColor = new Color {R=216,G=244,B=254}, LineWidth = 0.1, } }, new ThemeRangeItem { Start = 59973, End = 1097234, Visible = true , Style = new ServerStyle { FillForeColor = new Color {R=131,G=232,B=252}, LineWidth = 0.1 , } }, new ThemeRangeItem { Start = 1097234, End = 5245515, Visible = true , Style = new ServerStyle { FillForeColor = new Color {R=112,G=212,B=243}, LineWidth = 0.1, } }, new ThemeRangeItem { Start = 5245515, End = 17250390, Visible = true, Style = new ServerStyle { FillForeColor = new Color {R=23,G=198,B=238}, LineWidth = 0.1, } }, new ThemeRangeItem { Start = 17250390, End = 894608700, Visible = true, Style = new ServerStyle { FillForeColor = new Color {R=0,G=187,B=236}, LineWidth = 0.1 , } }, new ThemeRangeItem { Start = 894608700, End = 12E+8, Visible = true , Style = new ServerStyle { FillForeColor = new Color {R=0,G=133,B=236}, LineWidth = 0.1 , } } }; //设置范围分段专题图字段、分段模式、分段参数和子项数组 ThemeRange themeRange = new ThemeRange { RangeExpression = "Pop_1994", RangeMode = RangeMode.EQUALINTERVAL, RangeParameter = 6, Items = themeRangeItems }; //设置专题图参数 ThemeParameters themeRangeParams = new ThemeParameters { //数据集名称 DatasetName = "Countries", //数据源名称 DataSourceName = "World", Themes = new List<Theme> { themeRange } }; //与服务器交互 try { ThemeService themeRangeServie = new ThemeService(url); var result = await themeRangeServie.ProcessAsync(themeRangeParams); //显示专题图。专题图在服务端为一个资源,每个资源都有一个 ID 号和一个 url //要显示专题图即将资源结果的 ID 号赋值给图层的 layersID 属性即可 themeLayer.LayersID = result.ResourceInfo.NewResourceID; if (!this.MyMap.Layers.Contains(themeLayer)) { //加载专题图图层 this.MyMap.Layers.Add(themeLayer); } if (!themeLayer.IsVisible) { themeLayer.IsVisible = true; } } //与服务器交互失败 catch (Exception ex) { MessageBox.Show(ex.Message); } }
internal static ThemeRange FromJson(JsonObject json) { if (json == null) return null; ThemeRange themeRange = new ThemeRange(); if (json["items"].ValueType != JsonValueType.Null && json["items"].GetObjectEx().Count > 0) { List<ThemeRangeItem> itemsList = new List<ThemeRangeItem>(); foreach (JsonObject item in json["items"].GetArray()) { itemsList.Add(ThemeRangeItem.FromJson(item)); } themeRange.Items = itemsList; } if (json["colorGradientType"].ValueType != JsonValueType.Null) { themeRange.ColorGradientType = (ColorGradientType)Enum.Parse(typeof(ColorGradientType), json["colorGradientType"].GetStringEx(), true); } else { //这里不处理为空时的情况 } themeRange.RangeExpression = json["rangeExpression"].GetStringEx(); if (json["rangeMode"].ValueType!= JsonValueType.Null) { themeRange.RangeMode = (RangeMode)Enum.Parse(typeof(RangeMode), json["rangeMode"].GetStringEx(), true); } else { //不处理Null的情况 } themeRange.RangeParameter = json["rangeParameter"].GetNumberEx(); return themeRange; }