投影支持¶

Docs in progress for 'QGIS testing'. Visit https://docs.qgis.org/3.4 for QGIS 3.4 docs and translations.

警告

Despite our constant efforts, information beyond this line may not be updated for QGIS 3. Refer to https://qgis.org/pyqgis/master for the python API documentation or, give a hand to update the chapters you know about. Thanks.

坐标参考系

坐标参考系(CRS)由 QgsCoordinateReferenceSystem 班级。可以用几种不同的方式创建此类的实例:

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

QGIS对每个参考系统使用三种不同的ID:

  • PostgisCrsId --- IDs used within PostGIS databases.
  • InternalCrsId --- IDs internally used in QGIS database.
  • EpsgCrsId --- IDs assigned by the EPSG organization

如果第二个参数中未另行指定,则默认使用Postgis SRID。

检查CRS的创建(即在数据库中查找)是否成功是明智的: isValid() 必须返回 True .

注意,对于空间参考系统的初始化,QGIS需要在其内部数据库中查找适当的值。 srs.db . 因此,在创建独立的应用程序时,需要使用 QgsApplication.setPrefixPath() 否则它将无法找到数据库。如果您正在运行来自qgis python控制台的命令或开发一个插件,那么您不必担心:一切都已经为您设置好了。

访问空间参考系统信息

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())

预测

您可以使用 QgsCoordinateTransform 班级。使用它的最简单方法是创建源和目标CRS并构造 QgsCoordinateTransform 实例和当前项目。然后反复打电话 transform() 函数来进行转换。默认情况下,它可以进行正向转换,但也可以进行反向转换。

crsSrc = QgsCoordinateReferenceSystem(4326)    # WGS 84
crsDest = QgsCoordinateReferenceSystem(32633)  # WGS 84 / UTM zone 33N
xform = QgsCoordinateTransform(crsSrc, crsDest, QgsProject.instance())

# 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)