タグ付けされた質問 「postgis」

PostGISは、PostgreSQLオブジェクトリレーショナルデータベースの拡張機能で、地理オブジェクトのサポートを追加します。

3
PostGIS:ST_Intersection = 100%のジオメトリの場合、ST_Equals false?
地籍の小包データで構成される2つのデータセットがあり、それぞれ約125,000行です。ジオメトリ列は、区画の境界を表すWKBポリゴンです。すべてのデータは幾何学的に有効です(ポリゴンが閉じているなど)。 いくつかの最近のデータは、比較ジョブに使用されているベースデータとは異なる投影法で到着しました。そのため、新しいデータを再投影しました(ベースは4326でした。もう1つは、900914としてPostGISに取り込まれたWGA94でした... 4326に再投影しました)。 。 分析の最初の段階は、一致しない区画を見つけて保存することでした。その一部は、同一のジオメトリを持つ区画を識別して保存することです。 だから私は非常に標準的なクエリを実行しました(以下のコードブロックはスキーマの詳細などを抽象化しています): create table matchdata as select a.* from gg2014 a, gg2013 b where ST_Equals(a.g1,b.g1) 結果はゼロです。 「おかしい…」と思った。「おそらく、再投影によって引き起こされた小さな頂点シフトがありました。それは煩わしいことであり、実際には起こらないはずです。」 幸いにも、空間的に同一である必要がある区画を確立できるようにする豊富な空間データ(5つの識別子列)があります。2014年のテーブルの変更日が2013年のデータの最大変更日より前である同じ識別子を持つものです。これは、120,086の個別の行になります。 識別子とジオメトリを別のテーブル(match_id)に保存し、次のクエリを実行しました。 select apid, bpid, ST_Area(ag::geometry) as aa, ST_Area(bg::geometry) as ab, ST_Area(ST_Intersection(ag,bg)::geometry)/ST_Area(ag::geometry) as inta, ST_Area(ST_Intersection(ag,bg)::geometry)/ST_Area(ag::geometry) as intb from match_id order by inta 最初の16の値についてintaとintb同様にゼロであった、次の456であった0.99999999っぽい(最小0.99999999999994、最大0.999999999999999)、以降1た473行-交差の面積があった行120050まで、より大きいいずれかの幾何学的形状(最大値intaとはintb)まだ1.00000000000029だったが、。 だからここに私の難問があります:2つのジオメトリがそれぞれの領域の99.999999999994%から100.000000000029%の間で空間的に交差する場合、「ST_Equals」に「そうです...それを与えます。十分に近い」と言ってもらいたいのです。 結局のところ、これは16兆分の1の割合で減少していることに相当します。 地球の周囲(約40,000 km)のコンテキストでは、0.0000000025 kmの頂上から離れているようなものです(面積の差が小さくなるため、頂点のシフトはさらに小さくする必要があります)。 TFD(私がR'dを持っています)によると、許容値ST_Intersects()は概念的に0.00001m(1mm)であるため、頂点の暗黙の変更(私が確認していないことを告白します:ST_Dump()それらを変更するので)は小さくなるようです。公差より。(私はそれを理解していますがST_Intersects …

2
ポリゴンのPostGIS ST_Intersectionはラインを返すことができます
あるテーブルのポリゴンを別のテーブルのポリゴンでクリップすると、ST_Intersectionは、ST_Dumpで処理できる結果のセットを返すことができます。返される複数のジオメトリは、必ずしもST_Polygonではなく、ST_LineString(おそらくポイント)でもあります。したがって、クエリを実行すると INSERT INTO c (geom) (SELECT (ST_Dump(ST_Intersection(a.geom,b.geom))).geom FROM a INNER JOIN b ON ST_Intersects(a.geom, b.geom)); テーブル "c"にクリップされたポリゴンを入力しようとすると、次のエラーで失敗します:ジオメトリタイプ(LineString)が列タイプ(ポリゴン)と一致しません 別のネストされたSELECTステートメントを実行して、ポリゴンジオメトリのみが通過するようにしました。 INSERT INTO c (geom) (SELECT geom FROM (SELECT (ST_Dump(ST_Intersection(a.geom,b.geom))).geom FROM a INNER JOIN b ON ST_Intersects(a.geom, b.geom))) AS cl WHERE ST_GeometryType(cl.geom)='ST_Polygon'); これは少し面倒なので、無効なジオメトリを削除するためのよりエレガントなソリューションがあるかどうか疑問に思いますか?
9 postgis 

