2

テーブル 2 の center_geom とテーブル 3 の home_location の間の距離を見つけて、テーブル 1 の列「距離」の値を更新します。

表1

obu_id     end_location     trip_id   end_loc_adj    distance

1          51               1234     
2          57               1357      44
2          63               1351
3          21               1212      20
3          23               4313

表 2

id        obu_id          center_geom 
int       int             geom

51        2               "0101000020ED0800006DFFCAA2A2553341B20E4717774E0C41"
52        3               "0101000020ED080000AE47E17A35F73341FE65F764723C0841"
57        3               "0101000020ED0800006DFFCAA2A2553341B20E4717774E0C41"
21        4               "0101000020ED080000B81E852BC555334186048C9EB1C21141"
  1. ここで、表 1 を参照してください: end_loc_adj に値がある場合、列: end_loc_adj を end_loc ではなく使用する必要があります ヒント: if-else を使用します。
  2. テーブル 1 の列名「end_loc」は、テーブル 2 の列「id」と同じ値を持ちます。

表 3

hhid           obu_id          home_location
(character     Int             geometry 
varying)       
11             1               "0101000020ED08000082E2C7A0B2413341BC5818A21F000941"
15             2               "0101000020ED080000B81E852BC555334186048C9EB1C21141"
17             3               "0101000020ED0800006DFFCAA2A2553341B20E4717774E0C41"
17             4               "0101000020ED080000B81E852BC555334186048C9EB1C21141"
22             7               "0101000020ED080000AE47E17A35F73341FE65F764723C0841"

私は次のことを試しました:

 select ST_Distance_Sphere ( ST_AsText(cast(v.house_location AS text)) , ST_AsText(cast(l.center AS text)))

public.locations l、clean.vehicles v から l.obu_id=v.obu_id および l.obu_id=3

ただし、これは単一のobu_idに対して手動で機能します

関数を使って一気に完成させたい。これを行う方法についてアイデアを教えてください。

ありがとう。

4

1 に答える 1

1
house_loc:=(select house_location from table1 where obu_id=b.obu_id);

house_loc_geom := ST_Transform(house_loc,4269);
IF b.end_location_adj IS null THEN
    end_loc:= (select center from table2 where id=b.end_location and obu_id= b.obu_id);
else 
    end_loc:= (select center from tabl2 where id = b.end_location_adj and obu_id = b.obu_id);
end if;

center_geom:=ST_Transform(end_loc,4269);


UPDATE table 1 set dist_from_home_in_meter=distance 
where obu_id=b.obu_id and trip_id=b.trip_id and end_location=b.end_location;

これは答えに近いです。いくつかの変更が必要です。

于 2013-07-09T22:29:23.513 に答える