Comment trianguler correctement les tours cellulaires GSM pour obtenir un emplacement?

Tout d'abord, j'essaie de faire tout ce désastre en c# (. Net 4) donc si vous venez avec du code pour m'aider, cela serait apprécié mais vraiment tout aiderait à ce stade.

J'ai une situation où j'ai un périphérique qui ne peut obtenir que des informations de cellule GSM (incidemment via la commande AT+KCELL) donc j'ai une collection de valeurs sur les tours cellulaires (chacune a LAC, MCC, MNC, ID de cellule, force du Signal et la première avance de synchronisation). Je pense donc que je suis dans un bon endroit pour être capable de trouver une sorte de coordonnée de longitude et de latitude (quoique inexacte, mais, bien meh). C'est là que je cherche de l'aide parce que maintenant mon petit cerveau est confus...

Je peux voir divers services qui fournissent une résolution de code cellulaire (Google, Open Cell ID, etc.) et ils prennent LAC, MCC etc. comme arguments et renvoient une coordonnée. Je pense que ce qu'ils retournent serait donc la coordonnée de la tour donnée dans laquelle je passe. Donc dans mon cas je pourrais envoyer tous les LACs etc que j'AI et récupère une collection de longitude et de latitudes. Génial, mais ce n'est pas là que se trouve mon appareil. Maintenant, je pense que je dois faire une sorte de triangulation et c'est là que mon manque de connaissances me fait mal.

Alors j'ai raison pour l'instant? En supposant que je suis, Comment puis-je effectuer ce calcul (y a-t-il quelque chose qui me dira quoi faire avec tous ces nombres ou, mieux encore, une bibliothèque open source que je peux référencer et alimenter tout cela pour obtenir quelque chose sensible)?

Je suppose que je devrais utiliser l'avance de synchronisation pour déterminer une distance approximative d'une tour cellulaire (peut-être en utilisant la force du signal d'une manière ou d'une autre) mais que dois-je faire? Comme vous pouvez le dire-je suis loin de ma profondeur ici!

Par exemple, c'est quelque chose que je pourrais récupérer de la commande AT susmentionnée:

5,74,33,32f210,157e,8101,50,0,79,3,32f210,157e,80f7,37,64,5,32f210,157e,810b,37,55,32,32f210,157e,9d3,27,41,33,32f210,157e,edf8,15

Le briser et l'analyser je voudrais obtenir (j'espère que j'analyse ce droit - il y a une chance qu'il y ait un bug dans ma routine d'analyse de sûr, mais il semble raisonnable):

Number of cells: 5

La Cellule 1

LAC: 5502
MNC: 1
MCC: 232
Cell ID: 33025
Signal: 80
ARFCN: 74
BSIC: 33
Timing advance: 0
Longitude: 14.2565389
Latitude: 48.2248439

Cellule 2

LAC: 5502
MNC: 1
MCC: 232
Cell ID: 33015
Signal: 55
ARFCN: 79
BSIC: 3
Longitude: 14.2637736
Latitude: 48.2331576

Cellule 3

LAC: 5502
MNC: 1
MCC: 232
Cell ID: 33035
Signal: 55
ARFCN: 64
BSIC: 5
Longitude: 14.2488966
Latitude: 48.232513

Cellule 4

LAC: 5502
MNC: 1
MCC: 232
Cell ID: 2515
Signal: 39
ARFCN: 55
BSIC: 32
Longitude: 14.2488163
Latitude: 48.2277972

Cellule 5

LAC: 5502
MNC: 1
MCC: 232
Cell ID: 60920
Signal: 21
ARFCN: 41
BSIC: 33
Longitude: 14.2647612
Latitude: 48.2299558

Donc, avec toutes ces informations, Comment puis-je trouver, de la manière la plus précise, où je suis réellement?

28
demandé sur kmp 2012-04-26 12:37:03

2 réponses

Je peux vous aider avec un peu de théorie.

La Triangulation consiste essentiellement à trouver le point d'intersection de 3 cercles.

Chaque tour mobile est le centre d'un cercle. La taille du cercle est relative à la force du signal de cette tour.

L'endroit où les 3 cercles se chevauchent est l'endroit où se trouve l'utilisateur.

Vous pouvez faire une triangulation très basique comme suit:

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)

Voici un exemple de travail utilisant les valeurs de votre 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

34
répondu Jared Kells 2012-04-26 12:17:05

Ce n'est pas vraiment une réponse mais c'est un démarreur et je pourrais ajouter plus:

Les ID de cellule sont publiés il semble:

Http://openbmap.org/

J'ai trouvé ce lien de cette page wiki qui a des liens vers d'autres sources de données d'id de cellule: http://en.wikipedia.org/wiki/Cell_ID )

Voir le bas de la page est un lien vers les données d'id de cellule:

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

Aussi j'ai trouvé ceci vidéo youtube où un gars joue avec certaines applications qui ont des emplacements de tour cellulaire, il semble:

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

Peut-être entre les ID de cellule et la force du signal, vous pouvez faire une supposition..

Mais AFAIK pour la triangulation générale, vous devez connaître l'emplacement exact d'au moins trois tours et votre distance exacte d'eux (cela pourrait être une distance approximative avec la force du signal, mais il peut juste être trop précis).

Il on dirait que wikipedia dit que c'est fait de cette façon.. utilisez une combinaison de la cellule dans laquelle vous vous trouvez, de la tour la plus proche et des forces du signal pour obtenir votre position:

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

3
répondu gordatron 2012-04-26 10:30:55