私は数時間これに取り組んできましたが、PostgreSQL と PostGIS に比較的慣れていないため、解決策を見つけることができません。指定されたポイント ジオメトリが指定されたポリゴン内にあるすべての場所を返すストアド プロシージャ (関数) を作成しようとしています。
これが私のPostgreSQL関数です:
CREATE OR REPLACE FUNCTION public.spGeoPoly(polystring text) RETURNS setof locations
AS $$
BEGIN
RETURN QUERY
SELECT * FROM locations
WHERE ST_Contains(ST_GeomFromText('POLYGON((polystring))', 4326), point_geom);
END;
$$ LANGUAGE plpgsql;
ハードコーディングされたポリストリングでこれをテストしましたが、これは機能しますが、次のような入力文字列を持つ関数として機能します。
SELECT spGeoPoly('50.4 8.2,50.3 9.3,49.9 9.5,49.7 8.8,49.9 7.8,50.4 8.2');
エラーが発生します:
ERROR: parse error - invalid geometry
HINT: "polygon((" <-- parse error at position 9 within geometry
位置 9 がポリゴン パラメータ文字列の開始点であるため、入力テキストがポリゴンの作成に必要な形式に適切に変換されていないと思います。テキストパラメータを修正するにはどうすればよいですか?
私は PostgreSQL 8.4.13 と PostGIS 1.5.8 を使用しています。