ST_DWithinドキュメントには、3番目のパラメーター(距離)はメートル単位であると記載されています。しかし、クエリを実行すると、3番目のパラメータが「度」になるようです。
これが私の簡略化されたテーブル構造です:
> \d+ theuser;
Table "public.theuser"
Column | Type | Modifiers | Storage | Description
----------+------------------------+-----------+----------+-------------
id | bigint | not null | plain |
point | geometry | | main |
Indexes:
"theuser_pkey" PRIMARY KEY, btree (id)
"point_index" gist (point)
Referenced by:
...
Has OIDs: no
すべてのポイントはSRID=4326で保存されます。
そしてこれはクエリです:
> select * from theuser where ST_DWithin(point , ST_GeomFromText('POINT(120.9982 24.788)',4326) , 100 );
3番目のパラメータ(100)を「度」として受け取るため、すべてのデータが返されます。近くのポイントを見つけるには、0.001に絞り込む必要があります。
しかし、3番目のパラメーターとしてメーターを直接渡すにはどうすればよいですか(メーター/度の変換は行いたくない)?私のクエリの何が問題になっていますか?なぜpostgreSQLはドキュメントが言うようにそれをメートルとして受け取らないのですか?
環境:
> select version();
version
-----------------------------------------------------------------------------------------------------------
PostgreSQL 8.4.9 on i486-pc-linux-gnu, compiled by GCC gcc-4.4.real (Ubuntu 4.4.3-4ubuntu5) 4.4.3, 32-bit
> SELECT postgis_lib_version();
postgis_lib_version
---------------------
1.4.0
この問題を引き起こすのがSRIDである場合、どのSRIDが単位として「メートル」を直接使用しますか?(私はSRID = 2163に変換しようとしましたが、それでもある程度です)ありがとう。