0

クエリのどこかで where オプションの値を使用できる方法はありますか? 私がやろうとしているのは、postgis を使用してマップ内のポイントを取得し、ビューでも距離を返すことです。

SELECT name, 
       ST_Distance(ST_GeographyFromText('SRID=4326;POINT(-110 29)')::geography, location:: geography) 
FROM global_points 
WHERE ST_DWithin(location, ST_GeographyFromText('SRID=4326;POINT(-110 29)'), 1000000);

それは単一のクエリには適していますが、ビューを使用して、他のテーブルからの他の情報を結合したいと思っていました。

SELECT * FROM view WHERE currLoc = POINT(50 50)

ビューの残りの部分で currLoc を使用できるようにするには、次のようにします。

CREATE VIEW testDis 
AS
SELECT name, ST_Distance(currPos::geography, latlong::geography) 
FROM global_points;

おそらく完全に間違っていますが、他に何ができるかわかりません。

ありがとう

4

1 に答える 1

1

ビューはパラメーターを持つことはできませんが、これを行うことができるセットを返す関数を作成できます。

線に沿った何か:

create function testDis(currPos geography, latlong geography)
   returns table(text, float)
as $$
  SELECT name, ST_Distance($1, $2) 
  FROM global_points;
$$
language sql;

(PostGIS を知らないので、データ型が間違っている可能性があります)

上記の定義を使用すると、次のようなことができます。

select * from testDis(foo, bar);

ここで、foo と bar は適切に型指定された値です。

于 2012-05-20T19:09:16.303 に答える