Exemple #1
0
 def join_field2(dest_layer, source_layer, target_field_name, join_field_name,
         field_names_subset, prefix = ""):
     fields = []
     target_attrs = [f.name() for f in dest_layer.pendingFields()]
     for attr in field_names_subset:
         field = source_layer.pendingFields().field(attr)
         field.setName(prefix + attr)
         if field.name() not in target_attrs:
             if field.length() > 254:
                 field.setLength(254)
             fields.append(field)
     dest_layer.writer.addAttributes(fields)
     dest_layer.updateFields()
     source_values = {}
     for feature in source_layer.getFeatures():
         source_values[feature[join_field_name]] = \
                 {attr: feature[attr] for attr in field_names_subset}
     chunk_size = 512
     to_change = {}
     progress = ProgressBar(dest_layer.featureCount())
     for feature in dest_layer.getFeatures():
         attrs = {}
         for attr in field_names_subset:
             fieldId = feature.fieldNameIndex(prefix + attr)
             value = None
             if feature[target_field_name] in source_values:
                 value = source_values[feature[target_field_name]][attr]
             attrs[fieldId] = value
         to_change[feature.id()] = attrs
         progress.update()
         if len(to_change) == chunk_size:
             dest_layer.writer.changeAttributeValues(to_change)
             to_change = {}
     if len(to_change) > 0:
         dest_layer.writer.changeAttributeValues(to_change)
Exemple #2
0
 def _test_reproject2(self):
     """Less memory usage than reproject1 but slower"""
     target_crs = QgsCoordinateReferenceSystem(4326)
     crs_transform = QgsCoordinateTransform(self.obj2.crs(), target_crs)
     chunk_size = 512
     to_add = []
     to_clean = []
     progress = ProgressBar(self.obj2.featureCount())
     for feature in self.obj2.getFeatures():
         geom = feature.geometry()
         geom.transform(crs_transform)
         out_feat = QgsFeature()
         out_feat.setGeometry(geom)
         out_feat.setAttributes(feature.attributes())
         to_add.append(out_feat)
         to_clean.append(feature.id())
         progress.update()
         if len(to_add) == chunk_size:
             self.obj2.deleteFeatures(to_clean)
             self.obj2.writer.addFeatures(to_add)
             to_add = []
             to_clean = []
     if len(to_add) > 0:
         self.obj2.deleteFeatures(to_clean)
         self.obj2.writer.addFeatures(to_add)
     self.obj2.setCrs(target_crs)
     self.obj2.updateExtents()
Exemple #3
0
 def test_update0(self, mock_sys):
     pb = ProgressBar(0)
     progress = random.randint(0, 99999)
     pb.update(progress)
     self.assertTrue(mock_sys.stdout.write.called)
     output = mock_sys.stdout.write.call_args_list[0][0][0]
     self.assertEquals(
         output.split(': ')[1], '%.1fK\r' % (progress / 1024.0))
Exemple #4
0
 def test_update100(self, mock_sys):
     pb = ProgressBar(1000)
     pb.update(1100)
     self.assertEquals(pb.progress, 1000)
     self.assertTrue(mock_sys.stdout.write.called)
     output = mock_sys.stdout.write.call_args_list[0][0][0]
     self.assertEquals(output.count('#'), pb.bar_len)
     self.assertEquals(output.count('-'), 0)
Exemple #5
0
 def test_update(self, mock_sys):
     pb = ProgressBar(1000)
     progress = random.randint(0, 9)
     pb.update(100 * progress)
     self.assertEquals(pb.progress, 100 * progress)
     self.assertTrue(mock_sys.stdout.write.called)
     output = mock_sys.stdout.write.call_args_list[0][0][0]
     self.assertEquals(output.count('#'), int(pb.bar_len * progress / 10.0))
     self.assertEquals(output.count('-'),
                       int(pb.bar_len * (10 - progress) / 10.0))
Exemple #6
0
 def _test_append1(self):
     layer = self.building_gml
     self.obj.setCrs(layer.crs())
     to_add = []
     progress = ProgressBar(layer.featureCount())
     for feature in layer.getFeatures():
         to_add.append(self.obj.copy_feature(feature))
         progress.update()
     if to_add:
         self.obj.writer.addFeatures(to_add)
     assert self.obj.featureCount() == self.building_gml.featureCount()
Exemple #7
0
 def test_append(self):
     layer = self.address_gml
     self.obj.setCrs(layer.crs())
     chunk_size = 512
     to_add = []
     progress = ProgressBar(layer.featureCount())
     for feature in layer.getFeatures():
         to_add.append(self.obj.copy_feature(feature))
         progress.update()
         if len(to_add) == chunk_size:
             self.obj.writer.addFeatures(to_add)
             to_add = []
     if len(to_add) > 0:
         self.obj.writer.addFeatures(to_add)
     assert self.obj.featureCount() == layer.featureCount()
Exemple #8
0
 def test_append2(self):
     """As fast as append but with much less memory usage"""
     layer = self.building_gml
     self.obj2.setCrs(layer.crs())
     chunk_size = 512
     to_add = []
     progress = ProgressBar(layer.featureCount())
     for feature in layer.getFeatures():
         to_add.append(self.obj2.copy_feature(feature))
         progress.update()
         if len(to_add) == chunk_size:
             self.obj2.writer.addFeatures(to_add)
             to_add = []
     if len(to_add) > 0:
         self.obj2.writer.addFeatures(to_add)
     assert self.obj2.featureCount() == self.building_gml.featureCount()
Exemple #9
0
 def test_reproject3(self):
     target_crs = QgsCoordinateReferenceSystem(4326)
     crs_transform = QgsCoordinateTransform(self.obj2.crs(), target_crs)
     chunk_size = 512
     to_change = {}
     progress = ProgressBar(self.obj2.featureCount())
     for feature in self.obj2.getFeatures():
         geom = QgsGeometry(feature.geometry())
         geom.transform(crs_transform)
         to_change[feature.id()] = geom
         progress.update()
         if len(to_change) == chunk_size:
             self.obj2.writer.changeGeometryValues(to_change)
             to_change = {}
     if len(to_change) > 0:
         self.obj2.writer.changeGeometryValues(to_change)
     self.obj2.setCrs(target_crs)
     self.obj2.updateExtents()
Exemple #10
0
 def _test_reproject1(self):
     target_crs = QgsCoordinateReferenceSystem(4326)
     crs_transform = QgsCoordinateTransform(self.obj2.crs(), target_crs)
     to_add = []
     to_clean = []
     progress = ProgressBar(self.obj2.featureCount())
     for feature in self.obj2.getFeatures():
         geom = feature.geometry()
         geom.transform(crs_transform)
         out_feat = QgsFeature()
         out_feat.setGeometry(geom)
         out_feat.setAttributes(feature.attributes())
         to_add.append(out_feat)
         to_clean.append(feature.id())
         progress.update()
     self.obj2.deleteFeatures(to_clean)
     self.obj2.writer.addFeatures(to_add)
     self.obj2.setCrs(target_crs)
     self.obj2.updateExtents()
Exemple #11
0
 def test_init(self):
     p = ProgressBar(1000)
     self.assertEquals(p.total, 1000)
     self.assertEquals(p.progress, 0)