Daha çox

ArcGIS 10.0/arcpy: Daxili və xarici üzük nöqtəsi massivlərindən çoxbucaqlı həndəsə necə yaradılır?


Əlbəttə ki, hər biri qapalı bir xalqa halqası olan, biri xarici üzük, digəri daxili bir halqa üçün olan, ikincisi əlbəttə saat əqrəbinin əksinə işləyən iki serialım var. Çoxbucaqlı qurmaq üçün arcpy.Polygon () zavod funksiyasından istifadə edirəm. Sualım: nöqtələri Polygon () a necə daxil edə bilərəm?

Sənədlər ümumi sintaksisi çoxbucaqlı olaraq verir (girişlər, məkan istinadları, has_Z, has_M). Girişlər hissəsi eskizdir. Girişlər guya nöqtə obyektləri və ya massivlər ola bilər. Mənim problemim çörək çuxurlu çoxbucaqlı olmağımdır. Giriş olaraq tək nöqtəli bir sıra ilə sadə bir çoxbucaq qura bilərəm ... heç bir problem yoxdur; lakin, hansı şəkildə əlavə edim iki bal dəstləri? "Oxuyan Həndəsələr" kömək səhifəsində hissələrin (bu halda halqaların) sıfır nöqtəli bir cisimlə ayrıldığı deyilir. Delikli çoxbucaqlılar üçün ilk növbədə xarici halqa gedir. Beləliklə, konteyner sırasına xarici sıra sonra daxili dizini əlavə etməyə çalışdım. Bu işə yaramadı: deşik yoxdu. Eyni şeyi aralarında sıfır nöqtəsi olan bir obyektlə sınadım. Sevinc yoxdur: eyni nəticə. Sonra hər iki dizini giriş olaraq Python siyahısına salmağa çalışdım. Bu bir səhv atdı. Kömək sənədlərindəki nümunə skriptləri heç vaxt məşğul olmur yazı deşikli çoxbucaqlılar. Beləliklə, girişlər üçün hansı formatdan istifadə edəcəyimi bilmirəm. Bu mövzuda hər hansı bir fikrə sahib olan varmı? Yardımı mütləq qiymətləndirərdim. Hamıya təşəkkürlər.


Donut çoxbucaqlarının yaradılması bu linkdə bir python kodu nümunəsi ilə müzakirə edildi (ArcMap -də istifadə üçün). Xarici və daxili halqa arasındakı koordinatların siyahısı arasında boş bir nöqtə əlavə etməkdir. Diqqət edin, xarici üzük nöqtələri saat yönündədir və daxili üzük nöqtələri saat yönünün əksinədir.


Celticflute kodunu göndərmədiyindən yenidən anlamalı oldum.

Nəhayət iş nümunəsi alındı. Bu olduqca yaxşı işlədiyi görünür.

Əsas odur ki, çoxbucaqlı hissələri və delikləri fərqli yazmayın!

Bunun əvəzinə, üzüklərdən ibarət olan hissələri təmsil edən yuvalı dizilərdən bir çoxbucaq qurursunuz. Həndəsəni bir forma sahəsinə yazaraq və ya bir alətdə istifadə edərək yazdığınız zaman, pərdə arxasında qövs cisimləri hər bir çoxbucaqlı hissədəki halqaları planarlaşdırır və nəyin çuxur olduğunu və nəyin olmadığını müəyyən edir. Və koordinatları saat yönünde sıralayır və xys'i coğrafi verilənlər bazası xüsusiyyət sinifinin koordinat sisteminə və sahəsinə yandırır.

# # Bir çoxbucaqlı xüsusiyyət sinfi yaz # arcpy -dən idxal arcpy idxal env def makepoly (coord_list, SR = None): "" "Python koordinatlarının siyahısını ArcPy çoxbucaqlı xüsusiyyətinə çevirin Müəllif: Curtis Price, USGS, [email protected] .gov Nümunələri, Desktop Help 10.x -dən: Geometriyaların oxunması Feat0 = [[[3.0, 8.0], [1.0, 8.0], [2.0, 10.0], [3.0, 8.0]]] Feat1 = [[[5.0, 3.0 ], [3.0, 3.0], [3.0, 5.0], [5.0, 3.0]], [[7.0, 5.0], [5.0, 5.0], [5.0, 7.0], [7.0, 5.0]],] bu xüsusiyyətin daxili üzüyü var (pişi) Feat2 = [[[9.0, 11.0], [9.0, 8.0], [6.0, 8.0], [6.0, 11.0], [9.0, 11.0], Yoxdur, [7.0, 10.0], [7.0, 9.0], [8.0, 9.0], [8.0, 10.0], [7.0, 10.0]]] "" "hissələri = arcpy.Array () üzüklər = arcpy.Array () üzük = arcpy.Array () üçün coord_listdəki hissə: pnt üçün qismən: əgər pnt: ring.add (arcpy.Point (pnt [0], pnt [1])) başqa: # boş nöqtə - yeni bir üzük halqalarının başlanğıcındayıq.add ( ring) ring.removeAll () # son halqamız var, onu əlavə edin üzüklər əlavə edin. üzük tr (üzüklər) == 1: üzüklər = üzüklər.getObject (0) hissələr parts.getObject (0) return arcpy.Polygon (parts, SR) # test data from: # Desktop Help 10.0: Reading Geometries Feat0 = [[[3.0, 8.0], [1.0, 8.0], [2.0, 10.0], [ 3.0, 8.0]]] Feat1 = [[[5.0, 3.0], [3.0, 3.0], [3.0, 5.0], [5.0, 3.0]], [[7.0, 5.0], [5.0, 5.0], [5.0 , 7.0], [7.0, 5.0]],] # bu son xüsusiyyətin daxili üzüyü (pişi) var Feat2 = [[[9.0, 11.0], [9.0, 8.0], [6.0, 8.0], [6.0, 11.0] , [9.0, 11.0], Yox, [7.0, 10.0], [7.0, 9.0], [8.0, 9.0], [8.0, 10.0], [7.0, 10.0]]] # test kodu # boş xüsusiyyət sinifini yaradır # real məlumatlarla, SR # üçün SR kodu, adı və ya verilənlər bazası verin # SR = arcpy.SpatialReference (4326) SR = Heç biri env.workspace = env.scratchGDB Data = arcpy.CreateScratchName ("", "", "featureclass", env) .workspace) çap "yazı:" + Məlumat çapı arcpy.CreateFeatureclass_management (os.path.dirname (Data), os.path.basename (Məlumat), "Polygo n ", spatial_reference = SR) # çoxbucaqları yaradın və onlara yazın Rows = arcpy.da.InsertCursor (Data," [email protected]") in f [Feat0, Feat1, Feat2]: print" coords: " + repr (f) p = makepoly (f) çap "xüsusiyyəti:" + repr (p) Rows.insertRow ([p]) del Rows


Videoya baxın: Həndəsə məsələləri (Oktyabr 2021).