Több

Hogyan ellenőrizhető a térfogat zárt vonallánc-kontúr adatokban a ModelBuilder vagy az ArcPy segítségével?

Hogyan ellenőrizhető a térfogat zárt vonallánc-kontúr adatokban a ModelBuilder vagy az ArcPy segítségével?


Új vagyok a ModelBuilder vagy a Python szkript használatában. Tehát van egy kontúradat-készletem, és egy jó kontúradatnak tartalmaznia kell egy spotheightot * minden zárt vonallánc-kontúradatban.

Van-e valamilyen megoldás annak ellenőrzésére, hogy a kontúradatok minden zárt vonalláncának tartalmaznia kell-e ugyanolyan vagy annál magasabb magasságú világítást.

*) a spotheight egy olyan pont, amely zárt vonallánc kontúr adatokban található, amelyek a magasság értékét mutatják


Ennek a feladatnak az elvégzéséhez az általános munkafolyamat átalakítja a vonalakat sokszögekké. AFeatureToPolygoneszköz csak a zárt vonalakat alakítja át, így ez jól használható a vonalak korlátozásához, amelyekkel dolgozik. Ezután el kell távolítania az összes fánk sokszöget az elemzéséből, amelyet kurzorral végezhetünk, ellenőrizve, hogy minden geometria többrészes-e. Ezután különféle választásokkal megkeresheti a leírt kérdésekkel rendelkező sorokat. Tegyük fel, hogy van egy olyan vonásfunkciója, mint az alábbi:

Figyelje meg, hogy megvan a mezőmPoint_Check. Ezt a mezőt az alábbi kódon keresztül kell kitölteni információkkal.

Kód:

## ---- Helyiek #Contour szolgáltatásosztály inLineFC = r "C:  temp  Workspace.gdb  testlines" #Contour Elevation Field inElevFld = "Elevation" #Contour Check results field checkFld = "Point_Check" #Point feature class pntFc = r "C:  temp  Workspace.gdb  TestPoint" #Point magasságmező pntElevFld = "Magasság" #Workspace GDB munkaterületGDB = r "C:  temp  Workspace.gdb" # ---- A lokálisok befejezése az arcpy importálásból * import os env.overwriteOutput = True garbage = [] # funkció sokszög kinyomtatásához "vonalak átalakítása sokszögekké" polygonFC = os.path.join (workspaceGDB, "tempPolys") FeatureToPolygon_management (inLineFC, polygonFC) szemetet + = [polygonFC] # térkép a térbeli összekapcsolási mezők korlátozásához fms = FieldMappings () fm_elev = FieldMap () fm_elev.addInputField (inLineFC, inElevFld) fms.addFieldMap (fm_elev) print "magasság hozzáadása a sokszögekhez" # Csatlakozzon térben a magassági mező sokszögbe történő átviteléhez fc spatialJoinFC = os .path.join (munkaterületGDB, "spatialJoin") SpatialJoin_analysis (poligonFC, inLineFC, spatialJoinFC, field_mapping = fms) garbage + = [spatialJoinFC] # Pontok, vonalak, sokszögek funkciórétegeinek elkészítése # Engedélyezi a kiválasztás nyomtatását "funkciórétegek létrehozása" MakeFeatureLayer_management (pntFc, "pntLyr") MakeFeatureLayer_management (spatialJoinFC, "polyLyr") MakeFeatureLayer_management (inLineFC, ) szemetet + = ["pntLyr", "polyLyr", "lineLyr"] #Get poligon OID mező oidFld = Leírja ("polyLyr"). OIDFieldName #Távolítsa el a fánkokat a sokszög funkcióosztályból "fánkok eltávolítása" kurzor = da.SearchCursor ( "polyLyr", ["SHAPE @", "OID @"]) a kurzor sorához: # Ellenőrizze, hogy a funkció fánk-e, ha nem a [0] sor .isMultipart: folytassa az sql = '{0} = {1}' formátumot. (AddFieldDelimiters ("polyLyr", oidFld), [1] sor) SelectLayerByAttribute_management ("polyLyr", "ADD_TO_SELECTION", sql) del kurzor # Ha sokszögek vannak kiválasztva, akkor törölje, ha a Describe ("polyLyr"). FIDSet: DeleteFeatures_management ( ") # Sokszögek meghatározása pont nélkül A kiválasztási pontokat kiválasztjuk SelectLayerByAttribute_management ("polyLyr", "SWITCH_SELECTION") # Ellenőrizze a kiválasztást, ha leírja ("polyLyr"). FIDSet: # Válassza ki a kijelölt sokszögeket metsző vonalakat SelectLayerByLocation_management ("lineLyr", "SHARE_A_LINE_MAN_SEGulate_SEGulate_W "lineLyr", checkFld, "" NO_POINT "') #Tiszta vonalválasztás SelectLayerByAttribute_management (" lineLyr "," CLEAR_SELECTION ") #iterate points #Ellenőrizze, hogy az összes kijelölt poligon értéke nagyobb-e, mint a pontérték nyomtatása" iterating points "kurzor = da.SearchCursor ("pntLyr", [pntElevFld, "SHAPE @"]) a kurzor sorához: elevation = row [0] # Válasszon metsző sokszögeket SelectLayerByLocation_management ("polyLyr", "", [1] sor) # Ellenőrizze a kiválasztást, folytassa, ha nincs választás, ha nem Leírja ("polyLyr"). FIDSet: folytassa az #iterate sokszögeket, ellenőrizze a polyCursor = da.SearchCursor ("polyLyr", [inElevFld, "OID @"]) értékeket a pRow számára a polyCursorban: #check, ha a poligon magassága nagyobb, mint a pont magassága polyElev = pRow [0] ha polyElev> magasság: # Válassza ki a sokszöget nem megfelelő értékkel sql = '{0} = {1}'. Formátum (AddFieldDelimiters ("polyLyr", oidFld), pRow [1]) SelectLayerByAttribute_management ("polyLyr", "" , sql) # Vonalak hozzáadása a kijelöléshez SelectLayerByLocation_management ("lineLyr", "SHARE_A_LINE_SEGMENT_WITH", "polyLyr", "", "ADD_TO_SELECTION") törölje a Kurzor del kurzorát # Ellenőrizze, hogy a sorrétegben van-e kijelölés, ha leírja ("lineLyr"). print "sorok frissítése magasságérték-hibákkal" CalculateField_management ("lineLyr", checkFld, '"VALUE_ERROR"') # Takarítás a szemét kukába: Törlés_kezelés (kuka) nyomtatás "kész"

Eredmények:


Nézd meg a videót: 1 - Intro - ArcGIS Pro Scripting with Python and Arcpy