Open a mutliband raster, edit values in one of the bands, and overwrite the raster using Python/Rasterio? Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?Using GDAL in python to stack Landsat bandsFirst time rasterio errorIn gdal how to save 3 dimensional array as stacked raster image?Creating NRG Multiband TIF from single bands using QGIS?How do I import multiple tif images and save it as one tiff file with skimage or gdal in python?Using Rasterio or GDAL to stack multiple bands without using subprocess commandsContinuously changing values in the same band of a multiband rasterCalling individual bands from multiband.tif in python perform action and save output in mutilband.tif?Is it possible to read in specific bands from a multi-band raster with gdal or rasterio?How to extract ALL bands from multiband raster in ArcGIS?
How can I make names more distinctive without making them longer?
Statistical model of ligand substitution
Replacing HDD with SSD; what about non-APFS/APFS?
Cauchy Sequence Characterized only By Directly Neighbouring Sequence Members
How can players take actions together that are impossible otherwise?
Can a zero nonce be safely used with AES-GCM if the key is random and never used again?
What LEGO pieces have "real-world" functionality?
Is it possible to ask for a hotel room without minibar/extra services?
How can you insert a "times/divide" symbol similar to the "plus/minus" (±) one?
When communicating altitude with a '9' in it, should it be pronounced "nine hundred" or "niner hundred"?
What was the last x86 CPU that did not have the x87 floating-point unit built in?
How to rotate it perfectly?
How does modal jazz use chord progressions?
New Order #5: where Fibonacci and Beatty meet at Wythoff
What is the electric potential inside a point charge?
Simulating Exploding Dice
Stopping real property loss from eroding embankment
Is drag coefficient lowest at zero angle of attack?
What do you call a plan that's an alternative plan in case your initial plan fails?
The following signatures were invalid: EXPKEYSIG 1397BC53640DB551
Why is there no army of Iron-Mans in the MCU?
Passing functions in C++
Can I throw a longsword at someone?
Slither Like a Snake
Open a mutliband raster, edit values in one of the bands, and overwrite the raster using Python/Rasterio?
Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)
Announcing the arrival of Valued Associate #679: Cesar Manara
Unicorn Meta Zoo #1: Why another podcast?Using GDAL in python to stack Landsat bandsFirst time rasterio errorIn gdal how to save 3 dimensional array as stacked raster image?Creating NRG Multiband TIF from single bands using QGIS?How do I import multiple tif images and save it as one tiff file with skimage or gdal in python?Using Rasterio or GDAL to stack multiple bands without using subprocess commandsContinuously changing values in the same band of a multiband rasterCalling individual bands from multiband.tif in python perform action and save output in mutilband.tif?Is it possible to read in specific bands from a multi-band raster with gdal or rasterio?How to extract ALL bands from multiband raster in ArcGIS?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
I have numerous multiband rasters (36 band) in which preserving the band order is important for future processing. One of the bands often contains erroneous data and I'd like to be able to change all the values in within that band to 0, but keep the band in place. Then ideally overwrite the changes to the existing raster. Is there a way to do this without having to open the band in question, make the change to 0, and then re-stack all the other bands along with the edited band into a new file? Or at the very least save the changes to a new raster without having to call up the other 35 bands individually into the stacking function?
For instance
import rasterio as rio
import numpy as np
inraster = "path_to_a_mutliband_raster"
rast = rio.open(inraster)
badband = rast.read(7)
badbad[badband != 0] = 0
From there I'm not sure how to save those changes back into the mutliband raster.
python editing rasterio multi-band
add a comment |
I have numerous multiband rasters (36 band) in which preserving the band order is important for future processing. One of the bands often contains erroneous data and I'd like to be able to change all the values in within that band to 0, but keep the band in place. Then ideally overwrite the changes to the existing raster. Is there a way to do this without having to open the band in question, make the change to 0, and then re-stack all the other bands along with the edited band into a new file? Or at the very least save the changes to a new raster without having to call up the other 35 bands individually into the stacking function?
For instance
import rasterio as rio
import numpy as np
inraster = "path_to_a_mutliband_raster"
rast = rio.open(inraster)
badband = rast.read(7)
badbad[badband != 0] = 0
From there I'm not sure how to save those changes back into the mutliband raster.
python editing rasterio multi-band
I am not certain at all, but I would be surprised if it would be possible to edit only a single band without re-writing the full file. One somewhat messy workaround I can think of would be to write your 0-band to disk, then make a virtual raster that stacks the good bands before, the 0-band, and the good bands after into a single file.
– Jon
Apr 8 at 16:30
add a comment |
I have numerous multiband rasters (36 band) in which preserving the band order is important for future processing. One of the bands often contains erroneous data and I'd like to be able to change all the values in within that band to 0, but keep the band in place. Then ideally overwrite the changes to the existing raster. Is there a way to do this without having to open the band in question, make the change to 0, and then re-stack all the other bands along with the edited band into a new file? Or at the very least save the changes to a new raster without having to call up the other 35 bands individually into the stacking function?
For instance
import rasterio as rio
import numpy as np
inraster = "path_to_a_mutliband_raster"
rast = rio.open(inraster)
badband = rast.read(7)
badbad[badband != 0] = 0
From there I'm not sure how to save those changes back into the mutliband raster.
python editing rasterio multi-band
I have numerous multiband rasters (36 band) in which preserving the band order is important for future processing. One of the bands often contains erroneous data and I'd like to be able to change all the values in within that band to 0, but keep the band in place. Then ideally overwrite the changes to the existing raster. Is there a way to do this without having to open the band in question, make the change to 0, and then re-stack all the other bands along with the edited band into a new file? Or at the very least save the changes to a new raster without having to call up the other 35 bands individually into the stacking function?
For instance
import rasterio as rio
import numpy as np
inraster = "path_to_a_mutliband_raster"
rast = rio.open(inraster)
badband = rast.read(7)
badbad[badband != 0] = 0
From there I'm not sure how to save those changes back into the mutliband raster.
python editing rasterio multi-band
python editing rasterio multi-band
edited Apr 9 at 14:57
nmtoken
8,12542866
8,12542866
asked Apr 8 at 15:21
jeremyg19jeremyg19
183
183
I am not certain at all, but I would be surprised if it would be possible to edit only a single band without re-writing the full file. One somewhat messy workaround I can think of would be to write your 0-band to disk, then make a virtual raster that stacks the good bands before, the 0-band, and the good bands after into a single file.
– Jon
Apr 8 at 16:30
add a comment |
I am not certain at all, but I would be surprised if it would be possible to edit only a single band without re-writing the full file. One somewhat messy workaround I can think of would be to write your 0-band to disk, then make a virtual raster that stacks the good bands before, the 0-band, and the good bands after into a single file.
– Jon
Apr 8 at 16:30
I am not certain at all, but I would be surprised if it would be possible to edit only a single band without re-writing the full file. One somewhat messy workaround I can think of would be to write your 0-band to disk, then make a virtual raster that stacks the good bands before, the 0-band, and the good bands after into a single file.
– Jon
Apr 8 at 16:30
I am not certain at all, but I would be surprised if it would be possible to edit only a single band without re-writing the full file. One somewhat messy workaround I can think of would be to write your 0-band to disk, then make a virtual raster that stacks the good bands before, the 0-band, and the good bands after into a single file.
– Jon
Apr 8 at 16:30
add a comment |
1 Answer
1
active
oldest
votes
I did not find a solution to overwrite the existing raster, but the time of making a new one was much faster than I expected. In this case it still required calling up the other bands and writing them back to new file. Here is what I used -
import rasterio as rio
import numpy as np
rasterin = "path_to_a_mutliband_raster"
rasterout = 'path_to_output_raster'
rast = rio.open(rasterin)
meta = rast.meta
bands = [x + 1 for x in list(range(rast.count))]
rast.close()
badbands = [7, 16, 25]
with rio.open(rasterout, 'w', **meta) as dst:
with rio.open(rasterin) as src:
for ID, b in enumerate(bands,1):
if b in ndvibands:
ndvi = src.read(b)
ndvi[ndvi != 0] = 0
dst.write(ndvi, ID)
else:
data = src.read(b)
dst.write(data, ID)
dst.close
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "79"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgis.stackexchange.com%2fquestions%2f318139%2fopen-a-mutliband-raster-edit-values-in-one-of-the-bands-and-overwrite-the-rast%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
I did not find a solution to overwrite the existing raster, but the time of making a new one was much faster than I expected. In this case it still required calling up the other bands and writing them back to new file. Here is what I used -
import rasterio as rio
import numpy as np
rasterin = "path_to_a_mutliband_raster"
rasterout = 'path_to_output_raster'
rast = rio.open(rasterin)
meta = rast.meta
bands = [x + 1 for x in list(range(rast.count))]
rast.close()
badbands = [7, 16, 25]
with rio.open(rasterout, 'w', **meta) as dst:
with rio.open(rasterin) as src:
for ID, b in enumerate(bands,1):
if b in ndvibands:
ndvi = src.read(b)
ndvi[ndvi != 0] = 0
dst.write(ndvi, ID)
else:
data = src.read(b)
dst.write(data, ID)
dst.close
add a comment |
I did not find a solution to overwrite the existing raster, but the time of making a new one was much faster than I expected. In this case it still required calling up the other bands and writing them back to new file. Here is what I used -
import rasterio as rio
import numpy as np
rasterin = "path_to_a_mutliband_raster"
rasterout = 'path_to_output_raster'
rast = rio.open(rasterin)
meta = rast.meta
bands = [x + 1 for x in list(range(rast.count))]
rast.close()
badbands = [7, 16, 25]
with rio.open(rasterout, 'w', **meta) as dst:
with rio.open(rasterin) as src:
for ID, b in enumerate(bands,1):
if b in ndvibands:
ndvi = src.read(b)
ndvi[ndvi != 0] = 0
dst.write(ndvi, ID)
else:
data = src.read(b)
dst.write(data, ID)
dst.close
add a comment |
I did not find a solution to overwrite the existing raster, but the time of making a new one was much faster than I expected. In this case it still required calling up the other bands and writing them back to new file. Here is what I used -
import rasterio as rio
import numpy as np
rasterin = "path_to_a_mutliband_raster"
rasterout = 'path_to_output_raster'
rast = rio.open(rasterin)
meta = rast.meta
bands = [x + 1 for x in list(range(rast.count))]
rast.close()
badbands = [7, 16, 25]
with rio.open(rasterout, 'w', **meta) as dst:
with rio.open(rasterin) as src:
for ID, b in enumerate(bands,1):
if b in ndvibands:
ndvi = src.read(b)
ndvi[ndvi != 0] = 0
dst.write(ndvi, ID)
else:
data = src.read(b)
dst.write(data, ID)
dst.close
I did not find a solution to overwrite the existing raster, but the time of making a new one was much faster than I expected. In this case it still required calling up the other bands and writing them back to new file. Here is what I used -
import rasterio as rio
import numpy as np
rasterin = "path_to_a_mutliband_raster"
rasterout = 'path_to_output_raster'
rast = rio.open(rasterin)
meta = rast.meta
bands = [x + 1 for x in list(range(rast.count))]
rast.close()
badbands = [7, 16, 25]
with rio.open(rasterout, 'w', **meta) as dst:
with rio.open(rasterin) as src:
for ID, b in enumerate(bands,1):
if b in ndvibands:
ndvi = src.read(b)
ndvi[ndvi != 0] = 0
dst.write(ndvi, ID)
else:
data = src.read(b)
dst.write(data, ID)
dst.close
answered Apr 9 at 12:53
jeremyg19jeremyg19
183
183
add a comment |
add a comment |
Thanks for contributing an answer to Geographic Information Systems Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgis.stackexchange.com%2fquestions%2f318139%2fopen-a-mutliband-raster-edit-values-in-one-of-the-bands-and-overwrite-the-rast%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
I am not certain at all, but I would be surprised if it would be possible to edit only a single band without re-writing the full file. One somewhat messy workaround I can think of would be to write your 0-band to disk, then make a virtual raster that stacks the good bands before, the 0-band, and the good bands after into a single file.
– Jon
Apr 8 at 16:30