sma*_*ufo 15 gis postgresql postgis srid
该ST_DWithin文件说,第三个参数(距离)以米为单位.但是当我执行一些查询时,它似乎将第3个参数作为'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
Run Code Online (Sandbox Code Playgroud)
所有点都以SRID = 4326存储.
这是查询:
> select * from theuser where ST_DWithin(point , ST_GeomFromText('POINT(120.9982 24.788)',4326) , 100 );
Run Code Online (Sandbox Code Playgroud)
它将第3个参数(100)作为'degree',因此它返回所有数据,我必须缩小到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
Run Code Online (Sandbox Code Playgroud)
如果SRID导致此问题,SRID直接使用'meter'作为单位?(我尝试转换为SRID = 2163,但仍然在程度上)谢谢.
rad*_*dek 14
来自文档:
对于几何图形:距离以几何图形的空间参考系统定义的单位指定.
如果您的数据在SRID = 4326,则您指定的距离以度为单位.
您必须使用ST_Transform和基于仪表的坐标系,或两个函数之一:ST_Distance_Sphere(更快,更不准确)或ST_Distance_Spheroid.
如果您geometry在WGS84中,即srid 4326,则可以将几何体转换为geography
SELECT *
FROM theuser
WHERE ST_DWithin(
point::geography,
ST_GeomFromText('POINT(120.9982 24.788)',4326)::geography,
100 -- DISTANCE IN METERS
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10608 次 |
| 最近记录: |