|
16 | 16 |
|
17 | 17 | import os
|
18 | 18 |
|
19 |
| -from qgis.core import QgsSettings, QgsVectorLayer, QgsFeatureRequest |
| 19 | +from qgis.core import (QgsSettings, |
| 20 | + QgsVectorLayer, |
| 21 | + QgsFeatureRequest, |
| 22 | + QgsFeature, |
| 23 | + QgsFields, |
| 24 | + QgsField, |
| 25 | + QgsGeometry, |
| 26 | + QgsPointXY, |
| 27 | + NULL, |
| 28 | + QgsVectorLayerExporter, |
| 29 | + QgsCoordinateReferenceSystem) |
20 | 30 |
|
21 | 31 | from qgis.PyQt.QtCore import QDate, QTime, QDateTime, QVariant
|
22 | 32 |
|
@@ -164,6 +174,68 @@ def testDateTimeTypes(self):
|
164 | 174 | self.assertEqual(f.attributes()[datetime_idx], QDateTime(
|
165 | 175 | QDate(2004, 3, 4), QTime(13, 41, 52)))
|
166 | 176 |
|
| 177 | + def testCreateLayer(self): |
| 178 | + layer = QgsVectorLayer("Point?field=id:integer&field=fldtxt:string&field=fldint:integer", |
| 179 | + "addfeat", "memory") |
| 180 | + pr = layer.dataProvider() |
| 181 | + f = QgsFeature() |
| 182 | + f.setAttributes([1, "test", 1]) |
| 183 | + f.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(1, 2))) |
| 184 | + f2 = QgsFeature() |
| 185 | + f2.setAttributes([2, "test2", 3]) |
| 186 | + f3 = QgsFeature() |
| 187 | + f3.setAttributes([3, "test2", NULL]) |
| 188 | + f3.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(3, 2))) |
| 189 | + f4 = QgsFeature() |
| 190 | + f4.setAttributes([4, NULL, 3]) |
| 191 | + f4.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(4, 3))) |
| 192 | + pr.addFeatures([f, f2, f3, f4]) |
| 193 | + |
| 194 | + uri = '{} table="qgis_test"."new_table" sql='.format(self.dbconn) |
| 195 | + error, message = QgsVectorLayerExporter.exportLayer(layer, uri, 'mssql', QgsCoordinateReferenceSystem('EPSG:4326')) |
| 196 | + self.assertEqual(error, QgsVectorLayerExporter.NoError) |
| 197 | + |
| 198 | + new_layer = QgsVectorLayer(uri, 'new', 'mssql') |
| 199 | + self.assertTrue(new_layer.isValid()) |
| 200 | + self.assertEqual([f.name() for f in new_layer.fields()], ['qgs_fid', 'id', 'fldtxt', 'fldint']) |
| 201 | + |
| 202 | + features = [f.attributes() for f in new_layer.getFeatures()] |
| 203 | + self.assertEqual(features, [[1, 1, 'test', 1], |
| 204 | + [2, 2, 'test2', 3], |
| 205 | + [3, 3, 'test2', NULL], |
| 206 | + [4, 4, NULL, 3]]) |
| 207 | + geom = [f.geometry().asWkt() for f in new_layer.getFeatures()] |
| 208 | + self.assertEqual(geom, ['Point (1 2)', '', 'Point (3 2)', 'Point (4 3)']) |
| 209 | + |
| 210 | + def testCreateLayerMultiPoint(self): |
| 211 | + layer = QgsVectorLayer("MultiPoint?field=id:integer&field=fldtxt:string&field=fldint:integer", |
| 212 | + "addfeat", "memory") |
| 213 | + pr = layer.dataProvider() |
| 214 | + f = QgsFeature() |
| 215 | + f.setAttributes([1, "test", 1]) |
| 216 | + f.setGeometry(QgsGeometry.fromWkt('MultiPoint(1 2, 3 4)')) |
| 217 | + f2 = QgsFeature() |
| 218 | + f2.setAttributes([2, "test2", 3]) |
| 219 | + f3 = QgsFeature() |
| 220 | + f3.setAttributes([3, "test2", NULL]) |
| 221 | + f3.setGeometry(QgsGeometry.fromWkt('MultiPoint(7 8)')) |
| 222 | + pr.addFeatures([f, f2, f3]) |
| 223 | + |
| 224 | + uri = '{} table="qgis_test"."new_table_multipoint" sql='.format(self.dbconn) |
| 225 | + error, message = QgsVectorLayerExporter.exportLayer(layer, uri, 'mssql', QgsCoordinateReferenceSystem('EPSG:4326')) |
| 226 | + self.assertEqual(error, QgsVectorLayerExporter.NoError) |
| 227 | + |
| 228 | + new_layer = QgsVectorLayer(uri, 'new', 'mssql') |
| 229 | + self.assertTrue(new_layer.isValid()) |
| 230 | + self.assertEqual([f.name() for f in new_layer.fields()], ['qgs_fid', 'id', 'fldtxt', 'fldint']) |
| 231 | + |
| 232 | + features = [f.attributes() for f in new_layer.getFeatures()] |
| 233 | + self.assertEqual(features, [[1, 1, 'test', 1], |
| 234 | + [2, 2, 'test2', 3], |
| 235 | + [3, 3, 'test2', NULL]]) |
| 236 | + geom = [f.geometry().asWkt() for f in new_layer.getFeatures()] |
| 237 | + self.assertEqual(geom, ['MultiPoint ((1 2),(3 4))', '', 'MultiPoint ((7 8))']) |
| 238 | + |
167 | 239 |
|
168 | 240 | if __name__ == '__main__':
|
169 | 241 | unittest.main()
|
0 commit comments