Системи координат (Coordinate reference system, CRS) інкапсулюються класом QgsCoordinateReferenceSystem. Екземпляри цього класу можна створити різними способами:
specify CRS by its ID
# PostGIS SRID 4326 is allocated for WGS84
crs = QgsCoordinateReferenceSystem(4326, QgsCoordinateReferenceSystem.PostgisCrsId)
QGIS використовує три різних ідентифікатора (ID) для кожної системи координат:
PostgisCrsId — ідентифікатор, що використовується у базах даних PostGIS
InternalCrsId — внутрішній ідентифікатор QGIS
EpsgCrsId — ідентифікатор, призначений консорціумом EPSG
Якщо не задано другий параметр, за замовчанням використовується PostGIS SRID.
specify CRS by its 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)
create invalid CRS and then use one of the create*() functions to initialize it. In following example we use Proj4 string to initialize the projection
crs = QgsCoordinateReferenceSystem()
crs.createFromProj4("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
Бажано перевіряти успішність створення (тобто виконати пошук у базі даних) системи координат: isValid() повинен повернути True.
Майте на увазі, що для ініціалізації системи координат QGIS повинна здійснити пошук відповідних значень у внутрішній базі даних srs.db. Тому, якщо ви розробляєте автономну програму, необхідно правильно налаштувати шляхи за допомогою QgsApplication.setPrefixPath(), інакше база даних не буде знайдена. Якщо ви виконуєте команди у консолі Python QGIS або розробляєте плаґін — не хвилюйтесь, все вже налаштовано.
Отримання інформації про систему координат
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()
Для перетворення між різними системами координат використовується клас QgsCoordinateTransform. Простіше за все створити екземпляри вхідної та вихідної системи координат та ініціалізувати ними екземпляр QgsCoordinateTransform. Потім просто виконуйте трансформацію, викликаючи метод transform(). За замовчанням виконується пряме перетворення, але також можна робити і зворотнє
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