Viac

Konvencie pomenovania Shapefile v ArcPy?


Mám tvarový súbor s názvomband-tailed_pigeon.shp čo je v poriadku a žiadny problém so zobrazením alebo geoprocesom na ploche, ale v ArcPy pri pokuse o zlúčenie niektorých vrstiev sa mi zobrazuje táto chyba

ExecuteError: ERROR 000354: Názov obsahuje neplatné znaky

Nepodarilo sa vykonať (zlúčenie).

Pokúsil som sa urobiť postup jednoduchým menom akosample.shpktoré to funguje, ale MUSÍM zachovať rovnaké meno, aké používame pri viacerých projektoch.

Tu je kód, ktorý mám

FinaloutLocation = "E:  GIS  Data  Final  band-tailed_pigeon.shp" inFeaturesToMerge = [dissolve_1, dissolve_2, dissolve_3, dissolve_4, dissolve_5] arcpy.Merge_management (inFeaturesToMerge, FinaloutLocation)

Problém je s pomlčkou (-) v názve súboru tvaru. Toto obmedzenie sa týka nástroja na geografické spracovanie, a nie názvu súboru tvarov, pretože v názve súboru tvarov môžete mať pomlčky.

Niektoré metódy geografického spracovania vám umožňujú overiť názvy tabuliek (tried funkcií) a polí. Zvážte použitie buď ValidateTableName alebo ValidateFieldName aby ste sa uistili, že sú vaše mená platné


Ak máte problémy s názvami súborov shapefile, problém vyrieši rýchly skript pred nájdením vinníka a vytvorenie novej kópie súborov shapefile. Iterujte každý tvarový súbor, otestujte jeho názov a v prípade potreby ho skopírujte. Zlúčiť a potom odstrániť všetky nové súbory tvarov, ktoré ste vytvorili.

Niečo také (nevyskúšané):

import arcpy import os inFeaturesToMerge = [dissolve_1, dissolve_2, dissolve_3, dissolve_4, dissolve_5] #empty list for merge mergeFcs = [] #empty list for delete garbage = [] #iterate class features for fc in inFeaturesToMerge: #directory of shapefile shpPath = os.path.dirname (fc) #set workspace to shapefile directory arcpy.env.workspace = shpPath #Get shapefile name shpName = os.path.basename (fc) # Skontrolujte názov shapefile, či je kóšer, ak nie shpName.lower ( ) .replace ("_", "") .rstrip (".shp"). isalnum (): #Create unique name uName = arcpy.CreateUniqueName ("file.shp") #create nový shapefile s novým legitímnym menom arcpy. CopyFeatures_management (fc, uName) # pridať do zoznamu, ktorý sa má zlúčiť mergeFcs + = [uName] # pridať do zoznamu, ktorý sa má odstrániť smeti + = [uName] else: # pridať legitímne meno na zlúčenie tried funkcií mergeFcs + = [fc] # zlúčiť arcpy.Merge_management (mergeFcs, FinaloutLocation) # Vyčistiť odpadky v koši: arcpy.Delete_mangement (odpadky)

Použije sa rýchlejšia variácia tohto skriptuPremenovať_správu, premenujte vinníkov a potom po zlúčení zmeňte meno späť. Je to trochu nebezpečné, akoby to zlyhalo v polovici cesty, aj keď ste stratili niektoré názvy súborov:

import arcpy import os inFeaturesToMerge = [dissolve_1, dissolve_2, dissolve_3, dissolve_4, dissolve_5] #empty list for merge mergeFcs = [] #empty dictionary to track renames nameChangeDi = {} #iterate classes features for fc in inFeaturesToMerge: #directoryPathfilefile = os.path.dirname (fc) #set workspace to shapefile directory arcpy.env.workspace = shpPath #Get shapefile name shpName = os.path.basename (fc) # Skontrolujte názov shapefile, či je kóšer, ak nie shpName.lower () .replace ("_", "") .rstrip (".shp"). isalnum (): #Create unique name uName = arcpy.CreateUniqueName ("file.shp") #create nový shapefile s novým legitímnym menom arcpy .Rename_management (fc, uName) #Pridať zmenený názov do slovníka nameChangeDi [uName] = fc # pridať do zoznamu, ktorý sa má zlúčiť mergeFcs + = [uName] else: #add legitímne meno na zlúčenie tried funkcií mergeFcs + = [fc] #merge arcpy.Merge_management (mergeFcs, FinaloutLocation) #Rename back zmenené súbory tvaru pre newName v nameChangeDi: arcpy.Rename_management (newName, nam eChangeDi [nové meno])