Veel

ArcGIS 10.0/arcpy: Kuidas luua hulknurga geomeetriat rõngapunktide sisemisest ja välimisest massiivist?

ArcGIS 10.0/arcpy: Kuidas luua hulknurga geomeetriat rõngapunktide sisemisest ja välimisest massiivist?


Mul on kaks massiivi, millest igaüks sisaldab suletud punktirõngast, üks välimise rõnga ja teine ​​sisemise rõnga jaoks, viimane töötab muidugi vastupäeva. Ma kasutan hulknurga ehitamiseks tehasefunktsiooni arcpy.Polygon (). Minu küsimus: kuidas sisestada punktid hulknurgale ()?

Dokumentatsioon annab üldise süntaksi hulknurgana (sisendid, ruumiline viide, has_Z, has_M). Sisendite osa on visandlik. Väidetavalt võivad sisendid olla punktobjektid või massiivid. Minu probleem on see, et mul on sõõrikuauguga hulknurk. Ma võin ehitada lihtsa hulknurga, mille sisendiks on ühepunktiline massiiv ... pole probleemi; aga kuidas ma lisan kaks punktide komplektid? Abilehel "Geomeetria lugemine" on kirjas, et osad (antud juhul helinad) on eraldatud nullpunkti objektiga. Aukudega hulknurkade puhul läheb kõigepealt välimine rõngas. Niisiis, proovisin konteinerimassiivi lisada välimise massiivi ja seejärel sisemise massiivi. See ei töötanud: auk puudub. Proovisin sama asja nende vahel oleva nullpunkti objektiga. Rõõmu pole: sama tulemus. Seejärel proovisin sisestada mõlemad massiivid Pythoni loendisse sisendina. See viskas vea. Abifailide näidiskriptidega ei tegeleta kunagi kirjutamine aukudega hulknurgad. Niisiis, ma tõesti ei tea, millist vormingut sisendite jaoks kasutada. Kas kellelgi on sellest asjast ülevaadet? Oleksin kindlasti abi eest tänulik. Aitäh, kõik.


Donut -hulknurkade loomist arutati sellel lingil koos python -koodi näitega (kasutamiseks ArcMapis). Trikk seisneb selles, et välimise ja sisemise rõnga vaheliste koordinaatide loendi vahele lisatakse nullpunkt. Pange tähele, et välisrõnga punktid on päripäeva ja sisemised rõngapunktid vastupäeva.


Kuna celticflute tema koodi ei postitanud, pidin selle uuesti välja mõtlema.

Lõpuks sain tööproovi. See tundub päris hästi toimivat.

Peamine on see, et te ei kirjuta hulknurga osi ja auke teisiti!

Selle asemel konstrueerite pesastatud massiividest hulknurga, mis kujutab endast rõngastest koosnevaid osi. Kui kirjutate geomeetria, kirjutades selle kujundiväljale või kasutate seda tööriistas, kaadri taga kaarobjektid planeerivad rõngad igas hulknurga osas ja määravad, mis on auk ja mis mitte. Ja sorteerib koordinaadid päripäeva ning põletab xys geoandmebaasi tunnusklassi koordinaatsüsteemi ja domeeni.

# # Kirjutage hulknurga tunnusklass # import os import arcpy from arcpy import env def makepoly (coord_list, SR = None): "" "Teisenda Pythoni koordinaatide loend ArcPy hulknurga funktsiooniks Autor: Curtis Price, USGS, [email protected] .gov Näited töölaua abist 10.x: geomeetria lugemine 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]],] # see funktsioonil on sisemine rõngas (sõõrik) Feat2 = [[[9.0, 11.0], [9.0, 8.0], [6.0, 8.0], [6.0, 11.0], [9.0, 11.0], puudub, [7.0, 10.0], [7.0, 9.0], [8.0, 9.0], [8.0, 10.0], [7.0, 10.0]]] "" "parts = arcpy.Array () rõngad = arcpy.Array () ring = arcpy.Array () osa coord_listis: pnt jaoks osaliselt: kui pnt: ring.add (arcpy.Point (pnt [0], pnt [1]))) else: # nullpunkt - oleme uue rõnga ringide alguses.add ( ring) ring.removeAll () # meil on viimane rõngas, lisage see rõngad.add (ring) ring.removeAll () # kui meil on ainult üks rõngas: eemaldage pesitsus, kui l Eur parts.getObject (0) tagastab arcpy.Polygon (parts, SR) # test data from: # Desktop Help 10.0: Geometries Reading 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]],] # sellel viimasel funktsioonil on sisemine rõngas (sõõrik) Feat2 = [[[9.0, 11.0], [9.0, 8.0], [6.0, 8.0], [6.0, 11.0] , [9.0, 11.0], puudub, [7.0, 10.0], [7.0, 9.0], [8.0, 9.0], [8.0, 10.0], [7.0, 10.0]]] # testkood # loovad tühja tunnusklassi # reaalsete andmetega esitage SR -kood, nimi või andmekogum SR # arc = arpy.SpatialReference (4326) SR = Puudub env.workspace = env.scratchGDB Data = arcpy.CreateScratchName ("", "", "featureclass", env .workspace) print "writing:" + Andmete printimine arcpy.CreateFeatureclass_management (os.path.dirname (andmed), os.path.basename (andmed), "Polygo n ", spatial_reference = SR) # looge hulknurgad ja kirjutage need Ridad = arcpy.da.InsertCursor (andmed," [email protected]") f jaoks [Feat0, Feat1, Feat2]: print" coords: " + repr (f) p = makepoly (f) print "funktsioon:" + repr (p) Rows.insertRow ([p]) del Rows

Vaata videot: 1 - Intro - ArcGIS Pro Scripting with Python and Arcpy