【问题标题】:Nearest location from JSON column距 JSON 列最近的位置
【发布时间】:2022-01-07 07:26:24
【问题描述】:

我们有一个目录应用程序,每个目录都有许多分支和许多位置点(纬度、经度)

分支位置作为JSON值列类型文本存储在数据库中,如下所示:

{
    "locations": [
        {
            "lat": "30.021463",
            "lng": "31.074944"
        },
        {
            "lat": "30.035189",
            "lng": "31.198761"
        }
    ]
}

在发送用户的经纬度时如何获取离用户最近的位置?

使用的技术

  1. .Net Core
  2. PostgreSQL
  3. 实体框架核心

【问题讨论】:

    标签: c# postgresql .net-core


    【解决方案1】:

    如果你的 Postgres 服务器上安装了 PostGIS,你可以试试这样的方法

    SELECT j.*,
      ST_DISTANCE(
        ST_GeogFromText('POINT(' || lng || ' ' || lat || ')'),
        ST_GeogFromText('POINT(31.08 30.025)')
        ) AS dist
    FROM YourTable AS t
    JOIN LATERAL jsonb_to_recordset(t.data->'locations') AS j(lat int, lng int) ON TRUE
    ORDER BY
      dist;
    

    我强烈建议您将大地测量信息存储在实际的 geography 列中。

    如果您经常查询它,至少应该将这个 JSON 规范化到另一个表中。

    【讨论】:

      猜你喜欢
      • 2018-08-13
      • 2020-11-27
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多