Once the distance between an access point and client is determined, a circular area around the location of the access point can be plotted, using this distance as the radius. In the instance with a single access point, the location of the mobile device is “believed to be somewhere on this circular plot”. If enough access points are contained within a constellation, this circular area can be plotted for each access point. These radii are then combined to determine an intersection point such as the one shown below:
This technique is called trilateration or multilateration depending on the number of reference access points.
While it's up to the application developer to choose the best trilateration and distance measurement technique for their specific implementation of SubPos, the trilateration process in the Android API uses an RSSI based path loss algorithm to determine the distance with various coefficients that will are selectable in the beacon source which model the environment the devices are located in.
Once the API has determined the distance between the receiving device and the Nodes, it uses a non-linear weighted least squares analysis technique to reduce the error from nodes situated further away from the receiver, while also determining its position.
Here are some simulated points running through the trilateration algorithm. The person indicates the actual client position and the blue point is the calculated output. The error in this instance is ~0.6meters (there is error from path loss estimates and rounding as well as the way the NWLS method handles points that are further away).