Daha çox

Həndəsə obyektləri ilə coğrafi işləmə zamanı xəta

Həndəsə obyektləri ilə coğrafi işləmə zamanı xəta


Bir çoxbucaqlı mərkəzlə bir xətt arasındakı məsafəni qaytarmaq üçün distanceTo () mehtod istifadə etməyə çalışıram, amma bu xətanı almağa davam edirəm: "AttributeError: 'Point' obyektinin 'distanceTo' atributu yoxdur"

Həndəsə obyektləri ilə işləmək mənə çox tanış deyil (və onlayn yardımın çox olduğunu hiss edirəm unfaydalı), amma x və y koordinatları olan, lakin z və ya m koordinatları olmayan bir nöqtə olaraq çap edildiyi üçün ən azından iş sahəmin mərkəzindən uğurla bir nöqtə yaradıram.

Əslində, bu günə qədər kodumun yeganə düzgün hissəsinin olduğuna əminəm. Xətt xüsusiyyət qatımda distanceTo () işlədə biləcəyimi, yoxsa əvvəlcə xətdən bir həndəsə obyekti yaratmalıyam və sonra aləti işə salmağa çalışacağımı bilmirəm.

Hər halda, aşağıda mənim kodum var.

sa = r "Z:  Workspace  GDB.gdb  StudyArea" nrthLine = r "Z:  Workspace  GDB.gdb  NorthLine" arcpy.MakeFeatureLayer_management (nrthLine, "nrthLine_lyr") arcpy.da. sa.SursCurs , ["[email protected]"])): #x, y = sıra [0] nöqtə = arcpy.Point (x, y) nöqtəsi koordinatlarının #qaytarılması (x, y)  dis = point.distanceTo ("nrthLine_lyr") AttributeError: 'Point' obyektinin 'distanceTo' atributu yoxdur

Beləliklə, qısacası, kimsə mənə bu xətanı niyə aldığımı və onu düzəltmək üçün nə etməli olduğumu deyə bilər və xətti xüsusiyyətimi distantTo () metoduna uğurla daxil edə bilərmi?


Bir arcpy.Point () obyekti ilə işləyirsiniz, bir arcpy.PointGeometry () obyektindən istifadə etməlisiniz.

Bunu sınayın:

sa = r "Z:  Workspace  GDB.gdb  StudyArea" nrthLine = r "Z:  Workspace  GDB.gdb  NorthLine" arcpy.MakeFeatureLayer_management (nrthLine, "nrthLine_lyr") arcpy.da. sa.SursCurs , ["[email protected]"])): nöqtə = satır [0] dis = point.distanceTo ("nrthLine_lyr")

Bu xəttin olub olmadığını bilmirəm:dis = point.distanceTo ("nrthLine_lyr")həm də qanunidir. MəncəməsafəTo ()Metod başqa bir Həndəsə obyekti tələb edir ...

Redaktə et:

Mən yalnız test etdim və distanceTo () əleyhinə axtarış aparmaq üçün tək bir Həndəsə obyekti tələb edir. Ayrıca, təhsil sahəniz bir çoxbucaqlıdırsa, onu mərkəz mərkəzinin PointGeometry () obyektinə belə asanlıqla əldə edə bilərsiniz:

arcpy.da.SearchCursor ilə (sa, ["[email protected]"]) satır olaraq :: satırdakı satır üçün: point = arcpy.PointGeometry (sıra [0]. mərkəz, satır [0]. məkan İstinadı)

"NrthLine_lyr" də neçə xüsusiyyət var? Çox deyilsə, iş sahənizin çoxbucaqlılarının hər bir mərkəz hissəsinə ən yaxın xüsusiyyəti tapmaq üçün içəri döngə edə bilərsiniz.

Düzəliş 2:

"NrthLine_lyr" in həndəsə obyektinə çatması üçün Axtarış Kursorundan istifadə etməlisiniz. Yalnız bir xüsusiyyət olduğundan, bu işləyəcək:

line_geom = [r [0] r üçün arcpy.da.SearchCursor ("nrthLine_lyr")] [0]

Beləliklə, bütün iş sahəsinin mərkəzlərindən bir xətt xüsusiyyətinə qədər olan məsafəni tapmaq üçün tam kod belə bir şeyə bənzəyə bilər (nrthLine üçün xüsusiyyət qatına ehtiyac yoxdur):

import arcpy sa = r "Z:  Workspace  GDB.gdb  StudyArea" nrthLine = r "Z:  Workspace  GDB.gdb  NorthLine" # buradan bir xüsusiyyət qatına ehtiyac yoxdur # tək xətti geometriya obyekti alın line_geom = arcpy.da.SearchCursor -da r üçün [r [0] (nrthLine, ['[email protected]'])] [0] # arcpy.da.SearchCursor (sa, ["[email protected]ə uyğunlaşmaq üçün bütün tədqiqat mərkəzinin mərkəzlərindən məsafə tapın) "]) satır olaraq: satırdakı satır üçün: point = arcpy.PointGeometry (sıra [0] .centroid, sıra [0]. məkan İstinadı) dis = point.distanceTo (line_geom) # işlər çap et dis

@crmackey Məni doğru yola yönəltdiyiniz üçün təşəkkürlər. Sonda etdiyim iş bu oldu və işlədi. Deyəsən, əldən verdiyim məqam üçün təklif etdiyiniz aralıq addım idi. Xəttdən istifadə etməyi təklif etməyiniz mənə hər cür səhvlər atdı. Bir az daha araşdırma apardım və nəhayət, xətt üçün eyni şeyi etməli olduğumu başa düşdüm: koordinatları çəkin> nöqtələr düzəldin> sıraya qoyun> bir polyline düzəldin

arcpy.da.SearchCursor (sa, ["[email protected]"]) üçün sıra üçün array = arcpy.Array () = arcpy.da.SearchCursordakı satır üçün arcpy.PointGeometry (nöqtə) (nrthLine, ["[email protected]"]): sıra hissəsi üçün [0]: pnt üçün qismən: x = pnt.X y = pnt.Y nöqtəsi = arcpy.Point (x, y) array.add (point) newNrthLine = arcpy.Polyline (array) northDist = centroid.distanceTo (southExtNorthLine) məsafə = 552876.3574719524

Videoya baxın: Perimetr və sahə