Daha çox

Nöqtələr massivindən istifadə edərək çoxbucaqlı həndəsənin yaradılması


Buradan ixrac etdiyim bir OpenStreetMap gpx sənədini təhlil edirəm. Verilənləri arcgis geodatabase xüsusiyyət siniflərinə yerləşdirməyə çalışıram. Gpx-dəki bəzi xüsusiyyətlər nöqtələrdir (wpt olaraq qeyd olunur), digərləri isə çoxbucaqlıdır (trkpt-dən ibarət trk kimi qeyd olunur). Aşağıdakı ssenaridən istifadə edərək nöqtələri, həndəsəsini, istədiyim adları və atributları kopyalamaqda uğurluyam. Lakin bir şəkildə həndəsəni yaratmaq çoxbucaqlılar üçün işləmir, baxmayaraq ki, atributlar problemsiz kopyalanır (atributlar üçün kodun bitini aşağıda göstərilən nümunədən kənarda qoydum). Məni çoxbucaqlıları əksinə sifariş edilmiş nöqtələrlə düzəltməyə çalışmağıma təşviq edən bu sualı tapdım. Lakin bu da işə yaramadı. Harada səhv olduğunu yoxlamaq üçün kifayət qədər bəzi yazılı ifadələr hazırladım, aşağıda çapa baxın. Həm də çap deyilpoly.areanəticələnir0.0, çappoly.trueCentroidnəticələnirYoxdurvə s. Beləliklə çoxbucaqlılıq sadəcə serialdan yaranmır. Mənə elə gəlir kipoly = arcpy.Polygon (ar)sadəcə işləmir.

GPX nümunəsi:

 Ian Brown Motors adı = Ian Brown Motors mağazası = avtomobil_təmir   Açar Mağaza Brodie's Minimarket bina = bəli adı = Açar Mağaza Brodie's Minimarket açılış saatı = 08: 00-18: 00 dükan = supermarket mənbəyi = sorğu       

Ssenari:

xml.etree import ElementTree kimi Et import os idxal arcpy.env.overwriteOutput = 1 wgs = arcpy.SpatialReference (r'C:  Program Files  ArcGIS  Desktop10.0  Coordinate 'r'Systems  Coğrafi Koordinat Sistemləri  Dünya  WGS 'r'1984.prj') gdb = PATH_TO_GDB f = PATH_TO_GPX all_records = [] p = Et.parse (f) root = p.getroot () arcpy.CreateFeatureclass_management (gdb, 'shops_pt', 'POINT', spat = wgs) arcpy.CreateFeatureclass_management (gdb, 'shops_pl', 'POLYGON', spatial_reference = wgs) shops_pt = os.path.join (gdb, 'shops_pt') shops_pl = os.path.join (gdb, 'shops_pl') üçün fc [shops_pt, shops_pl] içində: arcpy.AddField_management (fc, 'name', 'TEXT', 255) arcpy.AddField_management (fc, 'type', 'TEXT', 50) arcpy.AddField_management (fc, 'açılış_ saatları', 'TEXT', 255) icEpt = arcpy.InsertCursor (shops_pt) ic_pl = arcpy.InsertCursor (shop_pl) mainElement for root: if mainElement.tag == 'metadata': mainElement.tag == 'wpt': r = ic_pt.newRow () y = float (mainElement.attrib ['lat']) x = float (mainElement.attrib ['lon']) p = arcpy.Point (x, y) r.shape = p ic_pt.insertRow (r) elif mainElement.tag == 'trk': r = ic_pl.newRow () mainElementdəki subElement üçün: subElement.tag == 'trkseg': ar = arcpy.Array () altElementdəki trkpt üçün: y = float (trkpt.attrib ['lat']) x = float (trkpt.attrib ['lon ']) p = arcpy.Point (x, y) print p ar.add (p)' array length ', len (ar) print' ar [0] ', ar.getObject (0),' ar [- 1] ', ar.getObject (len (ar) -1) poly = arcpy.Polygon (ar) r.shape = poly print' poly.centroid try 1 ', poly.centroid poly.centroid Yoxdursa: ar2 = arcpy .Array () p in ar: ar2.insert (0, p) p in ar2: print p poly = arcpy.Polygon (ar2) print 'poly.centroid try 2', poly.centroid ic_pl.insertRow (r)

1 poliqon üçün çap nümunəsi:

-4.7134965 56.4387108 NaN NaN -4.7135666 56.4385955 NaN NaN -4.7133971 56.438564 NaN NaN -4.7133269 56.4386793 NaN NaN -4.7134965 56.4387108 NaN NaN sıra uzunluğu 5 ar [0] -4.7134965 56.438 56.438 cəhd 1 yox

Həll: @Vince-in təklif etdiyi kimi aşağıda şərhlərə, qoyarkənArraybirÇoxbucaqlı, məkan referansını açıq şəkildə elan edin, belə olarpoly = arcpy.Polygon (ar, wgs).



Düşünürəm ki, bu suala dair şərhləri İcma Vikisinə verəcəyim bir cavab verməyə dəyər:

Formaya məkan istinadını tətbiq edin - poly = arcpy.Polygon (ar, wgs) - Vince Jun 25 at 12:08


Bəli, Vince dediyi kimi edərdim və bir məkan arayışı əlavə edərdim, əks halda çoxbucağın harada olacağı barədə heç bir fikri yoxdur. Ayrıca, bir .prj sənədinə istinad etmək əvəzinə tanınmış bir ID (WKID) keçməklə wgs qura bilərsiniz: wgs = arcpy.SpatialReference (4326) - crmackey 25 iyun saat 12:17


Varsayılan məkan referansının, 0,001 (1mm) bir təpə qətnaməsi var, bu da zirvələri çökdürür və mərkəzsizliyi təyin olunmur. - Vince 25 iyun saat 12: 22-də


@crmackey bu şəkildə istifadə etsəm mənə bir səhv verir, ancaq bu səhifənin altındakı şəkildə etsəm yaxşı işləyir: help.arcgis.com/en/arcgisdesktop/10.0/help/index.html# //… - Menno 25 iyun saat 12:29


Təklifimin yalnız 10.1 və sonrakı versiyalar üçün işlədiyini qeyd etməliyəm. - crmackey 25 iyun saat 12:37


Videoya baxın: Test toplusu. Çoxbucaqlılar. Dördbucaqlılar. Qabarıq çixbucaqlı. Düzgün çoxbucaqlı. (Oktyabr 2021).