Facebook
From Emerald Wolf, 4 Years ago, written in Python.
This paste is a reply to moje from ja - go back
Embed
Viewing differences between moje and Re: moje
import sys
from qgis.utils import iface
from qgis.core import *
from PyQt4 import QtGui
from PyQt4 import QtCore

FILES_FOLDER_PATH = "C:/Users/PawelW/Desktop/lab3/"

def main():
    exercise_1()
    exercise_2()

def exercise_1():
    clear()

clear()
    world_layer = load_layer('WORLD_RG/WORLD_RG_10M_2010.shp', "World")
    province_layer = load_layer('POL_adm/POL_adm1.shp', 'Province')
    country_layer = load_layer('POL_adm/POL_adm2.shp', 'Country')

'Country')
    set_color(world_layer, 15, 163, 42)
    set_color(province_layer, 13, 76, 212)
    set_color(country_layer, 232, 5, 5)

5)
    set_transparency(country_layer, 0.8)

8)
    province_layer.selectAll()
    iface.mapCanvas().zoomToSelected(province_layer)

def exercise_2():
    clear()
    province_layer = load_layer('POL_adm/POL_adm1.shp', 'Province')
    fields(province_layer)\n    provinces_list = get_provinces_list(province_layer)
    print(provinces_list)\n    print(len(provinces_list))\n    del_area(province_layer)
    areas_sizes_list = calculate_areas_size(province_layer)
    print(areas_sizes_list)\n    print(len(areas_sizes_list))\n    save_to_file(provinces_list, areas_sizes_list)

def error(info):
    print >> sys.stderr, "Error:", info

def load_layer(sub_path, name):
    layer = QgsVectorLayer(FILES_FOLDER_PATH + sub_path, name, "ogr")
    if not layer.isValid(): error("Layer :" + sub_path + " failed to load!")
    QgsMapLayerRegistry.instance().addMapLayer(layer)
    layer.setCacheImage(None)
    layer.triggerRepaint()
    return layer

def clear():
    for item in QgsMapLayerRegistry.instance().mapLayers().items():
        layer_id = item[1].id()
        QgsMapLayerRegistry.instance().removeMapLayer(layer_id)
        
def set_color(layer, r=0, g=0, b=0):
    if r<0.0: r=0
    if r>255.0: r=255
    if g<0.0: g=0
    if g>255.0: g=255
    if b<0.0: b=0
    if b>255.0: b=255
    myRenderer = layer.rendererV2()
    mySymbol = myRenderer.symbol()
    mySymbol.setColor(QtGui.QColor(r,g,b))
    layer.setCacheImage(None)
    layer.triggerRepaint()
    iface.mapCanvas().refresh()

def set_transparency(layer, tval=0.5):
    if tval<0.0: tval=0
    if tval>1.0: tval=1
    tval = 1.0 - tval
    myRenderer = layer.rendererV2()
    mySymbol = myRenderer.symbol()
    mySymbol.setAlpha(tval) 
    layer.setCacheImage(None)
    layer.triggerRepaint()
    iface.mapCanvas().refresh()

def fields(layer):
    provider = layer.dataProvider()
    table = provider.fields()
    print("Field names:")
    for field in table: 
        print(field.name())

def get_provinces_list(layer):
    provinces_list = []
    provider = layer.dataProvider()
    feature_list = provider.getFeatures()
    feat = QgsFeature()
    while feature_list.nextFeature(feat):
        attrs = feat.attributes()
        provinces_list.append(attrs[6].encode('utf-8'))
    return provinces_list

def del_area(layer, nr=9): 
    if not layer.isEditable():
        layer.startEditing()
    res = layer.deleteAttribute( nr )
    layer.commitChanges()

def calculate_areas_size(layer):
    areas_list = []
    if not layer.isEditable():
        layer.startEditing()
    lProvider = layer.dataProvider()
    lProvider.addAttributes([QgsField('area', addAttributes([QgsField('AREA', QtCore.QVariant.Double)])
    layer.commitChanges()
    layer.startEditing()
    for feature in layer.getFeatures():
        calculator = QgsDistanceArea()
        calculator.computeAreaInit()
        geometry = feature.geometry()
        sum_area = 0
        if not geometry.isMultipart():
            polygon = geometry.asPolygon()
            if len(polygon) > 0:
                degrees = calculator.measurePolygon(polygon[0])
                area = calculator.convertMeasurement(degrees, QGis.Degrees, QGis.Meters, True) 
                sum_area += area[0]
            print("if", sum_area)\n        else:
            multi_polygon = geometry.asMultiPolygon()
            for sub_polygon in multi_polygon:
                degrees = calculator.measurePolygon(sub_polygon[0])
                area = calculator.convertMeasurement(degrees, QGis.Degrees, QGis.Meters, True) 
                sum_area += area[0]
            print("else",         layer.changeAttributeValue(len(areas_list), 9, sum_area)
        areas_list.append(sum_area)
            layer.changeAttributeValue(0, 9, sum_area)
        layer.
commitChanges()
    return areas_list

def save_to_file(names, areas):
    result = open(FILES_FOLDER_PATH + 'result.txt', "w+")
    result.write("Numer            Nazwa         Powierzchnia  \n")

    for i in range(len(names)):
        result.write(str(i+1) + ".  " + names[i] + "   " + str(areas[i]/1000000) + " km kwadratowych\n")
    result.close()

if __name__ == '__main__':
    main()