QGIS Python Programming Cookbook(Second Edition)
上QQ阅读APP看书,第一时间看更新

Calculating the area of a polygon

This recipe measures the area of a polygon. Area calculation can be an end in itself to measure the size of a plot of land or a building. It can also be the input to other calculations such as land use maps.

Getting ready

For this recipe, we'll use a single-feature polygon shapefile, which you can download from the following link:

https://github.com/GeospatialPython/Learn/raw/master/Mississippi.zip

Unzip the shapefile and put it in a directory named qgis_data/ms within your root or home directory.

How to do it...

Perform the following steps to measure the area of a large polygon:

  1. First, import the QGIS constants library, as follows:
            from qgis.core import QGis 
    
  2. Load the layer:
            lyr = QgsVectorLayer("/qgis_data/ms/mississippi.shp",
                                 "Mississippi", "ogr") 
    
  3. Access the layer's features:
            fts = lyr.getFeatures() 
    
  4. Get the boundary feature:
            boundary = fts.next() 
    
  5. Create the measurement object instance:
            d = QgsDistanceArea() 
    
  6. Pass the polygon list to the measureArea() method:
            m = d.measurePolygon(boundary.geometry().asPolygon()[0]) 
    
  7. Convert the measurement from decimal degrees to miles:
            d.convertMeasurement(m, QGis.Degrees, QGis.NauticalMiles, True) 
    
  8. Verify that your output looks similar to the following:
             (42955.47889640281, 7) 
    

How it works...

PyQGIS has no measureArea() method, but it has a measurePolygon() method in the QgsDistanceArea object. The method accepts a list of points. In this case, when we convert the measurement output from decimal degrees to miles, we also just specify True in the convertMeasurement() method so that QGIS knows that it is an area calculation. Note that when we get the boundary geometry as a polygon, we use an index of 0, suggesting that there is more than one polygon. A polygon geometry can have inner rings, which are specified as additional polygons. The outermost ring, in this case the only ring, is the first polygon.