Soporte de Proyecciones

Sistemas de coordenadas de referencia

Los sistemas de referencia de coordenadas (SRC) están encapsuladas por la clase QgsCoordinateReferenceSystem. Las instancias de esta clase pueden ser creados por varias formas diferentes:

  • especificar SRC por su ID

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

    QGIS utliza tres tipos diferentes de ID para cada sistema de referencia:

    • PostgisCrsId — los IDs utilizados dentro de la base de datos PostGIS

    • InternalCrsId — IDs internamente utilizados en la base de datos de QGIS.

    • EpsgCrsId — IDs asignados por la organización EPSG

    Si no se especifica lo contrario en el segundo parámetro, PostGIS SRID se utiliza por defecto.

  • especificar SRC por su 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)
  • crear un SRC inválido y después utilizar una de las funciones create*() para inicializarlo. En el siguiente ejemplo usamos una cadena Proj4 para inicializar la proyección

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

Es aconsejable comprobar si la creación (es decir, operaciones de búsqueda en la base de datos) del SRC ha tenido éxito: isValid() debe regresar True.

Tenga en cuenta que para la inicialización de los sistemas de referencia QGIS tiene que buscar valores apropiados en su base de datos interna srs.db. Así, en caso de de crear una aplicación independiente, necesita definir las rutas correctamente con QgsApplication.setPrefixPath() de lo contrario, no podrá encontrar la base de datos. Si se están ejecutando los comandos de consola python QGIS o desarrolla un complemento que no le importe: todo está ya preparado para usted.

Accediendo a información del sistema de referencia 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()

Proyecciones

Se puede hacer la transformación entre diferentes sistemas de referencia espacial al utilizar la clase QgsCoordinateTransform. La forma más fácil de usar que es crear origen y el destino de SRC y construir la instancia :class: QgsCoordinateTransform con ellos. Luego llame simplemente repetidamente la función transform() para hacer la transformación. Por defecto se hace la transformación hacia adelante, pero es capaz de hacer también la transformación 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