Bagaimana cara menentukan centroid dari poligon?

34

Saya memiliki vektor poligon dan saya ingin cepat mendapatkan centroid poligon ini untuk dimasukkan dalam dokumen teks. Saya bekerja dengan QGIS. Saya mencari pertanyaan lain dan meskipun beberapa agak dekat mereka tidak menjawab pertanyaan saya.

Idealnya, koordinat centroid akan berada di tabel atribut poligon dan saya hanya bisa menyalin dan menempelkan koordinat.

Saya tidak ingin harus membuat file vektor titik terpisah yang mewakili centroid dan kemudian menemukan koordinat ini dan menyalin dan menempelkannya.

David
sumber
Apa format dokumen teks Anda?
Nathan W
Ini adalah dokumen kata MS tetapi sebenarnya bisa apa saja.
David

Jawaban:

34

Centroid adalah definisi per layer titik dan bukan poligon. Untuk itu Anda perlu membuat layer baru, yang mudah seperti pie di QGIS 1.8 dan versi yang lebih tinggi.

  • Muat dalam poligon Anda
  • Pergi ke menu -> Vektor -> Alat Geometri -> poligon centroid dan buat layer titik centroid
  • Ekspor koordinat centroid yang dibuat ke tabel atribut dengan mengklik -> Menu vektor -> Alat geometri -> Ekspor / Tambahkan kolom geometri.

Setelah itu Anda bisa membuat gabungan spasial untuk menambahkan kolom centroid ke poligon dan menghapus layer titik lagi.

Curlew
sumber
Terima kasih atas jawabannya, saya menghargai bantuannya. Namun, ini banyak pekerjaan sederhana untuk mengetahui apa koordinat centroid itu. Sayang sekali tidak ada cara yang lebih sederhana di QGIS.
David
Jika Anda masih menginginkannya lebih mudah, Anda bisa melihat PostGIS dan fungsi ST_Centroid yang disebutkan di bawah ini. Dengan cara ini Anda tidak perlu membuat file sementara. Atau Anda bisa menulis sendiri skrip python untuk QGIS atau menggunakan SEXTANTE Modeler.
Curlew
10

Sungguh, membuat shapefile baru adalah salah satu opsi termudah Anda. Namun, Anda tidak perlu menyalin dan menempelkan koordinat. Melakukan hal ini:

  • Buat file centroid Anda menggunakan alat Polygon Centroids.
  • Buka tabel atribut centroids dan buat itu dapat diedit (ikon pensil di bagian bawah).
  • Buka kalkulator bidang (ikon kalkulator di bagian bawah) dan pilih opsi Buat Bidang Baru dan sebut itu sesuatu yang bermakna (mis. Easting).
  • Dari fungsi Daftar memperluas menu Geometri dan pilih $ x lalu ulangi dengan kolom baru untuk $ y (menyebutnya Northing, katakanlah).
  • Simpan hasil edit Anda dan sekarang Anda memiliki semua koordinat sebagai bagian dari tabel atribut lengkap dengan ID poligon asli dan atribut jika Anda menggunakan alat centroids.

Atau Anda harus mengimpor data Anda ke PostGIS dan kemudian iterate melalui poligon, menggunakan fungsi ST_Centroid dan menyimpan hasilnya di bidang baru. Pekerjaan yang terlibat hampir sama tetapi opsi kedua berarti Anda tidak memiliki file titik centroid yang terpisah.

MappaGnosis
sumber
Terima kasih atas jawabannya. Saya menghargai bantuan Anda. Sepertinya jawaban Curlew sedikit lebih mudah bagi saya. Kedua jawaban ini masih merupakan pekerjaan yang saya inginkan. Pada akhirnya Anda berakhir dengan berbagai shapefile yang harus Anda beri nama, hapus, edit, dll.
David
8

Jiwa yang lebih kuat untuk jawaban mike: long = toreal(regexp_substr(geom_to_wkt(centroid($geometry)), '(-?\\d+\\.?\\d*) -?\\d+\\.?\\d*')) lat = toreal(regexp_substr(geom_to_wkt(centroid($geometry)), '-?\\d+\\.?\\d* (-?\\d+\\.?\\d*)'))

SzieberthAdam
sumber
1
Jawaban yang diremehkan;)
Fernando Irarrázaval G
6

Bagaimana kalau menggunakan ini di 2.2 Field Calculator?

Bidang panjang = substr (geomToWKT (centroid ($ geometry)), 7, 12)

Bidang lat = substr (geomToWKT (centroid ($ geometry)), strpos (geomToWKT (centroid ($ geometry)), '') +2, 12)

Tampaknya ini dibahas dalam 2.6 dengan opsi xmin xmin (centroid ($ geometry))

mikrofon
sumber
5

Saya baru saja menemukan posting ini hampir 5 tahun terlambat (!), Tapi inilah yang saya lakukan untuk menghitung poligon centroid di versi 2.18.14:

  1. Mulailah mengedit layer poligon
  2. Buat bidang teks baru, sebut itu centroidxy
  3. Dengan menggunakan kalkulator bidang, hitung centroidxy = x ($ geometry) || ',' || y ($ geometry)
  4. Hasilnya terlihat seperti: 397640.915545362, 2126924.53637653
  5. Simpan hasil edit Anda.
  6. Lapisan poligon Anda sekarang berisi bidang dengan nilai centroid x, y
Stu Smith
sumber
sederhana dan luar biasa
Kazuhito
3

Kaitkan tabel titik sentroid dengan tabel poligon dan kemudian letakkan koordinat dengan nama dan bentuk poligon. Poligon tidak memiliki satu lat panjang di dalam dan dari dirinya sendiri

Lewis
sumber
Terima kasih atas jawaban anda. Ya saya menyadari bahwa poligon tidak memiliki satu lat panjang di dalam dan dari diri mereka itu hanya sesuatu yang dapat dihitung. Sayangnya, ini tidak lebih mudah dari ini di QGIS. Terima kasih sekali lagi semuanya atas jawabannya. Dan juga sangat cepat. Terima kasih!
David
2

Datang melintasi pos ini dan sulit untuk mengikuti, menyarankan pembaruan:

Catatan: Ini akan menghitung garis lintang dan bujur dalam koordinat proyeksi Anda (yang mungkin meter). Jika Anda ingin koordinat dalam derajat desimal (dengan asumsi saya lakukan atau sebagian besar tidak dapat dipahami) simpan dulu layer di CRS ini: EPSG: 4326, WGS 84.

  1. Kalkulator bidang terbuka
  2. Buat bidang baru
  3. Masukkan nama (baik Lintang atau Bujur)
  4. Pilih desimal sebagai jenis bidang keluaran
  5. Masukkan ungkapan ini untuk garis lintang: y ($ geometry) dan ungkapan ini untuk Longitude: x ($ geometry)
  6. tekan OK
Mark Matthews
sumber
-2

lon = ToReal (regexp_substr (geomToWKT (centroid ($ geometry)), '([\ s]')) lat = ToReal (regexp_substr (geomToWKT (centroid ($ geometry)), 's [)]'))

Marco Aurelio
sumber
1
Ini sama sekali bukan jawaban. Silakan kunjungi tur untuk mendapatkan pemahaman yang lebih baik bagaimana menjawab pertanyaan ...
Nightwatch