在c#中以指定的半径获取经纬度的范围

Posted

技术标签:

【中文标题】在c#中以指定的半径获取经纬度的范围【英文标题】:Get the Range of Lat Long with in specified Radius in c# 【发布时间】:2014-02-06 08:40:52 【问题描述】:

我正在开发一个网站,在该网站上,我的 Location 表中保存了用户的位置经纬度。现在我想使用一个过滤器 SearchByDistance 其值: 5km, 10km, 15km 用户可以通过它根据指定的Range获取结果。

现在我真正想做的是从用户那里获取输入 5km 并从我的表中获取结果,该表在用户保存的范围内 LatLongLocation 表中,距离该 LatLong 5 公里。我对此进行了谷歌搜索,并找到了一些链接,例如:

How do I find the lat/long that is x km north of a given lat/long

http://msdn.microsoft.com/en-us/library/system.device.location.geocoordinate.getdistanceto%28v=vs.110%29.aspx

但我无法从上面得到我的要求。请帮忙。谢谢

【问题讨论】:

***.com/questions/19478874/… 【参考方案1】:

我认为您的方法可以是,首先创建一个圆(您的中心将是用户经纬度),半径为 5KM 或 10Km,然后从多边形环中找到行。我是为 esri 地图编写的。希望能解决你的问题

Polygon areaOfInterset;

void CreateCircle(double radius)

    var point = new MapPoint(Your Lat and Long);// This will be user lat and long on which you want to draw a circle

    var graphic = new Graphic();
    var circle = new ESRI.ArcGIS.Client.Geometry.PointCollection();
    int i = 0;

    while (i <= 360)
    
        double degree = (i * (Math.PI / 180));
        double x = point.X + Math.Cos(degree) * radius;
        double y = point.Y + Math.Sin(degree) * radius;
        circle.Add(new MapPoint(x, y));
        i++;
    
    var rings = new ObservableCollection<ESRI.ArcGIS.Client.Geometry.PointCollection>  circle ;
            areaOfInterset = new Polygon  Rings = rings;

现在下一个任务是查找行。为此,您可以在循环内使用以下代码。

foreach(MapPoint selectedRow in DatabaseRowsToBeSearched)

   var isExist = IsInsideCircle(selectedRow)


bool IsInsideCircle(MapPoint location)

    var isInside = false;
    foreach (var shape in areaOfInterset.Rings)
    
        for (int i = 0, j = shape.Count - 1; i < shape.Count; j = i++)
        
            if ((((shape[i].Y <= location.Y) && (location.Y < shape[j].Y)) ||
                ((shape[j].Y <= location.Y) && (location.Y < shape[i].Y))) &&
                (location.X < (shape[j].X - shape[i].X) * (location.Y - shape[i].Y) / (shape[j].Y - shape[i].Y) + shape[i].X))
            
                isInside = !isInside;
            
        
    

    return isInside;

【讨论】:

您的代码不符合我的要求。在第二段代码中,您正在查找用户的位置,但我已经将用户的当前位置(LatLong)保存在我的表中。我的要求是在用户的 LatLong 中加上半径说 5 公里,然后找到落在这些 LatLong 范围之间的行。希望能解释清楚 我已应用您的代码但未成功。这不可能加上用户在数据库中保存的用户的 LatLong 中的输入吗?我们将得到 MinLatLong 和 MaxLatLong 的范围。有了这个,我们可以轻松地在 LINQ 中触发查询,以获取落在这两个范围内的记录数

以上是关于在c#中以指定的半径获取经纬度的范围的主要内容,如果未能解决你的问题,请参考以下文章

JavaRedis通过中心经纬度与半径获取范围内的结果集(类似附近的人)

JavaRedis通过中心经纬度与半径获取范围内的结果集(类似附近的人)

使用GPS经纬度定位附近地点(某一点范围内查询)

使用 C# 将半径添加到经度和纬度

计算半径内的 100 英里

通过纬度和经度从特定半径获取用户[重复]