本文整理汇总了Python中qgis.core.QgsFeature.isValid方法的典型用法代码示例。如果您正苦于以下问题:Python QgsFeature.isValid方法的具体用法?Python QgsFeature.isValid怎么用?Python QgsFeature.isValid使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类qgis.core.QgsFeature
的用法示例。
在下文中一共展示了QgsFeature.isValid方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_check_validity
# 需要导入模块: from qgis.core import QgsFeature [as 别名]
# 或者: from qgis.core.QgsFeature import isValid [as 别名]
def test_check_validity(self):
"""Test that the output invalid contains the error reason"""
polygon_layer = self._make_layer('Polygon')
self.assertTrue(polygon_layer.startEditing())
f = QgsFeature(polygon_layer.fields())
f.setAttributes([1])
# Flake!
f.setGeometry(QgsGeometry.fromWkt(
'POLYGON ((0 0, 2 2, 0 2, 2 0, 0 0))'))
self.assertTrue(f.isValid())
f2 = QgsFeature(polygon_layer.fields())
f2.setAttributes([1])
f2.setGeometry(QgsGeometry.fromWkt(
'POLYGON((1.1 1.1, 1.1 2.1, 2.1 2.1, 2.1 1.1, 1.1 1.1))'))
self.assertTrue(f2.isValid())
self.assertTrue(polygon_layer.addFeatures([f, f2]))
polygon_layer.commitChanges()
polygon_layer.rollBack()
self.assertEqual(polygon_layer.featureCount(), 2)
QgsProject.instance().addMapLayers([polygon_layer])
alg = self.registry.createAlgorithmById('qgis:checkvalidity')
context = QgsProcessingContext()
context.setProject(QgsProject.instance())
feedback = ConsoleFeedBack()
self.assertIsNotNone(alg)
parameters = {}
parameters['INPUT_LAYER'] = polygon_layer.id()
parameters['VALID_OUTPUT'] = 'memory:'
parameters['INVALID_OUTPUT'] = 'memory:'
parameters['ERROR_OUTPUT'] = 'memory:'
# QGIS method
parameters['METHOD'] = 1
ok, results = execute(
alg, parameters, context=context, feedback=feedback)
self.assertTrue(ok)
invalid_layer = QgsProcessingUtils.mapLayerFromString(
results['INVALID_OUTPUT'], context)
self.assertEqual(invalid_layer.fields().names()[-1], '_errors')
self.assertEqual(invalid_layer.featureCount(), 1)
f = next(invalid_layer.getFeatures())
self.assertEqual(f.attributes(), [
1, 'segments 0 and 2 of line 0 intersect at 1, 1'])
# GEOS method
parameters['METHOD'] = 2
ok, results = execute(
alg, parameters, context=context, feedback=feedback)
self.assertTrue(ok)
invalid_layer = QgsProcessingUtils.mapLayerFromString(
results['INVALID_OUTPUT'], context)
self.assertEqual(invalid_layer.fields().names()[-1], '_errors')
self.assertEqual(invalid_layer.featureCount(), 1)
f = next(invalid_layer.getFeatures())
self.assertEqual(f.attributes(), [1, 'Self-intersection'])
示例2: test_fix_geometries
# 需要导入模块: from qgis.core import QgsFeature [as 别名]
# 或者: from qgis.core.QgsFeature import isValid [as 别名]
def test_fix_geometries(self):
polygon_layer = self._make_layer('Polygon')
self.assertTrue(polygon_layer.startEditing())
f1 = QgsFeature(polygon_layer.fields())
f1.setAttributes([1])
# Flake!
f1.setGeometry(QgsGeometry.fromWkt('POLYGON ((0 0, 2 2, 0 2, 2 0, 0 0))'))
self.assertTrue(f1.isValid())
f2 = QgsFeature(polygon_layer.fields())
f2.setAttributes([1])
f2.setGeometry(QgsGeometry.fromWkt('POLYGON((1.1 1.1, 1.1 2.1, 2.1 2.1, 2.1 1.1, 1.1 1.1))'))
self.assertTrue(f2.isValid())
self.assertTrue(polygon_layer.addFeatures([f1, f2]))
polygon_layer.commitChanges()
polygon_layer.rollBack()
self.assertEqual(polygon_layer.featureCount(), 2)
QgsProject.instance().addMapLayers([polygon_layer])
old_features, new_features = self._alg_tester(
'native:fixgeometries',
polygon_layer,
{
},
QgsFeatureRequest.GeometrySkipInvalid
)
self.assertEqual(polygon_layer.featureCount(), 3)
wkt1, wkt2, wkt3 = [f.geometry().asWkt() for f in new_features]
self.assertEqual(wkt1, 'Polygon ((0 0, 1 1, 2 0, 0 0))')
self.assertEqual(wkt2, 'Polygon ((1 1, 0 2, 2 2, 1 1))')
self.assertEqual(re.sub(r'0000\d+', '', wkt3), 'Polygon ((1.1 1.1, 1.1 2.1, 2.1 2.1, 2.1 1.1, 1.1 1.1))')
# Test with Z (interpolated)
polygonz_layer = self._make_layer('PolygonZ')
self.assertTrue(polygonz_layer.startEditing())
f3 = QgsFeature(polygonz_layer.fields())
f3.setAttributes([1])
f3.setGeometry(QgsGeometry.fromWkt('POLYGON Z((0 0 1, 2 2 1, 0 2 3, 2 0 4, 0 0 1))'))
self.assertTrue(f3.isValid())
self.assertTrue(polygonz_layer.addFeatures([f3]))
polygonz_layer.commitChanges()
polygonz_layer.rollBack()
self.assertEqual(polygonz_layer.featureCount(), 1)
QgsProject.instance().addMapLayers([polygonz_layer])
old_features, new_features = self._alg_tester(
'native:fixgeometries',
polygonz_layer,
{
}
)
self.assertEqual(polygonz_layer.featureCount(), 2)
wkt1, wkt2 = [f.geometry().asWkt() for f in new_features]
self.assertEqual(wkt1, 'PolygonZ ((0 0 1, 1 1 2.25, 2 0 4, 0 0 1))')
self.assertEqual(wkt2, 'PolygonZ ((1 1 2.25, 0 2 3, 2 2 1, 1 1 2.25))')
示例3: _test_difference_on_invalid_geometries
# 需要导入模块: from qgis.core import QgsFeature [as 别名]
# 或者: from qgis.core.QgsFeature import isValid [as 别名]
def _test_difference_on_invalid_geometries(self, geom_option):
polygon_layer = self._make_layer('Polygon')
self.assertTrue(polygon_layer.startEditing())
f = QgsFeature(polygon_layer.fields())
f.setAttributes([1])
# Flake!
f.setGeometry(QgsGeometry.fromWkt('Polygon ((0 0, 2 2, 0 2, 2 0, 0 0))'))
self.assertTrue(f.isValid())
self.assertTrue(polygon_layer.addFeatures([f]))
polygon_layer.commitChanges()
polygon_layer.rollBack()
self.assertEqual(polygon_layer.featureCount(), 1)
overlay_layer = self._make_layer('Polygon')
self.assertTrue(overlay_layer.startEditing())
f = QgsFeature(overlay_layer.fields())
f.setAttributes([1])
f.setGeometry(QgsGeometry.fromWkt('Polygon ((0 0, 2 0, 2 2, 0 2, 0 0))'))
self.assertTrue(f.isValid())
self.assertTrue(overlay_layer.addFeatures([f]))
overlay_layer.commitChanges()
overlay_layer.rollBack()
self.assertEqual(overlay_layer.featureCount(), 1)
QgsProject.instance().addMapLayers([polygon_layer, overlay_layer])
old_features = [f for f in polygon_layer.getFeatures()]
# 'Ignore features with invalid geometries' = 1
ProcessingConfig.setSettingValue(ProcessingConfig.FILTER_INVALID_GEOMETRIES, geom_option)
feedback = ConsoleFeedBack()
context = dataobjects.createContext(feedback)
context.setProject(QgsProject.instance())
alg = self.registry.createAlgorithmById('native:difference')
self.assertIsNotNone(alg)
parameters = {
'OVERLAY': overlay_layer,
'INPUT': polygon_layer,
'OUTPUT': ':memory',
}
old_features = [f for f in polygon_layer.getFeatures()]
self.assertTrue(polygon_layer.startEditing())
polygon_layer.selectAll()
ok, _ = execute_in_place_run(
alg, parameters, context=context, feedback=feedback, raise_exceptions=True)
new_features = [f for f in polygon_layer.getFeatures()]
return old_features, new_features
示例4: testGetFeaturesFidsTests
# 需要导入模块: from qgis.core import QgsFeature [as 别名]
# 或者: from qgis.core.QgsFeature import isValid [as 别名]
def testGetFeaturesFidsTests(self):
fids = [f.id() for f in self.source.getFeatures()]
self.assertEqual(len(fids), 5)
# empty list = no features
request = QgsFeatureRequest().setFilterFids([])
result = set([f.id() for f in self.source.getFeatures(request)])
self.assertFalse(result)
request = QgsFeatureRequest().setFilterFids([fids[0], fids[2]])
result = set([f.id() for f in self.source.getFeatures(request)])
all_valid = (all(f.isValid() for f in self.source.getFeatures(request)))
expected = set([fids[0], fids[2]])
assert result == expected, 'Expected {} and got {} when testing for feature IDs filter'.format(expected, result)
self.assertTrue(all_valid)
# test that results match QgsFeatureRequest.acceptFeature
for f in self.source.getFeatures():
self.assertEqual(request.acceptFeature(f), f.id() in expected)
result = set([f.id() for f in self.source.getFeatures(QgsFeatureRequest().setFilterFids([fids[1], fids[3], fids[4]]))])
expected = set([fids[1], fids[3], fids[4]])
assert result == expected, 'Expected {} and got {} when testing for feature IDs filter'.format(expected, result)
#sources should ignore non-existent fids
result = set([f.id() for f in self.source.getFeatures(QgsFeatureRequest().setFilterFids([-101, fids[1], -102, fids[3], -103, fids[4], -104]))])
expected = set([fids[1], fids[3], fids[4]])
assert result == expected, 'Expected {} and got {} when testing for feature IDs filter'.format(expected, result)
result = set([f.id() for f in self.source.getFeatures(QgsFeatureRequest().setFilterFids([]))])
expected = set([])
assert result == expected, 'Expected {} and got {} when testing for feature IDs filter'.format(expected, result)
# Rewind mid-way
request = QgsFeatureRequest().setFilterFids([fids[1], fids[3], fids[4]])
feature_it = self.source.getFeatures(request)
feature = QgsFeature()
feature.setValid(True)
self.assertTrue(feature_it.nextFeature(feature))
self.assertIn(feature.id(), [fids[1], fids[3], fids[4]])
first_feature = feature
self.assertTrue(feature.isValid())
# rewind
self.assertTrue(feature_it.rewind())
self.assertTrue(feature_it.nextFeature(feature))
self.assertEqual(feature.id(), first_feature.id())
self.assertTrue(feature.isValid())
# grab all features
self.assertTrue(feature_it.nextFeature(feature))
self.assertTrue(feature_it.nextFeature(feature))
# none left
self.assertFalse(feature_it.nextFeature(feature))
self.assertFalse(feature.isValid())
示例5: testGetFeaturesFidsTests
# 需要导入模块: from qgis.core import QgsFeature [as 别名]
# 或者: from qgis.core.QgsFeature import isValid [as 别名]
def testGetFeaturesFidsTests(self):
fids = [f.id() for f in self.provider.getFeatures()]
self.assertEqual(len(fids), 5)
request = QgsFeatureRequest().setFilterFids([fids[0], fids[2]])
result = set([f.id() for f in self.provider.getFeatures(request)])
all_valid = all(f.isValid() for f in self.provider.getFeatures(request))
expected = set([fids[0], fids[2]])
assert result == expected, "Expected {} and got {} when testing for feature IDs filter".format(expected, result)
self.assertTrue(all_valid)
result = set(
[f.id() for f in self.provider.getFeatures(QgsFeatureRequest().setFilterFids([fids[1], fids[3], fids[4]]))]
)
expected = set([fids[1], fids[3], fids[4]])
assert result == expected, "Expected {} and got {} when testing for feature IDs filter".format(expected, result)
# providers should ignore non-existant fids
result = set(
[
f.id()
for f in self.provider.getFeatures(
QgsFeatureRequest().setFilterFids([-101, fids[1], -102, fids[3], -103, fids[4], -104])
)
]
)
expected = set([fids[1], fids[3], fids[4]])
assert result == expected, "Expected {} and got {} when testing for feature IDs filter".format(expected, result)
result = set([f.id() for f in self.provider.getFeatures(QgsFeatureRequest().setFilterFids([]))])
expected = set([])
assert result == expected, "Expected {} and got {} when testing for feature IDs filter".format(expected, result)
# Rewind mid-way
request = QgsFeatureRequest().setFilterFids([fids[1], fids[3], fids[4]])
feature_it = self.provider.getFeatures(request)
feature = QgsFeature()
feature.setValid(True)
self.assertTrue(feature_it.nextFeature(feature))
self.assertIn(feature.id(), [fids[1], fids[3], fids[4]])
first_feature = feature
self.assertTrue(feature.isValid())
# rewind
self.assertTrue(feature_it.rewind())
self.assertTrue(feature_it.nextFeature(feature))
self.assertEqual(feature.id(), first_feature.id())
self.assertTrue(feature.isValid())
# grab all features
self.assertTrue(feature_it.nextFeature(feature))
self.assertTrue(feature_it.nextFeature(feature))
# none left
self.assertFalse(feature_it.nextFeature(feature))
self.assertFalse(feature.isValid())
示例6: testClosedIterators
# 需要导入模块: from qgis.core import QgsFeature [as 别名]
# 或者: from qgis.core.QgsFeature import isValid [as 别名]
def testClosedIterators(self):
""" Test behavior of closed iterators """
# Test retrieving feature after closing iterator
f_it = self.source.getFeatures(QgsFeatureRequest())
fet = QgsFeature()
assert f_it.nextFeature(fet), 'Could not fetch feature'
assert fet.isValid(), 'Feature is not valid'
assert f_it.close(), 'Could not close iterator'
self.assertFalse(f_it.nextFeature(fet), 'Fetched feature after iterator closed, expected nextFeature() to return False')
self.assertFalse(fet.isValid(), 'Valid feature fetched from closed iterator, should be invalid')
# Test rewinding closed iterator
self.assertFalse(f_it.rewind(), 'Rewinding closed iterator successful, should not be allowed')
示例7: test_snappointstogrid
# 需要导入模块: from qgis.core import QgsFeature [as 别名]
# 或者: from qgis.core.QgsFeature import isValid [as 别名]
def test_snappointstogrid(self):
"""Check that this runs correctly"""
polygon_layer = self._make_layer('Polygon')
f1 = QgsFeature(polygon_layer.fields())
f1.setAttributes([1])
f1.setGeometry(QgsGeometry.fromWkt('POLYGON((1.2 1.2, 1.2 2.2, 2.2 2.2, 2.2 1.2, 1.2 1.2))'))
f2 = QgsFeature(polygon_layer.fields())
f2.setAttributes([2])
f2.setGeometry(QgsGeometry.fromWkt('POLYGON((1.1 1.1, 1.1 2.1, 2.1 2.1, 2.1 1.1, 1.1 1.1))'))
self.assertTrue(f2.isValid())
self.assertTrue(polygon_layer.startEditing())
self.assertTrue(polygon_layer.addFeatures([f1, f2]))
self.assertEqual(polygon_layer.featureCount(), 2)
polygon_layer.commitChanges()
self.assertEqual(polygon_layer.featureCount(), 2)
QgsProject.instance().addMapLayers([polygon_layer])
polygon_layer.selectByIds([next(polygon_layer.getFeatures()).id()])
self.assertEqual(polygon_layer.selectedFeatureCount(), 1)
old_features, new_features = self._alg_tester(
'native:snappointstogrid',
polygon_layer,
{
'HSPACING': 0.5,
'VSPACING': 0.5,
}
)
g = [f.geometry() for f in new_features][0]
self.assertEqual(g.asWkt(), 'Polygon ((1 1, 1 2, 2 2, 2 1, 1 1))')
# Check selected
self.assertEqual(polygon_layer.selectedFeatureIds(), [1])
示例8: testClosedIterators
# 需要导入模块: from qgis.core import QgsFeature [as 别名]
# 或者: from qgis.core.QgsFeature import isValid [as 别名]
def testClosedIterators(self):
""" Test behaviour of closed iterators """
# Test retrieving feature after closing iterator
f_it = self.provider.getFeatures(QgsFeatureRequest())
fet = QgsFeature()
assert f_it.nextFeature(fet), "Could not fetch feature"
assert fet.isValid(), "Feature is not valid"
assert f_it.close(), "Could not close iterator"
self.assertFalse(
f_it.nextFeature(fet), "Fetched feature after iterator closed, expected nextFeature() to return False"
)
self.assertFalse(fet.isValid(), "Valid feature fetched from closed iterator, should be invalid")
# Test rewinding closed iterator
self.assertFalse(f_it.rewind(), "Rewinding closed iterator successful, should not be allowed")
示例9: test_clip
# 需要导入模块: from qgis.core import QgsFeature [as 别名]
# 或者: from qgis.core.QgsFeature import isValid [as 别名]
def test_clip(self):
mask_layer = QgsMemoryProviderUtils.createMemoryLayer(
'mask_layer', self.vl.fields(), QgsWkbTypes.Polygon, QgsCoordinateReferenceSystem(4326))
self.assertTrue(mask_layer.isValid())
self.assertTrue(mask_layer.startEditing())
f = QgsFeature(mask_layer.fields())
f.setAttributes([1])
f.setGeometry(QgsGeometry.fromWkt('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))'))
self.assertTrue(f.isValid())
f2 = QgsFeature(mask_layer.fields())
f2.setAttributes([1])
f2.setGeometry(QgsGeometry.fromWkt('POLYGON((1.1 1.1, 1.1 2.1, 2.1 2.1, 2.1 1.1, 1.1 1.1))'))
self.assertTrue(f2.isValid())
self.assertTrue(mask_layer.addFeatures([f, f2]))
mask_layer.commitChanges()
mask_layer.rollBack()
clip_layer = QgsMemoryProviderUtils.createMemoryLayer(
'clip_layer', self.vl.fields(), QgsWkbTypes.LineString, QgsCoordinateReferenceSystem(4326))
self.assertTrue(clip_layer.isValid())
self.assertTrue(clip_layer.startEditing())
f = QgsFeature(clip_layer.fields())
f.setAttributes([1])
f.setGeometry(QgsGeometry.fromWkt('LINESTRING(-1 -1, 3 3)'))
self.assertTrue(f.isValid())
self.assertTrue(clip_layer.addFeatures([f]))
self.assertEqual(clip_layer.featureCount(), 1)
clip_layer.commitChanges()
clip_layer.selectAll()
clip_layer.rollBack()
QgsProject.instance().addMapLayers([clip_layer, mask_layer])
old_features, new_features = self._alg_tester(
'native:clip',
clip_layer,
{
'OVERLAY': mask_layer.id(),
}
)
self.assertEqual(len(new_features), 2)
self.assertEqual(new_features[0].geometry().asWkt(), 'LineString (0 0, 1 1)')
self.assertEqual(new_features[0].attributes(), [1])
示例10: test_ValidFeature
# 需要导入模块: from qgis.core import QgsFeature [as 别名]
# 或者: from qgis.core.QgsFeature import isValid [as 别名]
def test_ValidFeature(self):
myPath = os.path.join(unitTestDataPath(), 'points.shp')
myLayer = QgsVectorLayer(myPath, 'Points', 'ogr')
provider = myLayer.dataProvider()
fit = provider.getFeatures()
feat = QgsFeature()
fit.nextFeature(feat)
myValidValue = feat.isValid()
myMessage = '\nExpected: %s\nGot: %s' % ("True", myValidValue)
assert myValidValue == True, myMessage
示例11: test_ValidFeature
# 需要导入模块: from qgis.core import QgsFeature [as 别名]
# 或者: from qgis.core.QgsFeature import isValid [as 别名]
def test_ValidFeature(self):
myPath = os.path.join(unitTestDataPath(), "points.shp")
myLayer = QgsVectorLayer(myPath, "Points", "ogr")
provider = myLayer.dataProvider()
fit = provider.getFeatures()
feat = QgsFeature()
fit.nextFeature(feat)
fit.close()
myValidValue = feat.isValid()
myMessage = "\nExpected: %s\nGot: %s" % ("True", myValidValue)
assert myValidValue, myMessage
示例12: test_getFeatures
# 需要导入模块: from qgis.core import QgsFeature [as 别名]
# 或者: from qgis.core.QgsFeature import isValid [as 别名]
def test_getFeatures(self):
layer = createLayerWithOnePoint()
f = QgsFeature()
fi = layer.getFeatures()
assert fi.nextFeature(f) == True
assert f.isValid() == True
assert f.id() == 1
assert f.geometry().asPoint() == QgsPoint(100,200)
assert f["fldtxt"] == "test"
assert f["fldint"] == 123
assert fi.nextFeature(f) == False
示例13: test_getFeatures
# 需要导入模块: from qgis.core import QgsFeature [as 别名]
# 或者: from qgis.core.QgsFeature import isValid [as 别名]
def test_getFeatures(self):
layer = createLayerWithOnePoint()
f = QgsFeature()
fi = layer.getFeatures()
self.assertTrue(fi.nextFeature(f))
self.assertTrue(f.isValid())
self.assertEquals(f.id(), 1)
self.assertEquals(f.geometry().asPoint(), QgsPoint(100, 200))
self.assertEquals(f["fldtxt"], "test")
self.assertEquals(f["fldint"], 123)
self.assertFalse(fi.nextFeature(f))
示例14: testGetFeatures
# 需要导入模块: from qgis.core import QgsFeature [as 别名]
# 或者: from qgis.core.QgsFeature import isValid [as 别名]
def testGetFeatures(self):
""" Test that expected results are returned when fetching all features """
# IMPORTANT - we do not use `for f in provider.getFeatures()` as we are also
# testing that existing attributes & geometry in f are overwritten correctly
# (for f in ... uses a new QgsFeature for every iteration)
it = self.provider.getFeatures()
f = QgsFeature()
attributes = {}
geometries = {}
while it.nextFeature(f):
# expect feature to be valid
self.assertTrue(f.isValid())
# split off the first 5 attributes only - some provider test datasets will include
# additional attributes which we ignore
attrs = f.attributes()[0:5]
# force the num_char attribute to be text - some providers (eg delimited text) will
# automatically detect that this attribute contains numbers and set it as a numeric
# field
attrs[4] = str(attrs[4])
attributes[f["pk"]] = attrs
geometries[f["pk"]] = f.hasGeometry() and f.geometry().exportToWkt()
expected_attributes = {
5: [5, -200, NULL, "NuLl", "5"],
3: [3, 300, "Pear", "PEaR", "3"],
1: [1, 100, "Orange", "oranGe", "1"],
2: [2, 200, "Apple", "Apple", "2"],
4: [4, 400, "Honey", "Honey", "4"],
}
self.assertEqual(attributes, expected_attributes, "Expected {}, got {}".format(expected_attributes, attributes))
expected_geometries = {
1: "Point (-70.332 66.33)",
2: "Point (-68.2 70.8)",
3: None,
4: "Point(-65.32 78.3)",
5: "Point(-71.123 78.23)",
}
for pk, geom in list(expected_geometries.items()):
if geom:
assert compareWkt(geom, geometries[pk]), "Geometry {} mismatch Expected:\n{}\nGot:\n{}\n".format(
pk, geom, geometries[pk].exportToWkt()
)
else:
self.assertFalse(geometries[pk], "Expected null geometry for {}".format(pk))
示例15: structure_condition_2_damage_level
# 需要导入模块: from qgis.core import QgsFeature [as 别名]
# 或者: from qgis.core.QgsFeature import isValid [as 别名]
def structure_condition_2_damage_level(code):
feature = QgsFeature()
layerid = MySettings().value("vl_wastewater_structure_structure_condition")
layer = QgsMapLayerRegistry.instance().mapLayer(layerid)
if layer is not None:
requestText = '"code" = \'{}\''.format(code)
request = QgsFeatureRequest().setFilterExpression(requestText)
for f in layer.getFeatures(request):
feature = QgsFeature(f)
# print requestText, feature.isValid()
if feature.isValid():
return f['value_en']
else:
return None