100 obtains a list of labels from data storage each label is tested for whether the entire label is inside the map boundary first step 108 initializes flags that will be used in routine 10 step 112 tests whether vertices of each label are outside the map boundary if the vertices of a label are all inside the map boundary then the next label is tested if any vertices of a label are outside the map boundary then at step 116 a circumscribing rectangle is placed around the label then the circumscribing rectangle is divided into a plurality of cells at step 120 for example the rectangle may be divided into 64 cells by 64 cells forming a total of 4096 cells each cell is tested step 124 the test includes finding the center point of each cell to find the number of cells inside the label step 128 then at step 132 the center point of each cell used to find the number of cells both inside the label and inside the map the fraction of the label inside the map boundary is determined at step 136 the high and the low values of the x and y coordinates for the vertices of the label are found in step 140 then the label is tested step 144 to determine if the fraction of the label inside the map boundary is high enough to qualify for attempted movement inside the map there is one of two possible ways the label might move depending on its movement constraints which is determined in step 148 one movement in both the x axis and y axis direction is performed in.