QGISでのPostgreSQLのポイント/ライン/ポリゴンの編集に関する問題


14

私はpostgresqlとQGISに問題があります:

  • ポイント/ライン/ポリゴンと入力フィールドを追加できます

しかし、私はできません:

  • ポイント/ライン/ポリゴンを削除する
  • ポイント/ライン/ポリゴンの変更(フィールドの移動または変更)

ex:dbname = 'Europe' host = localhost port = 5432 user = 'postgres' sslmode = disable key = 'tid'timatemetadata = true srid = 900913 type = Point table = "public"。 "planet_osm_point"(way)sql =

QGISは管理レベルとしてデータベースに接続されています。pdAdmin IIIを使用すると、すべてを実行できます(作成、削除、変更...)

postgresqlデータベースは、osm2pgsqlを使用してOSMからインポートされます。

.shpのような他のレイヤーでは、この問題はありません。

何か案が ?

構成:Ubuntu 14.04 / Posgresql 9.4 / QGIS 2.10


こんにちはMathieu、「できません」の正確な意味を明確にできますか。ツールは非アクティブ化されていますか?レイヤーの保存時に失敗しますか?そして最も重要なこと:エラーメッセージはありますか?[postgis]タブのメッセージログパネルもご覧ください。
マティアスクーン

オフコース関係するレイヤー(黄色のペン)を編集モードで使用しています。エンティティアイコンの追加を除き、編集ツールはすべて灰色です。私が得るメッセージは次のとおりです。サービスの前身とサポートを提供します:ドネの前身とサポートをサポートします
Mathieu

1
英語でのエラーメッセージ:プロバイダーが削除をサポートしていません:データプロバイダが削除機能をサポートしていません
マチュー

1
一番上のアイコンを編集する:すべてのグレーEXCEPT の追加機能
マチュー

1
2015-08-08T12:10:22 1主キーはctid-既存の機能の変更は無効(way; "public"。 "planet_osm_point")2015-08-08T12:10:23 1主キーはctid-既存の機能の変更無効(way; "public"。 "planet_osm_line")2015-08-08T12:10:23 1機能タイプまたは「public」の方法のsrid。「planet_osm_polygon」を特定できなかったか、要求されていませんでした。
マチュー

回答:


13

修繕。 問題は主キーではありませんでした。

pgAdminでこのリクエストを行います。

ALTER TABLE tableName ADD PRIMARY KEY(id);

planet_osm_lineテーブルとosm_idカラムを主キーとして設定する例:

ALTER TABLE planet_osm_line プライマリキーの追加(osm_id);

osm_idが一意になるまで。


それがあなたのやり方です!
DPSS15年

あなたは正しいと思う?
マチュー

私はそう思う!職場でテストしてレポートを返すことができますが、データのインポート方法がわかったので、これが回避策です。ただし、1つの問題-OSMエディターで直接データを編集してから貢献するのではなく、QGISでこのデータをローカルで編集するのはなぜですか?
-DPSSpatial

1
OSMについて:デザイン/グラフィック仕様で出力マップを生成し、プロバイダーから他の有料データを追加するだけでよいためです(公開することはできません)。QGISはそのための完璧なツールです。貢献することは別のことであり、私たちは時間内にそれを行います。
マチュー

9

解決策は、すでに述べたように、主キーを作成することです。

しかし、設計上、ユニークであるosm2pgsqlことを保証しませんosm_id同じosm_idを持つ複数の行を生成できます。

planet_osm_*QGISでテーブルを編集するには、たとえば、別のid列を追加するのが賢明gidです。

一意のgid列を追加するには:

ALTER TABLE planet_osm_point ADD gid serial PRIMARY KEY;
ALTER TABLE planet_osm_line ADD gid serial PRIMARY KEY;
ALTER TABLE planet_osm_polygon ADD gid serial PRIMARY KEY;
ALTER TABLE planet_osm_roads ADD gid serial PRIMARY KEY;

ジオメトリ列がジオメトリだけである場合、QGISには問題があります。一部のクエリは失敗する可能性があります。planet_osm_polygonジオメトリを次のように変更すると便利ですMultiPolygon

ALTER TABLE planet_osm_polygon
    ALTER COLUMN way TYPE geometry(MultiPolygon,3857) USING ST_Multi(way);

3

これは主要な問題だと思います。テーブルには1つある必要があり、PGAdminでテーブルを表示すると認識されます。

これと同じ問題がありましたが、ID(任意)と呼ばれる主キーフィールドでレイヤーを再ロードし、すべての編集ツールがツールバーでアクティブになりました。

SQLを使用して、 'serial'データ型のOID列を追加し、次のステートメントを使用して主キーを作成できます。

ALTER TABLE schema."Tablename"

ADD ID serial NOT NULL

ALTER TABLE schema."Tablename" ADD PRIMARY KEY (id);

GUIを使用して、データベース、つまりPostGISとQGISで認識される主キーを使用してレイヤーを再ロードできます。

  • DBマネージャーを開く
  • データベースに接続する
  • 「レイヤー/ファイルのインポート」を選択します
  • [主キー]ボックスをオンにして、編集を可能にする一意のIDを保存する[主キー]列の名前を入力します。

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

そこから、PGAdminに戻り、データベースに接続し、再作成したテーブルをクリックします。OID列が認識されているかどうかを確認できます。

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


PGAdminにはプライマリキーはありません。レイヤーを再ロードするにはどうすればよいですか?
マチュー

@Mathieu QGISでDBManagerプラグインを使用し、「プライマリキー」オプションをクリックして、フィールドにOBJECTIDなどの名前を付けます。それはあなたがあなたの主キーとして使用する既存のユニークIDフィールドを持っている場合、あなたは常に再集合を可能に後で... ...あなたが編集可能な機能を持ってできるようにする必要があります
DPSSpatial

私は確かに愚かですが、DBmanagerの下では主キーを設定する場所を見つけられませんでした。実際、「planetOSMポリゴン」(およびその他)には、主キーはないという警告があります。
マチュー

OK-

手順に感謝し、今私はそれができない理由を理解しています:データベースはosm2pgsqlを使用してosm.pbfファイルからpostgisに直接インポートされます。あなたの手順では、ロードする必要がある外部ファイルです。私の場合、データベースはすでにpostgisにあり、スクリーンキャプチャに示されているような主キーはありません。だから、データベースがすでにインポートされているときに、pgsqlの下で主キーを生成する方法がありますか?
マチュー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.