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:
- percent of area covered (assume "covered" for a given point on the ground means "have an unobstructed view of a tower within range") and/or percent of population served
- cost of system (depends at least on number and size of towers, though you may wish to include other costs)
- environmental impacts (certain land uses may need to be avoided or buffered; some sites may be unsuitable for construction due to slope stability, seismic hazard, etc.)
- aesthetic impacts
- population density, as it affects both cell size and possible adverse situations siting towers near populated centers
- other factors you may identify as you research the issues
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.
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).
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
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
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
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 )
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.
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.