我有一个包含客户经度和纬度的数据库,我有一个搜索表单,其中用户将输入log / lat和距离下拉列表包含50英里,100英里,....当用户点击搜索时我想写一个linq查询从db获取此距离半径内的所有客户。如何使用C#和linq进行此操作?
更新:
我找到了这个https://stackoverflow.com/a/1654365/20126,但这给出了一个方形而不是半径
答案 0 :(得分:10)
对我对类似question的答案进行了一点修改:
// 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
的引用。
答案 1 :(得分:0)
使用半胱氨酸配方
用户将拥有当前位置,客户位置和距离因此使用半正式公式计算距离(d1)使用当前位置和客户位置然后将计算距离(d1)与所需距离进行比较。
逻辑是计算距离&lt; =所需距离然后它表示当前客户处于所需距离,否则客户超出径向距离