5

in a QGIS python plugin I get some code that writes a asc file, this is the header of the final file:

NCOLS  20 
NROWS  15 
XLLCORNER  664400.000000 
YLLCORNER  4749500.000000 
CELLSIZE   100.000000  
NODATA_VALUE   -9999.0 
NODATA_VALUE   -9999.0 

as you can see I get the X and Y corners of the file.

I wanted also to load the file in QGIS and obviously it asks me for the CRS.

What I am looking for, is to avoid this message and the related pop-up window while using QgsRasterLayer.

I've found this 2 old questions:

How can I specify the CRS of a raster layer in pyqgis?

and

How to get CRS of a raster layer in pyqgis?

but I cannot use them in order to solve my problem.

Someone has an idea?

matteo
  • 3,304
  • 1
  • 23
  • 47
  • @AndreSilva. The second answer talks about a raster already loaded in the TOC and many answers in the first question talk about iface.. – matteo Feb 22 '16 at 14:16
  • Do you know which UTM (probable) zone or other CRS it is, and thus the EPSG well-known ID? – mkennedy Feb 22 '16 at 17:26
  • @mkennedy. Yes, I can retrieve the CRS (and EPSG code) easily. – matteo Feb 23 '16 at 08:09

1 Answers1

6

For example, if you can retrieve the CRS (and EPSG code) easily then you can assign CRS easily with a few paths at the Python Console of QGIS. For example, I load a raster (xwRcl.tif) where it also asks me for the CRS (see next image).

enter image description here

These commands at the Python Console do the work:

>>>layer = iface.activeLayer()
>>>CRS = QgsCoordinateReferenceSystem()
>>>CRS
<qgis._core.QgsCoordinateReferenceSystem object at 0x9fbc5dac>
>>>CRS.createFromSrid(32612) #EPSG = 32612
True
>>>layer.setCrs(CRS)
>>>layer.crs().postgisSrid()  #to corroborate the assignation
32612L

I saved the raster with another name (test_crs.tif):

provider = layer.dataProvider()

pipe = QgsRasterPipe()

pipe.set(provider.clone())

rasterWriter = QgsRasterFileWriter("/home/zeito/pyqgis_data/test_crs.tif")

xSize = provider.xSize()
ySize = provider.ySize()

rasterWriter.writeRaster(pipe, xSize, ySize, provider.extent(), CRS)

and after reloaded it, in this opportunity, it was avoided the message of asking me for the CRS.

xunilk
  • 29,891
  • 4
  • 41
  • 80
  • Just a note that on QGIS 2.14 and 2.18, the line in your second code block that saves the raster- pipe.set(provider.clone()) appears to crash QGIS. Saving of the raster, however, seems to work without that line so that's not a problem. – 15Step Mar 06 '18 at 15:09