Системы координат (Coordinate reference system, CRS) инкапсулируются классом QgsCoordinateReferenceSystem. Создать экземпляр этого класса можно одним из способов:
задать CRS по её ID:
# WGS84 имеет PostGIS SRID 4326
crs = QgsCoordinateReferenceSystem(4326, QgsCoordinateReferenceSystem.PostgisCrsId)
QGIS использует три разных идентификатора для каждой системы координат:
По умолчанию используется PostGIS SRID, если иное не определено вторым параметром.
задать CRS по её представлению в формате WKT (well-known text):
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)
создать недействительную CRS, а затем использовать одну из функций create*() для её инициализации. В примере ниже для инициализации проекции используется строка в формате Proj4:
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()
# определяем тип системы координат: географическая или спроецированная
print "Is geographic:", crs.geographicFlag()
# единицы карты, используемые в этой CRS (определены в перечислимом типе QGis::units)
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)
# прямое преобразование: src -> dest
pt1 = xform.transform(QgsPoint(18,5))
print "Transformed point:", pt1
# обратное преобразование: dest -> src
pt2 = xform.transform(pt1, QgsCoordinateTransform.ReverseTransform)
print "Transformed back:", pt2