PyQGIS开发者手册-7 投影支持

7 投影支持

目录

7 投影支持

7.1 坐标参考系统

7.2 坐标参考系统转换


此页面上的代码片段需要导入以下模块:

from qgis.core import (QgsCoordinateReferenceSystem,
                       QgsCoordinateTransform,
                       QgsProject,
                       QgsPointXY,
                       )

7.1 坐标参考系统

坐标参考系统(CRS)由QgsCoordinateReferenceSystem 类封装 。可以通过几种不同的方式创建此类的实例:

  • ID

    # WGS84:4326
    crs = QgsCoordinateReferenceSystem(4326, QgsCoordinateReferenceSystem.PostgisCrsId)
    assert crs.isValid()

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

    如果未使用第二个参数指定,则默认使用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)
    assert crs.isValid()
  • 创建一个无效的CRS,然后使用其中一个create*函数进行初始化。在下面的示例中,我们使用Proj4字符串初始化投影。

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

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

请注意,对于空间参考系统的初始化,QGIS需要在其内部数据库srs.db中查找适当的值。因此,如果您创建一个独立的应用程序,您需要正确设置路径 QgsApplication.setPrefixPath(),否则将无法找到数据库。如果您正在运行QGIS Python控制台中的命令或开发插件,则无需关注:所有内容都已为您设置。

访问空间参考系统信息:

crs = QgsCoordinateReferenceSystem(4326)
​
print("QGIS CRS ID:", crs.srsid())
print("PostGIS SRID:", crs.postgisSrid())
print("Description:", crs.description())
print("Projection Acronym:", crs.projectionAcronym())
print("Ellipsoid Acronym:", crs.ellipsoidAcronym())
print("Proj4 String:", crs.toProj4())
# 检查是地理坐标系统还是投影坐标系统
print("Is geographic:", crs.isGeographic())
# 检查CRS的地图单位类型
print("Map units:", crs.mapUnits())

输出:

QGIS CRS ID: 3452
PostGIS SRID: 4326
Description: WGS 84
Projection Acronym: longlat
Ellipsoid Acronym: WGS84
Proj4 String: +proj=longlat +datum=WGS84 +no_defs
Is geographic: True
Map units: 6

7.2 坐标参考系统转换

您可以使用QgsCoordinateTransform类在不同的空间参照系之间进行转换。使用它的最简单方法是创建源和目标CRS,并在当前项目中构造QgsCoordinateTransform实例。然后只需反复调用 transform()函数进行转换。默认情况下,它会正向转换,但也可以逆向转换。

crsSrc = QgsCoordinateReferenceSystem(4326)    # WGS 84
crsDest = QgsCoordinateReferenceSystem(32633)  # WGS 84 / UTM zone 33N
xform = QgsCoordinateTransform(crsSrc, crsDest, QgsProject.instance())
​
# 正向转换: src -> dest
pt1 = xform.transform(QgsPointXY(18,5))
print("Transformed point:", pt1)
​
# 逆向转换: dest -> src
pt2 = xform.transform(pt1, QgsCoordinateTransform.ReverseTransform)
print("Transformed back:", pt2)

输出:

Transformed point: <QgsPointXY: POINT(832713.79873844375833869 553423.98688333143945783)>
Transformed back: <QgsPointXY: POINT(18 5)>

写在最后:文中难免有翻译错误,欢迎您的指正。完整版翻译请移步PyQGIS开发者手册-完整版

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值