PostGISで空間ビューを作成し、QGISのレイヤーとして追加しますか?


49

PostGIS 2.0では、QGISで表示可能な空間的に有効なビューを作成する効率的な方法を探しています。

@Mike Toewsのパート2のコンテキストに従って、postgis DBで既存のテーブルからテーブルを作成する方法(新しいスキーマを適用する方法)を確認しました。、ビューは[PostGISレイヤーの追加]ダイアログにポイントレイヤー(私の場合)として表示されます。しかし、ビューを作成して空間的に有効にした後、ビューをQGISに追加しようとすると次のエラーを受け取りました。

レイヤーを追加するには、テーブルを選択する必要があります

空間ビューがQGISにロードされない理由と、QGISのレイヤーとしてロード可能にするために必要なことを誰かが説明できますか?

現在、OSGEOインストーラーからQGIS v1.8を使用しています

私は、ジオネームデータベースから構築され、PostGISに読み込まれます。ジオネームテーブル/空間データは、QGISで選択/表示できます。

mt_view」を選択しようとすると、QGISはダイアログにビューを表示しますが、選択させません。エリアの周りに点線のボックスが表示されますが、ビューを強調表示して選択することはありません。

QGISはmt_viewをレイヤーとして選択できません


最初のクエリを実行すると次のことに気付きました。

CREATE OR REPLACE VIEW data.test AS
SELECT * FROM data.geoname
WHERE admin1='MT'

ビューはQGISの[レイヤーの追加]ダイアログに表示されますが、選択できません。次に、実行すると:

SELECT Populate_Geometry_Columns('data.test'::regclass);

「0」の結果が得られますが、ドキュメントによると、「1」を返すはずです。


1
問題を確認します。QGIS 1.8、PostGIS 2.0、および主キーを持つテーブルから作成されたビューでは、ビューは利用可能なレイヤーにリストされますが、「レイヤーを追加するにはテーブルを選択する必要があります」というエラーメッセージが表示されます。
giohappy

2
ビューを操作するときにPostgis Add Layerウィンドウで主キーを自動的に設定する別の方法はありますか?通常のGISユーザーとビューに多数の整数フィールドがある場合、レイヤー/ビューのこの画面で主キーフィールドを選択するのは非常に困難です。

@Pgimenez、私はあなたが上で述べたことで新しい質問を始めることを提案し、それからあなた自身でこの質問のURLを参照します。それははるかに広い可視性を提供します。
RyanDalton

qgis 1.8 lisboaに凸包を視覚化する方法はありませんか?Postgis 1.5でvievをフォローしようとしましたが、id列を使用してQgisで公開するように言われました。id列を使用しない場合、エラーのためにuをロードできません。1.ビューcon_hull_baeume3(bid)を「0」、ST_ConvexHull(ST_Collect(geom))FROM baeumeを選択して作成または置換します。2.ビューcon_hull_baeume4(bid)を選択入札として作成または置換し、ST_ConvexHull(ST_Collect(geom))FROM baeumeグループを入札で選択します。しかし、これは各ジオメトリポイントに凸包を作成します。「select ST_ConvexHull(ST_Collect(geom))FROM baeume;」を使用するだけです 作品
ウラン

1
ようこそ!元の質問には答えていないようですので、これを新しい質問として投稿してください。少なくとも質問であれば、最後のステートメントは成功したかどうかが明確ではないためです。
lynxlynxlynx

回答:


54

リストされたビューを単に選択することは不可能であることを確認できます。

最初に「主キー列」を選択する必要があるようです。次に、テーブルが選択可能になります。

ここに画像の説明を入力してください


1
うわー、私はそれを見たことがないだろう。本当にありがとう!PostGISビューではなく、QGISの問題を反映するようにタイトルを編集しました。
ライアンダルトン

これはQGIS 1.8の問題であるようです(まだ使用していません)。これらの手順は1.7では不要です。
マイクT

そうです、1.7は主キーを推測しようとしました。しかし、うまくいきませんでした。
暗闇

ちなみに、@ underdarkでは、QGISは他のタイプのPKを受け入れますか?
ジョージシルバ

1
QGIS3では、列は「プライマリキー列」ではなく「機能ID」という見出しになっており、(少なくとも私にとっては)デフォルトウィンドウの端から外れており(表示されていません)、列がまだあることを示していません!選択後にこれらの詳細の入力を求められる(必要な場合)機能要求をログに記録すると思います。開発者は、最初の列に一意のキーがあることを人々が確認することを想定しているように見えます。
ラッセルフルトン

5

(私の答えを少し更新しています)

OBJECTID(row_number)フィールドがビューの列定義の最初にある限り、QGISは「ベクターレイヤーの追加」メニューから追加することを求めずにそれを取得します。

CREATE OR REPLACE VIEW dqmt.addressverify AS 
 SELECT row_number() OVER (ORDER BY newaddresses.addressid) AS objectid,
    newaddresses.addressid
  , geom
   FROM dqmt.newaddresses;

元の質問に従って壊れていたいくつかの古いビューを修正しましたが、OBJECTIDフィールドをビューの先頭に移動すると問題が修正されました!


多くのビューにも「row_number()over()」構文を使用しました。私は通常、主キーフィールドに「gid」を使用しました。他のすべてのビューは、「objectid」を主キーとして使用していますか?
ライアンダルトン

通常、objectid-上記の例では機能しましたが、gidを試行します... QGISが他の「id」フィールドの前に認識するものですか?
DPSSpatial

GIDはこれに影響しません
...-DPSSpatial

可能性を夢見ているだけです。チェックしてくれてありがとう
-RyanDalton

(これに遅れて、しかし...)推測では、ロードされているテーブルにPRIMARY KEY定義がある場合、QGISは定期的にそれをピックアップすると思います: PK。ただし、ほとんどすべてのPKはVARCHARです。VIEWPostgreSQLではVIEWsを使用できないため、これは発生しませんCONSTRAINT。[ VIEWPostGISレイヤーの追加]ボタンを使用してQGISにインポートするときにPKを手動で選択する必要があるのはこのためです。これが、Pythonスクリプトを使用してインポートする理由です。
GT。

4

ビューがgeometry_columnsテーブルに表示されますか?マニュアルによると、ビューは2.0で自動的に表示されるはずですが、試していません。

以下を実行して確認してください。

SELECT f_geometry_column As col_name, type, srid, coord_dimension As ndims 
FROM geometry_columns
WHERE f_table_name = 'my_spatial_table' AND f_table_schema = 'my_schema';

はい、私のビューに対してこのチェックを実行すると、次が返されます:the_geom、Point、4269,2
RyanDalton

3

ビューは、ビューのテーブルの1つから「gid」またはPKのような一意の整数フィールドを使用していますか?

QGISの以前のバージョンでは、一意の整数フィールドがないときにマップにビューが追加されるという問題があったことを知っています。ただし、その問題を指摘する別のエラーメッセージが表示されましたが、すべてのベースを隠すためにチェックする価値があるかもしれません。


はい、geonamesテーブルには一意のIDである「geonameid」があり、そのフィールドにPRIMARY KEY制約が設定されています。
ライアンダルトン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.