Ondersteuning van projecties

Coördinaten ReferentieSystemen

Coördinaten referentiesystemen (CRS) zijn ingekapseld in de klasse QgsCoordinateReferenceSystem. Instances van deze klasse kunnen op verschillende manieren worden gemaakt:

  • specificeren van CRS met zijn ID

    # PostGIS SRID 4326 is allocated for WGS84
    crs = QgsCoordinateReferenceSystem(4326, QgsCoordinateReferenceSystem.PostgisCrsId)
    

    QGIS gebruikt drie verschillende ID’s voor elk referentiesysteem:

    • PostgisCrsId — code gebruikt in PostGIS databases.

    • InternalCrsId — interne QGIS code.

    • EpsgCrsId — code in de EPSG notatie

    Indien niet anders gespecificeerd in tweede parameter, wordt standaard PostGIS SRID gebruikt.

  • specificeren van CRS door zijn well-known text (WKT)

    wkt = 'GEOGCS["WGS84", DATUM["WGS84", SPHEROID["WGS84", 6378137.0, 298.257223563]],'
           PRIMEM["Greenwich", 0.0], UNIT["degree",0.017453292519943295],'
           AXIS["Longitude",EAST], AXIS["Latitude",NORTH]]'
    crs = QgsCoordinateReferenceSystem(wkt)
  • maak een ongeldig CRS en gebruik dan een van de functies create*() om die te initialiseren. In het volgende voorbeeld gebruiken we Proj4 string om de projectie te initialiseren

    crs = QgsCoordinateReferenceSystem()
    crs.createFromProj4("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
    

Het is verstandig om te controleren of het maken (d.i. opzoeken in de database) van het CRS succesvol was: isValid() moet True teruggeven.

Voor het initialiseren van ruimtelijke referentiesystemen moet QGIS, de instellingen opzoeken in een database srs.db. Bij het maken van een eigen applicatie dienen de paden te worden ingesteld met QgsApplication.setPrefixPath() anders zal het zoeken naar de database mislukken. Als opdrachten worden uitgevoerd vanuit de Python console in QGIS of vanuit een plug-in dan staat dit pad al goed ingesteld.

Informatie van ruimtelijke referentiesystemen benaderen

print "QGIS CRS ID:", crs.srsid()
print "PostGIS SRID:", crs.srid()
print "EPSG ID:", crs.epsg()
print "Description:", crs.description()
print "Projection Acronym:", crs.projectionAcronym()
print "Ellipsoid Acronym:", crs.ellipsoidAcronym()
print "Proj4 String:", crs.proj4String()
# check whether it's geographic or projected coordinate system
print "Is geographic:", crs.geographicFlag()
# check type of map units in this CRS (values defined in QGis::units enum)
print "Map units:", crs.mapUnits()

Projecties

Het is mogelijk transformaties tussen verschillende ruimtelijke referentiesystemen uit te voeren door gebruik te maken van QgsCoordinateTransform. De eenvoudigste manier om deze functie te gebruiken is een bron en doel CRS te definieren en QgsCoordinateTransform te construeren (construct) met deze CRS-en. Daarna kan de functie transform() worden aangeroepen voor het uitvoeren van transformaties. Standaard wordt van bron naar doel getransformeerd, maar de transformatie kan ook worden omgedraaid.

crsSrc = QgsCoordinateReferenceSystem(4326)    # WGS 84
crsDest = QgsCoordinateReferenceSystem(32633)  # WGS 84 / UTM zone 33N
xform = QgsCoordinateTransform(crsSrc, crsDest)

# forward transformation: src -> dest
pt1 = xform.transform(QgsPoint(18,5))
print "Transformed point:", pt1

# inverse transformation: dest -> src
pt2 = xform.transform(pt1, QgsCoordinateTransform.ReverseTransform)
print "Transformed back:", pt2