Tout d'abord, j'essaie de faire tout ce désastre en c # (.net 4) donc si vous trouvez du code pour m'aider, ce serait apprécié mais vraiment tout aiderait à ce stade.
J'ai une situation où j'ai un appareil qui ne peut obtenir que des informations sur la cellule GSM (accessoirement via le AT+KCELL
commande) j'ai donc une collection de valeurs sur les tours de cellules (chacune a LAC, MCC, MNC, ID de cellule, force du signal et la première avance de synchronisation). Je pense donc que je suis bien placé pour pouvoir trouver une sorte de coordonnées de longitude et de latitude (quoique inexactes, mais bon). C'est là que je demande de l'aide car maintenant mon petit cerveau est confus ...
Je peux voir divers services qui fournissent une résolution de code de cellule (Google, Open Cell ID, etc.) et ils prennent LAC, MCC etc. comme arguments et renvoient une coordonnée. Je pense que ce qu'ils reviendront serait donc la coordonnée de la tour donnée dans laquelle je passe. Donc dans mon cas, je pourrais envoyer tous les LAC, etc. que j'ai et récupérer une collection de longitude et de latitudes. Brillant, 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.
Ai-je raison pour l'instant? En supposant que je le sois, comment puis-je effectuer ce calcul (y a-t-il quelque chose qui me dira quoi faire avec tous ces chiffres ou, mieux encore, une bibliothèque open source dans laquelle je peux référencer et alimenter tout cela pour obtenir quelque chose de sensible) ?
Je suppose que j'aurais besoin d'utiliser l'avance de synchronisation pour déterminer une distance approximative d'une tour de cellule (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 constater - je suis loin de ma profondeur ici!
Par exemple, c'est quelque chose que je pourrais récupérer de la commande AT:
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
je le décompose et je l'analyse (j'espère que j'analyse correctement - il y a une chance qu'il y ait un bug dans ma routine d'analyse bien sûr, mais cela semble raisonnable):
Number of cells: 5
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
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?
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 puissance du signal de cette tour.
L'endroit où les 3 cercles se chevauchent est celui où se trouve l'utilisateur.
Vous pouvez effectuer une triangulation très basique comme suit:
3 Tours à Tx1, ty1 Tx2, ty2 Tx3, ty3 Avec des intensités de signal s1, s2, s3 Nous calculons le poids de chaque signal. Essentiellement un nombre de 0 à 1 pour chaque tour où la somme des poids s'additionne à 1. Signal pondéré w1, w2, w3 où: W1 = s1/( s1 + s2 + s3) w2 = s2/(s1 + s2 + s3) w3 = s3/(s1 + s2 + s3) L'utilisateur sera à 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 Localisation Longitude = 14.2565389 * 0.3007519 + 14.2637736 * 0.2067669 + 14.2488966 * 0.2067669 + 14.2488163 * 0.2067669 + 14.2647612 * 0.0789474 Latitude de localisation: = 48.2248439 * 0.3007519 + 48.2331576 * 0.2067669 + 48.232513 * 0.2067669 + 48.2277972 * 0.2067669 + 48.2299558 * 0.0789474 Résultat Longitude: 14.255507 Résultat Latitude: 48.2291628
Ce n'est pas vraiment une réponse mais c'est une entrée et je pourrais en ajouter plus:
Les identifiants des cellules sont publiés, il semble:
J'ai trouvé ce lien sur cette page wiki qui contient des liens vers d'autres sources de données d'identification de cellule: http://en.wikipedia.org/wiki/Cell_ID )
voir le bas de la page est un lien vers les données d'identification de la cellule:
http://openbmap.org/latest/cellular/raw/input_raw.Zip
j'ai aussi trouvé cette vidéo youtube où un gars joue avec des applications qui ont des emplacements de tours cellulaires, il semble:
http://www.youtube.com/watch?v=CYvVN5dJD7A
éventuellement entre les identifiants des cellules 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 par rapport à celles-ci (cela pourrait être une distance approximative avec la force du signal, mais elle peut être trop précise).
il semble 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 de la force du signal pour obtenir votre emplacement: