創建網格索引(代碼)

見原文,轉自http://longriver.me/?p=355算法

  1. 空間檢索中網格索引的引入
    1. 網頁的檢索須要對每篇文檔創建倒排索引,空間檢索中,須要對每一個地域創建網格索引。
    2. 簡單說就是要將地域劃分紅一個個的網格(mesh),每一個網格有個單獨的id,惟一標示,利用局部性原理,給出一個點,檢索附近的點的時候,只須要計算相鄰網格中的點,省去了全局的計算。圖1 給出了網格的示例
    3. 通常會應用場景是,給定一個點,計算器最近鄰的幾個地點,或者是判斷一個座標點是否落在一個區域內

           032614_1310_1.png

圖1,將一個地域劃分爲網格,並給每一個網格惟一idide

032614_1310_2.png

 

圖2,AOI:圓明園,天安門,森林公園flex

假設一種空間檢索的應用場景,如今有一堆面狀的區域,咱們知道這些面狀區域(AOI area of interest)的輪廓如圖2,咱們有一些座標點,那麼如何判斷這些座標點是否落在aoi裏,落到了哪一個區域裏呢?ui

完成這項工做,須要三步:this

  • 1,爲面狀區域製做索引,不要求很精確
  • 2,求出每一個檢索點落在那個網格中
  • 3,判斷檢索點是否落在AOI中(判斷點是否在一個多邊形中)
1.爲面狀區域創建索引

 

 

Mesh_size 能夠根據一共檢索區域的大小來進行設定,在咱們的應用場景下設爲1000,指每一個網格的大小爲1000m。spa

 

2,爲每一個檢索點找到所在的mesh 和每一個mesh中的aoi
rest

 3,判斷一個point 是否在aoi裏面,一個aoi其本質上是一個多邊形,由頂點描述,所以如今有不少現成的算法講如何判斷一個點是否落在多邊形中,參照這邊博文http://alienryderflex.com/polygon/講的很是詳細,代碼實現以下,具體原理,請閱讀博文。code

4,剩餘的一些代碼,如如何對grid去hash值,能夠本身去實現,貼上咱們的實現,僅做參考:htm

相關文章
相關標籤/搜索