Facebook
From ja, 4 Years ago, written in Python.
Embed
Download Paste or View Raw
Hits: 177
  1. import sys
  2. from qgis.utils import iface
  3. from qgis.core import *
  4. from PyQt4 import QtGui
  5. from PyQt4 import QtCore
  6.  
  7. FILES_FOLDER_PATH = "C:/Users/PawelW/Desktop/lab3/"
  8.  
  9. def main():
  10.     exercise_1()
  11.     exercise_2()
  12.  
  13. def exercise_1():
  14.     clear()
  15.  
  16.     world_layer = load_layer('WORLD_RG/WORLD_RG_10M_2010.shp', "World")
  17.     province_layer = load_layer('POL_adm/POL_adm1.shp', 'Province')
  18.     country_layer = load_layer('POL_adm/POL_adm2.shp', 'Country')
  19.  
  20.     set_color(world_layer, 15, 163, 42)
  21.     set_color(province_layer, 13, 76, 212)
  22.     set_color(country_layer, 232, 5, 5)
  23.  
  24.     set_transparency(country_layer, 0.8)
  25.  
  26.     province_layer.selectAll()
  27.     iface.mapCanvas().zoomToSelected(province_layer)
  28.  
  29. def exercise_2():
  30.     clear()
  31.     province_layer = load_layer('POL_adm/POL_adm1.shp', 'Province')
  32.     fields(province_layer)
  33.     provinces_list = get_provinces_list(province_layer)
  34.     print(provinces_list)
  35.     print(len(provinces_list))
  36.     del_area(province_layer)
  37.     areas_sizes_list = calculate_areas_size(province_layer)
  38.     print(areas_sizes_list)
  39.     print(len(areas_sizes_list))
  40.     save_to_file(provinces_list, areas_sizes_list)
  41.  
  42. def error(info):
  43.     print >> sys.stderr, "Error:", info
  44.  
  45. def load_layer(sub_path, name):
  46.     layer = QgsVectorLayer(FILES_FOLDER_PATH + sub_path, name, "ogr")
  47.     if not layer.isValid(): error("Layer :" + sub_path + " failed to load!")
  48.     QgsMapLayerRegistry.instance().addMapLayer(layer)
  49.     layer.setCacheImage(None)
  50.     layer.triggerRepaint()
  51.     return layer
  52.  
  53. def clear():
  54.     for item in QgsMapLayerRegistry.instance().mapLayers().items():
  55.         layer_id = item[1].id()
  56.         QgsMapLayerRegistry.instance().removeMapLayer(layer_id)
  57.        
  58. def set_color(layer, r=0, g=0, b=0):
  59.     if r<0.0: r=0
  60.     if r>255.0: r=255
  61.     if g<0.0: g=0
  62.     if g>255.0: g=255
  63.     if b<0.0: b=0
  64.     if b>255.0: b=255
  65.     myRenderer = layer.rendererV2()
  66.     mySymbol = myRenderer.symbol()
  67.     mySymbol.setColor(QtGui.QColor(r,g,b))
  68.     layer.setCacheImage(None)
  69.     layer.triggerRepaint()
  70.     iface.mapCanvas().refresh()
  71.  
  72. def set_transparency(layer, tval=0.5):
  73.     if tval<0.0: tval=0
  74.     if tval>1.0: tval=1
  75.     tval = 1.0 - tval
  76.     myRenderer = layer.rendererV2()
  77.     mySymbol = myRenderer.symbol()
  78.     mySymbol.setAlpha(tval)
  79.     layer.setCacheImage(None)
  80.     layer.triggerRepaint()
  81.     iface.mapCanvas().refresh()
  82.  
  83. def fields(layer):
  84.     provider = layer.dataProvider()
  85.     table = provider.fields()
  86.     print("Field names:")
  87.     for field in table:
  88.         print(field.name())
  89.  
  90. def get_provinces_list(layer):
  91.     provinces_list = []
  92.     provider = layer.dataProvider()
  93.     feature_list = provider.getFeatures()
  94.     feat = QgsFeature()
  95.     while feature_list.nextFeature(feat):
  96.         attrs = feat.attributes()
  97.         provinces_list.append(attrs[6].encode('utf-8'))
  98.     return provinces_list
  99.  
  100. def del_area(layer, nr=9):
  101.     if not layer.isEditable():
  102.         layer.startEditing()
  103.     res = layer.deleteAttribute( nr )
  104.     layer.commitChanges()
  105.  
  106. def calculate_areas_size(layer):
  107.     areas_list = []
  108.     if not layer.isEditable():
  109.         layer.startEditing()
  110.     lProvider = layer.dataProvider()
  111.     lProvider.addAttributes([QgsField('area', QtCore.QVariant.Double)])
  112.     for feature in layer.getFeatures():
  113.         calculator = QgsDistanceArea()
  114.         calculator.computeAreaInit()
  115.         geometry = feature.geometry()
  116.         sum_area = 0
  117.         if not geometry.isMultipart():
  118.             polygon = geometry.asPolygon()
  119.             if len(polygon) > 0:
  120.                 degrees = calculator.measurePolygon(polygon[0])
  121.                 area = calculator.convertMeasurement(degrees, QGis.Degrees, QGis.Meters, True)
  122.                 sum_area += area[0]
  123.             print("if", sum_area)
  124.         else:
  125.             multi_polygon = geometry.asMultiPolygon()
  126.             for sub_polygon in multi_polygon:
  127.                 degrees = calculator.measurePolygon(sub_polygon[0])
  128.                 area = calculator.convertMeasurement(degrees, QGis.Degrees, QGis.Meters, True)
  129.                 sum_area += area[0]
  130.             print("else", sum_area)
  131.         areas_list.append(sum_area)
  132.         layer.changeAttributeValue(0, 9, sum_area)
  133.         layer.commitChanges()
  134.     return areas_list
  135.  
  136. def save_to_file(names, areas):
  137.     result = open(FILES_FOLDER_PATH + 'result.txt', "w+")
  138.     result.write("Numer            Nazwa         Powierzchnia  \n")
  139.  
  140.     for i in range(len(names)):
  141.         result.write(str(i+1) + ".  " + names[i] + "   " + str(areas[i]/1000000) + " km kwadratowych\n")
  142.     result.close()
  143.  
  144. if __name__ == '__main__':
  145.     main()
  146.  
  147.  

Replies to moje rss

Title Name Language When
Re: moje Emerald Wolf python 4 Years ago.