python实现r树存储地理位置_R树-javascript代码实现过程分析(插入操作)

本文详细介绍了如何使用Python实现R树存储地理位置,通过JavaScript代码展示了R树的插入过程,包括创建R树类、选择适合的叶节点、插入数据等关键步骤。文中还涉及到Rectangle构造器、插入方法及其内部逻辑,如Choose Leaf方法和调整树结构的逻辑。
摘要由CSDN通过智能技术生成

R Tree

第一步,创建R树类。

构建一个RTree生成器。用以创建tree对象。

例子:var tree = new RTree(12)

var RTree = function(width){var _Min_Width = 3; //Minimum width of any node before a merge

var _Max_Width = 6; //Maximum width of any node before a split

if(!isNaN(width)){ _Min_Width = Math.floor(width/2.0); _Max_Width = width;}

//Start with an empty root-tree

var _T = {x:0, y:0, w:0, h:0, id:"root", nodes:[] };var isArray = function(o) {return Object.prototype.toString.call(o) === '[object Array]';

};var _attach_data = function(node, more_tree){

node.nodes=more_tree.nodes;

node.x= more_tree.x; node.y =more_tree.y;

node.w= more_tree.w; node.h =more_tree.h;return(node);

};//选择适合的节点来存放插入的条目。

//@private。

var _choose_leaf_subtree = (rect, root) =>{...}//内部插入函数。

//[] = _insert_subtree(rectangle, object to insert, root to begin insertion at)

//@private。即私有函数,只能用RTree的方法调用它。

var _insert_subtree = (node, root) =>{...}this.get_tree = function() { return_T}//new_tree代表新的子树节点,where代表要替代的位置。

this.set_tree = (new_tree, where) =>{if (!where) {

where=_T

}return(_attach_data(where, new_tree))

}//rect是边界矩阵,对象是叶子节点。

this.insert = (rect, obj) =>{if (arguments.length < 2) {throw "Wrong number of arguments"}return(_insert_subtree({x:rect.x, y:rect.y, w:rect.w, h:rect.h, leaf:obj}, _T))

}//End of RTree

}

tree.insert方法,用以向生成的R树,插入数据。方法见下:

把一个新的索引条目E插入一个R树内:

找到插入新记录的位置: 这里要调用Choose Leaf方法,选择一个叶节点L来存放E。 把记录E加入到叶节点中: 这里需要进行判断。如果L.nodes <= M(即L的条目数量此时小于等于规定的最大值M),则下一步;

否则, 需要分裂,调用Split Node方法。把叶子节点L分裂成2个新节点L和LL(2个新节点包含了原来的L节点的所有条目和新条目E)。

向上传递变化:调用Adjust Tree方法对L

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值