Python: ค้นหาวิธีการคำนวณ“ inner centroid” (หรือที่รู้จักกันว่า labelPoint in arcmap) ของรูปหลายเหลี่ยม


13

ฉันกำลังมองหาวิธีในการคำนวณพิกัด X, Y ของจุดภายใน (หรือที่เรียกว่า labelPoint ใน arcmap) ของรูปหลายเหลี่ยม (ผิดปกติ) ฉันพยายามหาวิธีแก้ปัญหาโดยไม่ต้องใช้โมดูล ArcGIS

ป้อนคำอธิบายรูปภาพที่นี่

ความแตกต่างระหว่าง "เซนทรอยด์" และ labelPoint คือเซนทรอยด์อาจอยู่นอกรูปหลายเหลี่ยม

ฉันใช้โมดูลหุ่นดี

จาก shapely.geometry นำเข้ารูปหลายเหลี่ยม

ref_polygon = Polygon(points)
# get the x and y coordinate of the centroid
ref_polygon.centroid.wkt
'POINT (558768.9293489187300000 6361851.0362532493000000)'

ใช้ข้อมูลต่อไปนี้ (จุดยอดของรูปหลายเหลี่ยมของฉัน)

ขอบคุณล่วงหน้าสำหรับความช่วยเหลือและคำแนะนำ

points = [(560036.4495758876, 6362071.890493258),
          (560036.4495758876, 6362070.890493258),
          (560036.9495758876, 6362070.890493258),
          (560036.9495758876, 6362070.390493258),
          (560037.4495758876, 6362070.390493258),
          (560037.4495758876, 6362064.890493258),
          (560036.4495758876, 6362064.890493258),
          (560036.4495758876, 6362063.390493258),
          (560035.4495758876, 6362063.390493258),
          (560035.4495758876, 6362062.390493258),
          (560034.9495758876, 6362062.390493258),
          (560034.9495758876, 6362061.390493258),
          (560032.9495758876, 6362061.390493258),
          (560032.9495758876, 6362061.890493258),
          (560030.4495758876, 6362061.890493258),
          (560030.4495758876, 6362061.390493258),
          (560029.9495758876, 6362061.390493258),
          (560029.9495758876, 6362060.390493258),
          (560029.4495758876, 6362060.390493258),
          (560029.4495758876, 6362059.890493258),
          (560028.9495758876, 6362059.890493258),
          (560028.9495758876, 6362059.390493258),
          (560028.4495758876, 6362059.390493258),
          (560028.4495758876, 6362058.890493258),
          (560027.4495758876, 6362058.890493258),
          (560027.4495758876, 6362058.390493258),
          (560026.9495758876, 6362058.390493258),
          (560026.9495758876, 6362057.890493258),
          (560025.4495758876, 6362057.890493258),
          (560025.4495758876, 6362057.390493258),
          (560023.4495758876, 6362057.390493258),
          (560023.4495758876, 6362060.390493258),
          (560023.9495758876, 6362060.390493258),
          (560023.9495758876, 6362061.890493258),
          (560024.4495758876, 6362061.890493258),
          (560024.4495758876, 6362063.390493258),
          (560024.9495758876, 6362063.390493258),
          (560024.9495758876, 6362064.390493258),
          (560025.4495758876, 6362064.390493258),
          (560025.4495758876, 6362065.390493258),
          (560025.9495758876, 6362065.390493258),
          (560025.9495758876, 6362065.890493258),
          (560026.4495758876, 6362065.890493258),
          (560026.4495758876, 6362066.890493258),
          (560026.9495758876, 6362066.890493258),
          (560026.9495758876, 6362068.390493258),
          (560027.4495758876, 6362068.390493258),
          (560027.4495758876, 6362068.890493258),
          (560027.9495758876, 6362068.890493258),
          (560027.9495758876, 6362069.390493258),
          (560028.4495758876, 6362069.390493258),
          (560028.4495758876, 6362069.890493258),
          (560033.4495758876, 6362069.890493258),
          (560033.4495758876, 6362070.390493258),
          (560033.9495758876, 6362070.390493258),
          (560033.9495758876, 6362070.890493258),
          (560034.4495758876, 6362070.890493258),
          (560034.4495758876, 6362071.390493258),
          (560034.9495758876, 6362071.390493258),
          (560034.9495758876, 6362071.890493258),
          (560036.4495758876, 6362071.890493258)]

คำตอบ:


8

ฉันคิดว่าจุดตัวแทนคือสิ่งที่คุณกำลังมองหา

http://toblerity.github.com/shapely/manual.html#object.representative_point

โดยพื้นฐานแล้วคุณเพียงแค่ใช้ ref_polygon.representative_point (). wkt แทนเมธอด centroid

แก้ไขเพื่อให้ตัวอย่างจริง


+1 ฉันสงสัยว่า Gianni เริ่มต้นด้วยภูมิหลังแบบอาร์คเป็นศูนย์กลางเนื่องจาก ESRI ทำสิ่งนี้ตามความเป็นจริงlabelPointในระบบของพวกเขา ฉันยินดีที่ได้เรียนรู้ว่ามีคำพ้องความหมายนี้ในเทคโนโลยีและ API อื่น ๆ
elrobis
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.