1
PostGISのラスターに属性テーブルを追加しますか?
postgisデータベースに保存されているラスターに属性を追加したいと思います。次のコマンドを使用して、データベースにラスターを挿入します。 raster2pgsql -s 4236 -I -C -M /home/user/mysrc/outlabeled.tif public.test | psql -d template_postgis このラスターoutlabeled.tifは、実際にはピクセルのグループ(オブジェクト)ごとにラベルが付いた1バンドラスターです。次に、ラスターに追加する属性を含む.txtファイルを計算しました(シェープファイルの属性テーブルなど)。それを行うことは可能ですか?これまでのところ、これを行う唯一の方法は、実際にはラスターバンド(テキストファイルではない)を追加することであるという印象を受けました。それが不可能な場合、インポートの前にgdalで追加された属性テーブルが機能しますか?

3
QGISを使用して既存のデータベースエントリにGIS機能を追加する
ジオメトリ列を含むテーブルを含むpostgreSQLでデータベースを構築しました。非ジオメトリ列にデータを追加すると、postgisを使用してデータベースに接続したときに、QGISでそれらのデータを表示できます。次に、QGISの編集ツールを使用して、既存のエントリにポリゴンを追加します。つまり、QGISでジオメトリ列を埋めます。 これどうやってするの?シェープファイル全体をデータベースに追加することだけを聞いたことがありますが、単一の機能を単一の列に追加することは聞いていません。 例...次の表があります(自治体): id smallint NOT NULL, name varchar(50) NOT NULL, mun_geom geometry(Polygon, 31468) データベースに接続しているときに、(1、 'municipality1')のように、postgresqlに列のidとnameを入力できます。自治体をpostgisレイヤーとして追加した後、ポリゴンフィーチャを追加してエントリを補完します。

2
PostGIS機能比較機能?
レイヤー1(ソース)のフィーチャーとレイヤー2(ソースの更新)のフィーチャーを比較して、フィーチャーのジオメトリや属性が変更されているかどうかを確認したいと思います。次に、何が変更されたかを示す「レポート」を生成させてください。 明確化のための編集:ジオメトリの変更には、新しいデータレイヤーに追加されたフィーチャの検索も含まれます。削除は面白いかもしれませんが、追加はより重要です。 私はPostGIS関数を調べてきましたが、ジオメトリと属性の両方の2つのレイヤーフィーチャ間の違いを比較して報告するように設計されたツールを見つけることができません。 ArcGISの「フィーチャ比較」ツールに似たものを探しています。 PostGISにこのようなものがない場合、これらのタイプの質問に答える他のオープンソースツールはありますか?ありがとう。

1
ほとんどのポイントがポリゴン内にある場合、何百万ものポイントに対してポイントインポリゴンクエリを最適化するにはどうすればよいですか?
ポイントテーブルに1億5,000万のポイントがあり、特定のポリゴンジオメトリの外側にあるいくつかのポイントを見つけたいと考えています。ポイントの99.9%がポリゴンジオメトリ内にあることを知っています。ポリゴンの外側にあるいくつかのポイントを見つけることに興味があります。 インデックス付きのPostGISテーブルを使用した現在の最良のクエリは、完了するまでに約30分かかります。ほとんどのポイントがポリゴン(境界線)内にあることを知っている次のクエリを最適化する方法はありますか? SELECT COUNT(*) FROM italy_points pt JOIN borders poly ON ST_WITHIN (pt.the_geom, poly.geom) WHERE poly.iso3 = 'ITA'; ポリゴンは基本的にイタリアの管理0境界です。頂点-405,000。パーツ-510。エンベロープはポリゴンよりもはるかに大きい(ポリゴンはエンベロープの24%をカバーしています)

