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

Reprojecting a vector layer

Reprojecting a vector layer is inherent to QGIS; however, to access it from Python, we must use the Processing Toolbox.

Getting ready

For this recipe, we'll need the Mississippi cities shapefile in the Mississippi Transverse Mercator Projection, which can be downloaded as a ZIP file here:

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

Extract the zipped shapefile to a directory named /qgis_data/ms.

How to do it...

To reproject the layer, we'll simply call the qgis:reprojectlayer processing algorithm specifying the input shapefile, the new projection, and the output file name.

  1. Start QGIS.
  2. From the Plugins menu, select Python Console.
  3. First, we need to import the processing module:
            import processing 
    
  4. Next, we run the reprojection algorithm:
            processing.runalg("qgis:reprojectlayer",
                              "/qgis_data/ms/MSCities_MSTM.shp","epsg:4326",
                              "/qgis_data/ms/MSCities_MSTM_4326.shp") 
    

How it works...

This algorithm is simple as long as the input layer's projection is defined in a .prj definition file. You can define the known projection of the layer in PYQGIS using the following code in which we will use EPSG 4326 as the projection:

    crs = layer.crs() 
    crs.createFromId(4326) 
    layer.setCrs(crs)