Beispiel #1
0
        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);
        }
Beispiel #2
0
        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());
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }