private void SetDriver(string path) { using (var driver = gdalDataset.GetDriver()) { if (GdalHelper.IsCreateCopyOnlySupported(driver)) { log.WarnFormat("Datasource is readonly: {0}", path); return; } //cannot directly create dataset. check if dataset can be created by copying from another set if (GdalHelper.IsCreateCopySupported(driver)) { if (gdalDataset.RasterCount > 1000) { log.WarnFormat("Using in memory-driver with large dataset can yield unexpected results."); } log.WarnFormat("Using in memory-driver with large dataset can yield unexpected results."); } else { using (var gdalDriver = Gdal.GetDriverByName("MEM")) { var oldGdalDataSet = gdalDataset; gdalDataset = gdalDriver.CreateCopy(path, gdalDataset, 0, new string[] { }, null, null); oldGdalDataSet.Dispose(); } } } }
private void SetDriver(string path) { using (var driver = gdalDataset.GetDriver()) { if (!GdalHelper.IsCreateSupported(driver)) { log.WarnFormat("Datasource is readonly: {0}", path); return; } //cannot directly create dataset. check if dataset can be created by copying from another set if (GdalHelper.IsCreateCopySupported(driver)) { //TODO: fix this criteria if (GetDatasetSize() < 1000000) { log.Debug("Using in-memory driver to facilitate writing to datasource"); //log.WarnFormat("Using in memory-driver with large dataset can yield unexpected results."); using (var gdalDriver = Gdal.GetDriverByName("MEM")) { var oldGdalDataSet = gdalDataset; gdalDataset = gdalDriver.CreateCopy(path, gdalDataset, 0, new string[] { }, null, null); oldGdalDataSet.Dispose(); } } } } }
private static void WriteGdalDatasetToFile(string path, Dataset gdalDataset) { log.Debug("Recreating file and copying data from in-memory datasource."); Driver targetDatasetDriver = GetTargetDatasetDriver(path); using (targetDatasetDriver) { if (GdalHelper.IsCreateCopySupported(targetDatasetDriver)) { targetDatasetDriver.CreateCopy(path, gdalDataset, 0, new string[] { }, null, null) .Dispose(); } } GC.Collect(); }