private void MapLayerToGroups(MapWin4Project project) { var groups = _context.Legend.Groups; var layers = project.MapWindow.Layers; var legendLayers = _context.Legend.Layers; foreach (var xmlLayer in layers) { var layer = legendLayers.FirstOrDefault(l => l.Name.EqualsIgnoreCase(xmlLayer.Name)); if (layer != null) { var g = groups.GetGroupSafe(xmlLayer.GroupIndex + 1); if (g != null) { _context.Layers.MoveLayer(layer.Handle, g.Handle); layer.Expanded = xmlLayer.IsExpanded(); } } } // removing data layers group to which layers are added originally if (groups.Count > 1 && !groups[0].Layers.Any()) { groups.Remove(groups[0].Handle); } }
private void RestoreMapProjection(MapWin4Project project, string filename) { if (project.MapWindow == null) { return; } if (project.MapWindow.ProjectProjectionWKT == null && project.MapWindow.ProjectProjection == null) { Logger.Current.Info("No projection found int the project file: " + filename); return; } var sr = new SpatialReference(); if (!sr.ImportFromAutoDetect(project.MapWindow.ProjectProjectionWKT)) { if (!sr.ImportFromAutoDetect(project.MapWindow.ProjectProjection)) { Logger.Current.Info("Failed to parse project projection: " + filename); return; } } _context.SetMapProjection(sr); }
private void RestoreLayers(MapWin4Project project, string path) { if (project.MapwinGis == null || project.MapwinGis.Layers == null) { Logger.Current.Info("Failed to find Layers node in the legacy project file."); return; } var layers = project.MapwinGis.Layers; int step = 0; int count = layers.Count; foreach (var xmlLayer in layers) { step++; FireProgressChanged(step, count, "Loading layer: " + xmlLayer.LayerName); if (string.IsNullOrWhiteSpace(xmlLayer.Filename)) { Logger.Current.Info("Failed to load layer: " + (xmlLayer.LayerName ?? "")); continue; } string filename = Path.Combine(path, xmlLayer.Filename); if (!File.Exists(filename)) { Logger.Current.Info("Layer isn't found: " + filename); continue; } if (_layerService.AddLayersFromFilename(filename)) { var layer = _context.Layers.ItemByHandle(_layerService.LastLayerHandle); if (layer == null) { continue; } layer.Name = xmlLayer.LayerName; string state = xmlLayer.SerializeToXml(); layer.Deserialize(state); } else if (_layerService.Aborted) { return; } } }
private void RestoreGroups(MapWin4Project project) { if (project.MapWindow == null || project.MapWindow.Groups == null || project.MapWindow.Layers == null) { Logger.Current.Info("Failed to find Groups node in the legacy project file."); return; } var xmlGroups = project.MapWindow.Groups; var groups = _context.Legend.Groups; foreach (var xmlGroup in xmlGroups) { var group = groups.Add(xmlGroup.Name); group.Expanded = xmlGroup.IsExpanded(); } }
private void RestoreLocator(MapWin4Project project) { if (project.MapWindow == null || project.MapWindow.PreviewMap == null) { return; } var xmlPreview = project.MapWindow.PreviewMap; var bitmap = _imageSerializationService.ConvertStringToImage(xmlPreview.Image.Value, xmlPreview.Image.Type); double dx = NumericHelper.Parse(xmlPreview.Dx, 1.0); double dy = NumericHelper.Parse(xmlPreview.Dy, 1.0); double xll = NumericHelper.Parse(xmlPreview.XllCenter, 0.0); double yll = NumericHelper.Parse(xmlPreview.YllCenter, 0.0); _context.Locator.RestorePicture(bitmap as System.Drawing.Image, dx, dy, xll, yll); }
/// <summary> /// Restores the state of application by populating application _context after project file was deserialized. /// </summary> public bool Restore(MapWin4Project project, string filename) { if (project == null) { return(false); } _context.Map.Lock(); _context.Legend.Lock(); string path = Path.GetDirectoryName(filename); try { _layerService.BeginBatch(); RestoreMapProjection(project, filename); RestoreLayers(project, path); RestoreGroups(project); MapLayerToGroups(project); RestoreExtents(project); RestoreLocator(project); return(true); } finally { _layerService.EndBatch(); _context.Map.Unlock(); _context.Legend.Unlock(); _context.Legend.Redraw(LegendRedraw.LegendAndMap); } }
private void RestoreExtents(MapWin4Project project) { if (project.MapwinGis == null || project.MapwinGis.Mapstate == null) { return; } var state = project.MapwinGis.Mapstate; try { var env = new Envelope(double.Parse(state.ExtentsLeft), double.Parse(state.ExtentsRight), double.Parse(state.ExtentsBottom), double.Parse(state.ExtentsTop)); _context.Map.ZoomToExtents(env); } catch (Exception ex) { Logger.Current.Info("Failed to parse project extents: " + ex.Message); } }