这可能是一个简单的问题,但我不太擅长PostGIS,也不完全了解所有这些.

基本上我有一个表(nodes)和一个点列(point).我已经在这个专栏上创建了一个索引

create index nodes__points on nodes using gist (point)

该列是用

select addgeometrycolumn('nodes', 'points', 'POINT', 4326, 2)

我之所以使用SRID4326,是因为我在添加表格(纬度、经度)中的数据.(即,爱尔兰都柏林的坐标系为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;.它不一定是精确的,只是一个粗略的惠利斯特图形.1公里的长方体是好的,1公里的圆是好的.它不一定是精确的1公里,只是那个数量级.

ST_Distance/ST_DWithin/等都使用SRID的单位,对于4326/WGS64,SRID的单位是度(因此1=1度纬度/经度).但我想用米.

我try 了ST_distance_spherest_dwithin,它们可以使用米,但如果我这样做,explain表明索引没有被使用.

我怎样才能大致得到我想要的,and使用地理索引?

UPDATE:这是在PostgreSQL 9.1和PostGIS 2.0 svn版本上.

推荐答案

写这篇文章之后,我发现了"地理"而不是PostGIS中的"几何"类型,这可能正是我想要的.

Postgresql相关问答推荐

PostgreSQL中btree_gist索引涉及integer和tstzrange属性查询计划的问题

我无法让pg_cron扩展在最新的Postgres 16图像中工作

Postgis超过2个表的查询在运行时爆炸

DBT-DBT依赖于未找到的源

锁定模式与PostgreSQL中的另一种锁定模式冲突到底是什么意思?

如何在Postgres中对分区表使用Hibernate验证?

PostgreSQL:动态SELECT查询

为什么 postgresql 可以在这个查询中高效地使用索引?

postgreSQL 中对 utf-8 的 LC_COLLATE 和 LC_CTYPE 支持

使用 ON CONFLICT 从 INSERT 返回行,无需更新

保存 geodjango PointField 时出错

如何在 postgres json 列中查询嵌套数组?

用于更改 postgresql 用户密码的 bash 脚本

PGAdmin 编辑数据

为什么是||在 PostgreSQL/Redshift 中用作字符串连接

如何使用 sql 或 phpPgAdmin 更改 PostgreSQL 数据库的数据库编码?

PostgreSQL - 必须出现在 GROUP BY 子句中或在聚合函数中使用

判断 PostgreSQL 中的角色是否设置了密码

Postgresql滚动删除旧行?

判断 Postgres 中是否存在序列(plpgsql)