2013-12-12 50 views
0

這既是一個基本的SQL問題,也是一個postgres/postgis問題。計算posgres/posgis中兩個不相關表之間的重疊

我有兩個表集,在同一個數據庫中,但來自不同的來源,提供了類似但不同的地理數據。

例如,在第一組

select ST_Area(g.geog), g.geog area1 
from 
(--complicated joins on set1 tables---) 
order by area1; 

給出了查詢(示出第一列僅):

1449088812.57385 
2209542976.77606 
2419594400.94064 
2680798195.72685 
2921972342.3048 
2936036972.01677 
3420807650.41126 
3426766723.91276 
4098062224.01722 
5082190891.49144 
5137325111.41293 
5726948701.13547 

以及在所述第二組查詢:

select ST_Area(r.geog), r.geog area2 
from 
(--some other compilcated joins on set2 tables----) 
order by area2; 

給出(僅顯示第一列):

1449087081.39959 
2209560820.96132 
2419587161.04685 
2680790097.03592 
2922282361.4318 
2936033639.82268 
3420802892.77572 
3427452706.69087 
4098057825.46861 
5082187140.27675 
5137291729.45781 
5726925279.07641 

它們都是12行。我想將它們並排比較。具體來說,我想在兩個查詢結果中使用'geog'列計算重疊幾何,可能使用ST_Intersection()或其他postgis方法。 (這裏的區域僅用於演示目的。)

我該怎麼做?我已經試過: ROW_NUMBER() WITH ... AS ... CREATE溫度表... INTO ... #TEMP

請點我朝着正確的方向!

+0

您可以使用前幾位或三位數字比較它們嗎?也許只是一個想法 –

回答

1

我沒有完整的查詢,但根據您所提供你可以做的結果:

WITH CTE1 AS 
(
    SELECT ROW_NUMBER() OVER(ORDER BY col1) AS ROWNUM, col1 FROM tab1 
), 
CTE2 AS 
(
    SELECT ROW_NUMBER() OVER (ORDER BY col1) AS ROWNUM, col1 FROM tab2 
) 
SELECT CTE1.col1 AS RES_T1, CTE2.col1 AS RES_T2 
FROM CTE1 FULL JOIN CTE2 ON CTE1.ROWNUM = CTE2.ROWNUM 

sqlfiddle demo

希望你能適應這個到您的查詢。

0

您可以使用類似:

SELECT DISTINCT ON (a.id) 
    a.id as a_id, 
    b.id as b_id, 
    ST_Area(ST_Intersection(a.geom, b.geom)) as intersect_area 
FROM a, b 
ORDER BY a.id, ST_Area(ST_Intersection(a.geom, b.geom)) DESC 

它會發現每一行的最佳ST_Area(ST_Intersection(a.geom, b.geom))a

相關問題