enter image description here

I am new to ArcMap (ArcEditor) 10. I have been mapping ethanol plants (which utilize corn to produce ethanol) and corn production amounts in the counties of the USA.

My goal is to draw buffer zones (circles) around the ethanol plants (dots). However, the tricky part is that the circles must reflect what region an ethanol plant buys corn from in order to sustain its ethanol production. I know how much corn each plant needs and I know the average corn production/square mile in each county.

How do I get ArcMap to calculate the radiuses of the buffer zones it needs to draw corn from?

This gets especially tricky when I have an ethanol plant lying on the border of two counties and each county has a different corn production amount/square mile.

In the image attached, the dots are ethanol plants. The red regions show the county is self-sufficient in producing enough corn for its ethanol plants. The orange regions show that corn must be imported from other counties to support its ethanol plants.

3 Answers 3


Basically what you need to do is to add a column to your plants shapefile that corresponds to the size of that buffer.

You could also add fields for the amount of corn each plant needs and other useful information to help you calculate the size of the buffer.

You, of course, will need to fill it with something meaningful. To do that I can suggest the "Calculate Values" command, located inside the table view (right click on the column to be calculated and Calculate Values). With it you can enter complex expressions.

For creating the buffer, there is an option of the buffer geoprocessing tool to use a column as the radius of the buffer.


One thing to keep in mind here is that you are not trying to exactly represent which areas are actually used to feed the plant. A county might have all of its corn production in the eastern half, for example. (And a plant might not even be pulling from adjacent counties.)

You just want a cartographic convention showing approximate relative scale based on the adjacent counties. Here is how I would go about this...

In your ethanol plant point layer, I would have four attributes: corn needed, average yield, buffer radius, and residual. Corn needed would stay constant. Buffer radius is the currently used buffer radius. Average yield is the average yield per square mile inside that radius, and residual is the difference between corn needed and average yield*pi*radius^2. The ethanol plant layer should have a unique identifier too (for joins).

You are trying to minimize your residuals. You will want to set a cutoff for your residuals (e.g. if the calculated amount is within 100 bushels of the corn needed, then you will not further refine the radius).

You also need a county layer that has two attributes, the average corn yield per square mile and the amount of corn produced (which you can get from area * average corn yield). The last is really a dummy variable for calculation later. If you have any counties with an average corn yield per square mile of zero, set that instead to an arbitrarily small number. Zeros in that field will cause problems later.

Pick an initial arbitrary radius, smaller than the normal width of a county such as 1 mile, and set the radius value to that for all plants. Run these operations in a geodatabase, so that the area attribute is automatically maintained.

This next section you might want to automate as a python script or geoprocessing model:

  1. Run a buffer on your ethanol plants using the radius column for the buffer distance.
  2. Intersect the resulting buffer with the counties layer, keeping all attributes.
  3. For the intersect output, for each feature recalculate corn produced using average corn yield * new area of the feature.
  4. Run a merge on the intersect output using ethanol plant unique ID as the merge attribute. Have a summary statistic that sums up the corn produced from all features merged. This will now give you corn produced inside your buffer radius for each plant.
  5. Using the summary statistic, recalculate the average yield attribute on the merge output, using the summed up corned produced divided by the area of the feature.
  6. Using the ethanol plant unique ID, join the merge output to the original ethanol plants. Calculate the average yield on the ethanol plant as equal to the average yield on the corresponding merge feature. Remove the join.
  7. Calculate the residual. This should be pretty large with your initial radius, but will shrink considerably with the next pass after you calculate the new radius.
  8. For only those plants whose residual is greater than your cutoff, recalculate the buffer radius. The new radius is (corn needed/(pi*average yield))^0.5
  9. Repeat steps 1 to 8 until all of your features have residuals smaller than your cutoff. If this takes more than 3-4 passes, you might want to consider increasing your cutoff, as, again, this is only a cartographic convention not a precise representation of the exact area used for ethanol production.

As I mentioned above, you might want to script or model steps 1-8, as you will repeat those several times. You can just as easily run the whole thing manually too though. Also, optionally, instead of using a residual in step 8, you could just always recalculate the radius for all features until you have an output from step 7 where all features have a satisfactory residual.

When you have reached the point that you are happy with the residuals, your buffer output from step 1 on the last pass will be the buffer you want to use for your map.


This Study using GIS for Ethanol has standardized a model so it can be scaleable. (might be overkill but raises good questions that might affect your current work-flow)

The Study can be used to evaluate ideal bio-ethanol plant sites according to 3 Scenarios:

1. Control scenario 2. Economic scenario 3. Environmental scenario



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.