public async Task <IActionResult> UploadGDBAndParseFeatureClasses([FromForm] IFormFile inputFile) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } byte[] inputFileContents; await using (var ms = new MemoryStream(4096)) { await inputFile.CopyToAsync(ms); inputFileContents = ms.ToArray(); } // save the gdb file contents to UploadedGdb so user doesn't have to wait for upload of file again var uploadedGdbID = UploadedGdb.CreateNew(_dbContext, inputFileContents); using var disposableTempFile = DisposableTempFile.MakeDisposableTempFileEndingIn(".gdb.zip"); var gdbFile = disposableTempFile.FileInfo; System.IO.File.WriteAllBytes(gdbFile.FullName, inputFileContents); try { var featureClassInfos = OgrInfoCommandLineRunner.GetFeatureClassInfoFromFileGdb( _rioConfiguration.OgrInfoExecutable, gdbFile.FullName, 250000000, _logger, 1); var uploadParcelLayerInfoDto = new UploadParcelLayerInfoDto() { UploadedGdbID = uploadedGdbID, FeatureClasses = featureClassInfos }; return(Ok(uploadParcelLayerInfoDto)); } catch (System.ComponentModel.DataAnnotations.ValidationException e) { _logger.LogError(e, e.Message); UploadedGdb.Delete(_dbContext, uploadedGdbID); return(BadRequest(e.Message)); } catch (Exception e) { _logger.LogError(e, e.Message); UploadedGdb.Delete(_dbContext, uploadedGdbID); return(BadRequest("Error reading GDB file!")); } }
public ActionResult <ParcelUpdateExpectedResultsDto> PreviewParcelLayerGDBChangesViaGeoJsonFeatureCollectionAndUploadToStaging([FromBody] ParcelLayerUpdateDto model) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var waterYearDto = WaterYear.GetByWaterYearID(_dbContext, model.YearChangesToTakeEffect); if (waterYearDto == null) { return(BadRequest("Invalid water year selected")); } var gdbFileContents = UploadedGdb.GetUploadedGdbFileContents(_dbContext, model.UploadedGDBID); using var disposableTempFile = DisposableTempFile.MakeDisposableTempFileEndingIn(".gdb.zip"); var gdbFile = disposableTempFile.FileInfo; System.IO.File.WriteAllBytes(gdbFile.FullName, gdbFileContents); try { var ogr2OgrCommandLineRunner = new Ogr2OgrCommandLineRunner(_rioConfiguration.Ogr2OgrExecutable, Ogr2OgrCommandLineRunner.DefaultCoordinateSystemId, 250000000, false); var columns = model.ColumnMappings.Select( x => $"{x.MappedColumnName} as {x.RequiredColumnName}").ToList(); var geoJson = ogr2OgrCommandLineRunner.ImportFileGdbToGeoJson(gdbFile.FullName, model.ParcelLayerNameInGDB, columns, null, _logger, null, false); var featureCollection = GeoJsonHelpers.GetFeatureCollectionFromGeoJsonString(geoJson, 14); var expectedResults = ParcelUpdateStaging.AddFromFeatureCollection(_dbContext, featureCollection, _rioConfiguration.ValidParcelNumberRegexPattern, _rioConfiguration.ValidParcelNumberPatternAsStringForDisplay, waterYearDto); return(Ok(expectedResults)); } catch (System.ComponentModel.DataAnnotations.ValidationException e) { _logger.LogError(e.Message); return(BadRequest(e.Message)); } catch (Exception e) { _logger.LogError(e.Message); return(BadRequest("Error generating preview of changes!")); } }