Skip to content

Commit f8bad49

Browse files
committedNov 29, 2017
[processing] Make split with lines output single part features
instead of keeping parts collected into a single multipart feature
1 parent 38a66e5 commit f8bad49

File tree

9 files changed

+92
-84
lines changed

9 files changed

+92
-84
lines changed
 

‎python/plugins/processing/tests/testdata/expected/split_lines_with_lines.gfs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<GeometryType>5</GeometryType>
77
<SRSName>EPSG:4326</SRSName>
88
<DatasetSpecificInfo>
9-
<FeatureCount>7</FeatureCount>
9+
<FeatureCount>11</FeatureCount>
1010
<ExtentXMin>-1.00000</ExtentXMin>
1111
<ExtentXMax>11.00000</ExtentXMax>
1212
<ExtentYMin>-3.00000</ExtentYMin>

‎python/plugins/processing/tests/testdata/expected/split_lines_with_lines.gml

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,26 +23,46 @@
2323
</gml:featureMember>
2424
<gml:featureMember>
2525
<ogr:split_lines_with_lines fid="lines.2">
26-
<ogr:geometryProperty><gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>2.0,1.86331771490359 2,2 3,2 3,3</gml:coordinates></gml:LineString></gml:lineStringMember><gml:lineStringMember><gml:LineString><gml:coordinates>2,0 2.0,1.86331771490359</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString></ogr:geometryProperty>
26+
<ogr:geometryProperty><gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>2,0 2.0,1.86331771490359</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString></ogr:geometryProperty>
2727
</ogr:split_lines_with_lines>
2828
</gml:featureMember>
2929
<gml:featureMember>
3030
<ogr:split_lines_with_lines fid="lines.3">
31-
<ogr:geometryProperty><gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>4.21601489757914,1.0 5,1</gml:coordinates></gml:LineString></gml:lineStringMember><gml:lineStringMember><gml:LineString><gml:coordinates>3,1 4.21601489757914,1.0</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString></ogr:geometryProperty>
31+
<ogr:geometryProperty><gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>2.0,1.86331771490359 2,2 3,2 3,3</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString></ogr:geometryProperty>
3232
</ogr:split_lines_with_lines>
3333
</gml:featureMember>
3434
<gml:featureMember>
3535
<ogr:split_lines_with_lines fid="lines.4">
36-
<ogr:geometryProperty><gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>8.5655671605538,-3.0 10,-3</gml:coordinates></gml:LineString></gml:lineStringMember><gml:lineStringMember><gml:LineString><gml:coordinates>7,-3 8.5655671605538,-3.0</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString></ogr:geometryProperty>
36+
<ogr:geometryProperty><gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>3,1 4.21601489757914,1.0</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString></ogr:geometryProperty>
3737
</ogr:split_lines_with_lines>
3838
</gml:featureMember>
3939
<gml:featureMember>
4040
<ogr:split_lines_with_lines fid="lines.5">
41-
<ogr:geometryProperty><gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>6.91202704418487,-2.08797295581513 10,1</gml:coordinates></gml:LineString></gml:lineStringMember><gml:lineStringMember><gml:LineString><gml:coordinates>6,-3 6.91202704418487,-2.08797295581513</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString></ogr:geometryProperty>
41+
<ogr:geometryProperty><gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>4.21601489757914,1.0 5,1</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString></ogr:geometryProperty>
4242
</ogr:split_lines_with_lines>
4343
</gml:featureMember>
4444
<gml:featureMember>
4545
<ogr:split_lines_with_lines fid="lines.6">
46+
<ogr:geometryProperty><gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>7,-3 8.5655671605538,-3.0</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString></ogr:geometryProperty>
47+
</ogr:split_lines_with_lines>
48+
</gml:featureMember>
49+
<gml:featureMember>
50+
<ogr:split_lines_with_lines fid="lines.7">
51+
<ogr:geometryProperty><gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>8.5655671605538,-3.0 10,-3</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString></ogr:geometryProperty>
52+
</ogr:split_lines_with_lines>
53+
</gml:featureMember>
54+
<gml:featureMember>
55+
<ogr:split_lines_with_lines fid="lines.8">
56+
<ogr:geometryProperty><gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>6,-3 6.91202704418487,-2.08797295581513</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString></ogr:geometryProperty>
57+
</ogr:split_lines_with_lines>
58+
</gml:featureMember>
59+
<gml:featureMember>
60+
<ogr:split_lines_with_lines fid="lines.9">
61+
<ogr:geometryProperty><gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>6.91202704418487,-2.08797295581513 10,1</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString></ogr:geometryProperty>
62+
</ogr:split_lines_with_lines>
63+
</gml:featureMember>
64+
<gml:featureMember>
65+
<ogr:split_lines_with_lines fid="lines.10">
4666
</ogr:split_lines_with_lines>
4767
</gml:featureMember>
4868
</ogr:FeatureCollection>

