gpt4 book ai didi

postgresql - Postgis 中 2 个点之间的距离,单位为 srid 4326,以米为单位

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

这可能是一个简单的问题,但我不是很擅长 PostGIS,也没有完全理解所有这些。

基本上我有一个表 (nodes),其中有一个 POINT 列 (point)。我已经在这个列上创建了一个索引

create index nodes__points on nodes using gist (point)

列是用

创建的
select addgeometrycolumn('nodes', 'points', 'POINT', 4326, 2)

我正在使用 srid 4326,因为我正在添加表单中的数据(纬度、经度)。 (即爱尔兰都柏林的坐标系为 lat=53.353 lon=-6.264(我用 GeomFromText('POINT(-6.264 53.535)'))添加)。

对于每个点,我想找到以该点为中心的大约 1 公里范围内的所有点(因此 selcet a.id,count(*) from nodes as a,nodes as b where SOME_DISTANCE_FUNCTION_HERE(a .point, b.point, 1000) group by a.id;。它不必非常精确,只是一个粗略的启发式图形。一个 1km 的 bbox 很好,一个 1km 的圆很好。它没有不必正好是 1 公里,只是这个数量级。

ST_Distance/ST_DWithin/等。都使用 SRID 的单位,对于 4326/WGS64 来说是度(所以 1 = 1 纬度/经度)。但我想用米。

我尝试了可以​​使用米的 ST_distance_spherest_dwithin,但是如果我这样做,explain 显示索引没有被用过。

如何粗略地获取我想要的内容,使用地理索引?

更新:这是在 PostgreSQL 9.1 和 PostGIS 2.0 svn 构建上。

最佳答案

您可以使用 ST_Transform 来使用仪表,还请记住并非所有函数都适用于地理类型,但如果您真的需要速度,使用 ST_DWithin 是最快的方法。这是度和米之间的转换的近似值:

| places | degrees    | distance |
| ------ | ---------- | -------- |
| 0 | 1.0 | 111 km |
| 1 | 0.1 | 11.1 km |
| 2 | 0.01 | 1.11 km |
| 3 | 0.001 | 111 m |
| 4 | 0.0001 | 11.1 m |
| 5 | 0.00001 | 1.11 m |
| 6 | 0.000001 | 0.111 m |
| 7 | 0.0000001 | 1.11 cm |
| 8 | 0.00000001 | 1.11 mm |

关于postgresql - Postgis 中 2 个点之间的距离,单位为 srid 4326,以米为单位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8464666/

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