Converting QgsRaster object to arrayHow to fully load a raster into a numpy array?Converting Matplotlib contour objects to Shapely objectsUsing QgsRasterCalculatorhow to transfer a geotif with WGS84 to a mercator array for ploting it with matplotlib.basemapRendering shapefiles (.shp) to TIF with labels?Render QgsRasterLayer without adding to legendOverriding method of qgis object does not workImporting numpy array into QGIS?GDAL raster calculator does not create NDVI using PyQGIS?Convert floats array to rasterPython Scripting in QGIS to add features and select them?

Why doesn't H₄O²⁺ exist?

Important Resources for Dark Age Civilizations?

A newer friend of my brother's gave him a load of baseball cards that are supposedly extremely valuable. Is this a scam?

Theorems that impeded progress

How is it possible to have an ability score that is less than 3?

Why is Minecraft giving an OpenGL error?

How old can references or sources in a thesis be?

Why can't I see bouncing of switch on oscilloscope screen?

Revoked SSL certificate

How much of data wrangling is a data scientist's job?

Languages that we cannot (dis)prove to be Context-Free

Why doesn't a class having private constructor prevent inheriting from this class? How to control which classes can inherit from a certain base?

A case of the sniffles

What typically incentivizes a professor to change jobs to a lower ranking university?

meaning of に in 本当に?

Why is consensus so controversial in Britain?

how to check a propriety using r studio

What would happen to a modern skyscraper if it rains micro blackholes?

How to format long polynomial?

What is the word for reserving something for yourself before others do?

Replacing matching entries in one column of a file by another column from a different file

Does detail obscure or enhance action?

Why are electrically insulating heatsinks so rare? Is it just cost?

High voltage LED indicator 40-1000 VDC without additional power supply



Converting QgsRaster object to array


How to fully load a raster into a numpy array?Converting Matplotlib contour objects to Shapely objectsUsing QgsRasterCalculatorhow to transfer a geotif with WGS84 to a mercator array for ploting it with matplotlib.basemapRendering shapefiles (.shp) to TIF with labels?Render QgsRasterLayer without adding to legendOverriding method of qgis object does not workImporting numpy array into QGIS?GDAL raster calculator does not create NDVI using PyQGIS?Convert floats array to rasterPython Scripting in QGIS to add features and select them?






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








1















So I'm a newbie, so sorry if this is an idiot question.



I'm trying to write a plugin for QGIS3 for my organisation, and I'd like to output a standalone figure (i.e. not in the QGIS window) as the final output. This way I can show rasters, line plots and vectors, in multiple subplots in a single figure and the user can save the figure directly if they want to.



I'm using Matplotlib as that's already available in pyQGIS, so I want to stick with that for logistic reasons.



My problem is that I have some nice QgsRasterLayer rasters (and QgsVectorLayer vectors too) that I'd like to display as some of the subplots but I don't know how to convert them into a form suitable display in Matplotlib. I can display them into the main QGIS window but that's not what I'm after. I need to plot them with Matplotlib.



Can anyone give me some suggestions? It's probably really obvious, but I'm just not finding the solution as my python experience is limited.










share|improve this question









New contributor




SJJ is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.




















  • Is it possible for you to use gdal or rasterio? I found some answers here: gis.stackexchange.com/questions/32995/…. This exports the data to a numpy array, which matplotlib understands.

    – Andreas Müller
    2 days ago











  • Thanks - yes GDAL is possible, but I need the rasters in a QgsRasterLayer and display them in the main QGIS interface. That part is all ok. But if I took a GDAL approach I assume I'd have to open them a second time, which seems inelegant. Or have I got that wrong? I suspect the answer lies somewhere in QgsRasterLayer.dataProvider.block but so far it's still escaping me.

    – SJJ
    2 days ago


















1















So I'm a newbie, so sorry if this is an idiot question.



I'm trying to write a plugin for QGIS3 for my organisation, and I'd like to output a standalone figure (i.e. not in the QGIS window) as the final output. This way I can show rasters, line plots and vectors, in multiple subplots in a single figure and the user can save the figure directly if they want to.



