Select to view content in your preferred language

Save Package - WPF

1138
1
02-26-2014 11:11 PM
Labels (1)
chummaM
Emerging Contributor
Hi,

We are loading a MAP package in WPF and updating symbology classification and other items it by creating local service and dynamic layers.

Can you please let us know is there any way we can update all our changes we did in dynamic layer back to the MAP package or to MXD in WPF??

Code is shown below. I want to add the changes did to the "arcGISLocalDynamicMapServiceLayer" back to the package or to a MXD file.

Can anyone kindly let me know if we have any options for this??

---------------


   localMapService = new LocalMapService
            {
                Path = "MPK PATH",
                EnableDynamicLayers = true,
              
            };

            // Start the local map service
            localMapService.StartAsync((mapService) =>
            {
                // Once the LocalMapServce has started create a new local dynamic map service layer based on the local map service
                _arcGISLocalDynamicMapServiceLayer = new ArcGISLocalDynamicMapServiceLayer(localMapService)
                {
                    //ID = "MapService",
                    ID = AppConsts.mapLayerId,
                    //ImageFormat = ArcGISDynamicMapServiceLayer.RestImageFormat.PNG32,
                    EnableDynamicLayers = true,
                };

                // Set up an event handler for the layer initialized event
                _arcGISLocalDynamicMapServiceLayer.Initialized += (s, e) =>
                {
                   
                    Random _random = new Random();
                    LayerDrawingOptions _layerDrawingOptions;
                    _layerDrawingOptions = new LayerDrawingOptions();
                    ClassificationMethod classificationMethod = (ClassificationMethod)Enum.Parse(typeof(ClassificationMethod), strDistributionMethod);
                    var generateDataClassesTask = new GenerateRendererTask(_arcGISLocalDynamicMapServiceLayer.Url + "/" + _arcGISLocalDynamicMapServiceLayer.Layers.First(l => l.Name == layerName).ID.ToString());

                    //Event fire only if we execute Async - FOR DATA Window Generation
                    generateDataClassesTask.ExecuteCompleted += new EventHandler<GenerateRendererResultEventArgs>(generateDataClassesTask_ExecuteCompleted);

                    System.Collections.ObjectModel.ObservableCollection<ColorRamp> colorRamps;

                    //colorRamps = cTheme.GetTruvenDefaultColorRamp();

                    colorRamps = cTheme.GetColorRamp(cThemeKeys.ColorMDB, cThemeKeys.ColorTable, entityName);

                    // Build the GenerateDataClassesParameters to submit to the GenerateDataClassesTask
                    var generateDataClassesParameters = new GenerateRendererParameters
                    {
                        // Create a ClassBreaksDefinition to create a ClassBreaksRenderer
                        ClassificationDefinition = new ClassBreaksDefinition
                        {
                            BreakCount = breakCount,
                            ClassificationField = themecol,
                            ClassificationMethod = classificationMethod,
                            ColorRamps = colorRamps,
                        }
                    };

                    // Call the synchronous Execute method on the GenerateDataClassesTask
                    GenerateRendererResult generateDataClassesResult = generateDataClassesTask.Execute(generateDataClassesParameters);

                    //--- To Generate Data Window - ASync Execution is required (to call other methods)
                    if (generateDataClassesTask.IsBusy)
                        generateDataClassesTask.CancelAsync();

                    generateDataClassesTask.ExecuteAsync(generateDataClassesParameters);

                    // Set the Renderer property on the LayerDrawingOptions
                    _layerDrawingOptions.Renderer = generateDataClassesResult.Renderer as ESRI.ArcGIS.Client.ClassBreaksRenderer;

                    // Create a new layer drawing options collection and set the layer drawing options property on the local dynamic map service layer
                    _arcGISLocalDynamicMapServiceLayer.LayerDrawingOptions = new LayerDrawingOptionsCollection() { _layerDrawingOptions };


                        mapMain.Extent = _arcGISLocalDynamicMapServiceLayer.InitialExtent;


                    ESRI.ArcGIS.Client.ClassBreaksRenderer classRenderer = ((ESRI.ArcGIS.Client.ClassBreaksRenderer)(((ESRI.ArcGIS.Client.ArcGISDynamicMapServiceLayer)(mapMain.Layers[1])).LayerDrawingOptions[0].Renderer));

                    cMapWork.SetLegendItemsDataCountByClassBreaks(classRenderer, classificationMethod);

                    ((ESRI.ArcGIS.Client.Layer)(_arcGISLocalDynamicMapServiceLayer)).Opacity = layerOpacity;
                    _arcGISLocalDynamicMapServiceLayer.ShowLegend = true;
                    _arcGISLocalDynamicMapServiceLayer.Refresh();

                };

                // Add the layer to the map
                mapMain.Layers.Add(_arcGISLocalDynamicMapServiceLayer);

Regards
Chumma
0 Kudos
1 Reply
MichaelBranscomb
Esri Frequent Contributor
Hi,

Currently there is no way to save any changes you make to layers back into existing packages or new packages. For Renderers you could investigate saving those to JSON by calling the ToJSON method (and FromJSON to rehydrate renderers from JSON).

However, we are very aware of this requirement and we do have a broader map project on the roadmap for a future release.

Cheers

Mike
0 Kudos