У меня есть пользователи, хранящиеся в базе данных, для которой установлены широта и долгота.Я хочу написать метод фильтра в моем слое обслуживания.
Мы используем ASP.NET MVC с шаблоном хранилища.Сейчас мы будем использовать каркас сущностей с SQLServer.Позже может переключиться на Azure или Amazon.
Мой метод фильтрации выглядит следующим образом:
public static IQueryable<IPerson> InRadius(this IQueryable<IPerson> query, Coordinate center, double radius)
{
return (from u in query
where
(Math.Pow(u.Location.Coordinate.Latitude - center.Latitude, 2) +
Math.Pow(u.Location.Coordinate.Longitude - center.Longitude, 2)) < Math.Pow(radius, 2)
select u);
}
Глядя на это, что-то не так.Это формула для нормальной тригонометрии.Это предполагает, что радиус находится в тех же измерениях, что и единицы измерения широты и долготы.
У меня есть несколько вопросов по этому коду:
- Потому что уровень обслуживания долженпонятия не имею об ORM, будет ли этот запрос выполняться в базе данных?Будет ли
Math.Pow(double,double)
передан в базу данных? - Если это невозможно сделать с базой данных, какой будет наиболее эффективный способ фильтрации этих данных.Я не хочу опускать все и затем сортировать их в моем приложении.
- Географический вопрос: есть ли способ преобразовать расстояние (в милях, километрах) в единицы измерения, которые использует Широта и Долгота?Это если для проблемы радиуса.