2016-11-28 102 views
0

我有了超过15000行的表之间的距离。POSTGIS计算积分

该表具有locationID,的isEmpty,经度和纬度领域。

欲计算每个点之间的距离具有的isEmpty场= 1,其它并插入到结果使用POSTGIS新表。

请指教一下是编写执行这一要求

+0

你需要欧氏距离或路由吗?如果首先它是一个简单连接的情况,但是...每个isEmpty = 1与其他所有其他isEmpty = 1或isEmpty = 1与所有其他人?您可以修改表格,还是必须对现有数据执行此操作而无需进行修改?当然你知道15k^2-15k =〜225M记录?你真的需要这些数据?也许这会更好地数数'点播'?如果你需要路由这个数据将至少计算几个月(使用强大的服务器) – Jendrusk

+0

@jendrusk isEmpty有值0或1记录与1值是约2000记录,我需要计算每个点之间的距离与hasEmpty = 1与所有其他点,因为我需要知道每个点与isEmpty = 1多少其他点500英尺内 – Eyla

+0

是的我可以修改表 – Eyla

回答

2

好了,解释为由于SQL语句的最佳实践 - 现在它更清晰。

在POSTGIS你不必计算所有跋涉去寻找其他的点多少有一些距离。

  1. 添加扩展数据库

    CREATE EXTENSION postgis; 
    
  2. 现在加上几何类型的列

    ALTER TABLE mytable ADD COLUMN geom geometry; 
    
  3. 你需要一些指标来

    CREATE INDEX mytable_geom_idx ON mytable USING gist(geom); 
    
  4. 现在填充新列

    UPDATE mytable SET geom = ST_SetSRID(ST_MakePoint(lon, lat),4326); 
    
  5. 现在查询:

    Select a.locationID, count(*) 
    from mytable a 
    join mytable b on a.locationID!=b.locationID 
        and ST_Dwithin(a.geom::geography,b.geom::geography,152) 
    where a.isEmpty=1 
    group by 1; 
    

ST_DWithin与地理类型正在距离米,152米〜500英尺

我没有测试它,所以如果有东西不行,请给我写评论

+0

谢谢您的帮助,代码工作,但我不得不从什么表引用locationID我by子句 – Eyla

+0

是的,你说得对,对不起:)编辑答案:)添加组 – Jendrusk