Outdated version of the documentation. Find the latest one here.

投影法サポート

空間参照系

空間参照系(CRS)は QgsCoordinateReferenceSystem クラスによってカプセル化されています。このクラスのインスタンスの作成方法はいくつかあります:

  • CRS をID で指定:

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

    QGISは参照系ごとにに3種類のIDを使います。

    • PostgisCrsId - PostGIS データベース内で使用されるID。

    • InternalCrsId - QGIS データベース内部で使用されるID。

    • EpsgCrsId - EPSG 組織が割り当てたID

    2番目のパラメータが指定されなければ、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.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()

投影法

異なる空間参照系の間での変換は QgsCoordinateTransform`クラスを使って実行できます。いちばん簡単な使い方は、それを使ってソース、目的のCRS、そして construct :class:`QgsCoordinateTransform インスタンスを作成することです。そうすれば、変換の実行は単に transform() 機能を繰り返し呼び出すだけです。デフォルトでは前方変換を行いますが、反転変換を行うこともできます:

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