离JSON列最近的位置



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

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

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

如何在发送用户的纬度&经度

使用的技术

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

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

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

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

如果您经常查询JSON,那么至少应该将其规范化为另一个表。

最新更新