使用经纬度查找给定距离内的所有附近客户

4
我有一个包含客户经度和纬度的数据库,我有一个搜索表单,在该表单中用户将输入log/lat和距离下拉菜单,其中包含50英里、100英里等选项,当用户点击搜索时,我想编写一个Linq查询来获取所有在此距离半径内的客户。如何使用C#和Linq实现呢?
更新:
我发现了这个答案https://dev59.com/skrSa4cB1Zd3GeqPTAyj#1654365,但是它只提供了正方形而不是半径。

这可能会有帮助:https://dev59.com/gWcs5IYBdhLWcg3wdjvR#12836302 - Mahmoud Gamal
是的,但我认为这并没有达到一定的距离,对吗? - Amr Elgarhy
可能是查找最接近的经纬度位置的重复问题。 - StayOnTarget
2个回答

10

对于一个类似问题的回答,我稍作修改:

// radius is the distance in meters
var center = new GeoCoordinate(latitude, longitude);
var result = customers.Select(x => new GeoCoordinate(x.Latitude, x.Longitude))
                      .Where(x => x.GetDistanceTo(center) < radius);

您需要添加对 System.Device.dll 的引用。


3
据我所知,通过 L2E / EntityFramework,无法将 GeoCoordinate.GetDistanceTo() 转换为 SQL。 - RJB

0

使用Haversine公式

用户将拥有当前位置、客户位置和距离,所以使用Haversine公式计算当前位置和客户位置之间的距离(d1),然后将计算出的距离(d1)与所需距离进行比较。

逻辑是计算出的距离小于或等于所需距离,则意味着当前客户处于所需距离之内;否则,客户就在半径距离之外。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接