建立网格索引(代码)

见原文,转自http://longriver.me/?p=355

  1. 空间检索中网格索引的引入
    1. 网页的检索需要对每篇文档建立倒排索引,空间检索中,需要对每个地域建立网格索引。
    2. 简单说就是要将地域划分成一个个的网格(mesh),每个网格有个单独的id,唯一标示,利用局部性原理,给出一个点,检索附近的点的时候,只需要计算相邻网格中的点,省去了全局的计算。图1 给出了网格的示例
    3. 一般会应用场景是,给定一个点,计算器最近邻的几个地点,或者是判断一个坐标点是否落在一个区域内

           032614_1310_1.png

图1,将一个地域划分为网格,并给每个网格唯一id

032614_1310_2.png

 

图2,AOI:圆明园,天安门,森林公园

假设一种空间检索的应用场景,现在有一堆面状的区域,我们知道这些面状区域(AOI area of interest)的轮廓如图2,我们有一些坐标点,那么如何判断这些坐标点是否落在aoi里,落到了哪个区域里呢?

完成这项工作,需要三步:

  • 1,为面状区域制作索引,不要求很精确
  • 2,求出每个检索点落在那个网格中
  • 3,判断检索点是否落在AOI中(判断点是否在一个多边形中)
1.为面状区域建立索引

 

 

Mesh_size 可以根据一共检索区域的大小来进行设定,在我们的应用场景下设为1000,指每个网格的大小为1000m。

 

2,为每个检索点找到所在的mesh 和每个mesh中的aoi

 3,判断一个point 是否在aoi里面,一个aoi其本质上是一个多边形,由顶点描述,因此现在有很多现成的算法讲如何判断一个点是否落在多边形中,参照这边博文http://alienryderflex.com/polygon/讲的非常详细,代码实现如下,具体原理,请阅读博文。

4,剩余的一些代码,如如何对grid去hash值,可以自己去实现,贴上我们的实现,仅作参考:

posted on 2014-03-26 21:36  Harveyaot  阅读(3236)  评论(0编辑  收藏  举报

导航