QGISを使用してポイントのセットの境界を描画しますか?


9

ポリゴンに変更したいポイントのセットがあります。

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

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

凹型の船体を試してみましたが、以下のように目的のポリゴンが得られません。

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

そして、Denaulay Triangulationを使用する場合、外側の三角形を削除する必要があります。

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

同じことをする効率的な方法はありますか?

凸包も試してみました。

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


ベクトル->ジオプロセシングツール->凸包...またはジオプロセシングツールボックス->ベクトルジオメトリツール->凸包を試しますか?
Dmitry Baryshnikov

はい、試しました。しかし、これは私が必要とする形状には当てはまらないと思いました。質問を更新します。
スティーブンジェイコブ

3
最初の画像に線が表示されていますか、それとも点のみですか?
radouxju 2017年

1
質問があります。あなたの目標は何ですか?データは何を表していますか?川?道路?"S"形状やツイスト形状がある場合、Pythonを使用しても機能しないと思います...
Keiko

2
@StephenJacob-ポイントの注文方法は?それらに時計回りまたは反時計回りの順序がある場合、最初にポイントをラインに変換し(たとえば、SAGAのポイントをラインに変換ツールを使用して)、次にラインをポリゴンに変換します(ラインからポリゴンツールなど)。
ジョセフ

回答:


5

どの点が「左」または「右」に属するか知っていると思います。それ以外の場合、多くの解決策があります。その場合は、delaunay三角形分割を使用し、その後に「中央」三角形を選択します。この方法では、ポイントを特定の順序で並べる必要はありません。考慮する必要があるのは、必要な三角形が両側から少なくとも1つの点に接触している必要があるということだけです。

属性テーブルを開く>式で選択> "コード" = 1

ベクトル>研究ツール>場所で選択(新しい選択、交差)

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

属性テーブルを開く>ポイントの選択を反転(Ctrl + R)

ベクトル>調査ツール>場所で選択(選択から削除、分離)

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

ベクトル>ジオプロセシングツール>ディゾルブ

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


3

@radouxjuと同じ結果になります。

オペレーション :

  1. 1つのポリラインを選択[クリックして選択]
  2. ポリラインテーブルを更新して、各フィーチャの数に影響を与える[フィールド計算機]
  3. 1つのポリラインと交差するポイントを選択[空間クエリツール]
  4. 以前に影響を受けたポリライン値によって選択したポイントを更新します[フィールド計算機]
  5. 選択ポイントを保持し、これらの選択したポイントと交差するドロネー三角形を選択します[空間クエリツール]
    ここに画像の説明を入力してください
    ここに画像の説明を入力してください

  6. ポイントの選択を反転するか、他のポリラインと交差するポイントを選択します[式による選択]または[選択を反転]

  7. 現在の選択から、他のポイントと共通でないドロネー三角形を削除します[空間クエリツール]
    ここに画像の説明を入力してください
    ここに画像の説明を入力してください

  8. 選択によってフィーチャをマージする[ジオプロセシングツール>ディゾルブ]
    ここに画像の説明を入力してください
    ここに画像の説明を入力してください


重要:この結果を取得するには、ポリラインが必要です。


@Keikoに感謝します。あなたの回答はradouxjuの回答を解釈するのに役立ちました
Stephen Jacob

@StephenJacobどういたしまして!それはただのチームワークでした!;-)
Keiko

1

Pythonの経験がある場合は、Shapelyライブラリを使用して、2本の線のポイントからポリゴンを作成できます。両方の行の開始点と終了点をpythonに伝える必要があります。

from shapely.geometry import Point, Polygon, LineString
import geopandas as gpd
import pandas as pd
line1 = [(1,1),(2,1.2),(3,1)]
line2 = [(1,2),(2,2.2),(3,2)]
# you need to reverse the order of one line to make it a polygon
line2reverse = list(reversed(line2))
polgonList2 = line1 + line2reverse
Polygon(polgonList2)

さらに良い:geopandasを使用してこれを行うこともできます。geopandasを使用すると、シェープファイルを含む複数の形式に簡単に保存できます

d = {'identifier' : [1, 2],
 'name' : ["Netherlands", "Germany"],
 "line1": [[(1,1),(2,1.2),(3,1)], [(1,1),(2,1.2),(3,1)]],
 "line2": [[(1.1,2.1),(2.1,2.3),(3.1,2.2)],[(1,2),(2,2.2),(3,2)]]
}

df = pd.DataFrame(d)
def makePolygon(row):
    line2reverse = list(reversed(row["line2"]))
    return Polygon(line1+line2reverse)    
geometries = []

for index, row in df.iterrows():
    geometries.append(makePolygon(row))
crs = {'init': 'epsg:4326'} 
gdf = gpd.GeoDataFrame(df, crs=crs, geometry=geometries)
gdf.to_file('MyGeometries.shp', driver='ESRI Shapefile')

geopandas gpd.read_file()関数を使用して、ラインジオメトリを読み取ることができます。

一般的なGISでのポリゴン頂点の順序:時計回りまたは反時計回り

https://nbviewer.jupyter.org/gist/rutgerhofste/b01c17aa6851ea577f10c21a4c3717bc


これを形状ファイルに変換する方法は?
Stephen Jacob

1
複数のツールを使用できますが、私はジオパンダのファンです。gdf.to_file( 'MyGeometries.shp'、driver = 'ESRI Shapefile')を使用してください
RutgerH
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.