距 JSON 列最近的位置

Posted

技术标签:

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

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

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


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

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

使用的技术

    .Net Core PostgreSQL 实体框架核心

【问题讨论】:

【参考方案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 规范化到另一个表中。

【讨论】:

以上是关于距 JSON 列最近的位置的主要内容,如果未能解决你的问题,请参考以下文章