Viac

Skript ArcGIS 10.0 Python nefunguje s ArcGIS 10.2.1. Smyčka cez SelectLayerByLocations

Skript ArcGIS 10.0 Python nefunguje s ArcGIS 10.2.1. Smyčka cez SelectLayerByLocations


Minulý rok som dostal pomoc od StackExchange k napísaniu skriptu Python pre ArcGIS 10.0, ktorý prechádza cez SelectLayerByLocation s vyrovnávacou pamäťou, kým nevráti žiadne nové riadky. Potom výber použije na ďalšie procesy.

Práve sme inovovali na ArcGIS 10.2.1 a zistil som, že skript už nefunguje :(

V okne Pythonu vidím, že SelectLayerByLocation je spustený a počet sa zvyšuje, ale proces sa zastaví, akonáhle sa nevrátia žiadne nové riadky. Napríklad s nižšie uvedenými údajmi figuríny dostanem ... Počet riadkov = 16 ... Počet riadkov = 18 ... Počet riadkov = 18 ... Vybraté body sú zvýraznené na obrazovke, ale proces v tomto bode visí. Skript sa dokončí, ak SelectByLocation nezistí žiadne iné weby vo vzdialenosti (inDis2) od vybratého webu (fcFarmInterest), takže mám podozrenie, že problémom je slučka.

## Title: Autozone ## Funkcia: Rozšírenie výberu stránok z daného webu. ## Verzia: ArcGIS 10.0 ## Autor: Liam Mason, s pomocou dklassen @ GIS StackExchange ## Dátum: 5. augusta 2014 #Import súboru ArcPy import balíka stránok arcpy # Prepísať súbory arcpy.env.overwriteOutput = True # Parameters # Workspace setting workSpace = r "C:  GIS  Autozone" # ID webu ako reťazec na webe = 'FS0501' # Vzdialenosť ako reťazec inDis = '800' # Názov funkcie údajov farmy vrstva farmData = "farmy" # Poloha orezového tvaru shapefile clipShape = " ClippingShape " # Miesto pre uloženie vyrovnávacej pamäte do outBuffer = r" C:  GIS  Autozone  Outputs  buffer.shp " # Pridať metre k hodnote vzdialenosti inDis1 = inDis +" metre " # Previesť hodnotu vzdialenosti na celé číslo, vynásobiť dvoma , potom odstráňte jednu jednotku. Previesť späť na reťazec a pridať metre. inDis2 = str ((int (inDis)*2) -1) + "metre" # Kde dotaz, pridanie reťazca inSite ako kritérií. where = '"Site_No" =' + "' %s'" %inSite # Nastavte nastavenie prostredia pracovného priestoru arcpy.env.workspace = workSpace try: # Vytvorte vrstvu funkcií pre všetky farmy fcFarmsAll = farmData #Vyberte iba morské farmy, vytvorte výstup, potom zrušte výber. fcFarmsMarine = arcpy.SelectLayerByLocation_management (fcFarmsAll, "WITHIN", clipShape) fcFarmsMarineOut = arcpy.CopyFeatures_management (fcFarmsMarine, r " working  marineFarms.shp" morské farmy fcFarms = arcpy.MakeFeatureLayer_management (r " Working  marineFarms.shp", "MarineFarms") #Vyberte zaujímavé miesto a vytvorte shapefile fcFarmInterest = arcpy.Select_analysis (fcFarms, r " Working  farms_Select.shp", #Apply a selection to farms layer fcFarms1 = arcpy.SelectLayerByLocation_management (fcFarms, "WITHIN_A_DISTANCE", fcFarmInterest, inDis2) #Apply a next selection to farms layer fcFarms2 = arcpy.SelectLayerBo ) #Count selection initial_getCount = int (arcpy.GetCount_management (fcFarms2) .getOutput (0)) #Add one to selection count getCount = initial_getCount + 1 #Lopop through selection while getCo unt> initial_getCount: fcFarms3 = arcpy.SelectLayerByLocation_management (fcFarms, "WITHIN_A_DISTANCE", fcFarms2, inDis2, "ADD_TO_SELECTION") initial_getCount = getCount getCount = int (arcpy.GetCount fcFarms3, r " Working  farms_buffer.shp", inDis1, "FULL", "ROUND", "ALL") #Clip buffer arcpy.Clip_analysis (r " Working  farms_buffer.shp", clipShape, r " Working  buffer_clip.shp ") #Break orezal buffer na viacdielne arcpy.MultipartToSinglepart_management (r"  Working  buffer_clip.shp ", r"  Working  buffer_multi.shp ") #Vytvorte vrstvu funkcií pre viacdielny buffer fcBuffer = arcpy.MakeFeatureLayer_management ( " Working  buffer_multi.shp", "BufferTemp") #Vyberte časť vyrovnávacej pamäte so záujmovým webom fcBufferSelect = arcpy.SelectLayerByLocation_management (fcBuffer, "INTERSECT", fcFarmInterest) #Exportujte vyrovnávaciu pamäť do súboru, znova vyberte lokality v tomto vyrovnávacej pamäti fcBu CopyFeatures_management (fcBufferSelect, r " Working  buffer_sites.shp") fcBuf ferSites1 = arcpy.SelectLayerByLocation_management (fcFarms, "INTERSECT", fcBufferSites) #Buffer nový výber, klip, rozdelenie do viacerých častí, výber a extrahovanie časti vyrovnávacej pamäte s webmi arcpy.Buffer_analysis (fcBufferSites1, r " Working  farms_buffer1.shp "FULL", "ROUND", "ALL") arcpy.Clip_analysis (r " Working  farms_buffer1.shp", clipShape, r " Working  buffer_clip1.shp") arcpy.MultipartToSinglepart_management (r " Working  buffer_clip1.shp ", r"  Working  buffer_multi1.shp ") fcBuffer1 = arcpy.MakeFeatureLayer_management (r"  Working  buffer_multi1.shp "," BufferTemp ") fcBufferSelect1 = arcpy.SelectLayerByLocation_management ( fcBuffer1," .shp ") #Pred vymazaním skontrolujte, či v ArcMap existuje stará vyrovnávacia pamäť ## if arcpy.Exists (outBuffer): ## arcpy.Delete_management (outBuffer) #Export final Buffer to file fcFinal = arcpy.CopyFeatures_management (fcBufferSelect1, outBuffer) # Vyberte weby vo vyrovnávacej pamäti fcFarmsFinal = arcpy.SelectLayerByLocation_management (fcFarmsAll, „INTERSECT“, o utBuffer) #Delete working files arcpy.Delete_management (r " Working  farms_buffer.shp") arcpy.Delete_management (r " Working  farms_buffer1.shp") arcpy.Delete_management (r " Working  buffer_clip.shp") arcpy. Delete_management (r " Working  buffer_clip1.shp") arcpy.Delete_management (r " Working  buffer_multi.shp") arcpy.Delete_management (r " Working  buffer_multi1.shp") arcpy.Delete_management (r " Working  farms_Select .shp ") arcpy.Delete_management (r"  Working  buffer_sites.shp ") arcpy.Delete_management (r"  Working  marineFarms.shp ") okrem: print arcpy.GetMessages ()

Testovaním a pokusom a omylom som zistil, že to nie je slučka, ale funkcia rozpustenia v medzipamäte-ak z vyrovnávacích pamätí odstránite VŠETKO, funguje to.

Potrebujem, aby sa pufre rozpustili, takže to bude predstavovať samostatný problém.


Pozri si video: Mastering ArcGIS Expressions with Python, Arcade, and SQL