Seite 1 von 1

spalten berechnungen

Verfasst: Mittwoch 16. Januar 2013, 19:01
von rfthwe
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!

Re: spalten berechnungen

Verfasst: Mittwoch 16. Januar 2013, 19:15
von 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.

Re: spalten berechnungen

Verfasst: Mittwoch 16. Januar 2013, 19:34
von rfthwe
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 ;)

Re: spalten berechnungen

Verfasst: Mittwoch 16. Januar 2013, 20:34
von 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‽

Re: spalten berechnungen

Verfasst: Donnerstag 17. Januar 2013, 18:48
von rfthwe
danke für die Ideen. hab's heut morgen gelöst.