วิธีการตรวจ centroid ของรูปหลายเหลี่ยม?


34

ฉันมีเวกเตอร์รูปหลายเหลี่ยมและฉันต้องการได้เซนทรอยด์ของรูปหลายเหลี่ยมนี้อย่างรวดเร็วเพื่อแทรกในเอกสารข้อความ ฉันทำงานกับ QGIS ฉันค้นหาคำถามอื่นและแม้ว่าบางคนค่อนข้างใกล้ แต่ก็ไม่ตอบคำถามของฉัน

อุดมคติแล้วเซนทรอยด์พิกัดจะอยู่ในตารางคุณลักษณะของรูปหลายเหลี่ยมและฉันสามารถคัดลอกและวางพิกัดได้

ฉันไม่ต้องการที่จะสร้างไฟล์เวคเตอร์จุดแยกซึ่งแสดงถึงเซนทรอยด์แล้วหาพิกัดเหล่านี้แล้วคัดลอกและวาง


เอกสารข้อความของคุณรูปแบบใด
นาธาน W

มันเป็นเอกสาร MS word แต่จริงๆแล้วมันอาจเป็นอะไรก็ได้
David

คำตอบ:


34

เซนทรอยด์เป็นเลเยอร์จุดหนึ่งตามนิยามที่กำหนด คุณจำเป็นต้องสร้างเลเยอร์ใหม่ซึ่งง่ายเหมือนพายใน QGIS 1.8 และเวอร์ชันที่สูงกว่า

  • โหลดในรูปหลายเหลี่ยมของคุณ
  • ไปที่เมนู -> Vector -> Geometry tools -> polygon centroid และสร้าง layer point centroid
  • ส่งออกพิกัดของเซนทรอยด์ที่สร้างไปยังตารางแอตทริบิวต์โดยคลิกที่ -> เมนูเวกเตอร์ -> เครื่องมือรูปทรงเรขาคณิต -> ส่งออก / เพิ่มคอลัมน์รูปทรงเรขาคณิต

หลังจากนั้นคุณสามารถทำการรวมเชิงพื้นที่เพื่อเพิ่มคอลัมน์ centroids ไปยังรูปหลายเหลี่ยมและลบเลเยอร์จุดอีกครั้ง


ขอบคุณสำหรับการตอบกลับฉันขอขอบคุณความช่วยเหลือ ถึงกระนั้นนี่เป็นเรื่องง่ายที่จะรู้ว่าพิกัดของเซนทรอยด์คืออะไร น่าเสียดายที่ไม่มีวิธีการที่ง่ายกว่าใน QGIS
เดวิด

หากคุณยังต้องการให้ง่ายขึ้นคุณอาจดูที่ PostGIS และฟังก์ชัน ST_Centroid ที่กล่าวถึงด้านล่าง วิธีนี้คุณไม่จำเป็นต้องสร้างไฟล์ชั่วคราว อีกทางเลือกหนึ่งคือคุณสามารถเขียนสคริปต์ไพ ธ อนสำหรับ QGIS หรือใช้ SEXTANTE Modeler
Curlew

10

จริงๆแล้วการสร้างเชพไฟล์ใหม่เป็นหนึ่งในตัวเลือกที่ง่ายที่สุดของคุณ อย่างไรก็ตามคุณไม่จำเป็นต้องคัดลอกและวางพิกัด ทำเช่นนี้:

  • สร้างไฟล์ centroids ของคุณโดยใช้เครื่องมือ Polygon Centroids
  • เปิดตารางแอ็ตทริบิวต์ centroids และทำให้สามารถแก้ไขได้ (ไอคอนดินสอที่ด้านล่าง)
  • เปิดเครื่องคำนวณภาคสนาม (ไอคอนเครื่องคิดเลขที่ด้านล่าง) และเลือกตัวเลือกสร้างเขตข้อมูลใหม่และเรียกสิ่งที่มีความหมาย (เช่น Easting)
  • จากรายการฟังก์ชั่นขยายเมนูรูปทรงเรขาคณิตและเลือก $ x จากนั้นทำซ้ำกับคอลัมน์ใหม่สำหรับ $ y (เรียกมันว่า Northing พูด)
  • บันทึกการแก้ไขของคุณและตอนนี้คุณมีพิกัดทั้งหมดซึ่งเป็นส่วนหนึ่งของตารางแอตทริบิวต์พร้อมด้วยรูปหลายเหลี่ยม ID ดั้งเดิมและแอตทริบิวต์หากคุณใช้เครื่องมือ centroids

หรือคุณจะต้องนำเข้าข้อมูลของคุณไปยัง PostGIS แล้ววนซ้ำรูปหลายเหลี่ยมโดยใช้ฟังก์ชันST_Centroidและเก็บผลลัพธ์ไว้ในฟิลด์ใหม่ งานที่เกี่ยวข้องนั้นเหมือนกัน แต่ตัวเลือกที่สองหมายความว่าคุณไม่มีไฟล์เซนทรอยด์แยกต่างหาก


