In the QgsDistanceArea
object, PyQGIS has excellent capabilities for measuring the distance. We'll use this object for several recipes, starting with measuring the distance between two points.
If you don't already have the New York City Museums layer used in the previous recipes in this chapter, download the layer from https://geospatialpython.googlecode.com/svn/NYC_MUSEUMS_GEO.zip.
Unzip that file and place the shapefile's contents in a directory named nyc
within your qgis_data
directory, within your root or home directory.
In the following steps, we'll extract the first and last points in the layer's point order and measure their distance:
from qgis.core import QGis
lyr = QgsVectorLayer("/qgis_data/nyc/NYC_MUSEUMS_GEO.shp", "Museums", "ogr")
fts = lyr.getFeatures()
first = fts.next()
last = fts.next()
for f in fts: last = f
d = QgsDistanceArea()
m = d.measureLine(first.geometry().asPoint(), last.geometry().asPoint())
d.convertMeasurement(m, 2, 0, False)
(4401.1622240174165, 0)
The QgsDistanceArea
object accepts different types of geometry as input. In this case, we use two points. The map units for this layer are in decimal degrees, which isn't meaningful for a distance measurement. So, we use the QgsDistanceArea.convertMeasurement()
method to covert the output to meters. The parameters for the method are the measurement output, the input units (in decimal degrees), the output units (meters), and a boolean to denote whether this conversion is an area calculation verses a linear measurement.
The returned tuple is the measurement value and the units. The value 0 tells us that the output is in meters.