neuling braucht hilfe

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Iorlas
User
Beiträge: 8
Registriert: Mittwoch 6. Oktober 2010, 17:32

Hallo, ich habe ein Problem:

Ausgangslage ist diese:
# -------------------------------------------------------------
# Dieses Script erzeugt einen 300 Meter Buffer um die
# die Fluesse Salzburgs und verbindet die gebufferten Einzelteile ("Dissolve").
# Erweitern Sie das Script, so dass 3 Buffer (50, 200 und 350 Meter) in einem
# Durchgang erzeugt werden
# -------------------------------------------------------------

# Import COM Dispatch Module
##import win32com.client
# Create the Geoprocessor Object
##gp = win32com.client.Dispatch("esriGeoprocessing.GpDispatch.1")

#ALTERNATIVE ab ArcGIS 9.2:
import arcgisscripting
# Create the Geoprocessor Object
gp = arcgisscripting.create()

#ALTERNATIVE ab ArcGIS 9.3:
##import arcgisscripting
# Create the Geoprocessor Object
##gp = arcgisscripting.create(9.3)

# set licence
gp.SetProduct("ArcGis")

gp.OverwriteOutput = 1
gp.Workspace = "E:\\Uni Gis\\M6\\M6\\Salzburg.mdb"

# Local variables...
sbgFluesse = "sbg_fluesse"
Buff_Fluesse = "Buff_300"

# Process: Buffer...
gp.Buffer_analysis (sbgFluesse, Buff_Fluesse, "300 Meters", "FULL", "ROUND", "ALL


Aufgabe ist es nun, das Script so zu modifizieren, dass in einem Durchgang drei verschiedene Buffergrößen berechnet werden: 50, 200 und 350 Meter. Diese sollen auch in drei verschiedenen Datensätzen ausgegeben werden.
Lösungsansatz:
Versuchen Sie eine Schleife zu programmieren, um die drei Rechenoperationen mit unterschiedlichen Parametern ablaufen zu lassen. Hier bietet sich der list loop
an.
Versuchen Sie die Namen der Datensätze in die das jeweilige Ergebnis geschrieben wird innerhalb der Schleife automatisch zu generieren (Beachten Sie auch: Wenn Sie den Namen des zu berechnende Datensatzes außerhalb der Schleife definieren, wird möglicherweise dreimal derselbe Datensatz überschrieben!).
Versuchen Sie das Script möglichst benutzerfreundlich zu gestalten, in dem Sie den Scriptzweck, Datum der Programmierung, sowie den Autor / die Autorin im Header angeben. Außerdem sollten Sie das Script mit Kommentaren versehen und, wenn möglich, auch den Benutzer während der Ausführung im interaktiven Fenster über die abgearbeiteten Berechnungsschritte informieren.
Geben Sie das modifizierte Script als Lösung ab. Falls Ihr Script (wider Erwarten) auch nach intensiver Fehlersuche nicht funktioniert, geben Sie es trotzdem mit den entsprechenden (auskommentierten) Hinweisen zu den auftretenden Fehlern ab.
Zusatzaufgabe: Versuchen Sie, das Präfix für die automatische Namensgebung der Ausgabedatensätze mittels der built-in-function raw_input vom Benutzer eingeben zu lassen!


ich hab leider keinen plan... :(
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Iorlas hat geschrieben:ich hab leider keinen plan... :(
Wenn du dich gar nicht auskennst, dann solltest du erst einmal das Python-Tutorial durcharbeiten. Danach kennst du dann zumindest die grundlegenden Sachen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Außerdem solltest Du Dir einmal die Forenregeln ansehen, speziell den angepinnten Thread, der sich mit dem Thema Hausaufgaben befasst.

Außerdem ist der Quellcode so schwer lesbar, da es bei Python u.a. auch auf die korrekte Einrückung ankommt. Das Forum bietet deswegen spezielle Code bzw auch ein spezielles Python-Tag, mit dem man Quellcode hübsch formatiert in einem Posting wiedergeben kann. Augenscheinlich hast Du Dir hier vor Deinem Posting keine anderen Beiträge angeguckt? ;-)

Der Code sieht an einigen Stellen übrigens furchtbar aus - sollte das wirklich eine Vorgabe sein, so sollte der Lehrende hier auch mal vorbeigucken und ein wenig mitlesen... :twisted:

Auch der Aufgabentext als solcher hat einige Highlights zu bieten:
Hier bietet sich der list loop an.
Bitte was? Diese Nomenklatur habe ich so noch nicht gesehen...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Iorlas
User
Beiträge: 8
Registriert: Mittwoch 6. Oktober 2010, 17:32

ja genau...
und mit so nem script soll man hier dann arbeiten... :evil: :evil:
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Iorlas hat geschrieben:ja genau...
und mit so nem script soll man hier dann arbeiten... :evil: :evil:
Da Du mit der Aufgabe mit Deinem bisherigen Kenntnisstand überfordert bist, spielt das für Dich keine große Rolle. Allerdings sollte man auch Anfängern nicht "schmutzige" Dinge vorsetzen, selbst wenn diese die gar nicht erkennen. Im übrigen ist das Script nicht mal 100% kopiert worden von Dir ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Iorlas
User
Beiträge: 8
Registriert: Mittwoch 6. Oktober 2010, 17:32

Nein das Script nich. aber die aufgabe.
und wenn man sich mit den Begriffen nicht auskennt, sucht man auch nach genau diesen Begriffen (hier list loop) - da vertraut man ja auf den aufgabentext :wink:
Benutzeravatar
snafu
User
Beiträge: 6737
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Vielleicht ja:

Code: Alles auswählen

while True:
    list('loop')
:o
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Oder so:

Code: Alles auswählen

# list_loop ist eine Liste und eine local variable
list_loop = [50, 200, 350]
for distance in list_loop:
    pass
:mrgreen:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

Ich denke mal es war einfach eine Schleife über die Elemente einer Liste gemeint.

Edit: Mist, Hyperion war schneller…
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

BlackJack hat geschrieben:Ich denke mal es war einfach eine Schleife über die Elemente einer Liste gemeint.
Ok, wir kennen den Hintergrund der Veranstaltung nicht. Ist es ein Programmierkurs und das Geodatenbeispiel nur ein Gimmik, oder ist es ein Geodatenverarbeitungskurs, bei dem das Programmieren nicht im Vordergrund steht und nur Mittel zum Zweck ist. Dennoch zeugt es von relativ wenig Erfahrung / Sorgfalt des Aufgabenstellers - sofern das 1:1 wiedergeben wurde und nicht vom OP interpoliert.
BlackJack hat geschrieben: Edit: Mist, Hyperion war schneller…
Nuja, ein "verspielter" Lösungshinweis ist ja mal erlaubt denke ich ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
Käptn Haddock
User
Beiträge: 169
Registriert: Freitag 24. März 2006, 14:27

Iorlas hat geschrieben: # Process: Buffer...
gp.Buffer_analysis (sbgFluesse, Buff_Fluesse, "300 Meters", "FULL", "ROUND", "ALL
Wie schön, ein UniGISler, aus Solidarität helf ich dir mal bei den Hausaufgaben ;)

Ich denke du solltest die zitierte Zeile (nach Vervollständigung;)) in einer Schleife laufen lassen z.B.:

Code: Alles auswählen

for buffer in [50, 200, 350]:
    gp.Buffer_analysis (sbgFluesse, buffer, "%s Meters" %(buffer), "FULL", "ROUND", "ALL...
Die genaue Syntax und die Parameter mußt du dir in der ArcGIS-Oberfläche in der Hilfe oder der Commandline besorgen, ich hab grad leider keins hier rumliegen. Falls ich morgen ein bisschen Zeit hab, schreib ich mehr ;)

Grüssle Uwe
---------------------------------
have a lot of fun!
Iorlas
User
Beiträge: 8
Registriert: Mittwoch 6. Oktober 2010, 17:32

erwischt ;)

