Skip to content

Commit 1867423

Browse files
committedFeb 25, 2019
[processing] Fix "Add geometry attributes" handling of multipoint geom
For multipoints, export the count of geometries only (cherry picked from commit ec12183)
1 parent 1f2849c commit 1867423

File tree

4 files changed

+111
-14
lines changed

4 files changed

+111
-14
lines changed
 

‎python/plugins/processing/algs/qgis/ExportGeometryInfo.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -115,14 +115,17 @@ def processAlgorithm(self, parameters, context, feedback):
115115
new_fields.append(QgsField('straightdis', QVariant.Double))
116116
new_fields.append(QgsField('sinuosity', QVariant.Double))
117117
else:
118-
new_fields.append(QgsField('xcoord', QVariant.Double))
119-
new_fields.append(QgsField('ycoord', QVariant.Double))
120-
if QgsWkbTypes.hasZ(source.wkbType()):
121-
self.export_z = True
122-
new_fields.append(QgsField('zcoord', QVariant.Double))
123-
if QgsWkbTypes.hasM(source.wkbType()):
124-
self.export_m = True
125-
new_fields.append(QgsField('mvalue', QVariant.Double))
118+
if QgsWkbTypes.isMultiType(source.wkbType()):
119+
new_fields.append(QgsField('numparts', QVariant.Int))
120+
else:
121+
new_fields.append(QgsField('xcoord', QVariant.Double))
122+
new_fields.append(QgsField('ycoord', QVariant.Double))
123+
if QgsWkbTypes.hasZ(source.wkbType()):
124+
self.export_z = True
125+
new_fields.append(QgsField('zcoord', QVariant.Double))
126+
if QgsWkbTypes.hasM(source.wkbType()):
127+
self.export_m = True
128+
new_fields.append(QgsField('mvalue', QVariant.Double))
126129

