这可能是一个简单的问题,但我对PostGIS并不是非常的好,而且还没有完全了解这一切.
基本上我有一个带有POINT列(点)的表(节点).我已经在此列创建了一个索引
create index nodes__points on nodes using gist (point)
列是创建的
select addgeometrycolumn('nodes','points','POINT',4326,2)
我正在使用srid 4326,因为我添加的形式(纬度,经度)的数据. (即,爱尔兰都柏林的职位的坐标系统= 53.353 lon = -6.264(我添加了GeomFromText(‘POINT(-6.264 53.535)’))).
对于每个点,我想要找到大约在一个1公里的框内,以该点为中心的点(所以selcet a.id,count(*)从节点为a,节点为b,其中SOME_DISTANCE_FUNCTION_HERE(a.point,b.point,1000)group by a.id;它不一定是精确的,只是一个粗俗的生意人物,1公里的bBox是罚款,1公里的圈子是罚款,它不一定是1公里,只是这个顺序的数量.
ST_Distance / ST_DWithin / etc都使用SRID的单位,其中4326 / WGS64是度数(因此1 = 1度的度数/经度).但我想用米.
我尝试了ST_distance_sphere和st_dwithin可以使用米,但如果我这样做,解释说明索引没有被使用.
我怎么能粗略地得到我想要的,并使用地理指标?
更新:这是在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 |