Skip to content

Commit 5d97d03

Browse files
committed
[processing] Fix simplify alg handling of null goemetry, add tests
1 parent f9e508c commit 5d97d03

File tree

6 files changed

+143
-10
lines changed

6 files changed

+143
-10
lines changed

python/plugins/processing/algs/qgis/SimplifyGeometries.py

+9-10
Original file line numberDiff line numberDiff line change
@@ -74,16 +74,15 @@ def processAlgorithm(self, progress):
7474

7575
features = vector.features(layer)
7676
total = 100.0 / len(features)
77-
for current, f in enumerate(features):
78-
featGeometry = f.geometry()
79-
attrs = f.attributes()
80-
pointsBefore += featGeometry.geometry().nCoordinates()
81-
newGeometry = featGeometry.simplify(tolerance)
82-
pointsAfter += newGeometry.geometry().nCoordinates()
83-
feature = QgsFeature()
84-
feature.setGeometry(newGeometry)
85-
feature.setAttributes(attrs)
86-
writer.addFeature(feature)
77+
for current, input_feature in enumerate(features):
78+
out_feature = input_feature
79+
if input_feature.geometry():
80+
input_geometry = input_feature.geometry()
81+
pointsBefore += input_geometry.geometry().nCoordinates()
82+
output_geometry = input_geometry.simplify(tolerance)
83+
pointsAfter += output_geometry.geometry().nCoordinates()
84+
out_feature.setGeometry(output_geometry)
85+
writer.addFeature(out_feature)
8786
progress.setPercentage(int(current * total))
8887

