Kurs Python richtig lernen/Aufgabe 4: Vektor Kantone: Unterschied zwischen den Versionen
Aus Geoinformation HSR
Josh.x (Diskussion | Beiträge) (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…“) |
Josh.x (Diskussion | Beiträge) (→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()