protected virtual void TrashGeneratingUnitRefreshImpl() { Logger.Info($"Processing '{JobName}'"); var layerName = Guid.NewGuid().ToString(); var outputPath = $"{Path.Combine(Path.GetTempPath(), layerName)}.shp"; // a PyQGIS script computes the TGU layer and saves it as a shapefile var processUtilityResult = QgisRunner.ExecutePyqgisScript($"{NeptuneWebConfiguration.PyqgisWorkingDirectory}ComputeTrashGeneratingUnits.py", NeptuneWebConfiguration.PyqgisWorkingDirectory, outputPath); if (processUtilityResult.ReturnCode != 0) { Logger.Error("TGU Geoprocessing failed. Output:"); Logger.Error(processUtilityResult.StdOutAndStdErr); throw new GeoprocessingException(processUtilityResult.StdOutAndStdErr); } Logger.Info("QGIS output:"); Logger.Info(processUtilityResult.StdOutAndStdErr); try { // kill the old TGUs DbContext.Database.ExecuteSqlCommand("TRUNCATE TABLE dbo.TrashGeneratingUnit"); // a GDAL command pulls the shapefile into the database. var ogr2OgrCommandLineRunner = new Ogr2OgrCommandLineRunnerForTGU(NeptuneWebConfiguration.Ogr2OgrExecutable, CoordinateSystemHelper.NAD_83_HARN_CA_ZONE_VI_SRID, 3.6e+6); ogr2OgrCommandLineRunner.ImportTrashGeneratingUnitsFromShapefile2771(layerName, outputPath, NeptuneWebConfiguration.DatabaseConnectionString); } catch (Ogr2OgrCommandLineException e) { Logger.Error("TGU loading (CRS: 2771) via GDAL reported the following errors. This usually means an invalid geometry was skipped. However, you may need to correct the error and re-run the TGU job.", e); throw; } // repeat but with 4326 try { DbContext.Database.ExecuteSqlCommand("TRUNCATE TABLE dbo.TrashGeneratingUnit4326"); var ogr2OgrCommandLineRunner4326 = new Ogr2OgrCommandLineRunnerForTGU(NeptuneWebConfiguration.Ogr2OgrExecutable, CoordinateSystemHelper.WGS_1984_SRID, 3.6e+6); ogr2OgrCommandLineRunner4326.ImportTrashGeneratingUnitsFromShapefile4326(layerName, outputPath, NeptuneWebConfiguration.DatabaseConnectionString); } catch (Ogr2OgrCommandLineException e) { Logger.Error("TGU loading (CRS: 2771) via GDAL reported the following errors. This usually means an invalid geometry was skipped. However, you may need to correct the error and re-run the TGU job.", e); throw; } }
public ContentResult TestComputeTrashGeneratingUnits() { var processUtilityResult = QgisRunner.ExecutePyqgisScript($"{NeptuneWebConfiguration.PyqgisWorkingDirectory}ComputeTrashGeneratingUnits.py", NeptuneWebConfiguration.PyqgisWorkingDirectory, $"{Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString())}.shp"); if (processUtilityResult.ReturnCode == 0) { return(Content($"Pyqgis execution succeeded. Output of QgisRunner test:\r\n {processUtilityResult.StdOut}")); } else { return(Content($"Pyqgis execution failed. Output of QgisRunner test:\r\n {processUtilityResult.StdOutAndStdErr}")); } }
public ContentResult TestNoProcessing() { var processUtilityResult = QgisRunner.ExecutePyqgisScript($"{NeptuneWebConfiguration.PyqgisWorkingDirectory}TestPyqgisMssql.py", @"C:\Windows\System32\", $"{Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString())}.shp"); if (processUtilityResult.ReturnCode == 0) { return(Content($"Pyqgis execution succeeded. Output of QgisRunner test:\n {processUtilityResult.StdOut}")); } else { return(Content($"Pyqgis execution failed. Output of QgisRunner test:\n {processUtilityResult.StdOutAndStdErr}")); } }
private void LoadGeneratingUnitRefreshImpl(int?loadGeneratingUnitRefreshAreaID) { Logger.Info($"Processing '{JobName}'"); var outputLayerName = Guid.NewGuid().ToString(); var outputLayerPath = $"{Path.Combine(Path.GetTempPath(), outputLayerName)}.shp"; var clipLayerPath = $"{Path.Combine(Path.GetTempPath(), outputLayerName)}_inputClip.json"; var additionalCommandLineArguments = new List <string> { outputLayerPath }; LoadGeneratingUnitRefreshArea loadGeneratingUnitRefreshArea = null; if (loadGeneratingUnitRefreshAreaID != null) { loadGeneratingUnitRefreshArea = DbContext.LoadGeneratingUnitRefreshAreas.Find(loadGeneratingUnitRefreshAreaID); var lguInputClipFeatures = DbContext.LoadGeneratingUnits .Where(x => x.LoadGeneratingUnitGeometry.Intersects(loadGeneratingUnitRefreshArea .LoadGeneratingUnitRefreshAreaGeometry)).ToList().Select(x => DbGeometryToGeoJsonHelper.FromDbGeometryWithNoReproject(x.LoadGeneratingUnitGeometry)).ToList(); var lguInputClipFeatureCollection = new FeatureCollection(lguInputClipFeatures) { CRS = new NamedCRS("EPSG:2771") }; // in case the load-generating units were deleted by an update, add the refresh area itself to the clip collection lguInputClipFeatureCollection.Features.Add( DbGeometryToGeoJsonHelper.FromDbGeometryWithNoReproject(loadGeneratingUnitRefreshArea .LoadGeneratingUnitRefreshAreaGeometry)); //var lguInputClipGeoJson = DbGeometryToGeoJsonHelper.FromDbGeometryWithNoReproject(dbGeometry); var lguInputClipGeoJsonString = Newtonsoft.Json.JsonConvert.SerializeObject(lguInputClipFeatureCollection); File.WriteAllText(clipLayerPath, lguInputClipGeoJsonString); additionalCommandLineArguments.AddRange(new List <string> { "--clip", clipLayerPath }); } // a PyQGIS script computes the LGU layer and saves it as a shapefile var processUtilityResult = QgisRunner.ExecutePyqgisScript($"{NeptuneWebConfiguration.PyqgisWorkingDirectory}ModelingOverlayAnalysis.py", NeptuneWebConfiguration.PyqgisWorkingDirectory, additionalCommandLineArguments); if (processUtilityResult.ReturnCode != 0) { Logger.Error("LGU Geoprocessing failed. Output:"); Logger.Error(processUtilityResult.StdOutAndStdErr); throw new GeoprocessingException(processUtilityResult.StdOutAndStdErr); } try { if (loadGeneratingUnitRefreshAreaID != null) { DbContext.Database.ExecuteSqlCommand( $"EXEC dbo.pDeleteLoadGeneratingUnitsPriorToDeltaRefresh @LoadGeneratingUnitRefreshAreaID = {loadGeneratingUnitRefreshAreaID}"); } else { DbContext.Database.ExecuteSqlCommand( $"EXEC dbo.pDeleteLoadGeneratingUnitsPriorToTotalRefresh"); } var ogr2OgrCommandLineRunner = new Ogr2OgrCommandLineRunnerForLGU(NeptuneWebConfiguration.Ogr2OgrExecutable, CoordinateSystemHelper.NAD_83_HARN_CA_ZONE_VI_SRID, 3.6e+6); ogr2OgrCommandLineRunner.ImportLoadGeneratingUnitsFromShapefile(outputLayerName, outputLayerPath, NeptuneWebConfiguration.DatabaseConnectionString); if (loadGeneratingUnitRefreshArea != null) { loadGeneratingUnitRefreshArea.ProcessDate = DateTime.Now; DbContext.SaveChangesWithNoAuditing(); } } catch (Ogr2OgrCommandLineException e) { Logger.Error("LGU loading (CRS: 2771) via GDAL reported the following errors. This usually means an invalid geometry was skipped. However, you may need to correct the error and re-run the TGU job.", e); throw; } // clean up temp files if not running in a local environment if (NeptuneWebConfiguration.NeptuneEnvironment.NeptuneEnvironmentType != NeptuneEnvironmentType.Local) { File.Delete(outputLayerPath); if (loadGeneratingUnitRefreshAreaID != null) { File.Delete(clipLayerPath); } } }