1
ogr2ogrの代わりにshp2pgsqlを使用してシェープファイルをPostGISにインポートしますか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 2年前休業。 私はここで何か悪いことをしているかもしれませんが、 shp2pgsqlを使用していくつかのシェープファイルをPostGISデータベースにインポートする場合、まずそのシェープファイルのSRID / EPSGを把握する必要があります。これは、少なくとも2つのステップからなるプロセスだと思います。まず、次のようにシェープファイルを照会します。 >ogrinfo -al -so someshapefile.shp これは、既知のテキスト(wkt)投影情報を返しますが、少し冗長で、やや不透明です(私には)。何かのようなもの: GEOGCS["NAD83", DATUM["North_American_Datum_1983", SPHEROID["GRS 1980",6378137,298.257222101, AUTHORITY["EPSG","7019"]], AUTHORITY["EPSG","6269"]], PRIMEM["Greenwich",0, AUTHORITY["EPSG","8901"]], UNIT["degree",0.01745329251994328, AUTHORITY["EPSG","9122"]], AUTHORITY["EPSG","4269"]] 次に、通常はPrj2EPSGなどの変換ツールを使用してwkt情報を実行し、EPSG / SRIDを見つけます。 この時点で、次を使用してシェープファイルをインポートできます。 >shp2pgsql -I -s 4269 someshapefile.shp <schema>.<table> | psql -U <user> -d <dbname> -h <hostaddress> -p 5432 -sフラグでSRIDを指定していることに注意してください。 SRIDを指定せずにshp2pgsqlを実行すると、プロジェクションが設定されず、geom列を手動で更新してプロジェクションを含める必要があると思います。 または、ルックアップをスキップして、ogr2ogrを使用することもできます。 >ogr2ogr -f "PostgreSQL" "PG:host=<hostaddress> …

1
QGIS DB Managerの履歴/ログファイルはありますか?
psqlを介してPostGISを使用すると、で実行したコマンドを振り返ることができます~/.psql_history。QGIS DBマネージャーを介して接続している場合、同等のログ/履歴ファイルはありますか? 私はソースコードを見始めましたが、まだ答えが見つかりません! 参考までに、Ubuntu 16.04でQGIS 3、PostGIS 2.4、PostgreSQL 10を実行しています。

3
Postgisの内部結合でインデックスを使用する方法は?
2つの異なるテーブルで2セットのポイントを取得しました。Table_aは100kポイント、table_bは300kポイントを獲得しました。関係で最も近いポイントを見つけようとすると、tabla_aから50メートル以内にあるtable_bからポイントが見つかります。その秋の列を計算した後、それらをtable_a a_id列でグループ化し、最高値を返します。 私はこの批評家を満たす次のクエリを書きました SELECT DISTINCT ON (a_id) * FROM ( SELECT table_b.b_id, table_b.height - st_3ddistance(table_b.geom, table_a.geom) fall, table_b.geom, table_a.a_id FROM table_a INNER JOIN table_b ON _st_3ddwithin(table_a.geom, table_b.geom, 50)) a WHERE fall >= 0 ORDER BY a_id, fall DESC; 3Dジオメトリインデックスを追加しました。 CREATE INDEX table_a_geom ON table_a USING GIST (geom gist_geometry_ops_nd); CREATE INDEX …

1
QGISでPostGISパーテ​​ィションテーブルをロードできません
次のステートメントを使用して、PostgreSQLデータベースのテーブル(1300万を超える地理的ポイントデータ)をパーティション化しました。 CREATE TABLE data.data_fusion ( id BIGINT NOT NULL, source TEXT, id_source VARCHAR, id_vn INTEGER, taxref_id INTEGER, ... geom GEOMETRY(Point, 2154), equipe VARCHAR, exp_excl BOOLEAN ) PARTITION BY LIST (equipe); そして、子テーブルごとに、この例のように主キーとインデックスを作成しました。 CREATE TABLE data.data_fusion_lpo07 PARTITION OF data.data_fusion FOR VALUES IN ('lpo07'); ALTER TABLE data.data_fusion_lpo07 ADD PRIMARY KEY (id); CREATE INDEX …

