Ответ 1
Я думаю, что проблема возникает, потому что вы уделяете слишком мало времени, чтобы Geolocator сделал правильное считывание с Geolocator.GetGeopositionAsync - timeout:
Geoposition geoposition = await geolocator.GetGeopositionAsync(TimeSpan.FromMilliseconds(500), TimeSpan.FromSeconds(1));
Вы даете ему только 1 секунду, а получение более точной позиции занимает время.
Мой пример:
Geolocator geolocator;
Geoposition geoposition;
public MainPage()
{
this.InitializeComponent();
geolocator = new Geolocator();
geolocator.DesiredAccuracyInMeters = 10;
geolocator.ReportInterval = 0;
myButton.Click += async (sender, e) =>
{
geoposition = await geolocator.GetGeopositionAsync();
string latitude = geoposition.Coordinate.Latitude.ToString("0.0000000000");
string Longitude = geoposition.Coordinate.Longitude.ToString("0.0000000000");
string Accuracy = geoposition.Coordinate.Accuracy.ToString("0.0000000000");
};
}
Код выше возвращает позицию (в моем случае) с точностью ~ 35 метров, НО после ожидания около 20-30 секунд. Отметим также, что точность зависит от количества доступных сателлитов.
Также некоторые замечания из MSDN:
-
установите Geolocator.ReportInterval в 0:
Приложения, которые требуют данных в реальном времени, должны установить ReportInterval в 0, чтобы указать, что минимальный интервал не указан. В Windows, когда интервал отчета равен 0, приложение получает события на частоте, которую посылает их самый точный источник местоположения. В Windows Phone приложение получит обновления со скоростью, зависящей от точности, запрашиваемой приложением.
-
установите Geolocator.DesiredAccuracyInMeters на 10 метров:
◾ Если пользователь пытается разделить свою позицию, приложение должно запросить точность около 10 метров.
-
попытайтесь разобраться между запуском геолокатора и его повторением:
Рассчитайте задержку запуска. В первый раз, когда приложение запрашивает данные о местоположении, может произойти короткая задержка (1-2 секунды), пока поставщик местоположения запустится. Рассмотрим это в дизайне вашего пользовательского интерфейса приложения. Например, вы можете избежать блокировки других задач до завершения вызова GetGeopositionAsync.