我有一个包含客户经度和纬度的数据库,我有一个搜索表单,用户将在其中输入日志/纬度,距离下拉列表包含 50 英里、100 英里……当用户单击搜索时,我想写一个 linq 查询从数据库中获取位于此距离半径内的所有客户。如何使用 C# 和 linq 做到这一点?
更新:
我发现了这个https://stackoverflow.com/a/1654365/20126但这给出了一个正方形而不是半径
我有一个包含客户经度和纬度的数据库,我有一个搜索表单,用户将在其中输入日志/纬度,距离下拉列表包含 50 英里、100 英里……当用户单击搜索时,我想写一个 linq 查询从数据库中获取位于此距离半径内的所有客户。如何使用 C# 和 linq 做到这一点?
更新:
我发现了这个https://stackoverflow.com/a/1654365/20126但这给出了一个正方形而不是半径
对我对类似问题的回答稍作修改:
// 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
.
使用半正弦公式
用户将拥有当前位置、客户位置和距离,因此使用 hasrsine 公式使用当前位置和客户位置计算距离 (d1) 然后将计算出的距离 (d1) 与所需距离进行比较。
逻辑计算距离 <= 所需距离,则表示当前客户在所需距离内,否则客户在径向距离之外