spalten berechnungen

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
rfthwe
User
Beiträge: 5
Registriert: Mittwoch 16. Januar 2013, 18:44

hallo,

ich möchte mit einem updatecursor mit 2vorhandenen spalten (aus einer attribut-tabelle einer shapedatei) eine zuvor neu angelegte spalte berechnen und mit den werten füllen.
spalte1: länge in meter
spalte2: geschwindigkeit in km/h
neue spalte: minuten (sollen berechnet werden und in zeilen der spalte eingetragen werden)

meine idee war folgende (funktioniert aber nicht):

Code: Alles auswählen

import arcpy
    
def update_cursor(path):
    uc_rows = arcpy.UpdateCursor(path)
    for uc_row in uc_rows:
        uc_row.Minuten = uc_row.Shape_Leng/1000*uc_row.geschw/60
        ODER
        uc_row.Minuten = "!Shape_Leng! /1000 * !geschw! /60"
        uc_rows.updateRow(uc_row) 
    del uc_row 
    del uc_rows

if __name__ == '__main__':
    
    path= r"pathxyz"
    #Angaben zum Hinzufuegen des neuen Feldes
    field_name = "Minuten"
    field_type = "DOUBLE"

    #Hinzufuegen der Spalte Flaeche
    arcpy.AddField_management(path,field_name,field_type)
    
    #updatecursor
    update_cursor(path) 

über schnelle und hilfreiche ideen wäre ich sehr dankbar!
BlackJack

@rfthwe: Was bedeutet „funktioniert nicht” denn genau? Gibt es eine Fehlermeldung? Wenn ja, welche? Stimmt das Ergebnis nicht? Wenn ja inwiefern weicht es vom erwarteten Wert ab?

Nicht zum Problem gehörend, aber die beiden ``del``-Anweisungen sind unnötig.

Abkürzungen sollte man vermeiden wenn sie nicht allgemein bekannt sind. Was soll der `uc_*`-Prefix bei den lokalen Namen von `update_cursor()` bedeuten? Warum heissen die Spalten nicht `Shape_Laenge` und `geschwindigkeit`? Ist ja nicht so, dass Speicher so knapp ist, dass man sich keine verständlichen Namen leisten kann.
rfthwe
User
Beiträge: 5
Registriert: Mittwoch 16. Januar 2013, 18:44

erstmal bin ich Einsteiger bei dieser Programmiersprache. So ganz den Durchblick habe ich nicht immer. Aber ich weiß zumindest was ich erreichen will. hatte auch das Forum nach cursor durchsucht und nichts gefunden.

funktioniert nicht heisst, dass es die spalte nicht berechnet/aktualisiert. Zweck der ganzen Geschichte ist, die Minuten, die man für jedes Liniensegment braucht, zu berechnen, was anhand der Länge und der Geschwindigkeit erfolgt.

Die Fehlermeldung habe ich gerade nicht parrat, da ich es nicht auf diesmen Rechner programmiere. Ich weiß nur noch, dass er die neue Spalte "Minuten" anfügt und beim updatecursor abbricht. Auf jeden Fall hat er keine meiner beiden ideen angenommen also:

Code: Alles auswählen

        uc_row.Minuten = uc_row.Shape_Leng/1000*uc_row.geschw/60
    ODER
        uc_row.Minuten = "!Shape_Leng! /1000 * !geschw! /60"

habt ihr eine andere Idee oder seht einen Fehler?

Zu den Spaltennamen: ist ja eigentlich egal, wie die heißen. ja vllt. unglücklich gewählt.

uc bedeutdet nur updatecursor ;)
BlackJack

@rfthwe: Wenn die Spaltennamen egal wären hätte man sie auch `ohc9choo` und `ahniex0s` nennen können. Das macht man aber aus gutem Grund nicht, denn Namen sollen dem Leser vermitteln wofür der dahinter stehende Wert von der Bedeutung her steht. Und das geht mit aussagekräftigen und nicht willkürlich abgekürzten Namen nun mal besser.

Was ist der Mehrwert von dem `uc_*`? Man versteht den Quelltext auch ohne den Zusatz. Umgekehrt habe ich mich halt gefragt was mir das sagen soll und ob es wichtig ist.

Fehlermeldungen verraten meistens was falsch ist, dass heisst man kann daran sehen was man anders machen muss. Das ist irgendwie ungünstig dass Du die nicht weisst. Alle die kein ArgGIS haben/kennen, und das dürfte wohl die Mehrheit der Python-Programmierer sein, können jetzt nur raten was an Deinem Programm falsch ist. Mal eben ausprobieren um das Problem nachzustellen kann man es ja nicht ohne ArgGIS. :-(

Grundsätzlich scheint die erste Variante richtig zu sein laut ArcGIS-Dokumentation: http://help.arcgis.com/en/arcgisdesktop ... 003m000000

Die haben da auch dieses gruselige ``del`` mit einem irreführenden Kommentar. :evil:

Beim Hinzufügen der Spalte steht in der Dokumentation in den Quelltextbeispielen allerdings noch Code der das Environment setzt. Vielleicht fehlt das ja‽
rfthwe
User
Beiträge: 5
Registriert: Mittwoch 16. Januar 2013, 18:44

danke für die Ideen. hab's heut morgen gelöst.
Antworten