我现在在这种模式下呆了几天。
我正在尝试在与其他2个表不同的表中填充距离列。表格内有纬度,经度,城市ID,距离和位置ID。
LocationID与第一个表中的ID相同 为了计算到最近的城市的距离,我使用lat long来计算,这就是我的代码对于最近的距离的样子
select location_id, distance
from (SELECT t.table1.location_id as location_id,
( 6371 * acos( cos( radians(6.414478) ) *
cos( radians(t.table1.latitude::float8) ) *
cos( radians(t.table1.longitude::float8) - radians(12.466646) )
+ sin( radians(6.414478) ) * sin( radians(t.table1.latitude::float8) ) ) ) AS distance
FROM t.table1
INNER JOIN t.table2
on t.table1.location_id = t.table2.id
) km
group by location_id, distance
Having distance < 2000
order by distance limit 20;
但表仅返回空值
我将PostgreSQL用于此代码,用于可视化的应用程序是元数据库。
答案 0 :(得分:1)
我建议您使用PostGIS扩展名中的ST_Distance
函数进行距离计算,而不要自己做。这样会更容易,而且肯定会更快。
答案 1 :(得分:0)
编辑:可能是误解了最初的意图。
这应该可行:
select d.city_id, d.distance, latitude,location_id, longitude
from t.table1
left join lateral (
select city_id, distance from (
select location_id city_id, ( 6371 * acos( cos( radians(table3.latitude) ) *
cos( radians(t.table1.latitude::float8) ) *
cos( radians(t.table1.longitude::float8) - radians(table3.longitude) )
+ sin( radians(table3.latitude) ) * sin( radians(t.table1.latitude::float8) ) ) ) AS distance
from t.table3
) d
where distance < 2000
order by distance
limit 1
) cities on true
尝试一下。
最好的问候,
比尼亚尼