Cellular Phone Tower Siting
Group 4: Bruce Bayne, April Brice, Andrew Pasquale, and Mark Wheeler

Assignment:

For the southern California study area used in previous labs, identify sites for a network of cellular phone towers to provide coverage throughout the region.  Considering the following criteria:

Introduction

Cost

Cell towers are located by individual companies depending upon their own business plan or the market with which they serve.  In order to locate towers with the greatest cost efficiency, cellular companies comply with market driven principles to reach the objectives of their customers.  In reality, regulatory requirements, physical design, topography, population density and business goals are the driving factors of cell tower location.

Given the assumption that construction of a new cell tower (rents, construction, and legal costs combined) is roughly $1M, the team determined that cost mitigation is achieved through careful site selection.  The goal was to identify sites that would theoretically present a case for mininal siting cost.  Given the data available, the team assumed that such a site would have characteristics of minimal slope, compatible land use and an approximate location to population centers and road networks (given the need for power and telephone service)  to ensure adequate coverage and minimal cost.

Environmental Impacts / Engineering / Aesthetics

As discussed above a number of factors were applied to the selection criteria.  A brief description of these factors is provided to clarify our assumptions: A review of the planning web sites concerning cell towers suggests that the above criteria are used to varying degrees in the location analysis process.  The team's approach could be enhanced with other datasets such as building foot prints with height values to select potential existing structures for location on appropriate land uses.  Soil mapping information could also be used to determine whether or not a tower structure will have good support.   Other cultural factors such as the location of historic districts, distance from airports and schools may require further consideration if cell towers were proposed in areas of mixed use near residential housing, tall commercial buildings or runways. Additional site information like vegetation and wildlife data could also be useful.

Population Effects on Siting

Cell towers operate on the basis on channel allocation, meaning that a single broadcasting tower is limited to a specific number of users.  The implication is that in areas of dense population with high demand for cellular use, a number of towers are required to meet demand.  The team applied population values for a 1997 update of the US Census for the study area as the criterion to determine the optimal number of demand centers.

Demand Center Criteria
1. Population
The team took the approach that population defined the demand centers or “markets” for cellular service. The assumption is that high population per square unit would require a greater number of towers to provide adequate coverage (users per channel) than less populated areas.  The values used were population per 1000 kilometers taken for US Census tract-level data for the study area 1990 and 1997.  The 1,000 km figure was used so that population figures used in our calculations would have a value greater than 1.

Because market needs are not static, the team attempted to compensate for increases in demand over time (and the need for more towers) by looking at Census Tracts that had undergone population growth between 1990 and 1997.  Assuming that such change might continue for another ten years, the team decided that additional cell towers should be placed in these areas even when calculations had determined adequate coverage for demand centers.

2. Land use suitability (as described above).
3. Cell tower height of 200 feet.
4. Cell tower coverage radius of 1 –20 miles ( a maximum value of 32,000 meters).







Acquiring the Data:

The team used ESRI's population data (derived from 1990 and 1997(estimated) Census data) to determine population density.  This data was provided as an ArcView shape file (socal_tract.shp).  We converted this file to an Arc/info coverage using the SHAPEARC command:

arc: shapearc socal_tract tract3 type
arc: clean tract3

Then using the REGIONPOLY command to transfer the attribute tables correctly
arc: regionpoly tract3 tract4 type tract4.tab

Redefined the coverage using the PROJECTDEFINE command:
Arc: Projectdefine cover tract4
input
projection geographic
units dd
datum nad83
parameters

Then reprojected the census tract coverage using the following commands:
Arc: project cover tract4 tract5
output
projection utm
zone 11
datum nad27
units meters
parameters

Built for polygons using the CLEAN Command then calculated  population density for each polygon in TABLES:
TABLES: additem tract5.pat popden 8 8 f 1
TABLES: sel tract5.pat
TABLES: calc popden =  1000000 * pop1997 / area  {this was multiplied by 1000 to convert to square kilometers from square meters, and then again by 1000 to create numbers greater than one which were easier to visualize;  population density is now in per 1,000 square kilometers}

Converted to GRID space using the following command:
Arc: Polygrid tract5 popgrid popden
Cell Size (square cell) 50

