private static void ChangeAllLayersZoomLevelSet(GisEditorWpfMap map, IEnumerable <ZoomLevel> zoomLevels)
        {
            var zoomLevelSet = new ZoomLevelSet();

            map.ZoomLevelSet.CustomZoomLevels.Clear();
            foreach (var item in zoomLevels)
            {
                zoomLevelSet.CustomZoomLevels.Add(item);
            }
            map.ZoomLevelSet = zoomLevelSet;
            map.MinimumScale = map.ZoomLevelSet.CustomZoomLevels.LastOrDefault().Scale;
            var allFeatureLayers = map.GetFeatureLayers();

            foreach (var featureLayer in allFeatureLayers)
            {
                var originalZoomLevels = featureLayer.ZoomLevelSet.CustomZoomLevels.ToList();
                featureLayer.ZoomLevelSet.CustomZoomLevels.Clear();
                foreach (var item in zoomLevels)
                {
                    var       max          = item.Scale * 2;
                    var       min          = item.Scale * 0.5;
                    ZoomLevel newZoomLevel = null;
                    if (item is PreciseZoomLevel)
                    {
                        newZoomLevel = new PreciseZoomLevel(item.Scale);
                    }
                    else
                    {
                        newZoomLevel = new ZoomLevel(item.Scale);
                    }
                    foreach (var style in item.CustomStyles)
                    {
                        newZoomLevel.CustomStyles.Add(style);
                    }

                    var styles = originalZoomLevels.Where(z => z.Scale <max && z.Scale> min).SelectMany(z => z.CustomStyles);
                    foreach (var style in styles)
                    {
                        if (!newZoomLevel.CustomStyles.Contains(style))
                        {
                            newZoomLevel.CustomStyles.Add(style);
                        }
                    }
                    featureLayer.ZoomLevelSet.CustomZoomLevels.Add(newZoomLevel);
                }
            }
            foreach (var layerOverlay in GisEditor.ActiveMap.Overlays.OfType <LayerOverlay>())
            {
                if (layerOverlay.MapArguments != null)
                {
                    // layerOverlay.Refresh();
                    layerOverlay.RefreshWithBufferSettings();
                }
            }
        }
Example #2
0
        public static void SetNewScale(double zoomToScale, PointShape centerPoint, bool zoomToAuto = true)
        {
            int index = -1;

            for (int i = 0; i < GisEditor.ActiveMap.ZoomLevelSet.CustomZoomLevels.Count - 1; i++)
            {
                if (GisEditor.ActiveMap.ZoomLevelSet.CustomZoomLevels[i].Scale > zoomToScale && GisEditor.ActiveMap.ZoomLevelSet.CustomZoomLevels[i + 1].Scale <= zoomToScale)
                {
                    index = i + 1;
                    break;
                }
            }
            if (index == -1)
            {
                if (GisEditor.ActiveMap.ZoomLevelSet.CustomZoomLevels[0].Scale < zoomToScale)
                {
                    index = 0;
                }
                else if (GisEditor.ActiveMap.ZoomLevelSet.CustomZoomLevels.LastOrDefault().Scale > zoomToScale)
                {
                    index = GisEditor.ActiveMap.ZoomLevelSet.CustomZoomLevels.Count;
                }
            }

            if (index >= 0 && index <= GisEditor.ActiveMap.ZoomLevelSet.CustomZoomLevels.Count)
            {
                if (!GisEditor.ActiveMap.ZoomLevelSet.CustomZoomLevels.Any(c => Math.Abs(c.Scale - zoomToScale) < 1))
                {
                    ZoomLevel deletedZoomLevel = GisEditor.ActiveMap.ZoomLevelSet.CustomZoomLevels.FirstOrDefault(c => c is PreciseZoomLevel);
                    if (deletedZoomLevel != null)
                    {
                        GisEditor.ActiveMap.ZoomLevelSet.CustomZoomLevels.Remove(deletedZoomLevel);
                    }

                    PreciseZoomLevel newZoomLevel = new PreciseZoomLevel(zoomToScale);
                    GisEditor.ActiveMap.ZoomLevelSet.CustomZoomLevels.Insert(index, newZoomLevel);

                    ZoomLevel[] zoomLevels = GisEditor.ActiveMap.ZoomLevelSet.CustomZoomLevels.ToArray();
                    CommandHelper.ApplyNewZoomLevelSet(zoomLevels);
                }
                if (zoomToAuto)
                {
                    GisEditor.ActiveMap.ZoomTo(centerPoint, zoomToScale);
                }
            }
            else
            {
                System.Windows.Forms.MessageBox.Show(GisEditor.LanguageManager.GetStringResource("ScaleSettingsRibbonGroupViewModelScaleCannotAddText"), "Warning");
            }
        }