PostGISまたはGRASSの共通属性のラインを分解または分割しませんか?


9

すべての交差点で道路が分割されている道路中心線シェープファイルがあります。ただし、共通の属性セットを持つLINESTRINGを1つのLINESTRINGに結合したいと考えています。名前、制限速度などが変わらない限り、マージしたい。これはOpenStreetMapへの最終的な統合のためです。

EsriのArcGIS for Desktopソフトウェアは、DissolveコマンドとUNSPLIT_LINESオプションでこれを許可しているようです。

また、QGISでDissolveコマンドを見つけましたが、それはポリゴンと単一フィールドでのみ機能するようです。

QGISに何も存在しないと仮定すると、PostGISまたはGRASSでそれを行う方法を誰かが知っていますか?



この質問が今日尋ねられた場合、私はそれが広すぎると締め切られると思います。ここでそれを閉じるのではなく、既存の回答を改造してより広い回答を防ぐために編集します。
PolyGeo

回答:


4

興味深い質問です。私はPostGISの第一人者とは見なしていませんが、問題をいじって、複数のフィールドに共通の値がある(データセットでは、フィールドとで一致した)高速道路LINESTRINGレコードをMULTILINESTRINGレコードに分解する次のクエリを思いつきました。私はOGRを使用して高速道路シェープファイル(名前はushwysに変更)をPostGREsqlにプッシュしました。したがって、私のジオメトリフィールドはと呼ばれます。このクエリをハッキングして、データとフィールドの条件に対応してください。namestatewkb_geometry

SELECT 
u.name, 
u.state, 
ST_AsText( ST_Multi( ST_Collect( u.wkb_geometry ) ) ) as multilines 
FROM ushwys u
GROUP BY u.name, u.state 
ORDER BY u.state 
LIMIT 100; --########### DROP THE LIMIT WHEN YOU'RE DONE EXPERIMENTING

これが機能する場合は、ogr2ogrを使用してこのクエリを実行し、シェープファイル、GML、CSVなどの任意のベクター形式で結果をエクスポートできます。ogr2ogrからSQLクエリを呼び出す方法については、OGR SQLのドキュメントをご覧ください。

参考までに、PostGIS ST_Collect命令と、複数のフィールドでのグループ化を示すこのサイトを確認しました。

このクエリの編集が機能しない場合は、私に知らせてください。私が答えを見つけて、周りに留まって混乱しないようにします。


PS ogr2ogrを使用して地理データをPostGISにプッシュすることに慣れていない場合は、次のogr2ogrスクリプトを使用してデータインポートを実行しました(Webからコピーしてogr2ogrコマンドウィンドウに直接貼り付けることに注意してください。は、ogrスクリプトを中断する二重引用符の改行とフォント/文字の置換を紹介します):

ogr2ogr -f "PostGreSQL" PG:"host=127.0.0.1 user=postgres dbname=gisdb password=my_password" 
"E:\GISData\UnitedStates\highways.shp" -nln ushwys -nlt geometry

[更新]

このクエリを実行した後、QGISでこれがどのように見えるかを確認したかったので、このWHERE句を適用するようにクエリを変更しました(これにより、ミズーリ州のUS Highway 65のすべてのバリアントが得られます)。

where u.state = 'MO' and u.name LIKE '%US%65%'

次に、QGISとQuickWKTプラグインを使用して、作成された8つの高速道路MULTILINESTRINGレコードすべてを視覚化しました。スクリーンショットを見るとわかるように、最終結果では、ハイウェイ65がミズーイ州のアイオワ州との北の国境からアーカンソー州との彼女の南の国境までずっとかかっています。

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

私にとって、この視覚化は、私のクエリが機能の予期しない重複や削除を生成しなかったことを示しています。したがって、次に「ディゾルブは8つのフィーチャを返しましたが、元のテーブルのいくつのフィーチャが実際にミズーリ州のハイウェイ65を表していますか?」次の質問でその質問に答えました。元のデータセットはミズーリ州のハイウェイ65を表すために38の特徴を使用しているようです:

SELECT count(*) FROM ushwys WHERE state = 'MO' AND name LIKE '%US%65%';
-- returned 38

最終的な分析では、クエリにより、38のフィーチャが、名前と状態のフィールドの値を共有する8つのフィーチャに削減されました。この時点で、ディゾルブタスクが複数のフィールドを考慮する必要がある場合に、このクエリがシングルパートジオメトリをマルチパートジオメトリにディゾルブするのに役立ち、適切であると私は比較的確信しています。

乾杯。:)



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