Daugiau

Ar paversti gretimus vienos dalies daugiakampius į daugiasluoksnius?

Ar paversti gretimus vienos dalies daugiakampius į daugiasluoksnius?


Man įdomu konvertuoti daugiakampio funkcijų klasę, sukurtą naudojant „Sukurti žuvų tinklą“ (duomenų valdymas), iš vienos dalies į daugialypę. „QGIS“ turi labai patogų įrankį, vadinamą „singleparts“, skirtą daugiametei, kuris atlieka šį darbą, tačiau man reikia likti „arcpy“/„Python“ srityje. Atrodo, kad „ArcGIS“ atitikmuo yra „Ištirpinti“, tačiau įrankis neišsaugo atskirų bruožų geometrijos, kai daugiakampiai turi bendrą kraštą.

Toliau pateikiamas tinklinio daugiakampio duomenų, su kuriais aš dirbu, tipo pavyzdys, kuris buvo sukurtas pagal žemiau esantį scenarijų.

importuoti arcpy # Sukurkite tinklą su 9 stulpeliais ir 9 eilutėmis #, kurių kilmė yra (1, 1), o išvesties geometrija nustatyta kaip numatytoji (POLYGON) arcpy.CreateFishnet_management ("C: /temp/fishnet2.shp", "1 1" , "1 9", "1", "1", "9", "9", "#", "NO_LABELS", geometry_type = "POLYGON")

Kaip aš galiu konvertuoti tinklinio tinklo daugiakampį iš vienos dalies į daugialypį naudojant scenarijų metodą?


*Pastaba. Panašus klausimas yra ir GIS SE (sukurkite vieną sujungtą daugiakampį iš kelių daugiakampių), nors atrodo, kad jis apsiriboja darbalaukio įrankiais. Aš ieškau bet kokių „Python“ ar „arcpy“ metodų.


Nesu tikras, ar toliau nurodytos priemonės nepadarys to paties, kas ištirps, bet jei aš teisus, tai neturėtų būti daroma.

Galite naudoti aSearchCursor ()norėdami pereiti per daugiakampius, gauti kiekvieno daugiakampio geometriją, pridėti juos kaip naujo daugiakampio geometrijos objekto dalis ir naudoti„InsertCursor“ ()įterpti šį naują įrašą.

sc = arcpy.SearchCursor ("c: /temp/fishnet2.shp") ic = arcpy.InsertCursor ("yournewfeatureclass.shp") newRow = ic.newRow () masyvas = arcpy.Array () eilutei sc: geom = row.getValue ("shape"). getPart (0) array.add (geom) polygon = arcpy.Polygon (masyvas) newRow.setValue ("figūra", daugiakampis) ic.insertRow (newRow) del sc, ic

Pastaba: tai įterpia visus daugiakampius, jei jūsų pradinė ypatybių klasė yra vienas daugiakampis išvesties funkcijų klasėje. Tu gali naudotiMakeFeatureLayer_management ()irSelectLayerByAttribute_management ()pasirinkti tinkamus daugiakampius, kuriuos reikia sudėti.


Gerai, todėl aš neišbandžiau aukščiau pateikto ir tai, deja, nepadėjo (kas nors žino, kaip perbraukti tekstą?). Žemiau yra mano testo rezultatas. Įdomu tai, kad FGDB funkcijų klasės ir formos failo efektas nebuvo tas pats. Paieškos žymeklio daugiakampiai surūšiuoti pagal Objectid, apatinė kairė yra pirmoji, pirmiausia keliaujanti aukštyn išilgai kolonų, paskui išilgai eilučių.


Manau, kad turėsite daugiakampius laikyti atskirais bruožais. Daugiakampiai daugiakampiai yra blogas darinys, neturintis loginės topologijos analizei ir net rodymui jūsų atveju.

Kas negerai su atskira funkcijų klase? Jei norite apibendrinti ypatybes, tai atliks „Dissolve“. Jei norite vieno atributo įrašo, galite susieti kelias funkcijas su vienu ištirpusiu kontūru. Arba galite daugiakampius paversti daugiakampiais, kad pašalintumėte sutampančius žiedus. Yra būdų, kaip sukurti topologijos taisykles, kad būtų galima susieti ribines linijas ir daugiakampį.

Norint atlikti daugiau analizės, bet kurioje sistemoje jums reikia tinkamos, nedviprasmiškos topologijos. Apsvarstykite tokias paprastas idėjas kaip daugiakampis centroidas. Jis gali nepatekti į daugiakampius, todėl taškinė daugiakampė perdanga negalės pasirinkti rinkinio.

Apimtis lengvai tvarko šį atvejį, nes daugiakampiai buvo apibrėžti naudojant PAL (daugiakampio lanko sąrašą), kuris apibrėžė daugiakampį kaip linijų grandinę. Persidengimai neįmanomi (nebent lankėtės sudėtingesnėje regiono funkcijų klasėje). Aš pasiilgau aprėpties topologijos, todėl tokia analizė tapo nesvarbi.


Žiūrėti video įrašą: Lygčių sistemos Valstybinis brandos egzaminas