Vairāk

Poligona griešana, izmantojot līniju griezēju, griezumu () - izmantojot ArcPy?

Poligona griešana, izmantojot līniju griezēju, griezumu () - izmantojot ArcPy?


Ko es vēlētos darīt, izmantojot ArcPy: izmantojiet līniju, lai sadalītu daudzstūru ķekaru atsevišķās daļās. Lūk, kā varētu izskatīties ieejas:

Šajā gadījumā līnijai ir jāsadala katrs daudzstūris divos atsevišķos daudzstūros, beigās izveidojot 6 atsevišķus daudzstūrus.

Šis jautājums ir uzdots daudzas reizes, un ir sniegtas daudzas atbildes, taču šķiet, ka nevienā no tām nav minēts daudzstūris griezt metode, iespējams, tāpēc, ka šķiet, ka tā tika ieviesta tikai 10.2.

Lūk, ko parāda ArcGIS palīdzība (ritiniet līdz griezums (griezējs)):

Šķiet, ka tas ir tieši tas, kas man vajadzīgs, taču nevaru pilnībā izdomāt, kā to īstenot.

No dažiem piemēriem, kurus es varēju atrast, šķiet, ka es nevaru izmantot metodi tieši formas failā, uz kuru es atsaucos, bet man ir jāpiekļūst pamatā esošajai ģeometrijai/virsotnēm, tāpēc šeit es darīju (lūdzu, labojiet mani, ja ir tas ir pilnīgi atšķirīgs veids):

  • lasīt kursa faila virsotnes, izmantojot kursoru
  • iespiediet katru virsotni masīvā
  • izmantojiet šo masīvu, lai izveidotu daudzstūri/līniju

Nākamais solis būtu izmantot griezt() metodi, kā parādīts iepriekš redzamajā ekrānuzņēmumā, lai faktiski sadalītu daudzstūrus, bet es nevaru to panākt.

Tālāk ir mans kods (tikai daudzstūra daļa izmanto komentārus, jo polilīna ir tikai atkārtojums):

importēt arkveida daudzstūri = r "D:  Data  poly.shp" line = r "D:  Data  line.shp" # ------------------- POLYGON- ------------------ # vispirms izlasiet ģeometriju # ti: izlasiet visas virsotņu koordinātas un ievietojiet tās masīvā dataset_vertices = [] # cilpa caur katru rindas līdzekli in arcpy.da.SearchCursor (daudzstūris, ["[email protected]", "[email protected]"]): print ("Šeit nāk funkcija {0}:". formāts ([0]. rinda)) partnerum = 0 # Solis cauri katrai daļai objekta daļai rindā [1]: # Izdrukājiet detaļas numura drukāšanu ("Daļa {0}:". formāts (partnerum)) tempPart = [] # iespiediet katru virsotni masīvā # Izejiet cauri katrai objekta virsotnei pnt daļēji: ja pnt: # Drukāt x, y pašreizējā punkta izdrukas koordinātas ("{0}, {1}". formāts (p. X, p. Y)) tempPart.append ([p. X, pnt.) .Y]) else: # Ja pnt ir Nav, tas atspoguļo iekšējā gredzena izdruku ("Iekšējais gredzens:") # iespiež daļu masīvu visā masīvā dataset_vertices.append (tempPart) partnerum += 1 # Saraksts, kurā tiks saglabāti visi daudzstūra objekti polygon_features = [] datu kopas_veikala iezīmei s: # izveidojiet daudzstūra objektu, pamatojoties uz punktu masīvu ------------------- POLYLINE ------------------- line_vertices = [] rindai arcpy.da. SearchCursor (line, ["[email protected]", "[email protected]"]): print ("Šeit nāk funkcija {0}:". Formāts ([0] rinda)) partnerum = 0 rindas [1] daļai: print ( "Part {0}:". Format (partnerum)) tempPart = [] pnt daļēji: if pnt: print ("{0}, {1}". Format (pnt.X, pnt.Y)) tempPart. pievienot ([pnt.X, pnt.Y]) else: print ("Interjera gredzens:") line_vertices.append (tempPart) partnerum += 1 line_features = [] datu kopas_vertices iezīmei: line_features.append (arcpy.Polygon (arcpy .Array ([arcpy.Point (*coords) iezīmju iezīmēm])))

Pēc šī koda palaišanas es varu izmantot metodes, piemēram, polygon_features [0] .boundary (), bet es neesmu pārliecināts, kā to izmantot griezt().


Līdzeklis Daudzstūris sagriezīs daudzstūrus pa līniju pazīmju klasēm, ja izmantosit divas iezīmju klases.

Ieejas:

Rezultāti:

Atkarībā no līnijas ģeometrijas šī metode var radīt liekus daudzstūrus. Ja tā,klipsizvades funkciju klasi pēc sākotnējās ievades daudzstūra funkciju klases, lai novērstu jaunos daudzstūrus.

Ja vēlaties tikai noteiktus daudzstūrus sagriezt ar noteiktām līnijām, izmantojiet SQL izteiksmi un funkciju slāņus, lai ierobežotu ievades apjomu.


Skatīties video: Using ArcPy ArcGIS Desktop Python Library in PyCharm