‎python/plugins/processing/tests/testdata/expected/split_lines_with_lines_same.gfs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
<GeometryType>5</GeometryType>
77
<SRSName>EPSG:4326</SRSName>
88
<DatasetSpecificInfo>
9-
<FeatureCount>7</FeatureCount>
10-
<ExtentXMin>-1.00000</ExtentXMin>
11-
<ExtentXMax>11.00000</ExtentXMax>
12-
<ExtentYMin>-3.00000</ExtentYMin>
13-
<ExtentYMax>5.00000</ExtentYMax>
9+
<FeatureCount>4</FeatureCount>
10+
<ExtentXMin>0.77654</ExtentXMin>
11+
<ExtentXMax>8.57235</ExtentXMax>
12+
<ExtentYMin>-4.24413</ExtentYMin>
13+
<ExtentYMax>2.17905</ExtentYMax>
1414
</DatasetSpecificInfo>
1515
</GMLFeatureClass>
1616
</GMLFeatureClassList>

‎python/plugins/processing/tests/testdata/expected/split_lines_with_lines_same.gml

Lines changed: 10 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,43 +6,29 @@
66
xmlns:gml="http://www.opengis.net/gml">
77
<gml:boundedBy>
88
<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>
9+
<gml:coord><gml:X>0.776536312849161</gml:X><gml:Y>-4.244134078212291</gml:Y></gml:coord>
10+
<gml:coord><gml:X>8.572346368715085</gml:X><gml:Y>2.179050279329609</gml:Y></gml:coord>
1111
</gml:Box>
1212
</gml:boundedBy>
1313