The census data extended beyond the previous study area and so we trimmed the grid using the border coverage.
Clip popgrid to border....
Grid: gridclip
Usage: GRIDCLIP <in_grid> <out_grid>
          {* | COVER <clip_cover> | BOX <xmin ymin xmax ymax>}
Grid: gridclip popgrid popgrid1 cover border

Viewing the resulting grid..
Grid: mape popgrid1
Grid gpl popgrid1 # # 10000

Population Density Grid (popgrid1)

Next thinking about VISIBILITY command we thought that perhaps we could use the roads as observation points (point or line data works) to locate towers.  Created a new coverage using the ARCVIEW shape file ca_rds
arc: shapearc ca_rds  majrds
arc: build majrds arc

Reprojected the file into utm, checked results with the lu and tract5 coverages.
arc:  project cover majords majoroads
input was set previously using PROJECTDEFINE and the following parameters:  geographic, dd, nad83,
:output
:projection utm
:units meters
:datum nad27
:parmaeters
:end

Before attempting to GRID any of the data there is a need to clip the tract5 and roads to a more usable geographic extent.  The border coverage generated to define our area of study within California from previous labs was used as the clip cover

arc:  clip majroads border majroads2
arc:  clip tract5 border majroads tract6

Model Development:

Step 1: Identify local high elevation points in study area

Operationalizing our conceptual model of defining demand centers began with the selection of the highest points in the study area using ridgeline data generated in previous projects.  These high points became the seed data when matched with land suitability for our first set of potential cell tower locations.

Located ridgelines using the following command:
GRID: ridges = con( flowacc = 0, 1)

Located flat areas near ridgeline with slope < 3% and within 50 meters of ridgeline
GRID: flat1 = con(slopegrid < 3, con(eucdistance ( ridges ) < 50, 1))
This looks pretty good

Step 2:  Identify suitable land use

We determined that it would be useful to have a grid of land use with a look up table of definitions.  Started with the land use polygon coverage.  Appended the attribute table with land use descriptive "titles"  that correspond to the 1 and 2 digit codes in the table.  Performed the following steps:  Used a combination of Table commands (DEFINE, ADD) and joinitem to append the contents of a text file containing land use codes and titles.  The relate used from lulc2.pat was lulc-id 4, 10, B.  The "join-to" table <lu-table> was generated using AWK to create a text file of  data containing a two columns,  a number field of lu-codes and a string of lu-names, which was copied and pasted from  USGS  The intent of this process was to have a way in the future to export the VAT values and still have a land use title attached to the code.  However, we did not end up using this information later in the process.

Unsuitable sites were determined by reviewing data on the Cyburbia website.  The literature suggests a number of environmental constraints that may be applied to cellular tower siting such as wetlands and surface water bodies, but also other cultural constraints refereed to as Locally Unwanted Land Uses.  This could restrict tower placement in residential neighborhoods, near schools or child care centers, near historic sites, or within protected opens space such as conservation and/or recreational lands either private, public or nonprofit.  Using the available land use designation the following codes were selected as unsuitable:

11 - Residential
16 and 17 - Mixed Urban
4 - Forested land
5 - surface water bodies
6 - wetlands
slope > 3 percent considered for all land uses

Converted poly to grid to select the above codes.

