Почему вычисление расстояния между двумя координатами с использованием широты и долготы занимает больше времени?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Гость
 Почему вычисление расстояния между двумя координатами с использованием широты и долготы занимает больше времени?

Сообщение Гость »


Я работаю над одним требованием, согласно которому мне нужно показывать только те записи, которые попадают в радиус круга.
Для этого я использую ядро ​​.net в качестве внутреннего API, используя ядро ​​сущности Framework. Сначала я извлекаю все записи, а после этого вычисляю расстояние на основе записей из базы данных и моей широты и долготы во время выполнения.

Я использовал ссылку ниже и реализовал код для расчета расстояния.
find- расстояние-между-2-координатами-в-сетевом-ядре
Все работает хорошо на локальном хосте, но когда я развертываю эти изменения на сервере, происходит сбой.
Это занимает больше времени, так как существует более 50 записей, которые нужно обработать и вычислить расстояние одну за другой.
Кроме того, во время отладки я обнаружил, что CalculateDistance занимает почти 3-4 секунды на запись для расчета расстояния и представления их в «км»
Кто-нибудь может пролить свет на этот вопрос, поскольку я застрял в этом вопросе более двух дней.

Код: Выделить всё

private static double DistanceTo(double lat1, double lon1, double? lat2, double? lon2, char unit = 'K')
{
double rlat1 = Math.PI * lat1 / 180;
double rlat2 = (double)(Math.PI * lat2 / 180);
double theta = (double)(lon1 - lon2);
double rtheta = Math.PI * theta / 180;
double dist =
Math.Sin(rlat1) * Math.Sin(rlat2) + Math.Cos(rlat1) *
Math.Cos(rlat2) * Math.Cos(rtheta);
dist = Math.Acos(dist);
dist = dist * 180 / Math.PI;
dist = dist * 60 * 1.1515;

switch (unit)
{
case 'K': //Kilometers -> default
return dist * 1.609344;
case 'N': //Nautical Miles
return dist * 0.8684;
case 'M': //Miles
return dist;
}

return dist;
}
//Еще немного кода, из которого вызывается эта функция

Код: Выделить всё

    foreach (var objList in objPaginatedList)
{
if (DistanceTo(objList.Latitude, objList.Longitude, offeredServiceSubCategoriesAreasCovered.First().Latitude!,
offeredServiceSubCategoriesAreasCovered.First().Longitude!, 'K') < Convert.ToDouble(radiusFromCircle.First().DistanceInKiloMeters!.Split(" km")[0]))
{
obj!.Add(new GetEstimateRequestsAsPerSupplierOfferedServiceAndLocationDto
{
CategoryName = objList.CategoryName,
CityName = objList.CityName,
CountryName = objList.CountryName,
Created = objList.Created,
CreatedBy = objList.CreatedBy,
EstimateRequestRecordId = objList.EstimateRequestRecordId,
EstimateRequests = objList.EstimateRequests,
EstimateRequestsId = objList.EstimateRequestsId,
IsActive = objList.IsActive,
LastModified = objList.LastModified,
LastModifiedBy = objList.LastModifiedBy,
Latitude = objList.Latitude,
Longitude = objList.Longitude,
LineItemCategoryId = objList.LineItemCategoryId,
PlaceId = objList.PlaceId,
ProjectName = objList.ProjectName,
LineItemSubCategoryRecordId = objList.LineItemSubCategoryRecordId,
StateName = objList.StateName,
StreetAddressLine1 = objList.StreetAddressLine1,
SubCategoryName = objList.SubCategoryName
});
}
}
}
So the above function will get called 50 times if there are 50 records


Источник: https://stackoverflow.com/questions/781 ... ngitude-ta
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»