2014-08-27 23 views
2

我有2個獨立表格(鏈接&部分)。鏈接表內的信息是有點像這樣,在地理區域上加入表格

Links Table 
---------------------------------------------------------------------------- 
| id | Description | startLat | startLng | endLat | endLng | 
---------------------------------------------------------------------------- 
| 1000259 | Link Number 1  |52.891372 |-1.768254 |52.892545 |-1.775278 | 
| 1000359 | Link Number 2  |52.894892 |-1.780513 |52.894306 |-1.774793 | 
| 1000279 | Link Number 3  |52.894306 |-1.774793 |52.895000 |-1.765273 | 
| 1000258 | Link Number 4  |52.895000 |-1.765273 |52.895500 |-1.755278 | 
| 1000255 | Link Number 5  |52.895500 |-1.755278 |52.896500 |-1.745278 | 
| 1000555 | Link Number 6  |52.896500 |-1.745278 |52.897250 |-1.735278 | 
---------------------------------------------------------------------------- 

並且這些部分表出現這樣的,

Sections Table 
----------------------------------------------------------------------------- 
| id | Description | fromLat | fromLng | toLat | toLng | 
----------------------------------------------------------------------------- 
| 625  | Section 1  | 52.893598 | -1.775120 | 52.885053|-1.756409 | 
| 713  | Section 2  | 52.897273 | -1.788324 | 52.898285|-1.724721 | 
| ...  | ...   | ...  | ...  | ...  | ...  | 
| ...  | ...   | ...  | ...  | ...  | ...  | 
----------------------------------------------------------------------------- 

我想運行一個查詢,給了我所有這一切都被部分覆蓋的鏈接。因此,如果我說第2部分有多少鏈接,我應該收到部分信息經緯度所涵蓋的所有鏈接。

P.S.請注意,部分比鏈接長...任何幫助!

+0

段和鏈接應該在同一行上嗎?或者您如何知道該段上/段內的鏈接? – Bulat 2014-08-27 16:41:20

回答

2

你用join這樣做,只是條件是不平等而不是平等。目前還不清楚您是要部分覆蓋還是覆蓋全部。以下是部分覆蓋的示例:

select s.*, l.* 
from sections s join 
    links l 
    on (l.startlat < s.tolat and l.endlast > s.fromlat) and 
     (l.startlong < s.tolong and l.endlong > s.fromlong); 
+2

這會起作用,但如果你使用Postgres,你應該考慮使用Postgis及其相關的空間函數。您可以使用空間索引(R-tree)和像ST_Intersects,ST_Contains這樣的函數,這些函數在一些帶有B樹的數字字段上的性能將明顯優於一系列< and >運算符。將4列轉換爲2(經緯度)點會有一些開銷,但對於任何重要的表格大小,這種努力都是值得的。 – 2014-08-27 17:09:43

+0

這是我回答有點類似的問題。 http://stackoverflow.com/questions/24212355/query-by-coordinates-takes-too-long-options-to-optimize/24218861#24218861 – 2014-08-27 17:13:14

+0

@JohnBarça:對於簡單的情況(小區域可以視爲平面) ,沒有Postgis你可以做很多事情。框或圓圈上的GiST索引支持[包含運算符'<@'](http://www.postgresql.org/docs/current/interactive/functions-geometry.html#FUNCTIONS-GEOMETRY-OP-TABLE)。 – 2014-08-27 23:56:42