2

I have a text file which has the details of many .tif files which have to be converted to a single merged .vrt file in QGIS Python Console.

text = "W:/04 Tools/07 MapMaker/workingfiles/text.txt"
with open(text, 'r') as f:
 list_text = [line.strip() for line in f]
 list_no = len(list_text)

I created a list called list_text which contains all the .tif files.

vrtSublist = []
for sllist in range(0,list_no):
 output_vrt = "W:/04 Tools/07 MapMaker/workingfiles/tif" + "_tile" + str(sllist) + ".vrt"
 if os.path.isfile(list_text[sllist]):
 general.runalg("gdalogr:buildvirtualraster",list_text[sllist],0,False,False,output_vrt, progress=None)
 vrtSublist.append(str(output_vrt))
 else:
 print ("The file " + list_text[sllist] + " is Not Found. Please add this file.")

So, all the .vrt files are now in vrtSublist. Now, I want to merge 7 .vrt files each into a single .vrt file; so that I will group all the .vrt files in another list called as sublists (where sublists[0] = 7, sublists[1] = 7,.... ).

y_count = 7
sublists = [vrtSublist[x:x+y_count] for x in xrange(0, len(vrtSublist), y_count)]
if len(vrtSublist) % y_count == 0:
 sublist_no = len(vrtSublist)/y_count
else: 
 sublist_no = (len(vrtSublist)/y_count) + 1
Latlist = []
for slsub in range(0,sublist_no): 
 output_vrtsublist = s"W:/04 Tools/07 MapMaker/workingfiles/tif" + "_Lat" + str(slsub) + ".vrt"
 general.runalg("gdalogr:buildvirtualraster",sublists[slsub],0,False,False,output_vrtsublist, progress=None)
 Latlist.append(str(output_vrtsublist))

Now, I have merged each of the 7 .vrt files into single .vrt files; and now, I can see the list of output .vrt files in another list Latlist.

Latlist_no = len(Latlist)
output_vrtfinal = "W:/04 Tools/07 MapMaker/workingfiles/tif" + "_merged.vrt"
general.runalg("gdalogr:buildvirtualraster",Latlist,0,False,False,output_vrtfinal, progress=None)
output_vrtclipped = "W:/04 Tools/07 MapMaker/workingfiles/tif" + ".vrt"
extents_vrtclip = "%f,%f,%f,%f"% (lon, longmax, lat, latmax)
general.runalg("gdalogr:cliprasterbyextent",output_vrtfinal,"",extents_vrtclip,5,4,75,6,1,False,0,False,"",output_vrtclipped, progress=None)

Unfortunately, I am getting an error

Traceback (most recent call last):
IndexError: list index out of range

I am getting this error in the line :

sublists = [vrtSublist[x:x+y_count] for x in xrange(0, len(vrtSublist), y_count)] 

How can I solve this issue?

PolyGeo
65.5k29 gold badges115 silver badges349 bronze badges
asked Jan 30, 2018 at 13:43

1 Answer 1

3

Finally, I solved this issue.

Eventhough the error was displayed as it is in line :

sublists = [vrtSublist[x:x+y_count] for x in xrange(0, len(vrtSublist), y_count)] 

But, actually, the issue was with the line (I found out this after checking the logic of each line by line) :

extents_vrtclip = "%f,%f,%f,%f"% (lon, longmax, lat, latmax) 

Here, as per the coordinate values which I given as input, lat was greater than latmax (that is lat> latmax).

But, as per the algorithm in the line :

general.runalg("gdalogr:cliprasterbyextent",output_vrtfinal,"",extents_vrtclip,5,4,75,6,1,False,0,False,"",output_vrtclipped, progress=None)

lat must be smaller than or equal to latmax (that is lat <= latmax).

So, when I changed the input coordinate values such that lat <= latmax and lon <= longmax ; then the algorithm worked correctly. Thus, my above python program was successfully executed.

answered Jan 31, 2018 at 11:30

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.