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

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?


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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.