QGISはSpatialiteビューを読み取ることができますか?


10

作成したスペーシャルサイトデータベースには、数年分の犯罪データがあります。タイムスパンまたは返される犯罪の種類を単に制限するビューを導入することにより、ユーザーの操作を簡略化できる実際のシナリオを促進するために、QGISがこのビューをこのように読み取ることができるかどうかを知りたい私のデータベース内の他のどの空間テーブルもでしょう。ここでのポイントは、使用する可能性のあるすべての可能なビューに対して個別のテーブルを作成したくないことです。ユーザーにデータベースと適切なSQLを知らせてデータ自体をサブセット化する必要がないようにすることで、テーブルを単純化しようとしています。ArcGISの世界における同様のワークフローは、データベース(SQL Serverなど)にアクセスし、限られたデータセットのみを表示する、ユーザーがArcMapで開くことができる個別のレイヤーファイルを作成する場合があります。

データベースにビューを作成しましたが、QGISでspatialite dbに接続したときにインポートできるフィーチャクラスのリストに表示されません。たぶん、ビューは空間と見なされないのですか?(これについては後で詳しく説明しますが、すでに考えたので、結論を思い出せません。)いずれにしても、希望する種類のワークフローまたは同様のArcGISの代替案をどのように複製できるでしょうか。 ?

回答:


15

QGISで使用するには、geometry_columnsテーブルにビューを登録する必要があると思います。

適切なリソースは、次の例を使用して「独自の空間ビューを手書きする」です。

INSERT INTO views_geometry_columns
(view_name, view_geometry, view_rowid, f_table_name, f_geometry_column)
VALUES ('italy', 'geometry', 'ROWID', 'local_councils', 'geometry');

とにかく、このVIEWをviews_geometry_columnsに登録して、実際の空間ビューにする必要があります。


それが問題のようです。ビューを作成し、メタテーブルを確認しました。明らかに、ビューからのジオメトリはリストされていません。ビューのジオメトリを登録するにはどうすればよいですか?RecoverGeometryColumnを試してみましたが、テーブルが存在しないことがわかります。私は2.4バージョンを使用していると思いましたが、どうやらSpatialite 3.0ベータ版を使用しています。多分私はコマンドを間違って実装していますか?多分それはビューでは機能しませんか?(より良いです!); 明確にするために、私のコマンドはSELECT RecoverGeometryColumn( 'tblName'、 'SHAPE'、2226、 'POINT'、2);でした。
ブライアングッドリッチ

4
ジオメトリベースのビューを処理するための特別なテーブルがあります。次の構文を使用しますINSERT INTO VIEWS_GEOMETRY_COLUMNS VALUES( '{TABLE NAME}'、 '{GEOM COLUMN NAME}'、 '{GEOM TYPE}'、2、{SRID}、0);
ネイサンW

例:INSERT INTO VIEWS_GEOMETRY_COLUMNS VALUES( 'Towns_v1'、 'Geometry'、 'POINT'、2、32632、0);
ネイサンW

SELECT * FROM views_geometry_columns;挿入に必要なものを確認するために使用します。詳細については、gaia-gis.it / spatialite
Nathan W

2

ここで説明するのと同じように、一意のIDをビューに挿入する必要がある場合もあります。PostGISでは、一意のIDでビューを作成できますか?


ビューの作成でPKを明示的に選択しない限り、一意のIDは保持されませんか?少なくとも、ここで実行している単純な選択クエリについては。
ブライアングッドリッチ、2012年

@ BryanGoodrich-試してみますが、私が見つけた限りでは、PostGISビューではそのようには機能しません。
RyanKDalton 2012年

ビューは「SELECT * FROM犯罪WHERE ...」によって作成され、私はwhere句によってサブセット化しました。これにより、PK列(行名、SQLite DBに入力するために使用したRテーブルの列名から生成した行名)が返されました。問題はアンダーダークが指摘したとおりです。メタテーブルにジオメトリ参照が必要です。これは、QGISが空間テーブルを識別するために使用するものであり、ビューのメタテーブルにはレコードがありません。
ブライアングッドリッチ2012年

知ってよかった。質問をして良い答えを得てくれてありがとう
RyanKDalton 2012年

2

現在(2015年)geometry_columnsにビューを登録するには、次のように「read_only」フィールドを追加する必要があります。

INSERT INTO views_geometry_columns
(view_name, view_geometry, view_rowid, f_table_name, f_geometry_column, read_only )
VALUES ('italy', 'geometry', 'ROWID', 'local_councils', 'geometry', 1);

1
サポートドキュメントへのリンクを追加していただけませんか。ありがとう!
アンダーダーク

2

SpatialLite 4.xの場合、元の回答に対する2つの変更が必要ですread_only。列を追加することと、挿入されたすべての値を小文字に変更することです。更新されたSQLは次のようになります。

INSERT INTO views_geometry_columns
(view_name, view_geometry, view_rowid, f_table_name, f_geometry_column, read_only )
VALUES ('italy', 'geometry', 'rowid', 'local_councils', 'geometry', 1);

このread_onlyフィールドは0または1を受け入れます(詳細については、GoogleグループでのSandro Furieriのコメントを参照してください)。

これらおよびその他の4.xの変更の詳細については、switching-to-4.0 wikiを参照してください


1
INSERT INTO views_geometry_columns VALUES
('nameOfView' , 'geometry', 'rowid', 'geometryTable', 'geometry', 1);

注意:置き換えのみ:nameOfViewおよびgeometryTable

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