0

我们有两个(PostgreSQL 9.2)表。首先cities

 loc_id    | integer               | not null
 name      | character varying(40) | 
 gps_coord | point                 | 

其次是weather_stations

 s_id        | integer                | not null
 location    | character varying(255) | not null
 height      | integer                | 
 city_loc_id | integer                | 
 gps_coord   | point                  | 

使用它们的点坐标,我们如何找到最近的气象站城市?我想用这个城市来填充weather_stations(目前都是NULL)的外键,即city_loc_id. (拥有这样的外键是个好主意吗?)

我意识到我必须以某种方式使用最近点运算符(##),但是在编写查询时我有点迷茫。

4

2 回答 2

2

有一个距离运算符可能是您正在寻找的:select point1 <-> point2. (还有earthdistance,但对于您的目的来说似乎有点过分了。)

于 2013-05-29T23:47:02.730 回答
1

我找到了解决方案。谢谢您的帮助。

UPDATE weather_stations
    SET city_loc_id = (
        SELECT c.loc_id
        FROM cities c
        ORDER BY weather_stations.gps_coord <-> c.gps_coord
        LIMIT 1 );
于 2013-05-30T01:09:38.480 回答