Saya mencoba membuat algoritme yang mirip dengan kotak batas minimum (meskipun mungkin tidak terlihat seperti itu). Dalam hal ini sudut akan dilewatkan sebagai parameter dan diberi sudut saya perlu persegi panjang terkecil yang mencakup semua poin saya / poligon. Sejauh ini garis pemikiran saya adalah menemukan pusat poin saya (algoritma centroid), dan dari sana membuat dua garis paralel dengan sudut yang sama dengan sudut paramter, dan dua garis lagi tegak lurus terhadap mereka. Kemudian menggunakan iterasi, pindahkan garis-garis ini ke luar (dalam arah yang berlawanan) sampai mereka berisi semua poin. Juga tidak harus kotak batas minimum yang tepat, perkiraan bekerja (saya kira akan tergantung pada ukuran setiap langkah iterasi).
Ini kode saya sejauh ini. Saya sudah melarutkan semua poligon saya menjadi satu. Saya kemudian mengambil cembung lambung untuk mengurangi simpul. Saya kemudian meletakkan semua simpul dalam daftar - tidak yakin apakah ini membantu ...
a = layer.getFeatures()
for feat in a:
geom = feat.geometry()
a = geom.convexHull()
vertexId = QgsVertexId()
vertices = []
b = a.constGet().nextVertex(vertexId)
while b[0]:
vertices.append(b[1])
b = a.constGet().nextVertex(vertexId)
Catatan: Pada titik tertentu saya harus melewati sudut kotak. Saya menggunakan QGIS 3, dan perlu membuat ini dengan Python. Layer 'layer' memiliki satu geometri, poligon terlarut dari semua poligon lainnya - mungkin iterasi tidak diperlukan untuk mengaksesnya ..
Tolong beri tahu saya jika saya harus menyampaikan lebih detail / info.
Jawaban:
Ini kode lengkapnya. Ini mengandung terlalu banyak baris (pasti lebih dari yang dibutuhkan) tetapi berhasil. Sekarang Anda bisa membersihkannya jika mau.
Dalam resume, algoritma menghitung jarak maksimum antara garis paralel yang memiliki kemiringan yang ditentukan oleh parameter rotasi dan melewati titik-titik. Untuk setiap titik akan dibuat garis 'horizontal' dan 'vertikal'. Nama-nama ini hanya orientatif karena didefinisikan pada posisi 0 (rotasi = 0). Jadi, untuk setiap titik eksternal akan dibuat 2 garis kemungkinan ini dan kemudian, secara iteratif, poligon akan dibuat berdasarkan 4 eksternal, atau dikatakan dengan cara lain, di mana jarak garis paralel maksimum.
Satu hal terakhir: itu dibuat untuk digunakan dalam QGIS 3.8 dengan rumput.
sumber