Я работаю над одним требованием, согласно которому мне нужно показывать только те записи, которые попадают в радиус круга.
Для этого я использую ядро .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