1414
<gml:featureMember>
15-
<ogr:split_lines_with_lines_same fid="lines.0">
16-
<ogr:geometryProperty><gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>6,2 9,2 9,3 11,5</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString></ogr:geometryProperty>
15+
<ogr:split_lines_with_lines_same fid="lines2.0">
16+
<ogr:geometryProperty><gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>5.44573945756429,-1.47253129614036 5.70391061452514,-1.99162011173184 8.57234636871508,-2.22039106145251 8.55474860335196,-4.24413407821229</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString></ogr:geometryProperty>
1717
</ogr:split_lines_with_lines_same>
1818
</gml:featureMember>
1919
<gml:featureMember>
20-
<ogr:split_lines_with_lines_same fid="lines.1">
21-
<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>
20+
<ogr:split_lines_with_lines_same fid="lines2.1">
21+
<ogr:geometryProperty><gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>0.776536312849161,2.17905027932961 4.04972067039106,1.33435754189944 5.44573945756429,-1.47253129614035</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString></ogr:geometryProperty>
2222
</ogr:split_lines_with_lines_same>
2323
</gml:featureMember>
2424
<gml:featureMember>
25-
<ogr:split_lines_with_lines_same fid="lines.2">
26-
<ogr:geometryProperty><gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>2,0 2,2 3,2 3,3</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString></ogr:geometryProperty>
25+
<ogr:split_lines_with_lines_same fid="lines2.2">
26+
<ogr:geometryProperty><gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>7.95642458100559,0.683240223463688 5.44573945756429,-1.47253129614036</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString></ogr:geometryProperty>
2727
</ogr:split_lines_with_lines_same>
2828
</gml:featureMember>
2929
<gml:featureMember>
30-
<ogr:split_lines_with_lines_same fid="lines.3">
31-
<ogr:geometryProperty><gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>3,1 5,1</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString></ogr:geometryProperty>
32-
</ogr:split_lines_with_lines_same>
33-
</gml:featureMember>
34-
<gml:featureMember>
35-
<ogr:split_lines_with_lines_same fid="lines.4">
36-
<ogr:geometryProperty><gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>7,-3 10,-3</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString></ogr:geometryProperty>
37-
</ogr:split_lines_with_lines_same>
38-
</gml:featureMember>
39-
<gml:featureMember>
40-
<ogr:split_lines_with_lines_same fid="lines.5">
41-
<ogr:geometryProperty><gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>6,-3 10,1</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString></ogr:geometryProperty>
42-
</ogr:split_lines_with_lines_same>
43-
</gml:featureMember>
44-
<gml:featureMember>
45-
<ogr:split_lines_with_lines_same fid="lines.6">
30+
<ogr:split_lines_with_lines_same fid="lines2.3">
31+
<ogr:geometryProperty><gml:MultiLineString srsName="EPSG:4326"><gml:lineStringMember><gml:LineString><gml:coordinates>5.44573945756429,-1.47253129614036 4.59525139664804,-2.20279329608939</gml:coordinates></gml:LineString></gml:lineStringMember></gml:MultiLineString></ogr:geometryProperty>
4632
</ogr:split_lines_with_lines_same>
4733
</gml:featureMember>
4834
</ogr:FeatureCollection>
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<GMLFeatureClassList>
2+
<GMLFeatureClass>
3+
<Name>split_polys_with_lines</Name>
4+
<ElementPath>split_polys_with_lines</ElementPath>
5+
<!--MULTIPOLYGON-->
6+
<GeometryType>6</GeometryType>
7+
<SRSName>EPSG:4326</SRSName>
8+
<DatasetSpecificInfo>
9+
<FeatureCount>7</FeatureCount>
10+
<ExtentXMin>-1.00000</ExtentXMin>
11+
<ExtentXMax>10.00000</ExtentXMax>
12+
<ExtentYMin>-3.00000</ExtentYMin>
13+
<ExtentYMax>6.00000</ExtentYMax>
14+
</DatasetSpecificInfo>
15+
<PropertyDefn>
16+
<Name>name</Name>
17+
<ElementPath>name</ElementPath>
18+
<Type>String</Type>
19+
<Width>5</Width>
20+
</PropertyDefn>
21+
<PropertyDefn>
22+
<Name>intval</Name>
23+
<ElementPath>intval</ElementPath>
24+
<Type>Integer</Type>
25+
</PropertyDefn>
26+
<PropertyDefn>
27+
<Name>floatval</Name>
28+
<ElementPath>floatval</ElementPath>
29+
<Type>Real</Type>
30+
</PropertyDefn>
31+
</GMLFeatureClass>
32+
</GMLFeatureClassList>