I'm using Matplotlib as that's already available in pyQGIS, so I want to stick with that for logistic reasons.



My problem is that I have some nice QgsRasterLayer rasters (and QgsVectorLayer vectors too) that I'd like to display as some of the subplots but I don't know how to convert them into a form suitable display in Matplotlib. I can display them into the main QGIS window but that's not what I'm after. I need to plot them with Matplotlib.



Can anyone give me some suggestions? It's probably really obvious, but I'm just not finding the solution as my python experience is limited.










share|improve this question









New contributor




SJJ is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.




















  • Is it possible for you to use gdal or rasterio? I found some answers here: gis.stackexchange.com/questions/32995/…. This exports the data to a numpy array, which matplotlib understands.

    – Andreas Müller
    2 days ago











  • Thanks - yes GDAL is possible, but I need the rasters in a QgsRasterLayer and display them in the main QGIS interface. That part is all ok. But if I took a GDAL approach I assume I'd have to open them a second time, which seems inelegant. Or have I got that wrong? I suspect the answer lies somewhere in QgsRasterLayer.dataProvider.block but so far it's still escaping me.

    – SJJ
    2 days ago














1












1








1








So I'm a newbie, so sorry if this is an idiot question.



I'm trying to write a plugin for QGIS3 for my organisation, and I'd like to output a standalone figure (i.e. not in the QGIS window) as the final output. This way I can show rasters, line plots and vectors, in multiple subplots in a single figure and the user can save the figure directly if they want to.



I'm using Matplotlib as that's already available in pyQGIS, so I want to stick with that for logistic reasons.



My problem is that I have some nice QgsRasterLayer rasters (and QgsVectorLayer vectors too) that I'd like to display as some of the subplots but I don't know how to convert them into a form suitable display in Matplotlib. I can display them into the main QGIS window but that's not what I'm after. I need to plot them with Matplotlib.



Can anyone give me some suggestions? It's probably really obvious, but I'm just not finding the solution as my python experience is limited.










share|improve this question









New contributor




SJJ is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












So I'm a newbie, so sorry if this is an idiot question.



I'm trying to write a plugin for QGIS3 for my organisation, and I'd like to output a standalone figure (i.e. not in the QGIS window) as the final output. This way I can show rasters, line plots and vectors, in multiple subplots in a single figure and the user can save the figure directly if they want to.



I'm using Matplotlib as that's already available in pyQGIS, so I want to stick with that for logistic reasons.



My problem is that I have some nice QgsRasterLayer rasters (and QgsVectorLayer vectors too) that I'd like to display as some of the subplots but I don't know how to convert them into a form suitable display in Matplotlib. I can display them into the main QGIS window but that's not what I'm after. I need to plot them with Matplotlib.



Can anyone give me some suggestions? It's probably really obvious, but I'm just not finding the solution as my python experience is limited.







pyqgis matplotlib






share|improve this question









New contributor




SJJ is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




SJJ is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited Apr 2 at 11:13









J. Monticolo

1,397217




1,397217






New contributor




SJJ is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked Apr 2 at 9:24









SJJSJJ

62




62




New contributor




SJJ is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





SJJ is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






SJJ is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












  • Is it possible for you to use gdal or rasterio? I found some answers here: gis.stackexchange.com/questions/32995/…. This exports the data to a numpy array, which matplotlib understands.

    – Andreas Müller
    2 days ago











  • Thanks - yes GDAL is possible, but I need the rasters in a QgsRasterLayer and display them in the main QGIS interface. That part is all ok. But if I took a GDAL approach I assume I'd have to open them a second time, which seems inelegant. Or have I got that wrong? I suspect the answer lies somewhere in QgsRasterLayer.dataProvider.block but so far it's still escaping me.

    – SJJ
    2 days ago


















  • Is it possible for you to use gdal or rasterio? I found some answers here: gis.stackexchange.com/questions/32995/…. This exports the data to a numpy array, which matplotlib understands.

    – Andreas Müller
    2 days ago











  • Thanks - yes GDAL is possible, but I need the rasters in a QgsRasterLayer and display them in the main QGIS interface. That part is all ok. But if I took a GDAL approach I assume I'd have to open them a second time, which seems inelegant. Or have I got that wrong? I suspect the answer lies somewhere in QgsRasterLayer.dataProvider.block but so far it's still escaping me.

    – SJJ
    2 days ago

















