レイヤのロード

データのレイヤをオープンしましょう.QGISはベクタとラスタレイヤを認識できます.加えてカスタムレイヤタイプを利用することもできますが,それについてここでは述べません.

ベクタレイヤ

ベクトルレイヤーをロードするには、レイヤのデータソース識別子、レイヤーの名前、およびプロバイダの名前を指定します。

layer = QgsVectorLayer(data_source, layer_name, provider_name)
if not layer.isValid():
  print "Layer failed to load!"

データソース識別子は文字列でそれぞれのデータプロバイダを表します.レイヤ名はレイヤリストウィジェットで使われます.レイヤが正常にロードされたかどうかをチェックすることは重要です.正しくロードされていない場合は不正なレイヤインスタンスが返ります.

QGISでベクトルレイヤーを開き、表示する最も簡単な方法は、QgisInterface のaddVectorLayer関数です:

layer = iface.addVectorLayer("/path/to/shapefile/file.shp", "layer name you like", "ogr")
if not layer:
  print "Layer failed to load!"

これは1つのステップで、新しいレイヤーを作成し、マップレイヤーレジストリに追加(レイヤリストに表示される)します。関数が返すのはレイヤーインスタンス、レイヤーをロードできなかった場合は `NONE`です。

以下のリストはベクタデータプロバイダを使って様々なデータソースにアクセスする方法が記述されています.

  • OGRライブラリ(シェープファイルや他の多くのファイル形式)—データソースがファイルへのパスです。

    • シェープファイルについて:

      vlayer = QgsVectorLayer("/path/to/shapefile/file.shp", "layer_name_you_like", "ogr")
      
    • DXF用(データソースURI内の内部オプションに注意してください):

      uri = "/path/to/dxffile/file.dxf|layername=entities|geometrytype=Point"
      vlayer = QgsVectorLayer(uri, "layer_name_you_like", "ogr")
      
  • PostGISのデータベース — データソースは、PostgreSQLデータベースへの接続を作成するために必要なすべての情報を持つ文字列です。 QgsDataSourceURI クラスではあなたのためにこの文字列を生成できます。QGISはPostgresのサポート付きでコンパイルする必要があることに注意してください、そうでない場合は、このプロバイダが使用できません。

    uri = QgsDataSourceURI()
    # set host name, port, database name, username and password
    uri.setConnection("localhost", "5432", "dbname", "johny", "xxx")
    # set database schema, table name, geometry column and optionally
    # subset (WHERE clause)
    uri.setDataSource("public", "roads", "the_geom", "cityid = 2643")
    
    vlayer = QgsVectorLayer(uri.uri(), "layer name you like", "postgres")
    
  • CSVや他の区切りのテキストファイル—区切り文字としてセミコロンを使用してファイルを開くには、x座標およびフィールド「Y」の欄の「x」とy座標を持つあなたはこのようなものを使用します。

    uri = "/some/path/file.csv?delimiter=%s&xField=%s&yField=%s" % (";", "x", "y")
    vlayer = QgsVectorLayer(uri, "layer name you like", "delimitedtext")
    

    注意:QGISバージョン1.7からプロバイダ文字列をURLとして構成されているので、パスの先頭に file:// を付ける必要があります。また、それは「X」と「Y」フィールドに代わるものとしてWKT(周知のテキスト)フォーマットされたジオメトリを可能にし、座標参照系を指定することを可能にします。例えば:

    uri = "file:///some/path/file.csv?delimiter=%s&crs=epsg:4723&wktField=%s" % (";", "shape")
    
  • GPXファイル—「GPX」データプロバイダは、GPXファイルからトラック、ルートやウェイポイントを読み込みます。ファイルを開くには、タイプ(トラック/ルート/ウェイポイント)は、URLの一部として指定する必要があります:

    uri = "path/to/gpx/file.gpx?type=track"
    vlayer = QgsVectorLayer(uri, "layer name you like", "gpx")
    
  • QGIS v1.1のサポートからSpatiaLiteデータベース—。クラス:同様のPostGISデータベースに `QgsDataSourceURI`は、データソース識別子の生成のために使用することができます。

    uri = QgsDataSourceURI()
    uri.setDatabase('/home/martin/test-2.3.sqlite')
    schema = ''
    table = 'Towns'
    geom_column = 'Geometry'
    uri.setDataSource(schema, table, geom_column)
    
    display_name = 'Towns'
    vlayer = QgsVectorLayer(uri.uri(), display_name, 'spatialite')
    
  • OGR介してMySQLのWKBベースジオメトリ、—データソースがテーブルへの接続文字列です。

    uri = "MySQL:dbname,host=localhost,port=3306,user=root,password=xxx|layername=my_table"
    vlayer = QgsVectorLayer( uri, "my table", "ogr" )
    
  • WFS接続:. 接続は、URIと `` WFS``プロバイダを使用して定義されます。

    uri = "http://localhost:8080/geoserver/wfs?srsname=EPSG:23030&typename=union&version=1.0.0&request=GetFeature&service=WFS",
    vlayer = QgsVectorLayer(uri, "my wfs layer", "WFS")
    

    URIは標準の `` urllib``ライブラリを使用して作成することができます。

    params = {
        'service': 'WFS',
        'version': '1.0.0',
        'request': 'GetFeature',
        'typename': 'union',
        'srsname': "EPSG:23030"
    }
    uri = 'http://localhost:8080/geoserver/wfs?' + urllib.unquote(urllib.urlencode(params))
    

