2012-12-11 4 views
1

업데이트 : 여기에서 샘플을 사용하여 - http://code.msdn.microsoft.com/wpapps/Location-sample-f11aa4e7을 추가하고 고도 판독 값을 추가하면 코드와 동일한 결과를 얻습니다. 불량 정확도가 50 피트 정도 떨어져 있습니다. 720 (정확함)에서 300 ft 사이를왔다 갔다하면 뭔가 잘못되었다는 뜻입니다. 나는 단지 어디서 볼 수없는 ...Windows phone 8 gps/altitude 문제

나는 Windows 전화 8에 대한 GPS 추적 응용 프로그램을 만들기 시작하지만, 뭔가가 헤이 와이어가 될 것입니다. 내 응용 프로그램에서 (및 샘플 위치 응용 프로그램에서) 나는 정확하고 그렇지 않은 다른 읽기를 얻습니다. 일반적으로 고도는 ~ 95에서 ~ 215 사이에서 앞뒤로 점프합니다 (215는 올바른 값입니다). 내가 얻는 거리는 내 책상에 앉아 있거나 바깥을 산책하는 동안 몇 마일으로 빠르게 뛰어 올라 매우 정확하지 않습니다.

샘플 코드와 동일하므로 게시 할 코드가 확실하지 않습니다. 다른 관련 섹션이 있다고 생각되면 알려 주시기 바랍니다. 추가하겠습니다.

double maxSpeed = 0.0; 
    double maxAlt = -9999999.0; 
    double minAlt = 9999999.0; 
    double curDistance = 0.0; 
    GeoCoordinate lastCoord = null; 
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
    { 
     if ((bool)IsolatedStorageSettings.ApplicationSettings["LocationConsent"] != true) 
     { 
      // The user has opted out of Location. 
      return; 
     } 


     if (App.Geolocator == null) 
     { 
      // Use the app's global Geolocator variable 
      App.Geolocator = new Geolocator(); 
     } 

     App.Geolocator.DesiredAccuracy = PositionAccuracy.High; 
     //App.Geolocator.MovementThreshold = 1; // The units are meters. 
     App.Geolocator.ReportInterval = 1000; 
     //App.Geolocator.DesiredAccuracyInMeters = 50; 
     App.Geolocator.StatusChanged += geolocator_StatusChanged; 
     App.Geolocator.PositionChanged += geolocator_PositionChanged; 

     /* 
     geolocator = new Geolocator(); 
     geolocator.DesiredAccuracy = PositionAccuracy.High; 
     //geolocator.MovementThreshold = 1; // The units are meters. 
     geolocator.ReportInterval = 1000; 
     geolocator.StatusChanged += geolocator_StatusChanged; 
     geolocator.PositionChanged += geolocator_PositionChanged; 
     * 
     * */ 
     logging = true; 

     startTime = DateTime.Now; 


    } 
public static GeoCoordinate ConvertGeocoordinate(Geocoordinate geocoordinate) 
    { 
     return new GeoCoordinate 
      (
      geocoordinate.Latitude, 
      geocoordinate.Longitude, 
      geocoordinate.Altitude ?? Double.NaN, 
      geocoordinate.Accuracy, 
      geocoordinate.AltitudeAccuracy ?? Double.NaN, 
      geocoordinate.Speed ?? Double.NaN, 
      geocoordinate.Heading ?? Double.NaN 
      ); 
    } 
void geolocator_PositionChanged(Geolocator sender, PositionChangedEventArgs args) 
    { 
     Dispatcher.BeginInvoke(() => 
     { 
      if (lastCoord == null) 
      { 
       lastCoord = ConvertGeocoordinate(args.Position.Coordinate); 
      } 
      DateTime currentTime = DateTime.Now; 

      TimeSpan totalTime = currentTime - startTime; 

      timeValue.Text = totalTime.ToString(@"hh\:mm\:ss"); 


      System.Diagnostics.Debug.WriteLine(args.Position.Coordinate.Altitude.ToString()); 


      GeoCoordinate thisLocation = ConvertGeocoordinate(args.Position.Coordinate); 



      if (true) //units check true = standard 
      { 
       double speed = (double)thisLocation.Speed; 
       speed *= 2.23694; //m/s -> mph 
       speedValue.Text = speed.ToString("0"); 

       double alt = (double)thisLocation.Altitude; 
       if (alt > maxAlt) 
       { 
        maxAlt = alt; 
       } 
       if (alt < minAlt) 
       { 
        minAlt = alt; 
       } 
       /* 
       double currentAlt = (maxAlt - minAlt); 
       currentAlt *= 3.28084; //m -> ft 
       * */ 
       alt *= 3.28084; 
       altValue.Text = alt.ToString("0"); 

       double distance = thisLocation.GetDistanceTo(lastCoord); 

       curDistance += distance; 

       distance = curDistance * 0.000621371; // m -> miles 

       distanceValue.Text = distance.ToString("0.00"); 

       distanceUnits.Text = "(mi)"; 
       speedUnits.Text = "(mph)"; 
       altUnits.Text = "(ft)"; 

      } 


     }); 
    } 

편집 : 언급하지 않았지만 속도는 완벽하게 fyi입니다. 위도/경도는 일반적으로 내가있는 곳과 매우 비슷하므로 하드웨어 문제는 아니라고 생각합니다.

업데이트 : 값을 확인하기 위해 디버거 정지 대신 단지 인쇄 할 때,이 범 :

고도 = 내부 오류) (평가 방법 Windows.Devices.Geolocation.Geocoordinate.get_Altitude 동안 발생한

나는이 검색하려고했으나 오류가

문서는 고도와 몇 가지 다른 보장되지 않는다는 주장 ... 아무데도 인터넷에서 찾을 수없는, 그러나 또한 값을 말한다 거기에없는 경우는 null가됩니다. 나는 확인하고 결코 null이 아니다. 항상 또는 ~ 400 피트를 벗어난 값을 인쇄합니다.

UPDATE : 샘플 코드 : 당신은 (너무) 다른 문제를 볼 수있을 수도 있지만 GPS 고도가 매우 신뢰할 수 없습니다

void geolocator_PositionChanged(Geolocator sender, PositionChangedEventArgs args) 
    { 
     System.Diagnostics.Debug.WriteLine(args.Position.Coordinate.Altitude.ToString()); 


     if (!App.RunningInBackground) 
     { 
      Dispatcher.BeginInvoke(() => 
      { 
       LatitudeTextBlock.Text = args.Position.Coordinate.Latitude.ToString("0.00"); 
       LongitudeTextBlock.Text = args.Position.Coordinate.Longitude.ToString("0.00"); 

      }); 
     } 
     else 
     { 
      Microsoft.Phone.Shell.ShellToast toast = new Microsoft.Phone.Shell.ShellToast(); 
      toast.Content = args.Position.Coordinate.Latitude.ToString("0.00"); 
      toast.Title = "Location: "; 
      toast.NavigationUri = new Uri("/MainPage.xaml", UriKind.Relative); 
      toast.Show(); 

     } 
    } 
+0

나는 해결책이 아니라 같은 경험을 가지고 있습니다. – Guldan

답변

1

. 나는 약간의 Garmin 장치를 가지고 있고 그들은 모두 그 자리에서 뛰어 다닌다. 알맞은 고도의 정확도를 위해서는 바로미터가 필요합니다. 여기에 GPS 자세 부정확성에 대한 링크가 있습니다 GPS Elevation