Python 2.7 for QGIS 2.6:如果在范围内则附加到列表

Python 2.7 for QGIS 2.6 : append to list if in range

我正在尝试测试该值是否在一个范围内。如果是,我希望将其附加到列表中。这看起来很简单,但我在没有看到的地方犯了错误。

在我使用此代码的 QGIS 上下文中,我有两层: 道路层 路径图层

firstList = []
secondList = []
azimuthRoadsIDX = roadsLayer.fieldNameIndex('azimuth')
azimuthPathsIDX = pathsLayer.fieldNameIndex('azimuth')
for feat in roadsLayer.getFeatures():
    roadsAzimuth = feat.attributes()[azimuthRoadsIDX]
    for feature in pathsLayer.getFeatures():
        pathsAzimuth = feature.attributes()[azimuthPathsIDX]
        difference = roadsAzimuth - pathsAzimuth
        if (-100 < difference < -80):
            firstList.append(feature.id())
        if (260 < difference < 280):
            firstList.append(feature.id())
        if (80 < difference < 100):
            secondList.append(feature.id())
        if (-280 < difference < -260):
            secondList.append(feature.id())

列表附加了所有值,这是不正确的。

尝试

addlist = firstList if (-100 < difference < -80 or 260 < difference < 280) else secondList
addlist.append(feature.id())

我为你写了一个简单的代码

也许您需要检查 feature.id()

的值

#!/usr/bin/python

aList = [123, 'xyz', 'zara', 'abc'];

aList.append( 2009 年);

打印"Updated List : ",aList;

每个 feature 都通过代码传递给 roadsAzimuth 的每个值。因此,每个 feature 都(可能)与 difference 的多个值相关联。这些差异值可以是任何值(据我们所知)——有些可能很小,有些可能很大,有些是正值,有些是负值。因此,没有理由 firstListsecondList 不应该同时接收所有 ID。

而不是使用 firstListsecondList 并附加到它们,你想要做的是这样的:

results_dict = {}
azimuthRoadsIDX = roadsLayer.fieldNameIndex('azimuth')
azimuthPathsIDX = pathsLayer.fieldNameIndex('azimuth')
for i, feat in enumerate(roadsLayer.getFeatures()):
    roadsAzimuth = feat.attributes()[azimuthRoadsIDX]
    results_dict[i] = ([], [])
    for feature in pathsLayer.getFeatures():
        pathsAzimuth = feature.attributes()[azimuthPathsIDX]
        difference = roadsAzimuth - pathsAzimuth
        if (-100 < difference < -80):
            results_dict[i][0].append(feature.id())
        if (260 < difference < 280):
            results_dict[i][0].append(feature.id())
        if (80 < difference < 100):
            results_dict[i][1].append(feature.id())
        if (-280 < difference < -260):
            results_dict[i][1].append(feature.id())

现在每个 feat 都有一个 firstList 和一个 secondList。字典中的每个键对应于 roadsLayer.getFeatures() 中的一个索引。每个值都是一个包含两个列表的元组 - firstListsecondList - 包含 id,其差异与 feat.

的列表相关联