public void Run(string filename, string fileLocation, RasterLayer r) { string localData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); var output = localData + "\\ResTBDesktop\\temp\\" + filename; var options = new[] { "-t_srs", "EPSG:3857", "-overwrite" }; var gdalUtils = new GdalUtils(); RasterReprojectCallback callback = new RasterReprojectCallback(r, MapControlTools); gdalUtils.GlobalCallback = callback; if (!gdalUtils.GdalRasterWarp(fileLocation, output, options)) { Events.MapControl_Error imghandle_error = new Events.MapControl_Error() { ErrorCode = Events.ErrorCodes.GdalWarpError, InMethod = "AddRasterLayer", AxMapError = "GdalWarp failed: " + gdalUtils.ErrorMsg[gdalUtils.LastErrorCode] + " Detailed error: " + gdalUtils.DetailedErrorMsg }; MapControlTools.On_Error(imghandle_error); } if (MapControl_RasterReprojected != null) { Events.MapControl_RasterReprojected eventArgs = new Events.MapControl_RasterReprojected(); eventArgs.rasterLayer = r; MapControl_RasterReprojected(this, eventArgs); } Events.MapControl_BusyStateChange bc = new Events.MapControl_BusyStateChange(); bc.BusyState = Events.BusyState.Idle; bc.KeyOfSender = "Rasterreprojected"; bc.Percent = 100; bc.Message = ""; MapControlTools.On_BusyStateChange(bc); }
public void AddProjectLayersThread(int Project) { var gdalUtils = new GdalUtils(); RasterReprojectCallback callback = new RasterReprojectCallback(null, MapControlTools); gdalUtils.GlobalCallback = callback; ds = new OgrDatasource(); if (!ds.Open(dBConnection.GetGdalConnectionString())) { Events.MapControl_Error error = new Events.MapControl_Error() { ErrorCode = Events.ErrorCodes.CouldNotConnectDatabase, InMethod = "AddPostGISLayer", AxMapError = ds.GdalLastErrorMsg }; On_Error(error); return; } else { Events.MapControl_BusyStateChange bc = new Events.MapControl_BusyStateChange(); bc.BusyState = Events.BusyState.Busy; bc.KeyOfSender = "AddProjectLayersThread"; bc.Percent = 10; bc.Message = Resources.MapControl_AddedPerimeter; MapControlTools.On_BusyStateChange(bc); // RiskMap if (!AddProjectLayer(Project, ResTBPostGISType.RiskMap)) { return; } if (!AddProjectLayer(Project, ResTBPostGISType.RiskMapAfter)) { return; } // Perimeter if (!AddProjectLayer(Project, ResTBPostGISType.Perimeter)) { return; } if (MapControlTools.ShapesCount(MapControlTools.GetLayerNamesFromPostGISType(ResTBPostGISType.Perimeter).First()) > 0) { MapControlTools.ZoomToLayer(MapControlTools.GetLayerNamesFromPostGISType(ResTBPostGISType.Perimeter).First()); } // Hazard Maps DB.ResTBContext db = new DB.ResTBContext(); List <HazardMap> hazardMaps = db.HazardMaps.Where(m => m.Project.Id == Project).Include(m => m.NatHazard).OrderBy(m => m.Index).ToList(); double percentadd = 50.0 / hazardMaps.Count; int currentpercent = 10; foreach (HazardMap hazardMap in hazardMaps.OrderByDescending(m => m.BeforeAction)) { ResTBHazardMapLayer hazardLayer; if (hazardMap.BeforeAction) { hazardLayer = new ResTBHazardMapLayer(Project, true, hazardMap.NatHazard, hazardMap.Index); } else { hazardLayer = new ResTBHazardMapLayer(Project, false, hazardMap.NatHazard, hazardMap.Index); } currentpercent += (int)percentadd; if (!MapControlTools.Layers.Where(m => m.Name == hazardLayer.Name).Any()) { AddProjectLayer(hazardLayer, false); bc = new Events.MapControl_BusyStateChange(); bc.BusyState = Events.BusyState.Busy; bc.KeyOfSender = "AddProjectLayersThread"; bc.Percent = currentpercent; bc.Message = Resources.MapControl_AddingHazardMaps; MapControlTools.On_BusyStateChange(bc); } } // Damage Potential if (!AddProjectLayer(Project, ResTBPostGISType.DamagePotential)) { return; } // Resiliences if (!AddProjectLayer(Project, ResTBPostGISType.ResilienceBefore)) { return; } if (!AddProjectLayer(Project, ResTBPostGISType.ResilienceAfter)) { return; } currentpercent += 30; bc = new Events.MapControl_BusyStateChange(); bc.BusyState = Events.BusyState.Busy; bc.KeyOfSender = "AddProjectLayersThread"; bc.Percent = currentpercent; bc.Message = Resources.MapControl_AddedDamagePotentials; MapControlTools.On_BusyStateChange(bc); // Mitigation Measure if (!AddProjectLayer(Project, ResTBPostGISType.MitigationMeasure)) { return; } currentpercent += 10; bc = new Events.MapControl_BusyStateChange(); bc.BusyState = Events.BusyState.Idle; bc.KeyOfSender = "Project"; bc.Percent = 100; bc.Message = Resources.MapControl_ProjectLoaded;// "Project loaded"; MapControlTools.On_BusyStateChange(bc); return; } }