How to properly triangulate GSM cell towers to get a location?

This is not an answer really but its a starter and I might add more to it:

The cell ids are published it seems:

http://openbmap.org/

I found this link from this wiki page that has links to other cell id data sources: http://en.wikipedia.org/wiki/Cell_ID )

see the bottom of the page the is a link to the cell id data:

http://openbmap.org/latest/cellular/raw/input_raw.zip

also i found this youtube video where a guys is playing around with some apps that have cell tower locations it seems:

http://www.youtube.com/watch?v=CYvVN5dJD7A

possibly between the cell ids and signal strength you can make a guess..

but AFAIK for general triangulation you need to know the exact location of at least three towers and your exact distance from them (this could be a rough distance with signal strength but it may just be too in accurate).

it seems like wikipedia is saying its done in this way.. use a combination of which cell you are in, the closest tower and signal strengths to get your location:

http://en.wikipedia.org/wiki/Mobile_phone_tracking


I can help you with a bit of the theory.

Triangulation is basically finding the intersection point of 3 circles.

Each mobile tower is the center of a circle. The size of the circle is relative to the signal strength of that tower.

The place where the 3 circles overlap is where the user is.

You can do some very basic triangulation as follows:

3 Towers at 
 tx1,ty1 
 tx2,ty2 
 tx3,ty3

With signal strengths s1, s2, s3

We calculate the weight of each signal. Essentially a number from 0 to 1 for each tower where the sum of the weights adds up to 1.

Weighted signal w1, w2, w3 where:
 w1 = s1/(s1+s2+s3)
 w2 = s2/(s1+s2+s3)
 w3 = s3/(s1+s2+s3)


User will be at
x: (w1 * tx1 + w2 * tx2+ w3 * tx3)
y: (w1 * ty1 + w2 * ty2+ w3 * ty3)

Here is a working example using the values from your question:


s1 = 80
s2 = 55
s3 = 55
s4 = 55
s5 = 21

w1 = 80 / ( 80 + 55 + 55 + 55 + 21 ) 
w2 = 55 / ( 80 + 55 + 55 + 55 + 21 ) 
w3 = 55 / ( 80 + 55 + 55 + 55 + 21 ) 
w4 = 55 / ( 80 + 55 + 55 + 55 + 21 ) 
w5 = 21 / ( 80 + 55 + 55 + 55 + 21 ) 

w1 = 0.3007519
w2 = 0.2067669
w3 = 0.2067669
w4 = 0.2067669
w5 = 0.0789474

1. Longitude: 14.2565389
1. Latitude: 48.2248439

2. Longitude: 14.2637736
2. Latitude: 48.2331576

3. Longitude: 14.2488966
3. Latitude: 48.232513

4. Longitude: 14.2488163
4. Latitude: 48.2277972


5. Longitude: 14.2647612
5. Latitude: 48.2299558


Location Longitude = 
 14.2565389 * 0.3007519 + 
 14.2637736 * 0.2067669 + 
 14.2488966 * 0.2067669 +
 14.2488163 * 0.2067669 +
 14.2647612 * 0.0789474

Location Latitude: = 
 48.2248439 * 0.3007519 + 
 48.2331576 * 0.2067669 + 
 48.232513 * 0.2067669 +
 48.2277972 * 0.2067669 +
 48.2299558 * 0.0789474

Result Longitude: 14.255507
Result Latitude: 48.2291628