Menggambar batas set poin menggunakan QGIS?

9

Saya memiliki satu set poin yang ingin saya ubah menjadi poligon.

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Saya mencoba cekung lambung tetapi tidak mendapatkan poligon yang dimaksud seperti yang Anda lihat di bawah,

masukkan deskripsi gambar di sini

Dan ketika saya menggunakan Denaulay Triangulation saya perlu menghapus segitiga luar.

masukkan deskripsi gambar di sini

Apakah ada cara efisien untuk melakukan hal yang sama?

Saya juga mencoba Convex hull.

masukkan deskripsi gambar di sini

Stephen Jacob
sumber
Apakah Anda mencoba Vector -> alat Geoprocessing -> Convex hull (s) ... atau Geoprocessing toolbox -> Alat geometri vektor -> Convex hull?
Dmitry Baryshnikov
Ya, saya memang mencobanya. Namun, saya pikir ini tidak berlaku untuk bentuk yang saya butuhkan. Saya akan memperbarui pertanyaan.
Stephen Jacob
3
apakah Anda memiliki garis yang ditunjukkan pada gambar pertama Anda atau hanya titik?
radouxju
1
Saya punya pertanyaan: apa tujuan Anda? mewakili data apa? sungai? jalan? Saya khawatir jika Anda memiliki bentuk "S" atau bentuk bengkok, itu tidak akan berfungsi, bahkan dengan python ...
Keiko
2
@StephenJacob - Bagaimana poin Anda dipesan? Jika ada pesanan yang searah jarum jam atau berlawanan arah jarum jam, maka dimungkinkan untuk terlebih dahulu mengonversi poin Anda menjadi garis (mis. Menggunakan alat Konversi poin menjadi garis SAGA ) dan kemudian mengonversi garis menjadi poygon (misalnya alat Garis ke poligon ).
Joseph

Jawaban:

5

Saya berasumsi bahwa Anda tahu poin mana yang menjadi milik "kiri" atau "kanan", karena jika tidak ada banyak solusi. Jika demikian, Anda bisa menggunakan triangulasi delaunay diikuti dengan pemilihan segitiga "sentral". Dengan metode ini, tidak perlu memiliki poin dalam urutan tertentu. Yang perlu Anda pertimbangkan adalah fakta bahwa segitiga yang Anda butuhkan harus menyentuh setidaknya satu titik dari setiap sisi.

buka tabel atribut> pilih dengan ekspresi> "kode" = 1

vektor> alat penelitian> pilih berdasarkan lokasi (seleksi baru, intersect)

masukkan deskripsi gambar di sini

buka tabel atribut> membalikkan pemilihan titik (ctrl + R)

vektor> alat penelitian> pilih berdasarkan lokasi (hapus dari pilihan, lepas)

masukkan deskripsi gambar di sini

vektor> alat geoproses> larut

masukkan deskripsi gambar di sini

radouxju
sumber
3

Saya memiliki hasil yang sama dengan @radouxju.

Operasi :

  1. Pilih 1 polyline [pilih pada klik]
  2. Perbarui tabel polyline Anda dan memengaruhi nomor untuk setiap fitur [bidang kalkulator]
  3. Pilih titik yang memotong satu polyline [alat kueri spasial]
  4. Perbarui poin yang dipilih dengan nilai polyline yang sebelumnya terpengaruh [kalkulator lapangan]
  5. Pertahankan titik pemilihan dan pilih segitiga delaunay yang memotong titik-titik yang dipilih ini [alat kueri spasial]
    masukkan deskripsi gambar di sini
    masukkan deskripsi gambar di sini

  6. Balikkan pemilihan titik atau pilih titik-titik yang memotong polyline lainnya [seleksi dengan ekspresi] atau [seleksi terbalik]

  7. Hapus dari seleksi saat ini segitiga delaunay yang terpisah dengan poin lain [alat kueri spasial]
    masukkan deskripsi gambar di sini
    masukkan deskripsi gambar di sini

  8. Gabungkan fitur-fitur dengan memilih [alat geoproses> bubar]
    masukkan deskripsi gambar di sini
    masukkan deskripsi gambar di sini


PENTING : Anda HARUS memiliki polyline untuk mendapatkan hasil ini!

Keiko
sumber
Terima kasih @ Geiko jawaban Anda berguna untuk menafsirkan jawaban radouxju
Stephen Jacob
Terima kasih @StephenJacob! Itu hanya kerja tim! ;-)
Keiko
1

Jika Anda memiliki pengalaman dengan python, Anda bisa menggunakan pustaka Shapely dan membuat Polygon dari titik-titik di dua baris. Anda harus memberi tahu python apa titik awal dan akhir dari kedua baris tersebut.

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)

Bahkan lebih baik: Anda juga dapat menggunakan geopanda untuk melakukan ini. geopanda memungkinkan Anda untuk dengan mudah menyimpan ke berbagai format termasuk shapefile

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')

Anda dapat membaca geometri garis menggunakan fungsi geopandas gpd.read_file ().

Urutan simpul poligon pada GIS umum: searah jarum jam atau berlawanan arah jarum jam

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

RutgerH
sumber
Bagaimana cara mengubahnya menjadi file bentuk?
Stephen Jacob
1
Anda dapat menggunakan beberapa alat tetapi saya penggemar geopanda. Gunakan gdf.to_file ('MyGeometries.shp', driver = 'ESRI Shapefile')
RutgerH