ja das wäre super...

hast Du den Kurs auch mal gemacht?!
Benutzeravatar
Käptn Haddock
User
Beiträge: 169
Registriert: Freitag 24. März 2006, 14:27

Iorlas hat geschrieben:erwischt ;)

ja das wäre super...

hast Du den Kurs auch mal gemacht?!
Jo, 2000-2002. Da durfte man sich noch über VB6 ärgern ;)


grüssle Uwe
---------------------------------
have a lot of fun!
Iorlas
User
Beiträge: 8
Registriert: Mittwoch 6. Oktober 2010, 17:32

ich mach den xpress kurs... und ärger ich über phyton und vba ;)
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Iorlas hat geschrieben:ich mach den xpress kurs... und ärger ich über phyton und vba ;)
:shock:

"phyton" :shock:

ärgern :shock:


Du machst da was falsch! :twisted:
the more they change the more they stay the same
Iorlas
User
Beiträge: 8
Registriert: Mittwoch 6. Oktober 2010, 17:32

Dav1d hat geschrieben:
Iorlas hat geschrieben:ich mach den xpress kurs... und ärger ich über phyton und vba ;)
:shock:

"phyton" :shock:

ärgern :shock:


Du machst da was falsch! :twisted:
naja, wenn man sich so 0 damit auskennt...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Iorlas hat geschrieben:naja, wenn man sich so 0 damit auskennt...
Das man nichtmal den Namen richtig schreibt ;)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Iorlas
User
Beiträge: 8
Registriert: Mittwoch 6. Oktober 2010, 17:32

ja, sorry, man wird sich ja wohl mal verschreiben dürfen... :lol:
Benutzeravatar
Käptn Haddock
User
Beiträge: 169
Registriert: Freitag 24. März 2006, 14:27

Hallo!

Eigentlich könntest du dir mal in der ArcGIS-Toolbox das Multiple Ring Buffer Script anschauen :wink:
Dass ist auch in Python geschrieben und etwas besser kommentiert und geschrieben als die generierte Vorlage.
Ansonsten hier mal eine kurze Version zur Einfügung an der richtigen Stelle:

Code: Alles auswählen

 # Local variables...
mein_pfad = 'H:\\tmp'
gew_20080715_Dissolve = "gew_20080715_Dissolve"
bufferlist =["50 Meters","200 Meters", "350 Meters"]

# Process: Buffer...
for Distance__value_or_field_ in bufferlist:
    Output_Feature_Class = os.path.join(mein_pfad, 'gew_20080715_Dissolve_Buffer_%s.shp'%(Distance__value_or_field_.replace(' ','_')) 
    gp.Buffer_analysis(gew_20080715_Dissolve, Output_Feature_Class, Distance__value_or_field_, "FULL", "ROUND", "NONE", "")
Die Zusatzaufgaben, Fehlersuche und das anpassen der Pfade überlass ich dir. Sollst ja auch was lernen, über Python muß man sich nicht ärgern ;)

CU Uwe
---------------------------------
have a lot of fun!
Iorlas
User
Beiträge: 8
Registriert: Mittwoch 6. Oktober 2010, 17:32

Vielen Dank!!!! 8)
Antworten