ノート

既存のレイヤのデータソースを変更するには、次の例のように:クラス: `QgsVectorLayer`インスタンス上の:FUNC: `setDataSource()`を呼び出します:

# layer is a vector layer, uri is a QgsDataSourceURI instance
layer.setDataSource(uri.uri(), "layer name you like", "postgres")

ラスタレイヤ

ラスターファイルへのアクセスについては、GDALライブラリが使用されます。これは、広い範囲のファイルフォーマットをサポートしています。何かのファイルを開くときにトラブルがある場合は、GDALがそのフォーマットをサポートしているか確認してください(デフォルトではすべてのフォーマットが使用可能ではない)。ファイルからラスタをロードするには、そのファイル名とベース名を指定します。

fileName = "/path/to/raster/file.tif"
fileInfo = QFileInfo(fileName)
baseName = fileInfo.baseName()
rlayer = QgsRasterLayer(fileName, baseName)
if not rlayer.isValid():
  print "Layer failed to load!"

クラス: `QgisInterface`同様ベクター層に、ラスタレイヤはaddRasterLayer関数を使用してロードすることができます。

iface.addRasterLayer("/path/to/raster/file.tif", "layer name you like")

これは、新しいレイヤーを作成し、1つのステップで(それはレイヤリストに表示されて作る)マップレイヤーレジストリに追加します。

ラスターレイヤーも、WCSサービスから作成することができます。

layer_name = 'modis'
uri = QgsDataSourceURI()
uri.setParam('url', 'http://demo.mapserver.org/cgi-bin/wcs')
uri.setParam("identifier", layer_name)
rlayer = QgsRasterLayer(str(uri.encodedUri()), 'my wcs layer', 'wcs')

詳細なURIの設定は`プロバイダのマニュアルに記載されています。<https://github.com/qgis/QGIS/blob/master/src/providers/wcs/URI> ` _

別の方法としては、WMSサーバからラスタレイヤを読み込むことができます。しかし現在では、 APIからGetCapabilitiesレスポンスにアクセスすることはできません—それは何をしたいレイヤーか知っている必要があります。

urlWithParams = 'url=http://wms.jpl.nasa.gov/wms.cgi&layers=global_mosaic&styles=pseudo&format=image/jpeg&crs=EPSG:4326'
rlayer = QgsRasterLayer(urlWithParams, 'some layer name', 'wms')
if not rlayer.isValid():
  print "Layer failed to load!"

マップレイヤレジストリ

もしあなたが開かれているレイヤを描画に利用したい場合はそれらをマップレイヤレジストリに追加することを忘れないで下さい.マップレイヤレジストリはレイヤのオーナーシップを取得して後でアプリケーションのいろいろな場所でユニークIDを使ってアクセスできるようになります.レイヤがマップレイヤレジストリから削除された削除された時にそれも削除されます.

レジストリにレイヤーを追加します:

QgsMapLayerRegistry.instance().addMapLayer(layer)

レイヤーは終了時に自動的に破棄されますが、明示的にレイヤーを削除したい場合には次を使用します。

QgsMapLayerRegistry.instance().removeMapLayer(layer_id)

ロードされたレイヤーとレイヤーIDのリストについては、以下を使用します。

QgsMapLayerRegistry.instance().mapLayers()