2010-12-08 7 views
0

Je cherchais depuis longtemps déjà à collecter les coordonnées GPS à partir d'un appareil Windows Phone 7 - mais comme je n'ai pas de périphérique de test, j'ai essayé de définir des données fictives. d'avoir retourné au lieu de données GPS réelles ... que, cependant, ne fonctionne pas trop bien: Ce code est partiellement un exemple de ce que j'ai trouvé ici. Cependant j'ai essayé de le mettre dans une classe à laquelle j'aurai accès plus tard.Obtenir les coordonnées GPS Windows Phone 7

public class GetGPS : GeoCoordinateWatcher 
{ 
    GeoCoordinateWatcher watcher; 

    public GetGPS() 
    { 
     watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.Default); 
     watcher.MovementThreshold = 20; 

     watcher.PositionChanged += this.watcher_PositionChanged; 
     watcher.StatusChanged += this.watcher_StatusChanged; 
     watcher.Start(); 
    } 

    private void watcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e) 
    { 
     switch (e.Status) 
     { 
      case GeoPositionStatus.Ready: 
       //plingpling 
       break; 
      case GeoPositionStatus.Disabled: 
       // location is unsupported on this device 
       break; 
      case GeoPositionStatus.NoData: 
       watcher.Position.Location.Latitude = 54.086369f; 
       watcher.Position.Location.Longitude = 12.124754f; 
       break; 
     } 
    } 

    private void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e) 
    { 
     var epl = e.Position.Location; 

     // Access the position information thusly: 
     epl.Latitude.ToString("0.000"); 
     epl.Longitude.ToString("0.000"); 
     epl.Altitude.ToString(); 
     epl.HorizontalAccuracy.ToString(); 
     epl.VerticalAccuracy.ToString(); 
     epl.Course.ToString(); 
     epl.Speed.ToString(); 
     e.Position.Timestamp.LocalDateTime.ToString(); 
    } 
} 

Ceci est mon autre classe dans laquelle je tente d'accéder aux données - mais je reçois toujours NaN comme lat1Rad et long1Rad ... Pouvez-vous s'il vous plaît me aider?

Je veux que cet exemple soit fonctionnel sur l'émulateur (avec une coordonnée GPS fixe) et sur un téléphone 7 - où il saisit réellement la valeur. Je veux simplement programmer une classe qui me renvoie la position GPS ACTUELLE.

Répondre

1

Pourquoi dérivez-vous frmo GeoCoordinateWatcher? C'est une erreur, IMO. Cela ne permet pas de savoir clairement quand vous utilisez les membres de votre propre classe et lorsque vous utilisez l'instance déléguée. Au moment où vous définissez les coordonnées sur l'observateur délégué, mais demander directement pour les coordonnées de l'instance GetGPS.

Je vous suggère de mettre en œuvre IGeoPositionWatcher<GeoCoordinate> avec votre propre observateur de position "fixe" - et de décider ensuite à l'heure d'exécution si vous utilisez le vrai GeoCoordinateWatcher. Évidemment ceci signifie que votre code de client devrait seulement dépendre de IGeoPositionWatcher<GeoCoordinate> au lieu de GeoCoordinateWatcher directement. Cela devrait également aider à des fins de tests unitaires.

0

Bien sûr, la réponse de Jon est très à propos - Je pense que vous ne l'avez pas fait abstraction d'interface raisonnable, mais même si vous obtenez que, pour des données simulées vous avez pris un regarder Kevin Wolf's GPS Simulator for Windpws Phone?

+0

J'ai trouvé un exemple de certains MvP c'est le suivant: GeoCoordinateWatcher location1 = new GeoCoordinateWatcher(); var myPosition = location1.Position; double latitude = 54.086369f; double longitude = 12.124754f; if (!myPosition.Location.IsUnknown) { latitude = myPosition.Location.Latitude; longitude = myPosition.Location.Longitude; } qui pourrait fonctionner, ou? – theXs