‎python/plugins/processing/tests/testdata/expected/split_polys_with_lines.gml

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,26 @@
3636
</gml:featureMember>
3737
<gml:featureMember>
3838
<ogr:split_polys_with_lines fid="polys.3">
39-
<ogr:geometryProperty><gml:MultiPolygon srsName="EPSG:4326"><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>6,-3 7,-2 9,-2 9,0 10,1 10,-3 6,-3</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>7,-2 6,-3 6,1 10,1 9,0 7,0 7,-2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon></ogr:geometryProperty>
39+
<ogr:geometryProperty><gml:MultiPolygon srsName="EPSG:4326"><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>6,-3 7,-2 9,-2 9,0 10,1 10,-3 6,-3</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon></ogr:geometryProperty>
4040
<ogr:name>ASDF</ogr:name>
4141
<ogr:intval>0</ogr:intval>
4242
</ogr:split_polys_with_lines>
4343
</gml:featureMember>
4444
<gml:featureMember>
4545
<ogr:split_polys_with_lines fid="polys.4">
46+
<ogr:geometryProperty><gml:MultiPolygon srsName="EPSG:4326"><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>7,-2 6,-3 6,1 10,1 9,0 7,0 7,-2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon></ogr:geometryProperty>
47+
<ogr:name>ASDF</ogr:name>
48+
<ogr:intval>0</ogr:intval>
49+
</ogr:split_polys_with_lines>
50+
</gml:featureMember>
51+
<gml:featureMember>
52+
<ogr:split_polys_with_lines fid="polys.5">
4653
<ogr:intval>120</ogr:intval>
4754
<ogr:floatval>-100291.43213</ogr:floatval>
4855
</ogr:split_polys_with_lines>
4956
</gml:featureMember>
5057
<gml:featureMember>
51-
<ogr:split_polys_with_lines fid="polys.5">
58+
<ogr:split_polys_with_lines fid="polys.6">
5259
<ogr:geometryProperty><gml:MultiPolygon srsName="EPSG:4326"><gml:polygonMember><gml:Polygon><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>3,2 6,1 6,-3 2,-1 2,2 3,2</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></gml:polygonMember></gml:MultiPolygon></ogr:geometryProperty>
5360
<ogr:name>elim</ogr:name>
5461
<ogr:intval>2</ogr:intval>

‎python/plugins/processing/tests/testdata/expected/split_polys_with_lines.xsd

Lines changed: 0 additions & 43 deletions
This file was deleted.

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1991,6 +1991,8 @@ tests:
19911991
compare:
19921992
geometry:
19931993
precision: 7
1994+
fields:
1995+
fid: skip
19941996

19951997
- algorithm: native:splitwithlines
19961998
name: Split lines with same lines
@@ -2008,7 +2010,8 @@ tests:
20082010
compare:
20092011
geometry:
20102012
precision: 7
2011-
2013+
fields:
2014+
fid: skip
20122015

20132016
# Split lines with lines considers two cases
20142017
# case 1: two different layers
@@ -2028,6 +2031,8 @@ tests:
20282031
compare:
20292032
geometry:
20302033
precision: 7
2034+
fields:
2035+
fid: skip
20312036

20322037
# case 2 split line layer with iself
20332038
- algorithm: native:splitwithlines
@@ -2046,6 +2051,8 @@ tests:
20462051
compare:
20472052
geometry:
20482053
precision: 7
2054+
fields:
2055+
fid: skip
20492056

20502057
- algorithm: native:dropgeometries
20512058
name: Drop geometries

‎src/analysis/processing/qgsalgorithmsplitwithlines.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,7 @@ void QgsSplitWithLinesAlgorithm::initAlgorithm( const QVariantMap & )
5252
QString QgsSplitWithLinesAlgorithm::shortHelpString() const
5353
{
5454
return QObject::tr( "This algorithm splits the lines or polygons in one layer using the lines in another layer to define the breaking points. "
55-
"Intersection between geometries in both layers are considered as split points.\n\n"
56-
"Output will contain multi geometries for split features." );
55+
"Intersection between geometries in both layers are considered as split points." );
5756
}
5857

5958
QgsSplitWithLinesAlgorithm *QgsSplitWithLinesAlgorithm::createInstance() const
@@ -252,9 +251,9 @@ QVariantMap QgsSplitWithLinesAlgorithm::processAlgorithm( const QVariantMap &par
252251
parts.append( aGeom );
253252
}
254253

255-
if ( !parts.empty() )
254+
for ( const QgsGeometry &g : parts )
256255
{
257-
outFeat.setGeometry( QgsGeometry::collectGeometry( parts ) );
256+
outFeat.setGeometry( g );
258257
sink->addFeature( outFeat, QgsFeatureSink::FastInsert );
259258
}
260259

0 commit comments

Comments
 (0)
Please sign in to comment.