ST_DWithin文档显示,第三个参数(距离)以米为单位。但当我执行某个查询时,它似乎将第三个参数作为“degree”?
下面是我的简化表结构:
> \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 );
它取第三个参数(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直接使用“meter”作为单位?(我试着转换成SRID=2163,但仍然是学位)谢谢。
最佳答案:
从docs开始:
对于几何图形:距离以
几何空间参考系。
如果数据是SRID=4326,则指定的距离以度为单位。
您要么使用ST_Transform和基于仪表的坐标系,要么使用以下两种功能之一:ST_Distance_Sphere(更快、更不精确)或ST_Distance_Spheroid。