Mais

Convenções de nomenclatura do Shapefile no ArcPy?

Convenções de nomenclatura do Shapefile no ArcPy?


Eu tenho o arquivo de forma chamado 'band-tailed_pigeon.shp o que está bem e não há problema em exibir ou geoprocessar na área de trabalho, mas no ArcPy quando tento mesclar alguns layes estou recebendo este erro

ExecuteError: ERROR 000354: O nome contém caracteres inválidos

Falha ao executar (mesclar).

Tentei fazer o processo com um nome simples comosample.shpque funciona, mas TENHO QUE manter o mesmo nome porque estamos usando em vários projetos.

Aqui está o código que eu tenho

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)

O problema está no traço (-) no nome do arquivo de forma. Essa restrição é da ferramenta de geoprocessamento e não do nome do arquivo de forma, pois você pode ter traços no nome do arquivo de forma.

Alguns métodos de geoprocessamento permitem validar nomes de tabelas (classes de recursos) e campos. Considere usar o ValidateTableName ou ValidateFieldName função para garantir que seus nomes sejam válidos


Se você estiver tendo problemas com nomes de arquivos de forma, um script rápido antes de sua fusão para encontrar os culpados e fazer uma nova cópia dos arquivos de forma resolverá o problema. Faça a iteração em cada arquivo de forma, teste seu nome e copie, se necessário. Merge e, em seguida, exclua todos os novos shapefiles que você criou.

Algo assim (não testado):

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 classes de recursos para fc in inFeaturesToMerge: #directory of shapefile shpath = os.path.dirname (fc) #set workspace to shapefile directory arcpy.env.workspace = shpPath #Get shapefile name shpName = os.path.basename (fc) #Verifique o nome do shapefile para ver se é kosher se não shpName.lower ( ) .replace ("_", "") .rstrip (".shp"). isalnum (): #Criar nome exclusivo uName = arcpy.CreateUniqueName ("file.shp") #criar novo shapefile com novo nome legítimo arcpy. CopyFeatures_management (fc, uName) #add para listar a ser mesclado mergeFcs + = [uName] #add para listar a ser excluído garbage + = [uName] else: #add nome legítimo para mesclar classes de recursos mergeFcs + = [fc] #merge arcpy.Merge_management (mergeFcs, FinaloutLocation) #Limpe o lixo no lixo: arcpy.Delete_mangement (trash)

Uma variação mais rápida deste script é usarRename_management, renomeie os culpados e altere o nome novamente após a mesclagem. Este é um pouco perigoso, embora, como se falhasse na metade, embora você tenha perdido alguns nomes de arquivo:

import arcpy import os inFeaturesToMerge = [dissolve_1, dissolve_2, dissolve_3, dissolve_4, dissolve_5] #empty list for merge mergeFcs = [] #empty dictionary para rastrear renomeia nameChangeDi = {} #iterate classes de recursos para fc em inFeaturesToMerge: #directory of shapefile shpefile = os.path.dirname (fc) #set workspace to shapefile directory arcpy.env.workspace = shpPath #Get shapefile name shpName = os.path.basename (fc) #Verifique shapefile name para ver se é kosher se não shpName.lower () .replace ("_", "") .rstrip (".shp"). isalnum (): #Criar nome exclusivo uName = arcpy.CreateUniqueName ("file.shp") #criar novo arquivo de forma com novo nome legítimo arcpy .Rename_management (fc, uName) #Add nome alterado para dicionário nameChangeDi [uName] = fc #add para lista a ser mesclada mergeFcs + = [uName] else: #add nome legítimo para mesclar classes de recurso mergeFcs + = [fc] #merge arcpy.Merge_management (mergeFcs, FinaloutLocation) #Rename back alterado shapefiles para newName em nameChangeDi: arcpy.Rename_management (newName, nam eChangeDi [novoNome])

Assista o vídeo: Learn How to Perform Statistical Spatial Data Analysis with R and ArcGIS