Calculating length for all selected lines

If you need to calculate the total of a given dataset property, such as length, the easiest thing to do is use Python. In this recipe, we'll total the length of the railways in a dataset.

Getting ready

You will need to download a zipped shapefile from https://geospatialpython.googlecode.com/svn/ms_rails_mstm.zip.

Unzip it and place it in directory named ms in your qgis_data directory.

How to do it...

We will load the layer, loop through the features while keeping a running total of line lengths, and finally convert the result to kilometers. To do this, we need to perform the following steps:

  1. First, we'll set up the path to our shapefile:
    pth = "/Users/joellawhead/qgis_data/ms/ms_rails_mstm.shp"
    
  2. Then, we'll load the layer:
    lyr = QgsVectorLayer(pth, "Railroads", "ogr")
    
  3. Next, we need a variable to total the line lengths:
    total = 0
    
  4. Now, we loop through the layer, getting the length of each line:
    for f in lyr.getFeatures():
      geom = f.geometry()
      total += geom.length()
    
  5. Finally, we print the total length converted to kilometers and format the string to only show two decimal places:
    print "%0.2f total kilometers of rails." % (total / 1000)
    

How it works...

This function is simple, but it's not directly available in the QGIS API. You can use a similar technique to total up the area of a set of polygons or perform conditional counting.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset