Я разрабатываю приложение, которое показывает маршрут между пунктом отправления и пунктом назначения и местоположением устройства в реальном времени, подписавшись на его событие PositionChanged из пространства имен Geolocation в C#.
Я бы хотел реализовать функцию «мониторинга» в режиме реального времени, которая может определять, какой участок исходного маршрута является устройством (город, шоссе и т. д.). У меня есть Список всех различных GPS-позиций на маршруте, соответствующих этим позициям, и у меня есть функция мониторинга, как показано ниже.
//Getting the current GPS position on GeoCoordinte currentGpsForCompare
//pointHighway is a GeoCoordinte List containing all the points along the route that is a highway
double distanceCompLoop = int.MaxValue;
if (pointHighway.Count() > 0)
{
for (int k = 0; k < pointHighway.Count(); k++)
{
double distanceCompare = currentGpsForCompare.GetDistanceTo(pointHighway.ElementAt(k));
if (distanceCompare < distanceCompLoop)
{
distanceCompLoop = distanceCompare;
actionTB.Text = "HIGHWAY";
actionTB.ForeColor = System.Drawing.Color.White;
actionTB.BackColor = System.Drawing.Color.Green;
}
}
}
.// and the same for city, hilly drive, country roads etcetera
.
.
}
Я чувствую, что реализация этой функции неэффективна и занимает больше времени, так как она должен выполнять циклы все время. Это также означает, что я вынужден увеличить тайм-аут на датчике GPS, чтобы до получения новой позиции GPS я завершил весь необходимый мониторинг. Есть ли более оптимизированный способ сделать это?