POLYGRID(<cover>,{item},{lookup_table},{weight_table},{cellsize}

GRID: lulc_grid = polygrid( lulc2, lulc2-id, lu-table, #, 50)

Created the following filter grids to weed out undesirable places for cell towers based upon:
        Land use (ie residential, wetlands and water, tundra, etc....)
        Slope (anything with a slope greater than 5%)
grid: filter2 = con (lugrid2 < 50, lugrid2)
grid: filter3 = con (filter2 ^= 11, filter2) This is a filter based on land use
grid: filter4 = con (slopegrid <= 3, filter3) This is a filter based on slope

Created a grid of desirable land use with the selected slope:
grid: filtah2 = con (filter3, flat1) remember flat1 is slope less than 3% within 50 meters of a ridge line.

Suitable Land Use Criteria: (all below with <3% slope)


Close up view of Land Use Suitable for Cell Tower Locations

Locate-Allocate Models:
 

This model was developed as a private sector site location model, where the objective is to minimize cost and maximize efficiency.  Each facility is located at the 'weighted center’ where the majority of the demand points are, tending towards those with a high weight. Intuitively you can see that this location would be one that is centrally located to the majority of the demand, or in other words, the median location. This model can be applied to find the optimal locations for any number of facilities and is referred to as the P-Median Problem in the location-allocation literature, where the value P is the number of facilities to locate.  Individual accessibility is not an issue in the private sector because overall cost is the primary consideration.

We used a MINDISTANCE LOCATE-ALLOCATE model to target tower locations in areas with high demand.  MinDistance works as follows:
- computes the location and allocation to minimize the total weighted distance traveled from all demand points to their nearest center.
We specified a maximum distance parameter - a numeric value defining the maximum distance for a demand point to travel. This was used as a distance threshold to maximize the amount of demand within a certain distance of a center. The default is unlimited distance where there is no constraint on the distance traveled.
 

We used the maxdistance radius of 32000 meters (approximately equivalent to 20 miles) since our focal extent for the cell tower locations ranged from 1-20 miles.
The following commands were issued to run the modelling process:
AP: Locatecandidates tract6 poly popden
AP: Locatecriteria mindistance 32000
AP:  locateallocate outalloc outcenters outglob 100

The SPIDER command was used to visualize the results of this:
AP:  spider tract6 poly outalloc tract6# site1 3

Results of Spider with Label Points

We tried to select the demand location points by selecting the polygons in the outalloc selection file
AP:  resel tract6 poly keyfile outalloc tract6#
AP:  create spider_cov select tract6 polygon
This created a coverage of the center points of the tract6 polygons that make up the spiders displayed above.
Problem is ...... we don't have a coverage of where all the lines converge.  We have  all the points that make up the spider, not just the center points.  So then we decided to do the above command using outcenters instead of outalloc.

AP:  resel tract6 poly keyfile outcenters tract6#
AP:  create spider_cov3 select tract6 polygon

then in arc/edit we took the polygon coverage and created a point coverage by selecting the label points and putting them into a separate coverage

AE:  drawe label
AE:  ef  label
AE:  sel all
AE:  put spiderpts


Results of first LOCATE-ALLOCATE using Outcenters to select demand centers





Round 2:
In order to represent more towers along major roadways, we created a buffer around the roads and calculated it with a population density of 1000.
Created rdtemp in arcview using for primary roads and selected secondary roads

Arc: buffer rdtemp rdbuf # # 50 # line
Arc: polygrid rdbuf rdgrid popden  {the item popden had previously been set to 1000}
GRID: rdgrid2 = setnull( rdgrid == 0, rdgrid )
Grid: popgrid2 = merge( rdgrid2, popgrid1 )
Grid: gpl popgrid2 # # 5000


Population Density Grid with Roads Assigned Moderate Population Density





Then using Locateallocate comands we determined the demand centers for each of the population density tracts.
Grid: popcov = gridpoly( int( popgrid2 ))
Arcplot: locatecandidates popcov poly grid-code
Arcplot: locatecriteria mindistance 32000
Arcplot: locateallocate outalloc2 outcenters2 outglob2 100
Viewed with spider

Results of second LOCATE-ALLOCATE Demand Centers
Based on Population Density and Road Buffers

The new values are shown in green, and the original values in blue.  This resulted in skewing the values even more towards LA, possibly because there are more roads in LA. We like the new locations along the coast, but want to try to get more points in the interior region.
We increased the population density of the roads in order to weight these areas more heavily during the location process

Grid: rdgrid3 = rdgrid2 * 10
Grid: popgrid2 = merge( rdgrid3, popgrid1 )
Grid: popcov = gridpoly( int( popgrid2 ))

Arcplot: locatecandidates popcov poly grid-code
Arcplot: locatecriteria mindistance 32000
Arcplot: locateallocate out_all out_center out_globals 200
Arcplot: resel popcov poly keyfile out_center popcov#

Arcplot: create spider2 select popcov poly
Arcedit: ec spider2
Arcedit: ef label
Arcedit: sel all
Arcedit: put spiderpts2

Grid: spidergrid3 = pointgrid( spiderpts2, #, #, #, 200)
Grid: elev = con( filtah2 > 0, filled_ca3 )
Take Note: This command won't work unless both grids are at the same resolution!!!
Grid: temp1 = con( spidergrid2 > 0, focalmax( elev, circle, 5 ))
Grid: temp2 = eucallocation( int( temp1), #, #, 1000 )


Buffered demand points set equal to the value of the local high point within the buffer
Red indicates relative high elevation, purple indicates low elevation

This missed a few points which did not have available land within 1 km.  Probably this is okay but it will be judged on final coverage.  If we were to enlarge the radius this may result in loosing some points in the very dense areas, which would overlap.

This command selects filtered topographic locations equal to the highest point in the neighborhood.
Grid: temp3 = con( int( elev ) == temp2, elev )
Unfortunately there are more than one point with the same elevation within the neighborhood.  Need to find a way to just get one point.
Grid: temp4 = setnull( focalsum( temp3, circle, 5) > temp3, temp3 )
Grid: towers = gridpoint( temp4, elev )

Visibility:

The following was in the discussion section of the VISIBILITY command:
performs visibility analysis on a grid by determining how many observation points can be seen from each cell location of the input grid, or which cell locations can be seen by each observation point.
Please note that the location of telecommunications sites is not a merely a simple matter of determining the inter-visibility, but rather involves a number of parameters involved with the modeling of radio wave propagation, including: reflection, refraction specific to the frequency, attenuation (signal weakening), interference, atmospheric effects, and so on. Nonetheless, the VISIBILTIY function is appropriate during the preliminary investigation stages of assessing possible telecommunication sites and coverage.

We used tables to add vertical offset and maximum radius items to the .pat for the visibility command
Enter Command: additem towers.pat offseta 4 4 I
Enter Command: additem towers.pat radius2 8 8 i
Enter Command: sel towers.pat
Enter Command: calc offseta = 200
Enter Command: calc radius2 = 32000

The following command was issued to determine visibility from tower locations:
Arc: visibility filled_ca3 towers point coverage grid frequency

Tower Visibility
 Purple indicates one tower is visible from a given point,
while blue, green, yellow, and red indicate increasing numbers of towers visible.

This has some large gaps in the middle.  We need to add some points along the roads to compensate for this.  Also, we may want to divide the area into two zones, an LA zone and an everywhere else zone.  LA zone would have a small neighborhood radius, while the radius everywhere else could be increased to retain more of the points which were lost during processing.

Grid: towergrid = pointgrid( towers, towers-id, #, #, 200)
Grid: cellgrid = eucallocation( int( towergrid), #, #, 32000 )
Grid: coverage2 = con( coverage > 0, cellgrid )
 
 

Results of Visibility1, each color indicates a different cell

 

The number of people in each cell zone was evaluated to determine how well demand was being met.  Although we do not have information about how many cell phone users are in the general population or how many users each cell tower can support, the results of this give us a relative idea of how well towers are spaced relative to demand.


Number of People per Cell.
(Scale ranges from purple (low), blue, green, to red (high)
Note that these numbers are multiplied by 1000, and are best used as relative values

This indicates that the areas with the highest number of people per tower are in the areas surrounding LA, especially the urban centers to the north and northwest.  Additional towers might need to be sited in these areas if demand exceeds the capacity of the transmitters.

We interactively added some points along roadways in arc/edit.  New coverage is spiderpts3.
 
 

New Demand Center Locations and previous Visibility 

We elected to pursue the process of running a location allocation process for all areas outside of urban LA.  This is based on our assumption that the radius for cell tower allocation should differ in the urban and rural settings.  To do this we would need an elevation coverage and grid used in our previous Visibility work, but filtered for values falling within urban LA.  A filter was created in ARCPLOT using the RESEL with poly option to trace an outline over the population coverage.  The resulting census-tract-for-LA coverage was converted to a grid and its values set to -5 for the purposes of identification (-5 is a unique value).  This lagrid was then merged with the elevation grid and the values = -5 were set to null.  The result is an elevation grid of values for all areas outside of urban LA for use in the visibility process.  The commands are as follows:

ArcPlot:
resel tract6 polygon polygon
create tractla select tract6 polygon
GRID: lagrid = polygrid( tractla, #, # , #, 200)
GRID: elev2 = con( lagrid > 0, elev)
Grid:  Docell:
:: if (elev2 > 0) elev3 = -5
:: end
Grid: elev4 = merge (elev3, elev)
Grid: elev5 = setnull( elev4 = -5, elev4)

Selecting Suitable Elevation for Tower Locations in Rural Areas Using Demand Center Criteria
To look for the highest points with this new area, we determined that the radius in rural areas could be set as high as 80 cells or 16km.

The new point coverage of demand centers determined by location allocation and manually added points along highways was converted to gridspace
Grid: rdspider = pointgrid( spiderpts3, #, #, #, 200)

We tried two different radii for the neighborhood used to select the highest suitable site in the rural areas.
Grid: temp1a = con( rdspider > 0, focalmax ( elev5, circle, 80 ))  {80 cells = 16 km}
This resulted in too much overlap between tower locations, and was scrapped.
We then tried a radius of 40 cells (8km)

Grid: temp1aa = con( rdspider > 0, focalmax( elev5, circle, 40 ))  {40 cells = 8 km}
Grid: temp2aa = eucallocation( int( temp1aa ), #, #, 8000 )
Grid: elev6 = int( elev5 )
Grid: temp3aa = zonalmax( temp2aa, elev6 )
Grid: temp4aa = con( temp3aa == elev6, elev6)
Grid: temp5aa = con( zonalsum( temp4aa, elev6 ) == elev6, temp4aa )

Grid: towers2 = gridpoint( temp5aa, elev6 )
Arc: visibility filled_ca3 towers2 point coverage1aa grid frequency

This resulted in somewhat improved coverage outside of LA


Coverage outside of LA

We reran the visibility analysis using these new points and the original points in Los Angeles:

The original tower coverage and the new tower locations were appended
Arc: append alltowers points
towers
towers2

This new coverage was run through the visibility process, resulting in the following coverage:
Arc: visibility filled_ca3 towers2 point allcov grid frequency
 
 

Revised Visibility of Cell Towers
(Purple means 1 tower visible, blue, green, yellow and red, indicate more towers are visible)
Points indicate tower locations.  The road network is drawn in red)

This coverage is significantly improved from the original cell tower visibility.  However, there are some gaps along some roads that might be alleviated by siting towers manually using topography rather than just evenly spacing them along the roads.  Also, some towers were lost in the suitable site location selection process.

Grid: towergrid2 = pointgrid( alltowers, alltowers-id, #, #, 200)
Grid: cov = con( allcov > 0, cellgrid2 )
Grid: covden = zonalsum( cov, popgrid2 )






Third Round:
The previous revision to the tower locations resulted in a lack of coverage in some areas.  To resolve this, we interactively added points in areas lacking coverage, and in areas with high demand (especially suburban areas outside LA) using ARC/EDIT.  Points selected for additional towers were selected using topographic features.  The new tower location coverage looks like this:


New Tower Locations indicated in Blue, Old Towers in Red

This resulted in the following coverage, which has better coverage along the roads, and provides more growth potential in suburban areas around Los Angeles and Santa Barbara.  We might still want to target more towers in Lancaster and downtown Santa Monica.

We tried to identify areas with a high demand for increased cell tower use, given that each cell tower has a limited number of channels, and that high population areas would quickly reach market saturation.  This was part of the reasoning for adding more cell towers in high potential demand areas.


Relative population density served by each cell tower
Light blue indicates relative low consumer saturation per cell,
Dark blue indicates relative high consumer saturation per cell.

Second round: Relative population density served by each cell tower Final round: Relative population density served by each cell tower

The difference between the second round and the final round is that we were able to increase coverage along roadways, and meet increasing demand in surburban growth areas outside of Los Angeles.  Reference population trends in beginning of this document.

Evaluation:

The Location Allocation model provided a useful modelling technique to determine demand centers for towers.  There were some limitations in this approach, however.  The model tended to weight the dense population areas (LA) very heavily in the process.  We compensated by first creating a population buffer around the roads equal to a median population value for suburban areas.  This still required us to interactively add towers on areas meeting our suitablility requirements in areas with the potential for high demand and along highways in rural locations in order to maintain continuous coverage.