2014-07-05 31 views
1

我正在開發一個基於地理位置的個人項目,我想根據用戶的緯度&獲取供應商的經度值。而且這筆交易是供應商具有可變的供應半徑,很少有供應商只在其半徑5公里範圍內供應,而有些供應商可能供應整個城市。將城市拆分成區域,這是個好主意嗎?

一般的做法是爲每個供應商計算供應商&用戶之間的距離。如果它小於或等於供應半徑,則在結果中顯示該供應商。

但是,這可能會很慢,所以我想我的城市分成四個區(接從谷歌地圖,有四種緯度經度&值,東北西部南部)&每當添加一個供應商,我會做數學&分配它們可以在數據庫中提供的區域。現在,無論何時我獲得用戶的緯度&經度,我都會確定區域&獲取可供應給該區域的供應商,然後將距離計算&過濾掉。通過這種方式,我可以根據供應商數量而不是整個列表進行計算。

但這是一個好主意還是我可以做得更好?

+0

您使用的數據庫是?這是空間索引擅長的,因爲它們是二維的(使用R-Trees),並且可以在距離類型查詢中包含,包含,相交。 –

+0

我打算使用postgres –

+0

在這種情況下,只需使用空間索引,然後使用ST_DWithin(geom1,geom2,distance)類型的查詢,請參閱http://postgis.net/docs/ST_DWithin.html –

回答

1

在您使用的Postgres/PostGIS的,你可以利用spatial indexes,然後用ST_DWithin(geom1,geom2,距離)輸入查詢看到 ST_DWithin docs。空間索引將爲你分配空間,使得這種查詢非常高效,並避免你必須想出任何你自己的空間分區方案。

您可以使用的另一個運算符是< - >運算符,它對於空間索引非常有效,並按順序by子句使用以獲取某個點x的最近y值,(k最近鄰居搜索)請參閱<-> operator docs.此操作符與索引一起正常工作的一個注意事項,即您正在搜索的要點,需要是一個常數,因爲它聽起來就像是您的情況。

+0

非常感謝你的迴應! –

相關問題