空間参照系(CRS)は QgsCoordinateReferenceSystem クラスによってカプセル化されています。このクラスのインスタンスの作成方法はいくつかあります:
CRSをそのIDによって指定します
# PostGIS SRID 4326 is allocated for WGS84
crs = QgsCoordinateReferenceSystem(4326, QgsCoordinateReferenceSystem.PostgisCrsId)
QGISは参照系ごとに3種類のIDを使います。
:CONST:PostGISのデータベース内で使用される PostgisCrsId —のID。
:CONST: InternalCrsId — IDが内部的にQGISデータベースで使用されます。
:CONST:EPSGの組織によって割り当てられた EpsgCrsId —のID
2番目のパラメータが指定されなければ、PostGIS SRID がデフォルトで使用されます。
そのwell-knownテキスト(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を作成し、その後のそれを初期化する:func: `create*`関数を使用します。。次の例では、投影法を初期化するためにProj4文字列を使用します
crs = QgsCoordinateReferenceSystem()
crs.createFromProj4("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
CRSの作成(例:データベース内のルックアップ)が成功したかどうかをチェックするのは賢明です: isValid() は True を返さなければなりません。
空間参照系の初期化のために、QGISではその内部データベース:file: `srs.db`に適切な値をルックアップする必要があることに注意。したがって、独立したアプリケーションを作成する場合、 :func:`QgsApplication.setPrefixPath`で正しくパスを設定する必要があります。そうしないと、データベースの検索に失敗します。QGISパイソンコンソールからコマンドを実行しているか、プラグインを開発している場合は、気にする必要はありません:すでにすべて設定されています。
空間参照システム情報へのアクセス
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.proj4String()
# 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()
You can do transformation between different spatial reference systems by using QgsCoordinateTransform class. The easiest way to use it is to create source and destination CRS and construct QgsCoordinateTransform instance with them. Then just repeatedly call transform() function to do the transformation. By default it does forward transformation, but it is capable to do also inverse transformation
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