2点間距離(1点からの距離)による検索方法

via: ここギコ!:PostGISで1点からの半径検索は、UTMなりに変換してから検索するのがベストプラクティス?, ここギコ!:PostGISのGeospatial化大作戦 その3(デタラメ編)
最近、GISにかかわり始めたばかりなので間違いかもしれませんが、上記ふたつを元にこんなこと考えてみました。

CREATE OR REPLACE FUNCTION expand_by_meter(geometry,double precision)
RETURNS geometry
AS '
    DECLARE
        utm_sid integer;
        geo geometry;
    BEGIN
        utm_sid = 32600 + ceil((ST_X($1)+180)/6)::int;
        geo = ST_Transform(ST_Expand(ST_Transform($1, utm_sid), $2), ST_SRID($1));
        RETURN geo;
    END
' IMMUTABLE LANGUAGE plpgsql;

処理の流れはこんな感じです。

  1. 与えられた点に最適なUTM(WGS84)を取得
  2. UTMに変換
  3. UTM上で円に外接する矩形を取得
  4. 得られた矩形をもとの座標系に変換

たぶんこの矩形の少なくとも2辺は円の内側を通ってしまいます。どうしましょう。