Is it possible for you to use gdal or rasterio? I found some answers here: gis.stackexchange.com/questions/32995/…. This exports the data to a numpy array, which matplotlib understands.

– Andreas Müller
2 days ago





Is it possible for you to use gdal or rasterio? I found some answers here: gis.stackexchange.com/questions/32995/…. This exports the data to a numpy array, which matplotlib understands.

– Andreas Müller
2 days ago













Thanks - yes GDAL is possible, but I need the rasters in a QgsRasterLayer and display them in the main QGIS interface. That part is all ok. But if I took a GDAL approach I assume I'd have to open them a second time, which seems inelegant. Or have I got that wrong? I suspect the answer lies somewhere in QgsRasterLayer.dataProvider.block but so far it's still escaping me.

– SJJ
2 days ago






Thanks - yes GDAL is possible, but I need the rasters in a QgsRasterLayer and display them in the main QGIS interface. That part is all ok. But if I took a GDAL approach I assume I'd have to open them a second time, which seems inelegant. Or have I got that wrong? I suspect the answer lies somewhere in QgsRasterLayer.dataProvider.block but so far it's still escaping me.

– SJJ
2 days ago











1 Answer
1






active

oldest

votes


















0














Barry Rowlingson build an plugin for QGIS2 called "Rasterlang" (https://www.maths.lancs.ac.uk/~rowlings/Software/Qgis/Plugins/rasterlang/), inside there is a modul named layers.py with a function called layerAsArray():



def layerAsArray(layer):
""" read the data from a single-band layer into a numpy/Numeric array.
Only works for gdal layers!
"""

gd = gdal.Open(str(layer.source()))
array = gd.ReadAsArray()
return array


Like you I was concerned about loading data twice, but didn't see a way through QgsRasterLayer. Provider seems to be always gdal, but you can't "cast" it back and use ReadAsArray() on the provider.






share|improve this answer























  • Ok thanks - am re-assured that others have struggled with the same problem. It's not just me then. As some of my rasters are large I am concerned about the time and memory implications of loading twice. But if its the only route, then it's the one I will take although I remain open to other suggestions. Thank you for your kind help. Sarj

    – SJJ
    2 days ago











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
);



);






SJJ is a new contributor. Be nice, and check out our Code of Conduct.









draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgis.stackexchange.com%2fquestions%2f317464%2fconverting-qgsraster-object-to-array%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









0














