2011-03-29 50 views
0

給定一個id,'points'和座標表,希望創建一個視圖(我認爲它需要是一個視圖),這樣我可以獲得所有'pointids之間的距離列表「對於給定的(外鍵)兩個IDsql select加入視圖

輸入表

pointid (key), foreign_key, x, y 
01,   id_x,  6, 2, 
71,   id_x,  6, 1, 
02,   id_y,  5, 9, 
34,   id_z,  3, 8 
42,   id_z,  2, 3, 

所需的視圖,獲得屬於id_x和所有點id_y之間的距離:

pointid_1,  pointid_2, distance 
01,   02,  12 (or whatever distance is between 6,2 and 5,9) 
71,   02,  12 (or whatever distance is between 6,1 and 5,9) 

另一個查詢就可以, a之間的距離屬於id_x LL點和id_z:

01,   34,  33 (distance between 6,2 and 3,8) 
01,   42,  nn 
71,   34,  nn 
71,   42,  nn 

我能做的距離計算的sqrt(....),但不知道該怎麼辦的加入,結合起來,與距離的計算,或者這種觀點的合適查詢將產生上述結果。

這將使用sqlite3的用裝有數學LIB擴展的距離計算

+0

你如何訂購沿途的積分?一旦你知道如何在你的點和點上分離一個'路線',並創建一個視圖,爲每個點提供'下一個'點。對於最後一點,下一點將是最後一點本身(零距離)。然後計算和求和距離將會很簡單。 – 9000 2011-03-29 11:42:18

+0

不確定我關注。目的不是找到沿着點的'路線',只是爲了得到每個點之間的距離,對於兩個ID。 ultimatley查詢將按距離排序,但不嘗試並確定沿點的路線。即時通訊考慮它的cartesion產品,但不是100%確定究竟是什麼。 – hanlonj 2011-03-29 11:48:56

+0

如果您只需要每對點之間的距離,而不是沿着路線的距離(按照我的想法),那麼您只需加入表格即可。 – 9000 2011-03-29 11:53:33

回答

1
create view PAIRWISE_DISTANCE_SQUARES as 
select 
    a.id as a_id, 
    b.id as b_id, 
    (a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y) as square 
from point_table as a, point_table as b 
-- where a.id != b.id if you wish 

這種觀點會給你點之間的距離的平方。 SQLite沒有sqrt,但正方形與實際距離一樣排序很好。

+0

謝謝,這就是我所追求的。關於正在做這項工作的廣場的好處我沒有想到。 _實際上也需要視圖中的'外鍵'列,但我從這裏得到它 – hanlonj 2011-03-29 12:53:47