Daha çox

Bir Polyline göstərilən nöqtə koordinatlarını necə əldə etmək olar

Bir Polyline göstərilən nöqtə koordinatlarını necə əldə etmək olar


lines_cursor = arcpy.da.UpdateCursor (satırlar, ["From_id", "To_id", "SHAPE @"]) lines_row in lines_cursor: from_id = lines_row [0] to_id = lines_row [1] if from_id in points_dict.keys () : line_rowdakı nöqtə üçün_iddən çap et [2] .getPart (0): çap nöqtəsi.X, point.Y

Bu, bütün nöqtə obyektlərinin koordinatlar massivini qaytaracaq, amma yalnız ilk nöqtə koordinatlarını (və ya ikinci, üçüncü və s.) Almaq və yeni bir dəyər vermək istəyirəm.

Bu işi necə əldə edə bilərəm?


Bu sualı verdiyinizi başa düşsəm, bu GIS SE sualı ilə demək olar ki, eynidir.

Hər bir təpənin x, y və z-dəyərlərinə forma sahəsi ilə dərhal daxil olmaq mümkün olmadığından, bu polilinlərlə bir az çətin ola bilər. İlə çoxsaylı həndəsə obyektinə (forma sahəsi) daxil olmalısınızŞƏKİL @və çox xəttli həndəsədəki hər nöqtəyə çatmaq üçün daha da aşağıya doğru sürün. Budur birpitonarcpybir çoxsaylı xüsusiyyət sinifindəki hər sətrin zirvələrinin x, y və z-dəyərlərinə necə daxil olacağına dair kod parçası.

shift_value = 2 arcpy.da.UpdateCursor ilə ("Breaklines", ['SHAPE @']) u_cur olaraq: u_curdakı sıra üçün: geometry = row [0] pts = geometry.getPart (0) #get polyline geometry pt_array = arcpy .Array () # pt-də pt üçün yeni nöqtələr yerləşdirmək üçün bir sıra yaradın: pt.Z + = shift_value # shift x, y və ya z dəyəri (pt.X, pt.Y, pt.Z, x, y, və z dəyərləri müvafiq olaraq) pt_array.add (pt) #add massivinə nöqtə new_polyline_geometry = arcpy.Polyline (pt_array, None, True) # vacibdir ki, z parametrini düzəldirsinizsə, üçüncü parametri True olaraq təyin edərək z dəyərini aktivləşdirin. dəyər satırı [0] = yeni_polyline_geometry #set sıra [0] olan SHAPE @ (həndəsə obyekti) u_cur.updateRow (sıra)

Qoz qabığında:

  • polil xətt həndəsəsinin zirvələri üzərində ilmə
  • nöqtə həndəsəsinin hər bir x, y və / və ya z dəyərini yeniləyin
  • yenilənmiş nöqtəni bir sıra əlavə edin
  • bir dəfə polilindəki bütün nöqtələr düzəldildikdə:
    • nöqtə massivi ilə yeni bir çox xəttli həndəsə yaradın, z dəyərini dəyişdirsəniz z-effektiv olaraq təyin olunduğundan əmin olun
    • sonra köhnə polyline həndəsəsini yeni yaradılan həndəsə ilə yeniləyin

Hal-hazırda bu, yalnız həndəsənin birinci hissəsində işləyəcək, baxpts = geom.getPart (0)Bununla birlikdə, birdən çox hissədən ibarətdirsə, xətt üzərində işləmək üçün asanlıqla düzəldilə bilər. Kodu yeniləmək və başqa bir döngəni inteqrasiya etmək və.partCountninPolylineobyekt.

Yuxarıda göstərilən GIS SE sualında @DWynne tərəfindən təklif olunan əlavə bir metod, istifadə etməkdirpartlayış_puanyaratarkən seçimUpdateCursor. Bu, hər bir çox xəttin bütün nöqtələrinin üstündən keçmə ehtiyacını aradan qaldıracaqdır.


İmlecinizdəki hər sıra üçün belə bir şey edə biləcəyinizi düşünürəm:

arr = arcpy.Array () lines_rowdakı nöqtə üçün [2] .getPart (0): print point.X, point.Y arr.add (point) polyLine = arcpy.Polyline (arr) row.setValue ("SHP", polyLine) cursor.updateRow (sıra)

və ya alternativ olaraq istifadə edinsıra.şəkil = çox xətt.