Barry Rowlingson build an plugin for QGIS2 called "Rasterlang" (https://www.maths.lancs.ac.uk/~rowlings/Software/Qgis/Plugins/rasterlang/), inside there is a modul named layers.py with a function called layerAsArray():



def layerAsArray(layer):
""" read the data from a single-band layer into a numpy/Numeric array.
Only works for gdal layers!
"""

gd = gdal.Open(str(layer.source()))
array = gd.ReadAsArray()
return array


Like you I was concerned about loading data twice, but didn't see a way through QgsRasterLayer. Provider seems to be always gdal, but you can't "cast" it back and use ReadAsArray() on the provider.






share|improve this answer























  • Ok thanks - am re-assured that others have struggled with the same problem. It's not just me then. As some of my rasters are large I am concerned about the time and memory implications of loading twice. But if its the only route, then it's the one I will take although I remain open to other suggestions. Thank you for your kind help. Sarj

    – SJJ
    2 days ago















0














Barry Rowlingson build an plugin for QGIS2 called "Rasterlang" (https://www.maths.lancs.ac.uk/~rowlings/Software/Qgis/Plugins/rasterlang/), inside there is a modul named layers.py with a function called layerAsArray():



def layerAsArray(layer):
""" read the data from a single-band layer into a numpy/Numeric array.
Only works for gdal layers!
"""

gd = gdal.Open(str(layer.source()))
array = gd.ReadAsArray()
return array


Like you I was concerned about loading data twice, but didn't see a way through QgsRasterLayer. Provider seems to be always gdal, but you can't "cast" it back and use ReadAsArray() on the provider.






share|improve this answer























  • Ok thanks - am re-assured that others have struggled with the same problem. It's not just me then. As some of my rasters are large I am concerned about the time and memory implications of loading twice. But if its the only route, then it's the one I will take although I remain open to other suggestions. Thank you for your kind help. Sarj

    – SJJ
    2 days ago













0












0








0







Barry Rowlingson build an plugin for QGIS2 called "Rasterlang" (https://www.maths.lancs.ac.uk/~rowlings/Software/Qgis/Plugins/rasterlang/), inside there is a modul named layers.py with a function called layerAsArray():



def layerAsArray(layer):
""" read the data from a single-band layer into a numpy/Numeric array.
Only works for gdal layers!
"""

gd = gdal.Open(str(layer.source()))
array = gd.ReadAsArray()
return array


Like you I was concerned about loading data twice, but didn't see a way through QgsRasterLayer. Provider seems to be always gdal, but you can't "cast" it back and use ReadAsArray() on the provider.






share|improve this answer













Barry Rowlingson build an plugin for QGIS2 called "Rasterlang" (https://www.maths.lancs.ac.uk/~rowlings/Software/Qgis/Plugins/rasterlang/), inside there is a modul named layers.py with a function called layerAsArray():



def layerAsArray(layer):
""" read the data from a single-band layer into a numpy/Numeric array.
Only works for gdal layers!
"""

gd = gdal.Open(str(layer.source()))
array = gd.ReadAsArray()
return array


Like you I was concerned about loading data twice, but didn't see a way through QgsRasterLayer. Provider seems to be always gdal, but you can't "cast" it back and use ReadAsArray() on the provider.







share|improve this answer












share|improve this answer



share|improve this answer










answered 2 days ago









Andreas MüllerAndreas Müller

1,633613




1,633613












  • Ok thanks - am re-assured that others have struggled with the same problem. It's not just me then. As some of my rasters are large I am concerned about the time and memory implications of loading twice. But if its the only route, then it's the one I will take although I remain open to other suggestions. Thank you for your kind help. Sarj

    – SJJ
    2 days ago

















  • Ok thanks - am re-assured that others have struggled with the same problem. It's not just me then. As some of my rasters are large I am concerned about the time and memory implications of loading twice. But if its the only route, then it's the one I will take although I remain open to other suggestions. Thank you for your kind help. Sarj

    – SJJ
    2 days ago
















Ok thanks - am re-assured that others have struggled with the same problem. It's not just me then. As some of my rasters are large I am concerned about the time and memory implications of loading twice. But if its the only route, then it's the one I will take although I remain open to other suggestions. Thank you for your kind help. Sarj

– SJJ
2 days ago





Ok thanks - am re-assured that others have struggled with the same problem. It's not just me then. As some of my rasters are large I am concerned about the time and memory implications of loading twice. But if its the only route, then it's the one I will take although I remain open to other suggestions. Thank you for your kind help. Sarj

– SJJ
2 days ago










SJJ is a new contributor. Be nice, and check out our Code of Conduct.









draft saved

draft discarded


















SJJ is a new contributor. Be nice, and check out our Code of Conduct.












SJJ is a new contributor. Be nice, and check out our Code of Conduct.











SJJ is a new contributor. Be nice, and check out our Code of Conduct.














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.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fgis.stackexchange.com%2fquestions%2f317464%2fconverting-qgsraster-object-to-array%23new-answer', 'question_page');

);

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







Popular posts from this blog

Romeo and Juliet ContentsCharactersSynopsisSourcesDate and textThemes and motifsCriticism and interpretationLegacyScene by sceneSee alsoNotes and referencesSourcesExternal linksNavigation menu"Consumer Price Index (estimate) 1800–"10.2307/28710160037-3222287101610.1093/res/II.5.31910.2307/45967845967810.2307/2869925286992510.1525/jams.1982.35.3.03a00050"Dada Masilo: South African dancer who breaks the rules"10.1093/res/os-XV.57.1610.2307/28680942868094"Sweet Sorrow: Mann-Korman's Romeo and Juliet Closes Sept. 5 at MN's Ordway"the original10.2307/45957745957710.1017/CCOL0521570476.009"Ram Leela box office collections hit massive Rs 100 crore, pulverises prediction"Archived"Broadway Revival of Romeo and Juliet, Starring Orlando Bloom and Condola Rashad, Will Close Dec. 8"Archived10.1075/jhp.7.1.04hon"Wherefore art thou, Romeo? To make us laugh at Navy Pier"the original10.1093/gmo/9781561592630.article.O006772"Ram-leela Review Roundup: Critics Hail Film as Best Adaptation of Romeo and Juliet"Archived10.2307/31946310047-77293194631"Romeo and Juliet get Twitter treatment""Juliet's Nurse by Lois Leveen""Romeo and Juliet: Orlando Bloom's Broadway Debut Released in Theaters for Valentine's Day"Archived"Romeo and Juliet Has No Balcony"10.1093/gmo/9781561592630.article.O00778110.2307/2867423286742310.1076/enst.82.2.115.959510.1080/00138380601042675"A plague o' both your houses: error in GCSE exam paper forces apology""Juliet of the Five O'Clock Shadow, and Other Wonders"10.2307/33912430027-4321339124310.2307/28487440038-7134284874410.2307/29123140149-661129123144728341M"Weekender Guide: Shakespeare on The Drive""balcony"UK public library membership"romeo"UK public library membership10.1017/CCOL9780521844291"Post-Zionist Critique on Israel and the Palestinians Part III: Popular Culture"10.2307/25379071533-86140377-919X2537907"Capulets and Montagues: UK exam board admit mixing names up in Romeo and Juliet paper"Istoria Novellamente Ritrovata di Due Nobili Amanti2027/mdp.390150822329610820-750X"GCSE exam error: Board accidentally rewrites Shakespeare"10.2307/29176390149-66112917639"Exam board apologises after error in English GCSE paper which confused characters in Shakespeare's Romeo and Juliet""From Mariotto and Ganozza to Romeo and Guilietta: Metamorphoses of a Renaissance Tale"10.2307/37323537323510.2307/2867455286745510.2307/28678912867891"10 Questions for Taylor Swift"10.2307/28680922868092"Haymarket Theatre""The Zeffirelli Way: Revealing Talk by Florentine Director""Michael Smuin: 1938-2007 / Prolific dance director had showy career"The Life and Art of Edwin BoothRomeo and JulietRomeo and JulietRomeo and JulietRomeo and JulietEasy Read Romeo and JulietRomeo and Julieteeecb12003684p(data)4099369-3n8211610759dbe00d-a9e2-41a3-b2c1-977dd692899302814385X313670221313670221

Creating closest line along the point''s azimuth using PostgreSQL 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?Drawing line between points at specific distance in PostGIS?How to efficiently find the closest point over the dateline?How to find the nearest point by using PostGIS function?PostGIS nearest point with LATERAL JOIN in PostgreSQL 9.3+Creating a table and inserting selected streets using plpgsql functionsCreating a table that stores Distances and other columnSaving select query results (year wise) from PostgreSQL/PostGIS to text filesWhat is the information behind this geometry?How to give start and end vertex ids dynamically in pgr_dijkstra?Point to Polygon nearest distance DS_distance is not using geography index & knn <-> or <#> does not give result in orderLine to point conversion with start point and end point detection?

Crop image to path created in TikZ? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)Crop an inserted image?TikZ pictures does not appear in posterImage behind and beyond crop marks?Tikz picture as large as possible on A4 PageTransparency vs image compression dilemmaHow to crop background from image automatically?Image does not cropTikzexternal capturing crop marks when externalizing pgfplots?How to include image path that contains a dollar signCrop image with left size given