Mehr

Versuch, eine separate Tabelle mit SearchCursor zu aktualisieren

Versuch, eine separate Tabelle mit SearchCursor zu aktualisieren


Erlernen von Python zur Verwendung in ArcGis 10.2.

Ich möchte einen Wert aus einem bestimmten Feld aus einer Attributtabelle in eine andere Attributtabelle abrufen. IN PT1, If ​​Meas of Object1 > Meas of Object2, dann in SPL1 End = Punkt_ID von Object1 und Start = Punkt_ID von Object2

So was:

Also habe ich dieses Bit (basierend auf bestehenden Skripten) geschrieben, in dem einzelne Segmente verwendet werden, um Punkte auszuwählen, um die Attributtabelle Split_Lines zu aktualisieren

## Feldende mit maximalem Wert aktualisieren OIDField = arcpy.Describe(SplitLines).OIDFieldName Lines = arcpy.UpdateCursor(SplitLines) für Line in Lines: LineId = OIDField Where_clause = '"' + OIDField + '"=' +str(LineId ) arcpy.MakeFeatureLayer_management (SplitLines, "Current_Line", Where_clause) arcpy.SelectLayerByLocation_management ("Points_Lyr","WITHIN_A_DISTANCE","Current_Line", "0.02 METERS") pcur = arcpy.SearchCursor("Points_Lyrn") prow = pcur. ) p1val = prow.getValue("MEAS") p1HH = prow.getValue("HH") p1ID = prow.getValue("Punkt_ID") prow = pcur.next() p2val = prow.getValue("MEAS") p2HH = prow.getValue("HH") p2ID = prow.getValue("Punkt_ID") if p2val > p1val: Line.setValue("Ende", p2ID) Line.setValue("Start", p1ID) Line.setValue("HH_Stromab" , p1HH) Line.setValue("HH_Stromauf", p2HH) sonst: Line.setValue("Ende", p1ID) Line.setValue("Start", p2ID) Line.setValue("HH_Stromab", p2HH) Line.setValue(" HH_Stromauf", p1HH) Lines.updateRow(Line) del prow del pcur

Ich bin fast am Ziel, nur der Suchcursor auf den ausgewählten Punkten scheint sich nicht bei jeder neuen Auswahl zu aktualisieren und den Wert von Punkt_ID =1 und Punkt_ID =2 zu kopieren.

So was:

Wo ist der Fehler?


Ich poste den Code, der Ihre Anforderung erfüllen sollte (basierend auf meinem Verständnis Ihrer Anforderung).

# erforderlicher Import Import arcpy # Pfad der Points_lyr-Feature-Class/-Tabelle (Punkt) point_fc = r'D:PythonScratchDatabaseGeodatabase.gdbPoint' # verwandte Felder #erstes Feld 'MEAS' zum Vergleichen und zweites Feld 'Punkt_ID' um # zuzuweisen, da Sie auch andere Felder verwenden (in Ihrem Code zu sehen). Sie können diese hinzufügen wie # point_flds = ['MEAS', 'Punkt_ID', 'HH'] # und sie als # line_flds = ['[email protected]','Start', 'End', 'HH_Stromab', 'HH_Stromauf' zuordnen. ] point_flds = ['MEAS', 'Punkt_ID', 'HH'] # Pfad der split_Lines-Feature-Class (Line) line_fc = r'D:PythonScratchDatabaseGeodatabase.gdbLine' # Zeilenfelder #erstes zu erhaltendes Feld OBJECTID des aktuellen Liniensegments, # zweites Feld 'Start' zum Zuweisen der Start-ID (Punkt_ID) und # drittes Feld 'End' zum Zuweisen der End-ID (Punkt_ID) # Sie können hinzufügen line_flds = ['[email protected]','Start', ' End', 'HH_Stromab', 'HH_Stromauf'] # für Suche nach Standort zum Finden und Auswählen von point = arcpy.MakeFeatureLayer_management(point_fc) # aktualisieren Sie die Werte der Line-Feature-Class mit arcpy.da.UpdateCursor(line_fc, line_flds) als update_cursor: for row in update_cursor: # create where Klausel where = '"OBJECTID"={}'.format(row[0]) # Nimm ein Segment nach dem anderen line = arcpy.MakeFeatureLayer_management(line_fc, where_clause=where) # Apply Selection on Point-Feature-Class # Ändern Sie die Kriterien acc passend zu Ihrem Problem in Distance selection = arcpy.SelectLayerByLocation_management(point, 'WITHIN_A_DISTANCE', line, "0.02 METERS", "NEW_SELECTION") comp_list = [] with arcpy.da.SearchCursor(selection, point_flds) als Cursor: for search_row im Cursor: # füge alle Punkte hinzu, die nach der Auswahl nach Ort kommen comp_list.append(search_row) # sortiere nach dem 'MEAS'-Wert sort = sorted(comp_list, key= lambda x: x[0]) # weise das kleinste 'MEAS . zu ' Wert 'Punkt_ID' der 'Start'-Zeile[1] = sort[0][1] # den größten 'MEAS'-Wert 'Punkt_ID' der 'End'-Zeile zuweisen[2] = sort[-1][1] # zuweisen 'HH' Wert zu 'HH_Stromab' für kleinste 'MEAS' Zeile[3] = sort[0][2] # 'HH' Wert zu 'HH_Stromauf' für größte 'MEAS' Zeile zuordnen[4] = sort[-1] [2] # aktualisiere die Zeile Zeile update_cursor.updateRow(row)

Schau das Video: Co Se Stane, Když Nosorožci Neodstraníme Rohy?