QGISのレイヤーのデータソースの変更


18

ArcGISレイヤーのプロパティでこれを行うのと同じように、シェープファイルをQGISのレイヤーファイルにソースする方法はありますか?(すなわち、レイヤーのプロパティ、ソースタブに移動し、'Set Dat Source'ボタンを押すだけです)

私はQGISのレイヤープロパティをすべて見てきましたが、これはどこにも表示されません...

編集:シェープファイルではこれができないことを説明するコメントを受け取りましたが、シェープファイルの名前を変更してから、このシェープファイルをレイヤーとして含む既存のプロジェクトファイルを開くと、「ハンドルBad Layersのダイアログ。これにより、レイヤーをナビゲートし、目的のシェイプファイルに再ソースできます。そのシナリオでリソースを使用できるのは奇妙ですが、レイヤープロパティのダイアログボックスを使用して手動でリソースを設定することはできません。

回答:


18

これはプラグインで簡単にできるようになりました:

changeDataSource

https://geogear.wordpress.com/2015/09/30/changedatasource-plugin-release-1-0/

ベクターレイヤー「ベクターデータソースの変更」を右クリックすると、Arcと同じくらい簡単にボタンが追加されます。


残念な機能ですが、それがコア機能であったことを願っています!
ヒルパー16

良い解決策!これは、GISを使用していない人でも簡単に使用できます。
ak112358

残念ながら、切り替えたいデータソースがESRIファイルジオデータベース(Open FileGDB経由)にある場合、そのデータタイプは後続のポップアップウィンドウにリストされないため、この機能は機能しません。
user25644

10

現在、これは不可能ですが、チケットがあります。ただし、.qgs(プロジェクトファイル)のデータソースを変更して、プロジェクトを再度開くことができます。

<projectlayers layercount="1">
    <maplayer minimumScale="-4.65661e-10" maximumScale="1e+08" minLabelScale="0" maxLabelScale="1e+08" geometry="Point" type="vector" hasScaleBasedVisibilityFlag="0" scaleBasedLabelVisibilityFlag="0">
        <id>graduated_classes20130603233806207</id>
        <datasource>../Downloads/Grauated_classes_test_sample/graduated_classes.shp</datasource>
        <title></title>
        <abstract></abstract>

<datasource>行を変更する


4
チケットにリンクして、他の人がチケットが完了したかどうか、いつ完了したかを知ることができますか?
RyanKDalton-OffTheGridMaps

あなたは1つがあると言うときは常に良い:ことを見つけることができません:)
ネイサンW

おかげで、私はそれをこのように見ましたが、私が抱えている問題は、私のユーザーはGISの人ではなく、データを見るためにプロジェクトが必要なだけです。プロジェクトファイルを設定し、すべてのシンボルとラベルを設定してから、異なるサイトのデータレイヤーを再ソースするだけでしたかったのです。この方法は、彼女のスキルセットを超えています。プラグインを使用してレイヤーを更新できるスクリプトを作成できると考えています。
マイク

1
プロジェクトファイルで参照されているダミーのシェープファイルに異なるシェープファイルの1つを単純にコピーしてから、プロジェクトファイルを開始するDOSバッチについてはどうでしょう。レイヤーCRSまたはエクステントが異なる場合、どうなるかわかりません。
-AndreJ

1
おそらく、データの追加、スタイル設定、ラベル付けの方法を簡単に教えることができます。スタイルをコピーして貼り付けると、ラベルがわからないので簡単に貼り付けることができます。あなたが説明していることは本当にGISでも編集でもないので、それほど難しくないはずです。代替多分QGSファイルとしてソースを置き換えるために、スタンドアロンのプログラムを作成することは、単なるテキストである
アントニオLocandro

3

Pythonでは、QgsVectorLayer.writeLayerXMLおよびQgsVectorLayer.readLayerXMLを使用してデータソースを直接変更し、DOMドキュメントをオンザフライで変更し、下の例のようにレイヤーを再ロードすることができます。

from PyQt4.QtXml import *
from qgis.core import *
from PyQt4.QtXml import *

layer = self.iface.legendInterface().currentLayer()
newDatasource = "NEW DATASOURCE STRING" # get datasource from layer properties general     tab
newDatasourceProvider = "ogr" # possible values: (ogr, )

# read layer DOM definition
XMLDocument = QDomDocument("style")
XMLMapLayers = QDomElement()
XMLMapLayers = XMLDocument.createElement("maplayers")
XMLMapLayer = QDomElement()
XMLMapLayer = XMLDocument.createElement("maplayer")
layer.writeLayerXML(XMLMapLayer,XMLDocument)

# modify DOM element with new layer reference
XMLMapLayer.firstChildElement("datasource").firstChild().setNodeValue(newDatasource)
XMLMapLayer.firstChildElement("provider").firstChild().setNodeValue(newDatasourceProvider)
XMLMapLayers.appendChild(XMLMapLayer)
XMLDocument.appendChild(XMLMapLayers)

# reload layer definition
self.layer.readLayerXML(XMLMapLayer)
self.layer.reload()

# apply to canvas and legend
self.iface.actionDraw().trigger()
self.iface.legendInterface().refreshLayerSymbology(self.layer)

この機能は、クリックされたレイヤーと機能でアクションを実行できるPickLayerプラグインに含まれています


2

リリース2.10以降、QGis ApiにはQgsVectorLayer :: setDataSourceメソッドが含まれています。

void QgsVectorLayer::setDataSource  (   QString     dataSource,
        QString     baseName,
        QString     provider,
        bool    loadDefaultStyleFlag = false 
    )       

Update the data source of the layer.

The layer's renderer and legend will be preserved only if the geometry type of the new data source matches the current geometry type of the layer.

Parameters
    dataSource  new layer data source
    baseName    base name of the layer
    provider    provider string
    loadDefaultStyleFlag    set to true to reset the layer's style to the default for the data source 

1

シェープファイルを使用する場合、いいえ(形式の特定の特性のため)。PostGISまたはSpatiaLiteレイヤーを使用する場合、単一のベクターレイヤー(geometry_columnsテーブル)を複数の属性テーブルに接続し、逆(外部キーまたはビューを使用)に接続できます。

GRASS GIS、1つのベクターレイヤーの複数のテーブル、およびデータソースの変更(v.to.db

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.