3
PostGISでポリゴンのドリルダウン/オーバーレイを実行しますか?
PostGISで頭を一周できないような課題に直面しています。私はプログラミング言語を使用してこれを解決できることを知っています(そしてそれは私のバックアップ計画です)が、私はPostGISでこれを解決したいのです。検索を試みましたが、問題と一致する回答が見つかりませんでした。これは、検索語句がわからないことが原因である可能性があります。そのため、申し訳ありませんが、正しい方向に向けてください。 私の問題はこれです: ポリゴン/マルチポリゴンが混在するテーブルがあります 各(マルチ)ポリゴンには、ランク付けする属性(優先度)があります。 各ポリゴンには、知りたい値もあります。 検索エリア(ポリゴン)があります 私のクエリ領域では、各ポリゴン値によってカバーされる領域を見つけたい 例: ここに赤、緑、藍で描かれた3つのポリゴンがあるとします。 そして、小さな青い長方形は私のクエリポリゴンです さらに、属性は geom | rank | value -------|------|---- red | 3 | 0.1 green | 1 | 0.2 indigo | 2 | 0.2 私が欲しいのは、これらのジオメトリを選択して、最高ランク(緑)が可能なすべての領域(つまり、クエリgeomとそのgeomの交点)を埋め、次に次に高い(インディゴ)がクエリジオメトリの交点を埋めるようにすることです。およびgeom MINUSはすでにカバーされています)など。 このようなもの: 私はこの質問を見つけました:ST_Differenceを使用して重複するフィーチャを削除しますか?しかし、それは私が望んでいるようには見えません。 エリアなどの計算方法を自分で理解できるので、2番目の画像に示されている3つのジオメトリを取得するクエリは問題ありません。 追加情報:-これは大きなテーブルではありません(〜2000行)-重複がゼロまたは複数(3つだけではない)の可能性があります-クエリ領域(またはその一部)にポリゴンがない可能性があります-私はm postgres 9.6.6でpostgis 2.3を実行 私のフォールバックソリューションは、次のようなクエリを実行することです。 SELECT ST_Intersection(geom, querygeom) as intersection, rank, value FROM …
8 postgis 

1
交差するすべてのポリゴンを結合して、PostGISを変更せずに他のポリゴンを残す方法は?
私が必要なのは、交差するポリゴンを単一のジオメトリに統合し、変更せずに他のポリゴンを残すことです。 次のクエリを使用してこれを行うことができます。これは、すべてのポリゴンを単一のジオメトリに統合し、それを個別のジオメトリにダンプします。 INSERT INTO unioned(geom) SELECT ST_MULTI((ST_Dump(ST_Union(geom))).geom) from footprints; 問題は、データベースに100万行を超える行があり、ST_Union操作が終了しないことです。すべてのジオメトリを結合せずに同じことを達成する方法はありますか?
8 postgis 

2
PostGIS地理タイプEPSG:4326のみですか?
地理タイプは緯度と経度に基づく座標のみを使用するという印象を受けましたEPSG:4326。また、geography列にCRSを指定する必要があることを覚えていません。 ただし、この無限の例から: SELECT * FROM geography_columns; f_table_name | f_geography_column | srid | type --------------------------+--------------------+------+---------- nyc_subway_stations_geog | geog | 0 | Geometry airports | geog | 4326 | Point 上記SRIDのような他のを使用できます0。 いgeographyタイプの使用が4326唯一の?

