索引机制 - mapserver

1. mapserver

2. ms的索引机制

ms的索引也是树索引机制,一般的有两种可能:二叉树后者四叉树(由 MAX_SUBNODE 在编译期决定)。

ms的索引树描述:

/* 树根节点 */

typedef struct {
  ms_int32 numshapes;
  ms_int32 maxdepth;
  treeNodeObj *root;
} treeObj;
  /* 树子结点,存储实体id-这些实体是块几个子区域的,无法被放入子结点中,和子子结点 */

typedef struct shape_tree_node {
  /* area covered by this node */
  rectObj rect;
 
  /* list of shapes stored at this node. */
  ms_int32 numshapes;
  ms_int32 *ids;
 
  int numsubnodes;
  struct shape_tree_node *subnode[MAX_SUBNODES];
} treeNodeObj;

treeNodeAddShapeId 函数负责建树(递归,没什么好说的)。其中有一个注意的地方就是结点分裂的时候,使用了 treeSplitBounds 函数。而这个函数在分裂后的两个矩形是有10%的重叠。我推测这种机制可能是为了把实体尽量分到子结点中的一个策略。

3. 值得一提的是,ms的建索引唯一约束就是maxdepth,只是避免了检索次数可能过多的问题。但对于某些结点存储的实体过度的问题无法避免。这是由于期索引定义的规则决定的,其建树过程是静态的。但如果能适当考虑这个问题就好了。

4.索引结构可以保存为qix文件(是不是esri最初创意就不知道了),用shptree也可以做类似的事情,不同的是前者保存id,后者直接保存shp分割结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值