gpt4 book ai didi

postgresql - ST_DWithin 将参数作为 degree ,而不是 meters ,为什么?

转载 作者:行者123 更新时间:2023-11-29 11:11:40 26 4
gpt4 key购买 nike

ST_DWithin文件说,第三个参数(距离)以米为单位。但是当我执行一些查询时,它似乎将第 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 );

它采用第三个参数 (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 :

For Geometries: The distance is specified in units defined by thespatial reference system of the geometries.

如果您的数据在 SRID=4326 中,则您指定的距离以度为单位。

你要么必须使用 ST_Transform和基于米的坐标系,或以下两个函数之一:ST_Distance_Sphere (更快,更不准确)或 ST_Distance_Spheroid .

关于postgresql - ST_DWithin 将参数作为 degree ,而不是 meters ,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8444753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com