Kurs Python richtig lernen/Aufgabe 4: Vektor Kantone: Unterschied zwischen den Versionen

Aus Geoinformation HSR
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „== kantone.py == Erwartet als Parameter eine GeoJSON-Datei (cantons.geojson) und gibt den Namen und die Fläche für jeden Kanton aus. <nowiki> # -*- coding: u…“)
 
(kantone.py)
Zeile 1: Zeile 1:
 
== kantone.py ==
 
== kantone.py ==
  
Erwartet als Parameter eine GeoJSON-Datei (cantons.geojson) und gibt den Namen und die Fläche für jeden Kanton aus.
+
Erwartet als Parameter eine GeoJSON-Datei (cantons.geojson, enthalten in [[Media:Musterloesungen.zip|Musterloesungen.zip]]) und gibt den Namen und die Fläche für jeden Kanton aus.
  
 
  <nowiki>
 
  <nowiki>

Version vom 19. September 2012, 14:25 Uhr

kantone.py

Erwartet als Parameter eine GeoJSON-Datei (cantons.geojson, enthalten in Musterloesungen.zip) und gibt den Namen und die Fläche für jeden Kanton aus.

# -*- coding: utf-8 -*-
import json, os, sys
import shapely.geometry

def kantone(json_file):
    fp = open(json_file)
    fc = json.load(fp)      # FeatureCollection lesen
    kant_dict = {}          # Resultat-Dictionnaire
    for feat in fc['features']:
        name = feat['properties']['Nom_abbr']
        geom = shapely.geometry.asShape(feat['geometry'])
        kant_dict[name] = geom.area / 1000000       # Fläche in km2
    return kant_dict


def main():
    if len(sys.argv) < 2:
        # Wird ausgeführt wenn das Programm nicht korrekt aufgerufen wurde
        print """kantone.py
        Gibt Namen und Flaeche fuer jeden Kanton aus.
        Funktionsweise:
            python kantone.py geojson_file
        """
        sys.exit()
    
    # Programm ausführen, das heisst, etwas Nützliches machen
    json_file = sys.argv[1]
    if not os.path.exists(json_file):
        print "Fehler. Datei '%s' existiert nicht."
        sys.exit()
    
    kant_dict = kantone(json_file)
    
    # Dictionnaire ausgeben
    print 'Kanton\tFlaeche [km2]'
    for kanton in kant_dict:
        print '%s\t%s' % (kanton, kant_dict[kanton])
    
    # Und nun den Dictionnaire sortiert nach Fläche ausgeben
    # (grosse Kantone zuerst)
    print ''        # Eine Leerzeile
    print 'Kantone sortiert nach Flaeche (absteigend):'
    print 'Kanton\tFlaeche [km2]'
    for kanton in sorted(kant_dict, key=kant_dict.get, reverse=True):
        print '%s\t%s' % (kanton, kant_dict[kanton])


if __name__ == '__main__':
    main()