Suporte a projeções

Sistemas de Referencia de Coordenadas

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.toProj4()
# 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()

Projeções

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