You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于经纬度(lat、lng)对EF Core查询结果按距离排序

根据指定经纬度对数据表按距离排序

需求:我有一张包含lat和lng列的数据表,希望根据指定位置的经纬度对表中数据进行排序,让距离最近的位置排在最前,其余数据按相同规则排序。

实现代码

首先是核心排序逻辑:

IQueryable<Post> result = result.OrderBy(x => Haversine(x.BeginningLat ?? 0, lat ?? 0, x.BeginningLng ?? 0, lng ?? 0));

然后是用于计算球面两点距离的Haversine方法:

private static double Haversine(double lat1, double lat2, double lon1, double lon2)
{
    const double r = 6378100; // 地球半径,单位:米

    var sdlat = Math.Sin((lat2 - lat1) / 2);
    var sdlon = Math.Sin((lon2 - lon1) / 2);

    var q = sdlat * sdlat + Math.Cos(lat1) * Math.Cos(lat2) * sdlon * sdlon;
    var d = 2 * r * Math.Asin(Math.Sqrt(q));

    return d;
}

关键说明

  • Haversine方法基于哈弗辛公式计算球面两点间的直线距离,结果以米为单位,适合地理位置的距离计算场景。
  • 代码中用?? 0处理了经纬度字段可能为null的情况,避免空引用异常。
  • 通过OrderBy按计算出的距离升序排列,直接实现了距离最近的数据排在最前面的需求。

内容的提问来源于stack exchange,提问作者mohammad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 23:30:55