使用经度和纬度查找给定距离内的所有附近客户
Posted
技术标签:
【中文标题】使用经度和纬度查找给定距离内的所有附近客户【英文标题】:Find all nearby customers within a given distance using longitude and latitude 【发布时间】:2013-10-20 14:58:35 【问题描述】:我有一个包含客户经度和纬度的数据库,我有一个搜索表单,用户将在其中输入 log/lat,距离下拉列表包含 50 英里、100 英里、....当用户单击搜索时,我想写一个linq 查询以从数据库中获取位于此距离半径内的所有客户。如何使用 C# 和 linq 实现这一点?
更新: 我找到了这个https://***.com/a/1654365/20126,但这给出了一个正方形而不是半径
【问题讨论】:
这可能会有所帮助:***.com/a/12836302/722783 是的,但我认为这并没有达到一定的距离,对吗? Find closest location with longitude and latitude的可能重复 【参考方案1】:对我对类似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
的引用。
【讨论】:
据我所知,GeoCoordinate.GetDistanceTo() 无法通过 L2E / EntityFramework 翻译成 SQL【参考方案2】:使用半正弦公式
用户将拥有当前位置、客户位置和距离,因此使用 hasrsine 公式计算距离 (d1) 使用当前位置和客户位置,然后将计算的距离 (d1) 与所需距离进行比较。
逻辑是计算距离
【讨论】:
以上是关于使用经度和纬度查找给定距离内的所有附近客户的主要内容,如果未能解决你的问题,请参考以下文章
在给定特定纬度/经度的情况下,如何计算与纽约附近地铁入口的距离?