2017-04-12 2 views
-1

J'essaie d'itérer une jointure spatiale à l'aide d'un dossier, puis d'itérer une seconde jointure spatiale à travers les sorties de la première.Erreur lors de la reconnaissance des paramètres d'une jointure spatiale à l'aide d'ArcPy

Ceci est mon script initial:

import arcpy, os, sys, glob 

'''This script loops a spatial join through all the feature classes 
in the input folder, then performs a second spatial join on the output 
files''' 


#set local variables 

input = "C:\\Users\\Ryck\\Test\\test_Input" 
boundary = "C:\\Users\\Ryck\\Test\\area_Input\\boundary_Test.shp" 
admin = "C:\\Users\\Ryck\\Test\\area_Input\\admi_Boundary_Test.shp" 
outloc = "C:\\Users\\Ryck\\Test\\join_02" 

#overwrite any files with the same name 
arcpy.env.overwriteOutput = True 

#perform spatial joins 

for fc in input: 
    outfile = outloc + fc 
    join1 = [arcpy.SpatialJoin_analysis(fc,boundary,outfile) for fc in 
      input] 

    for fc in join1: 
     arcpy.SpatialJoin_analysis(fc,admin,outfile) 

Je continue à recevoir Error00732: Caractéristiques cibles: Dataset C n'existe pas ou est pas pris en charge.

Je suis sûr que c'est une erreur simple, mais aucune des solutions qui ont été précédemment recommandé pour résoudre cette erreur ne me permet de toujours afficher mes résultats dans leur propre dossier.

Merci à l'avance pour toute suggestion

+1

Pour ArcPy, je pense que vous êtes bien mieux de rechercher/demander à l'échange de pile [gis.se]. – PolyGeo

+0

@PolyGeo Mes excuses. Je le réalise maintenant. Merci pour la direction. – beauxgeo

Répondre

0

Vous semblez essayer de boucle à travers un répertoire donné, effectuer la jointure spatiale sur (shapefiles?) Qui y sont contenues.

Cependant, cette syntaxe est un problème:

input = "C:\\Users\\Ryck\\Test\\test_Input" 
for fc in input: 
    # do things to fc 

Dans ce cas, la boucle est foriterating over a string. Il faut donc à chaque fois traverser la boucle: C, puis :, puis \ ... et bien sûr la fonction arcpy échoue avec cette entrée, car elle attend un chemin de fichier, pas un caractère. D'où l'erreur: Caractéristiques cibles: Dataset C n'existe pas ...


Pour boucler la place par fichiers dans votre répertoire d'entrée, vous avez besoin d'un ou deux étapes supplémentaires. Build a list of files, puis parcourez cette liste.

arcpy.env.workspace = input   # sets "workspace" to input directory, for next tool 
shp_list = arcpy.ListFiles("*.shp") # list of all shapefiles in workspace 
for fc in shp_list: 
    # do things to fc 

(Ref. this answer sur GIS.SE.)

+0

Merci pour votre réponse! Je me rends compte maintenant que cela aurait été mieux adapté pour le GIS Stack Exchange. – beauxgeo

+0

Il est un peu difficile de savoir si les questions spécifiques à Python s'intègrent bien sur GIS.SE ou StackOverflow. Dans ce cas, votre erreur était un problème Python, mais la solution est un outil ArcPy :) – Erica

0

Après avoir travaillé quelques petits défauts, et grâce aux conseils de @erica, j'ai décidé d'abandonner mon concept original d'un imbriquée pour la boucle, et approche plus simplement. Je travaille toujours sur une interface graphique qui va créer des arguments système qui peuvent être assignés aux variables et ensuite utilisés comme paramètres pour les jointures spatiales, mais pour l'instant, c'est la solution que j'ai trouvée.

import arcpy 

input = "C:\\Users\\Ryck\\Test\\test_Input\\" 
boundary = "C:\\Users\\Ryck\\Test\\area_Input\\boundary_Test.shp" 
outloc = "C:\\Users\\ryck\\Test\\join_01" 
admin = "C:\\Users\\Ryck\\Test\\area_Input\\admin_boundary_Test.shp" 
outloc1 = "C:\\Users\\Ryck\\Test\\join_02" 

arcpy.env.workspace = input 
arcpy.env.overwriteOutput = True 

shp_list = arcpy.ListFeatureClasses() 

print shp_list 

for fc in shp_list: 
    join1 = 
arcpy.SpatialJoin_analysis(fc,boundary,"C:\\Users\\ryck\\Test\\join_01\\" + 
          fc) 

arcpy.env.workspace = outloc 

fc_list = arcpy.ListFeatureClasses() 

print fc_list 

for fc in fc_list: 
    arcpy.SpatialJoin_analysis(fc,admin,"C:\\Users\\ryck\\Test\\join_02\\" + 
           fc) 

La définition de plusieurs environnements et l'utilisation des chemins réels semblent maladroites, mais cela fonctionne pour moi à ce stade.