I'm analyzing wind farms and wind turbines within ArcGIS Desktop 10.2.

My data consists of the locations of individual wind turbines that are associated with a wind farm (let's call it "Wind Farm A"). From creating 5km buffers around each wind farm, I know that in certain cases wind turbines from a neighboring farm (let's call it "Wind Farm B") are part of the buffer of Wind Farm A.

How can I use ModelBuilder to count the number of turbines within a buffer zone that are part of Wind Farm B and not part of Wind Farm A (i.e. foreign turbines within A's buffer)?

Using the Select Features tool I can count the turbines by hand, but this is slow. I also know that I can use the Near tool or a Spatial Join to count all the points in a polygon, but how do I then select only those that are not part of Wind Farm A?

I'm attaching a screenshot that illustrates my challenge visually.

Two neighboring wind farms with centroids and 5-km buffers

  • Is this a one time deal? Because its just a couple tools with the right parameters set. Or do you have a lot of turbines and they all have their buffer (wind farm area) already defined? (or are you doing a 5km buffer as you go in the analysis?)
    – KHibma
    Commented May 6, 2015 at 20:15
  • Hi @KHibma -- I've got 58 wind farms I am analyzing so that's why I'm trying to use ModelBuilder to script it. I am grouping the turbines using Median Center and then adding a 5-km buffer. If I was to approach it manually, what tools and parameters are most efficient?
    – Nick Cain
    Commented May 11, 2015 at 17:35

3 Answers 3


In this screen shot I have wind turbines and randomly buffered 10km around 4 different ones.

I manually selected the lower left buffer, ran the model and got a result - you can see that 4 turbines exist in this buffered area and only this area (no overlap to the other areas) enter image description here

Heres the model. I noted the type of selection required for each tool. The dashed lines are preconditions which may or may not be necessary. I put them in to be sure I know what process runs first when 2 process provide input to another single one.

enter image description here

In short, the workflow is:

  • Select the points within your zone/buffer
  • Get a selection of zones that you DONT want (ie. Switch Selection)
  • Then, the points in the areas you dont want should be removed from your original selection (ie. Remove From Selection)
  • KHibma. In trying to implement this, I'm running into an issue: My wind farms are in one layer and my wind turbines are in another -- but I need to iterate through each farm sequentially. I can save each wind farm median center point as a separate layer, but is there an easier way? Thanks!
    – Nick Cain
    Commented May 16, 2015 at 3:23

I want to offer an alternative solution following up on your last paragraph, which is easily accomplished in a single analysis without the need for iteration or even Model Builder unless you wish to repeat it many times. You cannot use the Near tool in this case, as that only returns the closest feature. You could use the Generate Near Table tool with an Advanced license (just like Near) or a Spatial Join with just Basic, but both of those methods require some back-joining of tables to get identifying attributes. If you wanted distances you wouldn't have a choice, but for just counts this will be much simpler.

Let's start with my recreation of your data. I have three project sites with an ID field and a number of 39 random turbine points in a separate feature class that also have an id field that matches the projects. I buffered the projects (dissolve none) to ensure I had some foreign turbines. (And if you look closely you'll note I screwed up my B/C turbine associations.)

enter image description here

If you open up the attribute table of the buffers you'll see that the attributes of the projects were transferred to the buffers, including ID. The next step is to Intersect (join attributes all) the buffers and turbine points. This creates a new point feature class that has two properties of note. First, the attributes from both the buffers and the turbines are included. Second, each point that fell within more than one buffer was duplicated so there is one instance per buffer - thus the result has 53 points instead of the original 39.

enter image description here

You'll note that each point now has two ID fields. Since you're only interested in foreign turbines, you don't care about any point where both ID attributes are the same because that means it's a turbine associated with that project. So using a Select by Attribute, select all records where the two ID fields are equal and delete them. This leaves only the foreign turbines within each buffer. You could do the opposite of course if you wanted to exclude foreign turbines and only count those from the project.

Now use the Summary Statistics tool on the remaining points. You must have a statistics field for the tool to run, but you don't need to pay much attention to it because the count you want will automatically be generated as a Frequency column in the resulting table. For a check, you can set the stat field to your project ID field with a type of count and it should match your frequency field. You do need to specify a CASE field, and it should be the project ID field - as in the attribute that came from the project points and buffers, not the turbines. Run the tool and you get a table with one row for each project and a count of all the foreign turbines in that project's buffer. This will address all 58 of your project sites at once, regardless of how many buffers a turbine might fall within.

  • thank you very much! This is a very creative and interesting approach to doing the calculation. Since I have 58 wind projects (with associated buffers) when you say I don't need to iterate, I think you are saying I can perform the Intersect and other operations for the entire wind region at once? Thanks again for your assistance!
    – Nick Cain
    Commented May 19, 2015 at 15:01
  • @NickCain Yes, that's correct, the solution will operate on the entire data set at once with no need for selections (other than the one by attributes mentioned) or splitting your project points into separate files or anything. Please consider upvoting any questions or answers you find useful.
    – Chris W
    Commented May 19, 2015 at 20:11

It's possible in model builder. You could do a series of selections. For example, for Wind Farm A:

  • Select Layer by Location tool to get points within buffer of Wind Farm A
  • Select Layer by Attribute tool (to filter out those that belong to other wind farms, based on their 'name' attribute, or whatever it is). You could use an expression like "name" <> 'wind farm A' to return all records not from Wind Farm A.

If you do the select by attribute on the output of the select by location, it should return the selection that you are looking for. You could then use the Get Count tool to return the number of rows. You could use an iterator if you need to run it on multiple locations. Whatever your other parameters are, I think these couple of steps would be (at least in my head) the meat of it.

A python script would probably do this easier, if you want to get in and figure that out. It's a little easier to do things like iterate through multiple times, or even return a count, etc.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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