8988
del writer
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<GMLFeatureClassList>
2+
<GMLFeatureClass>
3+
<Name>simplify_lines</Name>
4+
<ElementPath>simplify_lines</ElementPath>
5+
<GeometryType>2</GeometryType>
6+
<SRSName>EPSG:4326</SRSName>
7+
<DatasetSpecificInfo>
8+
<FeatureCount>7</FeatureCount>
9+
<ExtentXMin>-1.00000</ExtentXMin>
10+
<ExtentXMax>11.00000</ExtentXMax>
11+
<ExtentYMin>-3.00000</ExtentYMin>
12+
<ExtentYMax>5.00000</ExtentYMax>
13+
</DatasetSpecificInfo>
14+
</GMLFeatureClass>
15+
</GMLFeatureClassList>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<ogr:FeatureCollection
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation=""
5+
xmlns:ogr="http://ogr.maptools.org/"
6+
xmlns:gml="http://www.opengis.net/gml">
7+
<gml:boundedBy>
8+
<gml:Box>
9+
<gml:coord><gml:X>-1</gml:X><gml:Y>-3</gml:Y></gml:coord>
10+
<gml:coord><gml:X>11</gml:X><gml:Y>5</gml:Y></gml:coord>
11+
</gml:Box>
12+
</gml:boundedBy>
13+
14+
<gml:featureMember>
15+
<ogr:simplify_lines fid="lines.0">
16+
<ogr:geometryProperty><gml:LineString srsName="EPSG:4326"><gml:coordinates>6,2 9,2 11,5</gml:coordinates></gml:LineString></ogr:geometryProperty>
17+
</ogr:simplify_lines>
18+
</gml:featureMember>
19+
<gml:featureMember>
20+
<ogr:simplify_lines fid="lines.1">
21+
<ogr:geometryProperty><gml:LineString srsName="EPSG:4326"><gml:coordinates>-1,-1 1,-1</gml:coordinates></gml:LineString></ogr:geometryProperty>
22+
</ogr:simplify_lines>
23+
</gml:featureMember>
24+
<gml:featureMember>
25+
<ogr:simplify_lines fid="lines.2">
26+
<ogr:geometryProperty><gml:LineString srsName="EPSG:4326"><gml:coordinates>2,0 3,3</gml:coordinates></gml:LineString></ogr:geometryProperty>
27+
</ogr:simplify_lines>
28+
</gml:featureMember>
29+
<gml:featureMember>
30+
<ogr:simplify_lines fid="lines.3">
31+
<ogr:geometryProperty><gml:LineString srsName="EPSG:4326"><gml:coordinates>3,1 5,1</gml:coordinates></gml:LineString></ogr:geometryProperty>
32+
</ogr:simplify_lines>
33+
</gml:featureMember>
34+
<gml:featureMember>
35+
<ogr:simplify_lines fid="lines.4">
36+
<ogr:geometryProperty><gml:LineString srsName="EPSG:4326"><gml:coordinates>7,-3 10,-3</gml:coordinates></gml:LineString></ogr:geometryProperty>
37+
</ogr:simplify_lines>
38+
</gml:featureMember>
39+
<gml:featureMember>
40+
<ogr:simplify_lines fid="lines.5">
41+
<ogr:geometryProperty><gml:LineString srsName="EPSG:4326"><gml:coordinates>6,-3 10,1</gml:coordinates></gml:LineString></ogr:geometryProperty>
42+
</ogr:simplify_lines>
43+
</gml:featureMember>
44+
<gml:featureMember>
45+
<ogr:simplify_lines fid="lines.6">
46+
</ogr:simplify_lines>
47+
</gml:featureMember>
48+
</ogr:FeatureCollection>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<GMLFeatureClassList>
2+
<GMLFeatureClass>
3+
<Name>simplify_multilines</Name>
4+
<ElementPath>simplify_multilines</ElementPath>
5+
<GeometryType>5</GeometryType>
6+
<SRSName>EPSG:4326</SRSName>
7+
<DatasetSpecificInfo>
8+
<FeatureCount>4</FeatureCount>
9+
<ExtentXMin>-1.00000</ExtentXMin>
10+
<ExtentXMax>5.58042</ExtentXMax>
11+
<ExtentYMin>-1.00000</ExtentYMin>
12+
<ExtentYMax>4.11977</ExtentYMax>
13+
</DatasetSpecificInfo>
14+
</GMLFeatureClass>
15+
</GMLFeatureClassList>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<ogr:FeatureCollection
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation=""
5+
xmlns:ogr="http://ogr.maptools.org/"
6+
xmlns:gml="http://www.opengis.net/gml">
7+
<gml:boundedBy>
8+
<gml:Box>
9+
<gml:coord><gml:X>-1</gml:X><gml:Y>-1</gml:Y></gml:coord>
10+
<gml:coord><gml:X>5.58042226487524</gml:X><gml:Y>4.119769673704415</gml:Y></gml:coord>
11+
</gml:Box>
12+
</gml:boundedBy>
13+
14+
<gml:featureMember>
15+
<ogr:simplify_multilines fid="lines.1">
16+
<ogr:geometryProperty><gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>-1,-1 1,-1</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString></ogr:geometryProperty>
17+
</ogr:simplify_multilines>
18+
</gml:featureMember>
19+
<gml:featureMember>
20+
<ogr:simplify_multilines fid="lines.2">
21+
<ogr:geometryProperty><gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>3,1 5,1</gml:coordinates></gml:LineString></gml:lineStringMember><gml:lineStringMember><gml:LineString><gml:coordinates>5.024184261036468,2.414779270633399 5,1</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString></ogr:geometryProperty>
22+
</ogr:simplify_multilines>
23+
</gml:featureMember>
24+
<gml:featureMember>
25+
<ogr:simplify_multilines fid="lines.3">
26+
</ogr:simplify_multilines>
27+
</gml:featureMember>
28+
<gml:featureMember>
29+
<ogr:simplify_multilines fid="lines.4">
30+
<ogr:geometryProperty><gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>2,0 3,3</gml:coordinates></gml:LineString></gml:lineStringMember><gml:lineStringMember><gml:LineString><gml:coordinates>2.944337811900192,4.04721689059501 5.459500959692898,4.119769673704415</gml:coordinates></gml:LineString></gml:lineStringMember><gml:lineStringMember><gml:LineString><gml:coordinates>3,3 5.58042226487524,2.946833013435702</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString></ogr:geometryProperty>
31+
</ogr:simplify_multilines>
32+
</gml:featureMember>
33+
</ogr:FeatureCollection>

python/plugins/processing/tests/testdata/qgis_algorithm_tests.yaml

+23
Original file line numberDiff line numberDiff line change
@@ -916,3 +916,26 @@ tests:
916916
name: expected/extract_nodes_lines.gml
917917
type: vector
918918

919+
- algorithm: qgis:simplifygeometries
920+
name: Simplify (lines)
921+
params:
922+
INPUT:
923+
name: lines.gml
924+
type: vector
925+
TOLERANCE: 1.0
926+
results:
927+
OUTPUT:
928+
name: expected/simplify_lines.gml
929+
type: vector
930+
931+
- algorithm: qgis:simplifygeometries
932+
name: Simplify (multilines)
933+
params:
934+
INPUT:
935+
name: multilines.gml
936+
type: vector
937+
TOLERANCE: 1.0
938+
results:
939+
OUTPUT:
940+
name: expected/simplify_multilines.gml
941+
type: vector

0 commit comments

Comments
 (0)