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(); } } }
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"); } }