我正在尝试查询我的数据库以查找某个位置内的所有事件。我想能够通过数据库查询,这样我就不必拉所有的事件,所以我试图转换成一个表达式一些代码。原始代码在此处找到:
public static Expression<Func<Location, bool>> GetWithinDistanceExpression(this Location current, double withinDistance, DistanceUnits units)
{
//in the EQ converts something to meters
double toMeters = 6376500;
double toRadiants = 0.0174532925199433;
double currentLat = current.Latitude * toRadiants;
double currentLong = current.Longitude * toRadiants;
return loc =>
(2 * Math.Atan2(
Math.Sqrt(
//TODO: Merge Expressions instead of copy pasta.
Math.Pow(Math.Sin((loc.Latitude - currentLat) / 2), 2) + Math.Cos(currentLat) * Math.Cos(loc.Latitude * toRadiants)
* Math.Pow(Math.Sin((loc.Longitude - currentLong) / 2), 2)
),
Math.Sqrt(1 -
//TODO: Merge Expressions instead of copy pasta.
Math.Pow(Math.Sin((loc.Latitude - currentLat) / 2), 2) + Math.Cos(currentLat)
* Math.Cos(loc.Latitude * toRadiants) * Math.Pow(Math.Sin((loc.Longitude - currentLong) / 2), 2)
)
)
)
* toMeters
< withinDistance;
}
但是,当我在db中查询location中的东西时,这不会返回任何结果。我猜这和铸造时的精密度有关。
如何在2个坐标的特定距离内获取位置?
1条答案
按热度按时间ngynwnxp1#