업데이트 : 여기에서 샘플을 사용하여 - 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();
}
}
나는 해결책이 아니라 같은 경험을 가지고 있습니다. – Guldan