public string IdentifyFeature(Map map, GeoCollection <object> args) { string callbackResult = string.Empty; if (map != null) { JsonCallbackRequest callbackRequest = JsonSerializer.Deserialize <JsonCallbackRequest>(args[0].ToString()); callbackResult = GetIdentifiedFeatureInfo(callbackRequest, map); } return(callbackResult); }
private string GetIdentifiedFeatureInfo(JsonCallbackRequest callbackRequest, Map map) { // Get the requested sub-categories Category selectedCategory = null; Collection <CategoryItem> selectedCategoryItems = new Collection <CategoryItem>(); if (callbackRequest.StyleBuildType == DemographicStyleBuilderType.PieChart) { selectedCategoryItems = GetCategoryItemByAlias(callbackRequest.SelectedCategoryItems, ref selectedCategory); } else { selectedCategoryItems = GetCategoryItemByAlias(new Collection <string>() { callbackRequest.RequestColumnAlias }, ref selectedCategory); } // Get the selected columns Collection <string> selectedColumns = new Collection <string>(); foreach (CategoryItem categoryItem in selectedCategoryItems) { selectedColumns.Add(categoryItem.ColumnName); } selectedColumns.Add("Name"); // Find the identified feature with specified columns ShapeFileFeatureLayer statesLayer = map.DynamicOverlay.Layers["usStatesLayer"] as ShapeFileFeatureLayer; statesLayer.Open(); Feature identifiedFeature = statesLayer.FeatureSource.GetFeatureById(callbackRequest.SelectedFeatureId, selectedColumns); ((CloudPopup)map.Popups["featureInfoPopup"]).Position = identifiedFeature.GetShape().GetCenterPoint(); // Format the inner-html of the popup StringBuilder popupHtml = new StringBuilder("<table>"); popupHtml.Append(string.Format("<tr><td class='popupTitle'>{0}</td></tr>", identifiedFeature.ColumnValues["Name"])); popupHtml.Append("<tr><td><div class='hrLine'></div></td></tr>"); for (int i = 0; i < selectedColumns.Count - 1; i++) { string formatedString = DemographicStyleTextFormatter.GetFormatedString(selectedColumns[i], double.Parse(identifiedFeature.ColumnValues[selectedColumns[i]])); popupHtml.Append(string.Format("<tr class='popupText'><td>{0}</td></tr>", formatedString)); } popupHtml.Append("</table>"); return(popupHtml.ToString()); }
public string ApplyStyle(Map map, GeoCollection <object> args) { string callbackResult = string.Empty; if (map != null) { // Replace the "$=" with ">=", because the ">=" is not allowed in AJAX Content string jsonParameters = args[0].ToString(); if (jsonParameters.Contains("$")) { jsonParameters = jsonParameters.Replace("$", ">="); } JsonCallbackRequest callbackRequest = JsonSerializer.Deserialize <JsonCallbackRequest>(jsonParameters); callbackResult = UpdateMapAndLegend(callbackRequest, map).ToString(); } return(callbackResult); }
private bool UpdateMapAndLegend(JsonCallbackRequest callbackRequest, Map map) { // Get the requested sub-categories Category selectedCategory = null; Collection <CategoryItem> selectedCategoryItems = new Collection <CategoryItem>(); if (callbackRequest.StyleBuildType == DemographicStyleBuilderType.PieChart) { selectedCategoryItems = GetCategoryItemByAlias(callbackRequest.SelectedCategoryItems, ref selectedCategory); } else { selectedCategoryItems = GetCategoryItemByAlias(new Collection <string>() { callbackRequest.RequestColumnAlias }, ref selectedCategory); } DemographicStyleBuilder demographicStyle = null; switch (callbackRequest.StyleBuildType) { case DemographicStyleBuilderType.PieChart: demographicStyle = new PieChartDemographicStyleBuilder(); foreach (CategoryItem categoryItem in selectedCategoryItems) { ((PieChartDemographicStyleBuilder)demographicStyle).SelectedColumnAliases.Add(categoryItem.Alias); } if (!string.IsNullOrEmpty(callbackRequest.StartColor)) { ((PieChartDemographicStyleBuilder)demographicStyle).Color = GeoColor.FromHtml(callbackRequest.StartColor); } break; case DemographicStyleBuilderType.Thematic: demographicStyle = new ThematicDemographicStyleBuilder(); if (!string.IsNullOrEmpty(callbackRequest.StartColor)) { ((ThematicDemographicStyleBuilder)demographicStyle).StartColor = GeoColor.FromHtml(callbackRequest.StartColor); } if (!string.IsNullOrEmpty(callbackRequest.EndColor)) { ((ThematicDemographicStyleBuilder)demographicStyle).EndColor = GeoColor.FromHtml(callbackRequest.EndColor); } if (!string.IsNullOrEmpty(callbackRequest.ColorWheelDirection)) { ((ThematicDemographicStyleBuilder)demographicStyle).ColorWheelDirection = callbackRequest.ColorWheelDirection.Equals("Clockwise") ? ColorWheelDirection.Clockwise : ColorWheelDirection.CounterClockwise; } break; case DemographicStyleBuilderType.DotDensity: demographicStyle = new DotDensityDemographicStyleBuilder(); if (!string.IsNullOrEmpty(callbackRequest.StartColor)) { ((DotDensityDemographicStyleBuilder)demographicStyle).Color = GeoColor.FromHtml(callbackRequest.StartColor); } if (callbackRequest.SliderValue > 0) { ((DotDensityDemographicStyleBuilder)demographicStyle).DotDensityValue = 50 * (callbackRequest.SliderValue / 3.0); } break; case DemographicStyleBuilderType.ValueCircle: demographicStyle = new ValueCircleDemographicStyleBuilder(); if (!string.IsNullOrEmpty(callbackRequest.StartColor)) { ((ValueCircleDemographicStyleBuilder)demographicStyle).Color = GeoColor.FromHtml(callbackRequest.StartColor); } if (callbackRequest.SliderValue > 0) { ((ValueCircleDemographicStyleBuilder)demographicStyle).RadiusRatio = callbackRequest.SliderValue / 3.0; } break; default: break; } foreach (CategoryItem categoryItem in selectedCategoryItems) { demographicStyle.SelectedColumns.Add(categoryItem.ColumnName); } ShapeFileFeatureLayer statesLayer = map.DynamicOverlay.Layers["usStatesLayer"] as ShapeFileFeatureLayer; statesLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Clear(); Style selectedStyle = demographicStyle.GetStyle(statesLayer.FeatureSource); statesLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(selectedStyle); statesLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; map.DynamicOverlay.Redraw(); // update the legend based on the selected style UpdateLegend(demographicStyle, map); return(true); }