2016-11-28 117 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