Hitung koordinat kotak pembatas dari poligon yang dipilih dengan QGIS


17

Saya hanya secara manual (dan agak tidak akurat saya yakin) mengambil koordinat kotak pembatas untuk poligon county, yang merupakan pilihan dari lapisan bentuk county yang lebih besar. Saya ingin dapat menggunakan plugin QGIS atau fungsi lain untuk menghitung ini dengan cepat dan tidak dengan tangan. Ini hampir pasti mungkin tetapi saya tidak dapat menemukan apa pun dengan pencarian Google

Jawaban:


26

Fungsi Python kecil berikut akan menampilkan koordinat kotak pembatas dari fitur yang sedang aktif:

def printBB():
    feature = iface.activeLayer().selectedFeatures()[0]
    print feature.geometry().boundingBox().toString()

Untuk menentukan fungsi, buka konsol Python dari menu Plugins, salin dan tempel ketiga baris ke konsol, dan tekan enter. Kemudian Anda dapat memanggil fungsi dengan mengetik printBB()dan menekan enter saat fitur yang diinginkan dipilih.


1
Saya mendapatkan kesalahan ini ketika mencoba menjalankan skrip ini: File "<input>", line 4 printBB() ^ SyntaxError: invalid syntax
cbunn

@ cbunn pastikan Anda memiliki layer yang dipilih di lapisan / daftar isi - ini sangat sensitif untuk ini!
DPSSpatial

Terima kasih untuk bantuannya. Saya juga lupa menekan enter untuk sepenuhnya mendefinisikan fungsi printBB () sebelum memanggilnya.
cbunn

2
Saya harus menggunakan print (feature.geometry (). BoundingBox (). ToString ()) untuk baris 3.
cm1

16

QGIS dapat melakukannya melalui Polygon dari Layer Extent

Vektor - Alat Penelitian - Polygon Dari Layer Extent

Akan menghasilkan shapefile baru dengan atribut seperti XMIN XMAX YMIN YMAX AREA WIDTH HEIGHT


1
Anda harus memeriksa Use only selected obectsdan calculate for every objectmendapatkan hasil yang diinginkan.
AndreJ

hmm itu tidak berhasil untuk saya, shapefile yang
dihasilkan

1
Anda hanya ingin memeriksa 'Gunakan hanya objek yang dipilih' jika Anda memiliki objek yang dipilih. Saya meninggalkan kedua bidang itu tanpa centang dan mencapai hasil yang baik.
Johanna

4

Anda juga dapat melakukan ini menggunakan plugin PyShp dengan Python .. Ini jauh lebih sederhana ...

import shapefile

sf = shapefile.Reader("Path to shapefile...") 
shapes = sf.shapes() 
bbox = shapes[0].bbox # Retrieves the bounding box of the first shape

print bbox # Will print the bounding box coordinates

Informasi lebih lanjut tentang PyShp dan fungsi lainnya dapat ditemukan di sini .


3

Jika Anda membutuhkan banyak kotak pembatas poligon, Anda dapat "Simpan Sebagai ..." lapisan Anda ke GeoJSON dengan WRITE_BBOX = opsi YA dan akan ada atribut "bbox" tunggal sebelum atribut "geometri" Anda, bahkan untuk multipoligon.

..., "bbox": [ -70.062408006999874, 12.417669989000046, -69.876820441999939, 12.632147528000104 ], "geometry": ...

1

Saya harus melakukan ini untuk menghasilkan bidang yang bisa saya impor sebagai daftar di tempat lain.

  1. Instal plugin QGIS, FieldPyculator
  2. Beralih pengeditan layer
  3. Buat kolom baru di tabel atribut sebagai string misalnya bbox (simpan suntingan)
  4. Buka FieldPyculator
  5. Setel Bidang Pembaruan ke bbox
  6. Dalam ekspresi bidang, ketikkan sesuatu seperti:

    bb = $geom.boundingBox().toString()

    bb = bb.replace(' ','')

    bb = bb.replace(':',',')

    value = bb

  7. Lari

  8. Matikan pengeditan dan simpan layer

1

Untuk akses cepat, opsi adalah menjaga koordinat bbox di tabel atribut.

  • Mode edit toogle
  • Luncurkan kalkulator Bidang
  • Setel buat bidang baru, setel nama (mis. Xmin), jenis (desimal), panjang, (presisi)
  • Ekspresi: x_min ($ geometry)
  • Anda akan mendapatkan bidang baru di tabel atribut dengan koordinat LEFT.

    Ulangi ini untuk RIGHT, BOTTOM, TOP dengan ekspresi:

  • x_max ($ geometry)
  • y_min ($ geometry)
  • y_max ($ geometry)
  • Contoh hasilnya masukkan deskripsi gambar di sini

    Anda kemudian dapat mengatur plugin AutoFields untuk secara otomatis memperbarui bidang-bidang ini ketika fitur diubah.

    Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
    Licensed under cc by-sa 3.0 with attribution required.