距 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 列最近的位置的主要内容,如果未能解决你的问题,请参考以下文章

使用距位置的距离有效地计算最近的 5 个位置

Sequelize 地理空间查询:找到距某个位置最近的“n”个点

CSS Grid Column中的元素,上边距表现为位置top

如何在laravel的json数组列中找到字符串搜索的位置

用MATLAB怎么在数列中找到需要的值并返回在数列中的位置

CSS盒子模型外边距 ③ ( 插入图片 | 插入图片位置移动 - 修改外边距 | 背景图片 | 背景图片移动位置 - 修改背景位置 background-position )