ST_DWithin принимает параметр в градусах, а не в метрах, почему?

В документе ST_DWithin говорится, что третий параметр (расстояние) измеряется в метрах. Но когда я выполняю какой-то запрос, кажется, что он принимает третий параметр как «степень»?

Вот моя упрощенная структура таблицы:

> \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, чтобы найти близлежащие точки.

Но как мне напрямую передать метры в качестве третьего параметра (я не хочу выполнять преобразование метр / градус)? Что не так с моим запросом? почему 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, но все еще в степени) Спасибо.

15
задан radek 9 December 2011 в 16:28
поделиться