คุณสามารถใช้ไลบรารี Shapely python ซึ่งมีฟังก์ชันrepresentative_point()
ที่รับประกันว่าจะอยู่ในรูปหลายเหลี่ยม
นี่คือสคริปต์ Python ที่สามารถเรียกใช้ในคอนโซล QGIS Python ควรเลือกเลเยอร์รูปหลายเหลี่ยมที่คุณต้องการสร้างแอททริบิว ฟังก์ชันใช้ชื่อของแอตทริบิวต์ที่คุณต้องการอัปเดต แอตทริบิวต์ต้องมีอยู่ในเลเยอร์ของคุณแล้วต้องเป็นประเภทสตริงและควรยาวพอ (30 อักขระ)
นี่คือตัวอย่างของคะแนนที่อัลกอริทึมพบ:
import shapely.wkb
def setIDPoint(attributename):
layer = qgis.utils.iface.activeLayer()
provider = layer.dataProvider()
fields = provider.fields()
provider.select(provider.attributeIndexes() )
attributeID = provider.fieldNameIndex(attributename)
feature = QgsFeature()
layer.startEditing()
while provider.nextFeature(feature):
wkb = feature.geometry().asWkb()
polygon = shapely.wkb.loads(wkb)
reprPoint = ','.join([str(polygon.representative_point().x), str(polygon.representative_point().y)] )
feature.changeAttribute(attributeID, reprPoint)
layer.updateFeature(feature)
layer.commitChanges()