3

Using Arc 10.3.1, if I manually enter the names of multiple shapefiles (all from the same folder) into the Check Geometry tool, the (single) output table lists the errors that exist in all of the shapefiles.

That is, only one output table is created, even if multiple input shapefiles have errors. For example, if two shapefiles have errors, both will be listed in the single output table. Here's a screen print of the input:

enter image description here

However, if I iterate those same shapefiles (using the Feature Classes option), the output table only lists the last shapefile that went through the iteration. Here's a screenshot of the model:

enter image description here

I suspect that the iterator is running Check Geometry not once, but three times, with a single input shapefile going through each iteration, overwriting the previous output.

How do I get the iterator to list all of the shapefiles with errors, either in separate output tables or aggregated in a single output table?

1

In you case, the best option would be to right click on the "check geometry" tool then choose "batch" in order to run 3 different instances of "check geometry".

That being said, you can go in model builder and use the name as an inline variable (double click on ouput and insert %Name% somewhere into your output variable name, e.g, C:/temp/mygdb.gdb/output_%Name%

1

First thing to appreciate when running the Check geometry tool by itself is what are you inputting? It is a LIST of FeatureClasses.

If you want to use an iterator you need to be collecting the output of the iterator into a LIST using the Collects Value model only tool. You then feed the list of FeatureClasses into your Check geometry Tool. To do this you create a sub-model with the iterator and expose the output of the collect values tool as a parameter as shown below.

Sub model Sub Model

Embed the sub-model in a master model and simply connect it to the check geometry tool.

Master model Master Model

Do not make the mistake of linking the Check geometry straight on to the output of the Collects tool IN THE SUB MODEL as that is very inefficient. You want to create the list in the sub-model and feed that out to the master model once.

  • in your master model you linked the sub-model to the Check Geometry tool via the Output Values variable. How did you create that variable? – user45726 Dec 20 '16 at 0:39
  • If you look at sub-model output has a "P", indicating it is a parameter, simply right click on it and set it as a parameter, that exposes it as a parameter which you can connect when you drag 'n' drop it into master model. – Hornbydd Dec 20 '16 at 14:48
  • D'oh!, how did I miss that? BTW, out of curiosity I compared a directly-linked model with 60 input shapefiles (10 hours runtime) versus the submodel version (15 minutes runtime). You were correct that the submodel would be more efficient! But I don't understand why - can you explain or point me to documentation? – user45726 Dec 20 '16 at 18:54
  • It's a subtle thing easily over looked but the help does state "Everything" runs X number of times in a model with an iterator. So that includes any tools feeding into an iterator and everything downstream of it, or not even connected to it. So if your tool happened to be merging a load of shapefiles into a single shapefile you don't want the merge tools running X number of times you want to feed it a list of featureclasses and run the merge tool once. So you collect in the sub-model and feed that list back into the master. – Hornbydd Dec 20 '16 at 21:06

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.