Tính toán độ dài dòng với Python trong QGIS


Câu trả lời:


15

Từ Tài liệu QGIS: Xử lý hình học , bạn có thể sử dụng đoạn mã sau để lấy độ dài của bất kỳ dòng nào được chọn:

layer = qgis.utils.iface.activeLayer()
features = layer.selectedFeatures()
for f in features:
    geom = f.geometry()
    print "Length:", geom.length()

Hi vọng điêu nay co ich!


1
Bị đánh bại trong vài giây ... :-)
Alexandre Neto

@AlexandreNeto - Haha xin lỗi! Có phải là sự trùng hợp ngẫu nhiên bởi vì tôi cũng đang sử dụng mã chính xác này cho các lớp của mình chỉ một lúc trước :)
Joseph

@gustavgans - Bạn thân chào đón nhất :)
Joseph

@Joseph, làm thế nào tôi có thể điều chỉnh nó để nó tính toán nó cho tất cả các thuộc tính trong tất cả các lớp trong một dự án thay vì chỉ các lớp được chọn? Tôi đã thử nghiệm một chút nhưng mã của tôi không thực hiện thủ thuật: layer = layer trong QssMapLayerRegistry.instance (). MapLayers (). Value () features = layer.allFeatures () cho f trong các tính năng: geom = f.geometry ( ) in "Độ dài:", geom.length ()
Hannes Ledegen

1
@HannesLedegen - Bạn thân thiết! Hãy thử for layer in QgsMapLayerRegistry.instance().mapLayers().values(): features = layer.getFeatures() for f in features:...
Joseph

2

Mã tuyệt vời, tuy nhiên điều này chỉ hoạt động cho lớp đã chọn và chỉ in nó. Với một số trợ giúp từ các bài đăng khác và Joseph tôi đã biến nó thành một mã bổ sung một thuộc tính cho tất cả các lớp trong dự án của bạn với độ dài.

from PyQt4.QtCore import QVariant
for layer in QgsMapLayerRegistry.instance().mapLayers().values():
    features = layer.getFeatures()
    for f in features:
        geom = f.geometry()
        leng = geom.length()
        res = layer.dataProvider().addAttributes([QgsField("Length", QVariant.Int)])
        layer.updateFields()
        fieldIndex = layer.dataProvider().fieldNameIndex( "Length" )
        attrFeatMap = {}
        attrMap = { fieldIndex : leng }
        for feature in layer.getFeatures():
            attrFeatMap[ feature.id() ] = attrMap
        layer.dataProvider().changeAttributeValues( attrFeatMap )
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.