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。
通过其已知文本(WKT)指定CRS
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")
检查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)