Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用IQueryable查找半径为另一个坐标的点_C#_Asp.net Mvc_Algorithm_Iqueryable_Geography - Fatal编程技术网

C# 使用IQueryable查找半径为另一个坐标的点

C# 使用IQueryable查找半径为另一个坐标的点,c#,asp.net-mvc,algorithm,iqueryable,geography,C#,Asp.net Mvc,Algorithm,Iqueryable,Geography,我将用户存储在一个设置了纬度和经度的数据库中。我想在我的服务层中编写一个过滤器方法 我们正在使用ASP.NETMVC和存储库模式。现在我们将在SQLServer中使用实体框架。以后可能会切换到Azure或Amazon 我的筛选方法如下所示: public static IQueryable<IPerson> InRadius(this IQueryable<IPerson> query, Coordinate center, double radius)

我将用户存储在一个设置了纬度和经度的数据库中。我想在我的服务层中编写一个过滤器方法

我们正在使用ASP.NETMVC和存储库模式。现在我们将在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);
    }
radius中的公共静态IQueryable(此IQueryable查询,坐标中心,双半径)
{
返回(来自查询中的u)
哪里
(Math.Pow(u.Location.Coordinate.Latitude-center.Latitude,2)+
Math.Pow(u.Location.Coordinate.Longitude-center.Longitude,2))
看看这个,有点不对劲。这是一个正规三角的公式。这是假设半径的测量值与纬度和经度的单位相同

我对该代码有几个问题:

  • 因为服务层应该不知道ORM,所以这个查询会在数据库上执行吗?是否将
    Math.Pow(double,double)
    传递到数据库
  • 如果不能在数据库上完成,那么过滤这些数据的最有效方法是什么。我不想在我的应用程序中把它们全部拉下来然后进行排序
  • 地理问题:有没有办法将距离(不管是英里、公里)转换成纬度和经度使用的单位?这就是半径问题
  • Math.Pow
    应该由实体框架映射到sql中的appropiate方法
  • 如果1。不应该是真的,只需要自己通过乘法计算幂,然后在数据库中执行
  • 我没有足够的知识来回答这个问题,但如果我没记错的话,这将是相当困难的,因为地球的形状(取决于参考坐标系和实际距离)
  • Math.Pow
    应该由实体框架映射到sql中的appropiate方法
  • 如果1。不应该是真的,只需要自己通过乘法计算幂,然后在数据库中执行
  • 我没有足够的知识来回答这个问题,但如果我没记错的话,这将是相当困难的,因为地球的形状(取决于参考坐标系和实际距离)
  • 它可能映射到
    POWER
    ,但您必须尝试并确定它

  • 如果不能转换为SQL,只需将
    Math.Pow(someExpression,2)
    更改为
    someExpression*someExpression
    。这肯定会在数据库上执行

  • 你不能用经度和纬度来计算距离。地球表面的情况与笛卡尔平面的情况不同

  • 它可能映射到
    POWER
    ,但您必须尝试并确定它

  • 如果不能转换为SQL,只需将
    Math.Pow(someExpression,2)
    更改为
    someExpression*someExpression
    。这肯定会在数据库上执行

  • 你不能用经度和纬度来计算距离。地球表面的情况与笛卡尔平面的情况不同


  • 我看到了地球的算法,它们有正弦和余弦,等等。我需要写出这些的函数,这样它们才能被映射吗?任何形式的计算,如果从头开始写的话,都可以转换成sql?我正在看地球的算法,它们有sin和cosine等。我需要为它们写函数,这样它们才能被映射吗?如果从头开始编写,任何形式的计算都可以转换为sql?