I am creating polygons from the dissolved buffers of points and need to control the dissolve process. In the model the first stage is to assign high/med/blackspot using the following

def re_score(my_field,f2):

 if (my_field*1) < 14:
  f2 = 'Black'
 elif (my_field*1) < 24:
  f2 = 'Medium'
 elif (my_field*1) >= 24:
  f2 = "High"

Expression = re_score(!Rx!,f2)

and then use the following settings in buffer...

arcpy.Buffer_analysis(Signal_Strength_Added, Buffered_tower_range, Distance__value_or_field_, "FULL", "ROUND", "LIST", "Signal_Strength")

If distance between points is 30m then I buffer at 35m

I want to deal with overlap by defaulting to the worst case scenario, so if when dissolving the buffers are "med" and "blackspot", then it should be incorporated into the blackspot zone - I don't know how to specify this!

Any ideas?

The base points dataset is

Latitude    Longitude   Rx_dB  Best_unit
-17.06694    145.23158  -050.5  2
-17.06695    145.23297  -044.1  2

my_field in this case is the Rx_dB

The image below illustrates the issue... enter image description here

_pts is the output point dataset with signal strength _Lamb is the 30m buffer with dissolve by signal strength _pts_30m_Buffer - is just the buffer without the dissolve

Areas around 1a should be red, 2a/2b area should be yellow and 3 is correct.

Each dataset is around 500,000 points and I am still trying to do a spatial join on a new dataset without the dissolve.

  • Is the blackspot zone a separate layer from the other dissolved layer?
    – artwork21
    Feb 27, 2012 at 12:41
  • It is difficult to determine what is being asked here. It sounds like points with a [my_field] attribute are being buffered and merged; the intention is to attribute the merged buffers with the "worst" values of [my_field]--presumably their least values, or some re-expression thereof (vide re_score). Is this a correct interpretation?
    – whuber
    Feb 27, 2012 at 16:37
  • @artwork21 - black/med/high are all in one point file.
    – GeorgeC
    Feb 27, 2012 at 22:45
  • @whuber - "my_field" in this case is the signal strength of a radio antenna and the calculation is just to simplify the dataset to 3 classes. The issue is in the buffer-dissolve field where it is being dissolved by signal strength. I want the dissolve to use the worst case scenario. Your interpretation is basically correct except that I want the dissolve to incorporate the lowest quality into a zone where two signal strengths occur.
    – GeorgeC
    Feb 27, 2012 at 22:54
  • Let me know if whuber's solution below is what you need. If not, I can offer an alternative that starts with a Union of your overlapping buffer polygons so that each area with different overlap can end up being coded with the worst of black, medium and high. It takes a few more steps.
    – PolyGeo
    Feb 28, 2012 at 2:19

2 Answers 2


After creating the dissolved buffers, spatially join them to the original points and summarize the point attribute table by buffer id, requesting the minimum value of [my_field]. Join the summary table (which is keyed by buffer id) to the buffer table.


In this figure, points are symbolized by the value of [my_field]: black for low, gray for medium, and white for high values. The buffers are symbolized by the minimum value of [my_field] as obtained through the join-summarize-join procedure described here, again with dark for low, lighter for medium, and lightest for high values. You can visually check that light buffers contain only light points and that any buffer containing even a single a black point will be dark.

  • Seems like an excellent solution. The issue is that in the buffer-dissolve process it creates multi-part polygons. It looks like I will have to run the initial buffer (without dissolve), then join, summarize and join. However I am not clear about "summarize the point attribute table by buffer id, requesting the minimum value of [my_field]." - how is this done? The minimum is a Rx value of <14dB. See edits to question. Thanks again
    – GeorgeC
    Feb 28, 2012 at 5:55
  • Instead of summarize -what do you all think of the following process? We use select by attribute, ["Signal_Strength_pts" <> "Signal_Strength_poly"] and then simply replace/populate a new field with the "downgraded" signal strength, so when the values are not equal we do a raster calculator to populate the downgraded column with the lowest value. Will need to use 2,1,0 for high,med,black in the initial assignment process.
    – GeorgeC
    Feb 28, 2012 at 6:54
  • Summarizing will be much quicker and easier. Summarizing is a basic operation in ArcGIS, but how you carry it out seems to change from one version to another. One help page is at webhelp.esri.com/arcgiSDEsktop/9.3/… .
    – whuber
    Feb 28, 2012 at 16:21
  • -What's not clear is " summarize the point attribute table by buffer id, requesting the minimum value of [my_field]" - my_field is the Rx value and should be 14. So we go right click on Rx, summarize and then what does your screen look like for the test you did? My spatial join on a dataset with 500,000 points has taken 6h to do 10%...
    – GeorgeC
    Mar 1, 2012 at 7:02
  • When you summarize a table, you expect the summary to have one record for each unique value of the key field, which in this case is "buffer id". Therefore, you right-click on "buffer id" (not "my field") to initiate the summarize operation. (Read the "Summarize" dialog carefully: it tells you what it's going to do.) As far as the performance for a spatial join goes, that's another issue altogether. In principle it should work and it should be fast. That might make a good follow-up question for this site: perhaps someone can suggest a solution.
    – whuber
    Mar 1, 2012 at 15:42

Used an Arcgis model to spacialize the dataset (import xyz) after simplifying it as ARCGIS did not allow for datasets with more than 1million points and mine had 30million+.

Cygwin/SED/Python used to make the dataset geo-codeable (as output from RadioMobile had characters/lines that were illegal for database operations) and split each dataset to 250,000 to 1 million records each to increase processing efficiency and reduce risk of larger files crashing the Arcgis models.

$ cd /cygdrive/P/2012/Job_044_DM_Radio_Propogation/Working/FinalPropogation/cb_CHL03/working

$ sed -i -e '4 s/(dB)//' -e '4 s/Best\ unit/Best_Unit/' -e '1,3 d' '/cygdrive/P/2012/Job_044_DM_Radio_Propogation/Working/RM/trc_lamb.txt']]

All values less than a threshold (18) were dropped using python.

and then simplify using field calculator where

if (Rx) < 18:
  f2 = '0'
 elif (Rx) < 24:
  f2 = '1'
 elif (Rx) >= 32:
  f2 = "2"

Rx is the dBuV/m and f2 (in this case) is the signal strength code where, 0 (red) is low/no signal, 1 (yellow) is medium and 2 (green) is good signal (this is according to [insert full ref] where the software estimates 70% probability of accurate results. This is based on radio handbooks specifying actual levels needed for a 1.6MHz bandwidth UHF coverage is shown on page 93 (RSGB Yearbook – 2011) as >24dBuV/m and >32dBuV/m. The signal limits shown have the following interpretation: The colours represent 24dBμV/m (magenta) and broadly equates to 90% likelihood of mobile reception and 32dBμV/m (blue) represents 99% mobile and 90% handheld use.

As the dissolve buffer functions in Arcgis do not allow control of how the polygons with signal strength are dissolved/created the following process was used to downgrade each point before the final buffers were created. The pts and polygons were joined spatially and then whenever the derived signal strengths were not equal the lower value was used (this was processed in a model). The main process was

def re_score(f1,f2):
    if f1 < f2:
        out1 = f1
        out1 = f2
    return out1

for expression

re_score(!SS!, !SS_1!)

The above process created a polygon shape file and Radio Mobile created a kml based raster output of the signal strength of a single tower in a worst case scenario. RM also creates a freshnel zone and enables uses to move and check signal strengths within each radio network.

Your Answer

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

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