ขอบคุณสำหรับคำตอบ. ฉันขอขอบคุณสำหรับความช่วยเหลือของคุณ ดูเหมือนว่าคำตอบของ Curlew นั้นง่ายกว่าสำหรับฉันเล็กน้อย ทั้งสองคำตอบเหล่านี้ยังมีงานอีกมากที่ฉันต้องการ ในที่สุดคุณจะจบลงด้วยเชปไฟล์ต่างๆที่คุณต้องชื่อลบ, แก้ไข ฯลฯ
เดวิด

8

จิตวิญญาณที่แข็งแกร่งยิ่งขึ้นต่อคำตอบของไมค์: 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*)'))


1
คำตอบที่ถูกประเมินต่ำกว่า;)
Fernando Irarrázaval G

6

วิธีการเกี่ยวกับการใช้สิ่งนี้ใน 2.2 Field Calculator?

Long field = substr (geomToWKT (centroid ($ geometry)), 7, 12)

Lat field = substr (geomToWKT (centroid ($ เรขาคณิต)), strpos (geomToWKT (centroid ($ เรขาคณิต)), '') +2, 12)

ดูเหมือนว่าสิ่งนี้ได้รับการแก้ไขใน 2.6 ด้วยตัวเลือก xmin xmin (centroid ($ geometry))


5

ฉันเพิ่งเจอโพสต์นี้เกือบ 5 ปีแล้ว (!) แต่นี่คือสิ่งที่ฉันทำเพื่อคำนวณรูปหลายเหลี่ยม centroids ที่รุ่น 2.18.14:

  1. เริ่มแก้ไขเลเยอร์รูปหลายเหลี่ยม
  2. สร้างฟิลด์ข้อความใหม่เรียกว่าcentroidxy
  3. ใช้เครื่องคำนวณภาคสนามคำนวณcentroidxy = x ($ geometry) || ',' || Y ($ เรขาคณิต)
  4. ผลลัพธ์ดูเหมือนว่า: 397640.915545362, 2126924.53637653
  5. บันทึกการแก้ไขของคุณ
  6. เลเยอร์รูปหลายเหลี่ยมของคุณมีฟิลด์ที่มีค่า x, y centroid

เรียบง่ายและยอดเยี่ยม
Kazuhito

3

เชื่อมโยงตารางคะแนน centroid กับตารางของรูปหลายเหลี่ยมแล้วใส่พิกัดด้วยชื่อรูปหลายเหลี่ยมและรูปร่าง รูปหลายเหลี่ยมมีความยาวไม่เกินหนึ่งตัวในตัวมันเอง


ขอบคุณสำหรับคำตอบ. ใช่ฉันรู้ได้ว่ารูปหลายเหลี่ยมไม่ได้มีละติจูดและลองจิจูดนานแค่ไหนในตัวมันเองมันเป็นสิ่งที่สามารถคำนวณได้ น่าเสียดายที่มันไม่ง่ายไปกว่านี้ใน QGIS ขอบคุณทุกคนอีกครั้งสำหรับคำตอบ และรวดเร็วเช่นกัน ขอบคุณ!
David

2

มาถึงโพสต์นี้และยากที่จะติดตามอัพเดตที่แนะนำ:

หมายเหตุ: วิธีนี้จะคำนวณละติจูดและลองจิจูดในพิกัดการฉายของคุณ (ซึ่งอาจเป็นเมตร) หากคุณต้องการให้พิกัดเป็นทศนิยมทศนิยม (โดยฉันถือว่าคุณทำหรือไม่เข้าใจส่วนใหญ่) ก่อนอื่นให้บันทึกเลเยอร์ใน CRS นี้: EPSG: 4326, WGS 84

  1. เครื่องคิดเลขเปิดสนาม
  2. สร้างเขตข้อมูลใหม่
  3. ป้อนชื่อ (ละติจูดหรือลองจิจูด)
  4. เลือกทศนิยมเป็นประเภทฟิลด์เอาท์พุท
  5. ป้อนนิพจน์นี้สำหรับละติจูด: y ($ เรขาคณิต) และนิพจน์นี้สำหรับลองจิจูด: x ($ เรขาคณิต)
  6. กดตกลง

-2

lon = ToReal (regexp_substr (geomToWKT (centroid ($ geometry)), '([\ s]')) lat = ToReal (regexp_substr (geomToWKT (centroid ($ เรขาคณิต)), '\ s [)]')


1
นี่ไม่ใช่คำตอบเลย กรุณาเยี่ยมชมที่ท่องเที่ยวที่ได้รับความรู้ความเข้าใจวิธีการตอบคำถาม ...
Nightwatch
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.