Os Sistemas de Referencia de Coordenadas (SRC), estão incluídas na classe:Sistema de ReferenciaCoordenadasQgs . Instâncias desta classe podem ser criados de diferentes maneiras:
especificar CRS pela sua identificação
# PostGIS SRID 4326 is allocated for WGS84
crs = QgsCoordinateReferenceSystem(4326, QgsCoordinateReferenceSystem.PostgisCrsId)
O QGIS usa três diferentes ID para cada sistema de referencia:
PostgisCrsId — Identificação usada nos bancos de dados PostGIS
InternalCrsId — Identificação usada internamente no banco de dados QGIS
EpsgCrsId — Identificação designada pela organização EPSG
Se não é determinado uma coisa diferente no segundo parâmetro, o SRID PostGIS será usado por padrão..
especificar CRS pelo seu texto conhecido (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)
crie CRS inválidos e, em seguida, use uma das funções create*() para inicializa-la. No exemplo seguinte, nós usamos seqüência Proj4 para inicializar a projeção
crs = QgsCoordinateReferenceSystem()
crs.createFromProj4("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
É interessante checar se a criação do SRC foi bem sucedida, a função : Évalido() deve retornar o valor Verdadeiro.
Note que para a inicialização de sistemas de referência espacial QGIS precisa procurar os valores apropriados em seu banco de dados interno srs.db
. Assim, no caso de você criar um aplicativo independente que você precisa para definir os caminhos corretamente com QgsApplication.setPrefixPath() caso contrário ele não vai encontrar o banco de dados. Se você estiver executando os comandos a partir do console QGIS python ou desenvolvendo um plugin você não precisa se preocupar: tudo já está configurado para você.
Acessando informações do sistema de referência espacial
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()
Você pode fazer a transformação entre os diferentes sistemas de referência espacial usando a classe QgsCoordinateTransform. A maneira mais fácil de usá-lo é criar a origem e o destino CRS e construir a instância QgsCoordinateTransform com eles. Em seguida, chamar repetidamente apenas a função transform() para fazer a transformação. Por padrão, ele faz a transformação para a frente, mas é capaz de fazer também transformação inversa
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