ラインをポイントに自動的にスナップしますか?


19

2つのベクトルシェープファイルがあります。1つのファイルはマンホールを表すポイントであり、もう1つはマンホールに通じるパイプを表すポリラインファイルです。指定した距離内で最も近いマンホールまでラインをスナップする必要があります。

手動で実行せずにこれを達成する簡単な方法はありますか?

ライン->ポイント

更新

アレクサンドルごとに、シェープファイルをスペーシャルライト形式にエクスポートしました。次は何がわからない。

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

Update#2新しいdbファイルを作成し、spatialite-guiを使用して新しいdbにシェープファイルをインポートしました。SQLクエリを調整しましたが、「no such column:f.geom」というエラーが表示されます。

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


Spatialite空間テーブル(レイヤー)では、フィーチャジオメトリは属性に保存されます。名前は異なる場合があります。「パイプ」テーブルでは、その属性はジオメトリと呼ばれます。mhをGeometry属性としても仮定して、答えを更新します。
アレクサンドルネトー

「no such function:ST_Snap」というエラーが表示されました。Windows 7 64ビットでQGIS 1.8を使用しています。
グレイヒッポ

あなたはどんなSpatialiteを持っていますか?QGISで確認できます>ヘルプ>概要
アレクサンドル・ネト

「そのような列はありません:f.geom」 -f.Geometryで試してください
vinayan

Spatialiteのバージョンは3.0.1
GreyHippo

回答:


26

データをPostgis(またはSpatialite)に配置する場合は、ST_Snapを使用して必要な処理を実行できます。

入力としてlines layer \ tableを使用し、ポイントレイヤーを参照として使用し、許容値を設定するだけです。このようなもの:

SELECT
    f.gid as gid,
    ST_Snap(f.Geometry, g.Geometry, 2) as geom
FROM
    pipe as f,
    (SELECT ST_Collect(Geometry) as Geometry
     FROM mh) as g

結果は次のとおりです。

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

その後、フィーチャ識別子を使用してジオメトリを更新できます。


「Select ... From ...」というコードはどこに配置しますか?「機能識別子を使用する」とはどういう意味ですか?
グレイヒッポ

データベース(postgisまたはspatialite)にファイルをインポートした後、DB Managerを使用してデータベーステーブルを表示し、SQLウィンドウでSQLクエリ(コード)を実行して、キャンバスにロードできます。それがあなたのために働くかどうか教えてください、それから私たちは更新部分を行います。
アレクサンドル

アレクサンドル、上記の更新を参照してください。ファイルを2つのspatialliteファイルにエクスポートしました。
グレイヒッポ

両方のファイルを同じSpatialiteデータベースに入れる必要があります。「パイプ」と言うだけで「mh.sqlite」データベースにドラッグします。その後、SQLコードを更新して、「ポイント」を「mh」に、「ライン」を「パイプ」に変更します。また、「gid」を「pipe」IDに適合させます。その後、実行して結果をロードできます。
アレクサンドル

3

私はQGISやGRASSについてあまり知りませんが、いくつかの簡単なグーグルはGRASSでv.cleanを生成します。

見ていこの記事及びこれを

QGISとGRASSの代替:

ArcGISでこれを行う場合、データをファイルジオデータベースのフィーチャデータセットに保存し、トポロジを作成して、ポイントレイヤーがラインのエンドポイント上にない領域を特定します。その後、Error Inspectorを使用してエラーを修正できます。

しかし、おそらく最も迅速で簡単な解決策はFMEにあるでしょう。Snapperツールを使用してみてください。またはそれ以上のAnchoredSnapper Tool。AnchoredSnapperを使用する場合は、スナップタイプがエンドポイントスナップであることを確認してください。もちろん、FMEのライセンスが必要です。ただし、お持ちでない場合は14日間の試用版をダウンロードできます。


v.cleanを見ましたが、1つのレイヤーのみを使用しているため、1つのレイヤーを別のレイヤーと比較する必要があります。また、QGIS /オープンソースオプションを探していました。
グレイヒッポ

1
@ GreyHippo、GRASSはオープンソースです。
アートワーク

1
GRASSはオープンソースですが、他のオプションはそうではありません。
グレイヒッポ


-1

手動の方法

Qgis->設定->スナップオプション(と私は確信していないが、CadTools拡張機能が必要な場合があります)とトポロジ編集を有効にします。

自動的な方法

QGISのSEXTANTEツールボックスのGRASSツールにあるv.clean。PostGIS 2.0を使用している場合、ST_SnapおよびST_SnapToGrid()(使用できない理由がないため、非常に優れた空間ツールです)

商業的な方法

FMEおよびMRFツール(商用拡張機能、評価版がありました。非常に優れています)。

また、オープンソースのツールを使用した水道管/下水道の管理についても興味がありますが、ヒントはありますか?


GreyHippoが「手動で行う」ことの意味だと思います。スナップオプションを使用するだけで、すべてのダングルノードを手で動かして、スナップをアクティブにする必要があります。それとも何か不足していますか?
ジェイク

番号。私は盲目でした。
シンプレックス

Simplexio、私はそれを手動でやりたくない。私は知らないプラグインまたはプロセスを望んでいました。
グレイヒッポ

GRASS v.cleanを2つのレイヤーで使用できるとは思いませんでしたか?
グレイヒッポ

1
正しく思い出せば、短すぎる行を修正できます。ご存知のように、あなたが抱えている問題は、マンホールが適切な場所に存在しないことではなく、下水道ネットワークがトポロジー的に正しくないことです。そして、それはパイプ層のみを必要とします。私が見たすべてのユーティリティネットワークシステムは、すべての下水道の交差点にマンホールがあると想定しています。このオフコースでは、正しいトポロジが必要であることを前提としています。
シンプレックス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.