def test_romanise(self): """Test we can convert MMI values to float.""" values = range(2, 10) expected_result = ['II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'] result = [] for value in values: result.append(romanise(value)) self.assertEqual(result, expected_result)
def set_contour_properties(self, input_file): """Set the X, Y, RGB, ROMAN attributes of the contour layer. :param input_file: (Required) Name of the contour layer. :type input_file: str :raise: InvalidLayerError if anything is amiss with the layer. """ LOGGER.debug('set_contour_properties requested for %s.' % input_file) layer = QgsVectorLayer(input_file, 'mmi-contours', "ogr") if not layer.isValid(): raise InvalidLayerError(input_file) layer.startEditing() # Now loop through the db adding selected features to mem layer request = QgsFeatureRequest() fields = layer.dataProvider().fields() for feature in layer.getFeatures(request): if not feature.isValid(): LOGGER.debug('Skipping feature') continue # Work out x and y line = feature.geometry().asPolyline() y = line[0].y() x_max = line[0].x() x_min = x_max for point in line: if point.y() < y: y = point.y() x = point.x() if x < x_min: x_min = x if x > x_max: x_max = x x = x_min + ((x_max - x_min) / 2) # Get length length = feature.geometry().length() mmi_value = float(feature['MMI']) # We only want labels on the whole number contours if mmi_value != round(mmi_value): roman = '' else: roman = romanise(mmi_value) # RGB from http://en.wikipedia.org/wiki/Mercalli_intensity_scale rgb = mmi_colour(mmi_value) # Now update the feature feature_id = feature.id() layer.changeAttributeValue(feature_id, fields.indexFromName('X'), x) layer.changeAttributeValue(feature_id, fields.indexFromName('Y'), y) layer.changeAttributeValue(feature_id, fields.indexFromName('RGB'), rgb) layer.changeAttributeValue(feature_id, fields.indexFromName('ROMAN'), roman) layer.changeAttributeValue(feature_id, fields.indexFromName('ALIGN'), 'Center') layer.changeAttributeValue(feature_id, fields.indexFromName('VALIGN'), 'HALF') layer.changeAttributeValue(feature_id, fields.indexFromName('LEN'), length) layer.commitChanges()
def set_contour_properties(self, input_file): """Set the X, Y, RGB, ROMAN attributes of the contour layer. :param input_file: (Required) Name of the contour layer. :type input_file: str :raise: InvalidLayerError if anything is amiss with the layer. """ LOGGER.debug('set_contour_properties requested for %s.' % input_file) layer = QgsVectorLayer(input_file, 'mmi-contours', "ogr") if not layer.isValid(): raise InvalidLayerError(input_file) layer.startEditing() # Now loop through the db adding selected features to mem layer request = QgsFeatureRequest() fields = layer.dataProvider().fields() for feature in layer.getFeatures(request): if not feature.isValid(): LOGGER.debug('Skipping feature') continue # Work out x and y line = feature.geometry().asPolyline() y = line[0].y() x_max = line[0].x() x_min = x_max for point in line: if point.y() < y: y = point.y() x = point.x() if x < x_min: x_min = x if x > x_max: x_max = x x = x_min + ((x_max - x_min) / 2) # Get length length = feature.geometry().length() mmi_value = float(feature['MMI']) # We only want labels on the whole number contours if mmi_value != round(mmi_value): roman = '' else: roman = romanise(mmi_value) # RGB from http://en.wikipedia.org/wiki/Mercalli_intensity_scale rgb = mmi_colour(mmi_value) # Now update the feature feature_id = feature.id() layer.changeAttributeValue( feature_id, fields.indexFromName('X'), x) layer.changeAttributeValue( feature_id, fields.indexFromName('Y'), y) layer.changeAttributeValue( feature_id, fields.indexFromName('RGB'), rgb) layer.changeAttributeValue( feature_id, fields.indexFromName('ROMAN'), roman) layer.changeAttributeValue( feature_id, fields.indexFromName('ALIGN'), 'Center') layer.changeAttributeValue( feature_id, fields.indexFromName('VALIGN'), 'HALF') layer.changeAttributeValue( feature_id, fields.indexFromName('LEN'), length) layer.commitChanges()
def set_contour_properties(contour_file_path): """Set the X, Y, RGB, ROMAN attributes of the contour layer. :param contour_file_path: Path of the contour layer. :type contour_file_path: str :raise: InvalidLayerError if anything is amiss with the layer. """ LOGGER.debug('Set_contour_properties requested for %s.' % contour_file_path) layer = QgsVectorLayer(contour_file_path, 'mmi-contours', "ogr") if not layer.isValid(): raise InvalidLayerError(contour_file_path) layer.startEditing() # Now loop through the db adding selected features to mem layer request = QgsFeatureRequest() for feature in layer.getFeatures(request): if not feature.isValid(): LOGGER.debug('Skipping feature') continue # Work out x and y line = feature.geometry().asPolyline() y = line[0].y() x_max = line[0].x() x_min = x_max for point in line: if point.y() < y: y = point.y() x = point.x() if x < x_min: x_min = x if x > x_max: x_max = x x = x_min + ((x_max - x_min) / 2) # Get length length = feature.geometry().length() mmi_value = float(feature[contour_mmi_field['field_name']]) # We only want labels on the whole number contours if mmi_value != round(mmi_value): roman = '' else: roman = romanise(mmi_value) # RGB from http://en.wikipedia.org/wiki/Mercalli_intensity_scale rgb = mmi_colour(mmi_value) # Now update the feature feature_id = feature.id() layer.changeAttributeValue( feature_id, field_index_from_definition(layer, contour_x_field), x) layer.changeAttributeValue( feature_id, field_index_from_definition(layer, contour_y_field), y) layer.changeAttributeValue( feature_id, field_index_from_definition(layer, contour_colour_field), rgb) layer.changeAttributeValue( feature_id, field_index_from_definition(layer, contour_roman_field), roman) layer.changeAttributeValue( feature_id, field_index_from_definition(layer, contour_halign_field), 'Center') layer.changeAttributeValue( feature_id, field_index_from_definition(layer, contour_valign_field), 'HALF') layer.changeAttributeValue( feature_id, field_index_from_definition(layer, contour_length_field), length) layer.commitChanges()
def set_contour_properties(contour_file_path): """Set the X, Y, RGB, ROMAN attributes of the contour layer. :param contour_file_path: Path of the contour layer. :type contour_file_path: str :raise: InvalidLayerError if anything is amiss with the layer. """ LOGGER.debug( 'Set_contour_properties requested for %s.' % contour_file_path) layer = QgsVectorLayer(contour_file_path, 'mmi-contours', "ogr") if not layer.isValid(): raise InvalidLayerError(contour_file_path) layer.startEditing() # Now loop through the db adding selected features to mem layer request = QgsFeatureRequest() for feature in layer.getFeatures(request): if not feature.isValid(): LOGGER.debug('Skipping feature') continue # Work out x and y line = feature.geometry().asPolyline() y = line[0].y() x_max = line[0].x() x_min = x_max for point in line: if point.y() < y: y = point.y() x = point.x() if x < x_min: x_min = x if x > x_max: x_max = x x = x_min + ((x_max - x_min) / 2) # Get length length = feature.geometry().length() mmi_value = float(feature[contour_mmi_field['field_name']]) # We only want labels on the whole number contours if mmi_value != round(mmi_value): roman = '' else: roman = romanise(mmi_value) # RGB from http://en.wikipedia.org/wiki/Mercalli_intensity_scale rgb = mmi_colour(mmi_value) # Now update the feature feature_id = feature.id() layer.changeAttributeValue( feature_id, field_index_from_definition(layer, contour_x_field), x) layer.changeAttributeValue( feature_id, field_index_from_definition(layer, contour_y_field), y) layer.changeAttributeValue( feature_id, field_index_from_definition(layer, contour_colour_field), rgb) layer.changeAttributeValue( feature_id, field_index_from_definition(layer, contour_roman_field), roman) layer.changeAttributeValue( feature_id, field_index_from_definition(layer, contour_halign_field), 'Center') layer.changeAttributeValue( feature_id, field_index_from_definition(layer, contour_valign_field), 'HALF') layer.changeAttributeValue( feature_id, field_index_from_definition(layer, contour_length_field), length) layer.commitChanges()