1
ポリゴン間のオーバーラップを分割し、PostGISを使用して最も近いポリゴンに割り当てますか?
私の質問は、私がを使用していないことを除いて、ポリゴン間の素朴なセットへの未回答の分割オーバーラップにかなり関連していshapelyます。PostgreSQL10でPostGIS 2.4を使用しています。 管理ユニットのマルチポリゴンを含むテーブルがあります。形状は陸域のみをカバーしています。私の目標は、それらを水中に一定距離伸ばすことです。 現在のポリゴンを水中に拡張するために、バッファを実行してから、テーブル内の他のすべてのジオメトリを差し引きます。これにより、ジオメトリに隣接するバッファーがクリップされ、レイヤーに現在何もないバッファーが保持されます。だから、次のようなもの: SELECT c1.name , ST_Difference( ST_Buffer( ST_Union(c1.geom), 250 ) , (SELECT ST_Union(c2.geom) FROM foo.county AS c2 WHERE c2.name <> c1.name) ) FROM foo.county AS c1 GROUP BY c1.name; ただし、これはもちろん、2つのポリゴンが水の端で互いに出会うオーバーラッピングバッファーと、狭い海峡をまたがって与えます。 (付録のような半島のため、ジオメトリのポイントが赤よりも青に近くないため、左側の小さな紫のスライバーは完全に赤のポリゴンに割り当てられていることに注意してください。) これは私が行き詰まっているところです。オーバーラップ(紫の部分)を、バッファリングされていないポリゴンと等距離の線に沿って2つのばらばらのポリゴンにカットし、それらのスリーバーをバッファリングされた郡から減算します。 バッファが3つ以上重なるケ​​ースはないと思います。そこに着いたら、私はその橋を渡ります。 ST_VoronoiPolygonsポイントの代わりにポリゴンの周りを使用するのと似ていますが、まったく同じではないような匂いがします。 これは、理想的には、PostGIS関数として、QGISジオプロセシング機能として、または一部のPythonライブラリに存在しますか?

1
シェープファイルに変換したときのPostGISマルチポリゴンがソースジオメトリと一致しない
MULTIPOLYGONレコードをPostGIS(v2.2.2)からQGIS(v2.18.9)を介してシェープファイルに変換しようとしていますが、下の画像に表示されているように、ソースジオメトリと結果のシェープファイルが一致しません(赤いレイヤーがソースです)緑のレイヤーが結果のシェープファイルです)。GDAL v2.0.0からogr2ogrを介して変換を実行しても、同じ結果が得られます。この変換は完了するまでに約40分かかります。 ソースジオメトリをPOLYGONにダンプして変換を実行すると、結果のシェープファイルは正しく、変換がはるかに高速になります(ダンプには7秒+ 17秒)。しかし、5つの機能ではなく、305188になりました。 ソースのMULTIPOLYGONレコードは、必要に応じて、隣接するセルのST_Unionによって作成されます。 何か不足していますか?正しい変換を実行する方法はありますか?なぜこれが起こっているのか誰でも説明できますか? ソースジオメトリ 矢印でマークされた穴のあるエクスポートされたシェープファイル 詳細があります: pgsql2shpは、QGISやogr2ogrのような同じ結果のシェープファイルを生成します。 @dbaston-私はほとんどのデータを切り取って、上の画像に表示されている領域の周りの部分を残しました(周り( 'POINT(-89.45 29.99)'、4326))。私はこの小さなサンプルを変換し、同じ結果を得ました。あなたまたは誰かが同じサンプルで変換を試したい場合は、ここでダンプを取得できます: PostgreSQL v9.5からのサンプルデータバックアップ 31時間後、ST_IsValidは完全なデータセットのすべてのジオメトリでtrueを返しました。上記のリンクから入手できる小さいサンプルでも同じ結果が得られました。ただし、返された同じ小さいデータセットについてQGISで有効性を確認します。 ring 1 of polygon 712 not in exterior ring ring 2 of polygon 712 not in exterior ring ring 3 of polygon 712 not in exterior... PostGISとQGISの有効性チェックに違いがあるのはなぜですか? さらに確認するために、上の画像で青でマークされている部分を除くすべてのポリゴンパーツを削除しました。私はそのWKT形式を確認しましたが、問題はありません。そして今、この機能だけを備えたシェープファイルへの変換は正しかった。 これは意味がありますか?隣接するセルでST_Unionによって作成されたより多くのデータセットをチェックしたところ、シェープファイルに変換するときに同じ問題が存在することがわかりました。同じデータをGeoJSONに変換すると、正しい結果が得られます。 MULTIPOLYGONは、次の式を使用してPOLYGONジオメトリから作成されました。 st_multi(st_union(st_buffer(geom,0)))

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