127130
fields = QgsProcessingUtils.combineFields(fields, new_fields)
128131
(sink, dest_id) = self.parameterAsSink(parameters, self.OUTPUT, context,
@@ -178,21 +181,18 @@ def processAlgorithm(self, parameters, context, feedback):
178181
return {self.OUTPUT: dest_id}
179182

180183
def point_attributes(self, geometry):
181-
pt = None
184+
attrs = []
182185
if not geometry.isMultipart():
183186
pt = geometry.constGet()
184-
else:
185-
if geometry.numGeometries() > 0:
186-
pt = geometry.geometryN(0)
187-
attrs = []
188-
if pt:
189187
attrs.append(pt.x())
190188
attrs.append(pt.y())
191189
# add point z/m
192190
if self.export_z:
193191
attrs.append(pt.z())
194192
if self.export_m:
195193
attrs.append(pt.m())
194+
else:
195+
attrs = [geometry.constGet().numGeometries()]
196196
return attrs
197197

198198
def line_attributes(self, geometry):
Lines changed: 48 additions & 0 deletions
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="http://ogr.maptools.org/ add_geometry_info_multipoint.xsd"
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>0</gml:X><gml:Y>-5</gml:Y></gml:coord>
10+
<gml:coord><gml:X>8</gml:X><gml:Y>3</gml:Y></gml:coord>
11+
</gml:Box>
12+
</gml:boundedBy>
13+
14+
<gml:featureMember>
15+
<ogr:add_geometry_info_multipoint fid="points.9">
16+
<ogr:d>5</ogr:d>
17+
<ogr:numparts xsi:nil="true"/>
18+
</ogr:add_geometry_info_multipoint>
19+
</gml:featureMember>
20+
<gml:featureMember>
21+
<ogr:add_geometry_info_multipoint fid="points.0">
22+
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>1,1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>2,2</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>3,3</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
23+
<ogr:d>1</ogr:d>
24+
<ogr:numparts>3</ogr:numparts>
25+
</ogr:add_geometry_info_multipoint>
26+
</gml:featureMember>
27+
<gml:featureMember>
28+
<ogr:add_geometry_info_multipoint fid="points.3">
29+
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>5,2</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>4,1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
30+
<ogr:d>2</ogr:d>
31+
<ogr:numparts>2</ogr:numparts>
32+
</ogr:add_geometry_info_multipoint>
33+
</gml:featureMember>
34+
<gml:featureMember>
35+
<ogr:add_geometry_info_multipoint fid="points.5">
36+
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>0,-5</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>8,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
37+
<ogr:d>3</ogr:d>
38+
<ogr:numparts>2</ogr:numparts>
39+
</ogr:add_geometry_info_multipoint>
40+
</gml:featureMember>
41+
<gml:featureMember>
42+
<ogr:add_geometry_info_multipoint fid="points.7">
43+
<ogr:geometryProperty><gml:MultiPoint srsName="EPSG:4326"><gml:pointMember><gml:Point><gml:coordinates>7,-1</gml:coordinates></gml:Point></gml:pointMember><gml:pointMember><gml:Point><gml:coordinates>0,-1</gml:coordinates></gml:Point></gml:pointMember></gml:MultiPoint></ogr:geometryProperty>
44+
<ogr:d>4</ogr:d>
45+
<ogr:numparts>2</ogr:numparts>
46+
</ogr:add_geometry_info_multipoint>
47+
</gml:featureMember>
48+
</ogr:FeatureCollection>
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<xs:schema targetNamespace="http://ogr.maptools.org/" xmlns:ogr="http://ogr.maptools.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml" elementFormDefault="qualified" version="1.0">
3+
<xs:import namespace="http://www.opengis.net/gml" schemaLocation="http://schemas.opengis.net/gml/2.1.2/feature.xsd"/>
4+
<xs:element name="FeatureCollection" type="ogr:FeatureCollectionType" substitutionGroup="gml:_FeatureCollection"/>
5+
<xs:complexType name="FeatureCollectionType">
6+
<xs:complexContent>
7+
<xs:extension base="gml:AbstractFeatureCollectionType">
8+
<xs:attribute name="lockId" type="xs:string" use="optional"/>
9+
<xs:attribute name="scope" type="xs:string" use="optional"/>
10+
</xs:extension>
11+
</xs:complexContent>
12+
</xs:complexType>
13+
<xs:element name="add_geometry_info_multipoint" type="ogr:add_geometry_info_multipoint_Type" substitutionGroup="gml:_Feature"/>
14+
<xs:complexType name="add_geometry_info_multipoint_Type">
15+
<xs:complexContent>
16+
<xs:extension base="gml:AbstractFeatureType">
17+
<xs:sequence>
18+
<xs:element name="geometryProperty" type="gml:MultiPointPropertyType" nillable="true" minOccurs="0" maxOccurs="1"/>
19+
<xs:element name="d" nillable="true" minOccurs="0" maxOccurs="1">
20+
<xs:simpleType>
21+
<xs:restriction base="xs:integer">
22+
<xs:totalDigits value="10"/>
23+
</xs:restriction>
24+
</xs:simpleType>
25+
</xs:element>
26+
<xs:element name="numparts" nillable="true" minOccurs="0" maxOccurs="1">
27+
<xs:simpleType>
28+
<xs:restriction base="xs:integer">
29+
<xs:totalDigits value="10"/>
30+
</xs:restriction>
31+
</xs:simpleType>
32+
</xs:element>
33+
</xs:sequence>
34+
</xs:extension>
35+
</xs:complexContent>
36+
</xs:complexType>
37+
</xs:schema>

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1574,6 +1574,18 @@ tests:
15741574
name: expected/export_multiline_info.gml
15751575
type: vector
15761576

1577+
- algorithm: qgis:exportaddgeometrycolumns
1578+
name: Export multipoint info
1579+
params:
1580+
CALC_METHOD: 0
1581+
INPUT:
1582+
name: multipoints.gml|layername=multipoints
1583+
type: vector
1584+
results:
1585+
OUTPUT:
1586+
name: expected/add_geometry_info_multipoint.gml
1587+
type: vector
1588+
15771589
- algorithm: qgis:texttofloat
15781590
name: Text to float
15791591
params:

0 commit comments

Comments
 (0)
Please sign in to comment.