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 void CopyCurrentDatasetFromAddedCoverage(GdalFunctionStore gdalFunctionStore, Driver gdalDriver) { gdalDataset = gdalDriver.CreateCopy(path, gdalFunctionStore.gdalDataset, 0, new string[] { }, null, "Copy"); //substitute driver by in-memory driver in case driver is read-only if (!GdalHelper.IsCreateSupported(gdalDriver)) { using (var inMemoryDriver = Gdal.GetDriverByName("MEM")) { var oldGdalDataSet = gdalDataset; //create in-memory dataset with a copy of the original data. gdalDataset = inMemoryDriver.CreateCopy(path, gdalFunctionStore.gdalDataset, 0, new string[] { }, null, null); oldGdalDataSet.Dispose(); } } }