Viac

Ako získať zadané súradnice bodu lomenej čiary

Ako získať zadané súradnice bodu lomenej čiary


lines_cursor = arcpy.da.UpdateCursor (lines, ["From_id", "To_id", "SHAPE @"]) for lines_row in lines_cursor: from_id = lines_row [0] to_id = lines_row [1] if from_id in points_dict.keys () : print from_id pre bod v lines_row [2] .getPart (0): print point.X, point.Y

Týmto sa vráti súradnicové pole všetkých bodových objektov, ale chcem iba získať súradnice prvého bodu (alebo druhého, tretieho atď.) A dať mu novú hodnotu.

Ako získam túto prácu?


Pokiaľ chápem, na čo sa pýtate, táto otázka je takmer úplne rovnaká ako táto otázka v GIS SE.

To môže byť trochu zložité s krivkami, pretože hodnoty x, y a z každého vrcholu nie sú okamžite prístupné cez pole tvaru. Budete musieť pristupovať k objektu geometrie krivky (pole Tvar) pomocouSOM @a podrobnejšie rozbaliť, aby ste sa dostali ku každému bodu v geometrii krivky. Tu jepytónaoblúkovitýúryvok kódu pre prístup k hodnotám x, y a z vrcholov každého riadku v triede prvkov krivky.

shift_value = 2 s arcpy.da.UpdateCursor ("Breaklines", ['SHAPE @']) ako u_cur: pre riadok v u_cur: geometry = riadok [0] pts = geometry.getPart (0) #get geometria polyline pt_array = arcpy .Array () #create array to house new points for pt in pts: pt.Z + = shift_value #shift x, y, or z value (pt.X, pt.Y, pt.Z, to shift x, y, respektíve hodnoty z) pt_array.add (pt) #add ukážte na pole new_polyline_geometry = arcpy.Polyline (pt_array, None, True) # dôležité je povoliť hodnotu z tým, že máte tretí parameter nastavený na True, ak upravujete z- riadok s hodnotou [0] = nový_polyline_geometria #set riadok [0], ktorý je SHAPE @ (objekt geometrie) u_cur.updateRow (riadok)

Stručne:

  • slučka cez vrcholy geometrie krivky
  • aktualizovať každú hodnotu x, y a / alebo z geometrie bodu
  • pridať aktualizovaný bod do poľa
  • po úprave všetkých bodov v čiare:
    • vytvorte novú geometriu lomenej čiary s bodovým poľom, ak posúvate hodnotu z, nezabudnite ju nastaviť na z-enabled
    • potom aktualizujte starú geometriu kriviek o novovytvorenú geometriu

Momentálne to bude fungovať iba na prvej časti geometrie, viďpts = geom.getPart (0), dá sa však ľahko upraviť, aby fungoval na linke, ak má viac častí. Aktualizáciou kódu a integráciou ďalšej slučky a použitím.partCountzPolylineobjekt.

Ďalšou metódou navrhnutou spoločnosťou @DWynne v súvislosti s vyššie uvedenou otázkou GIS SE je použitieexplode_pointspri vytváraní súboruUpdateCursor. To eliminuje potrebu opakovať všetky body každej krivky.


Myslím, že niečo také môžete urobiť pre každý riadok vo vašom kurzore:

arr = arcpy.Array () pre bod v lines_row [2] .getPart (0): tlač point.X, point.Y arr.add (point) polyLine = arcpy.Polyline (arr) row.setValue ("SHP", polyLine) cursor.updateRow (riadok)

alebo alternatívne použiťriadok. tvar = krivka.