Python-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
tomtom
User
Beiträge: 1
Registriert: Freitag 1. März 2013, 16:51

Hallo Leute,

ich bin neu hier im Python-Forum und bräuchte Hilfe von Python Profis.
Ich bin gerade am Anfang meiner Python-Lernkurve und habe mit folgender Aufgabenstellung so meine Probleme:

Ich soll einen Code schreiben der mir aus einer Punkt-Featue-Class die x/y Koordinaten Punkte mit einer einzugebenden Strecke in X-und Y-Richtung verschiebt. Dies soll interaktiv z.B. mit 2 "raw_input()" Eingaben oder als Script-Tool erfolgen.
Es reicht dabei aus, wenn nur die Punktgeometrien gespeichert werden–
zusätzliche Attributfelder müssen nicht im neuen Datensatz auftauchen.

Die verschobenen Punkte sollen in einem neuen Datensatz gespeichert werden.

Meine erster Code sieht so aus (funktioniert aber nicht): :K

Code: Alles auswählen

import arcpy
arcpy.env.overwriteOutput = 1
arcpy.env.workspace = "C:\\testdatenbank.mdb"
arcpy.CreateFeatureclass_management(arcpy.env.workspace, "mod_point", "POINT")
Move_X = raw_input("X Versatz angeben: ")
Move_Y = raw_input("Y Versatz angeben: ")
cur = arcpy.InsertCursor("mod_point")
pnt = arcpy.Point()
cur2 = arcpy.SearchCursor("stuetzpunkte")
for row in cur2:
    pnt = arcpy.Point(row.getValue(rows).getPart(0).X + Move_X, row.getValue(rows).getPart(0).Y + Move_Y)
    feat = cur.newRow()
    cur.insertRow(feat)
    print "Berechnung beendet"
del cur
del cur2
del row
Danke für eure Hilfe!
Zuletzt geändert von Anonymous am Sonntag 3. März 2013, 14:45, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@tomtom: „Funktioniert aber nicht” ist keine ausreichende Fehlerbeschreibung. Da muss man als helfender selber suchen und teilweise auch raten was nicht funktioniert, wie es nicht funktioniert, und woran es vielleicht liegen könnte.

Wenn es eine Fehlermeldung gibt, wäre es toll die zu wissen, inklusive Traceback. Ansonsten wäre eine Beschreibung was erwartet wird, und was stattdessen passiert, hilfreich.

Ein ganz sicherer und zwei potentielle Fehler fallen ins Auge: Der Name `rows` wird verwendet, aber nirgends definiert.

Zweitens: Du versuchst `Move_X` und `Move_Y` zu etwas zu addieren was wie Koordinaten aussieht. Die beiden Namen sind aber an Zeichenketten gebunden und nicht an Zahlen. Da müsstest Du die Benutzereingabe noch umwandeln.

Das dritte Problem ist das mit `pnt` nichts gemacht wird, also wird das wohl auch nicht auf magische Weise in der Ergebnistabelle auftauchen.

Ansonsten: Die erste Zuweisung an `pnt` ist sinnlos, weil auch der Wert im weiteren Verlauf nicht verwendet wird.

Die ganzen Abkürzungen sind unschön und Namen durchnummerieren noch unschöner. Namen sollten dem Leser verraten wofür der Wert dahinter steht ohne das der erst rätselraten muss. `cursor`, `insert_cursor`, oder `point` sind doch viel klarer und es ist ja nicht so der Speicher für Quelltext knapp wäre oder so. :-)

Quelltextwiederholungen sollte man vermeiden, insbesondere wenn sie tatsächlich identisch sind. Der Ausdruck ``row.getValue(rows).getPart(0)`` wird ja wohl beide male das gleiche Ergebnis haben.

Die ``del``\s sind überflüssig oder deuten auf eine ganz schlechte API-Entscheidung bei `arcpy` hin. Falls dem so sein sollte, würde ich aber den Code eher in eine Funktion stecken, anstelle von der Verwendung von ``del``\s. Beziehungsweise falls diese Objekte eine explizite „Aufräummethode” besitzen, sollte man diese stattdessen aufrufen. Gerne auch in einem ``finally``-Block.
Antworten