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

我有一个包含客户经度和纬度的数据库,我有一个搜索表单,用户将输入log / lat和距离下拉列表包含50英里,100英里,….当用户点击搜索时我想写一个linq查询到从这个距离半径的db中获取所有客户。 如何使用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)与所需距离进行比较。

逻辑是计算距离<=所需距离然后它表示当前客户处于所需距离,否则客户在径向距离之外