Ror*_*ory 20 gis postgresql postgis geospatial
这可能是一个简单的问题,但我不是很擅长PostGIS,也没有完全理解这一切.
基本上我有一个nodes带有POINT列(point)的table ().我在这个专栏上创建了一个索引
create index nodes__points on nodes using gist (point)
Run Code Online (Sandbox Code Playgroud)
该列是用.创建的
select addgeometrycolumn('nodes', 'points', 'POINT', 4326, 2)
Run Code Online (Sandbox Code Playgroud)
我正在使用srid 4326,因为我正在添加形式(纬度,经度)的数据.(即爱尔兰都柏林的位置= 53.353 lon = -6.264(我已加入GeomFromText('POINT(-6.264 53.535)'))的坐标系).
对于每个点,我想找到大致在1km框内的所有点,以该点为中心(所以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的/ etc.所有都使用SRID的单位,4326/WGS64是度(因此1 = 1度的纬度/经度).但我想用米.
我试过ST_distance_sphere并且st_dwithin可以使用米,但如果我这样做,则explain显示索引未被使用.
我怎样才能大致得到我想要的东西,并使用地理索引?
更新:这是在PostgreSQL 9.1和PostGIS 2.0 svn构建上.
Fra*_*dez 23
您可以使用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 |
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17847 次 |
| 最近记录: |