KD树

在地图上画一条线,找出沿线一定宽度的POI点,现在的做法时线上取若干点,用kd树保存,查询一个点是否在沿线时,找到kd树中离改点最近的点,判断距离到改点是否小于指定距离,虽然不是很完美(点要取得足够多才能避免落掉一些点),也不失为解决方法。

kd树(k dimension tree)实际上是决策树,每次找区分度最大(方差最大)的一条轴线进行二分,二分至叶子节点只包含一个点,查找最邻近点时先找到叶子节点,然后回溯其祖先节点以这个点的距离剪枝搜索。

复杂度:建立O(nlogn),查找O(n^(1-1/k)+m)。

有个libkdtree++:http://libkdtree.alioth.debian.org/

套用我另一篇博文的方法:http://blog.csdn.net/jollyjumper/article/details/23588777,切分非常简单,街道直接切分为矩形,这个矩形装在一个对应的水平竖直的矩形里内接,面积不超过大矩形的1/2,找grid问题不大。

过滤阶段标准做法应该是对曲线进行拟合,然后求点到该线的距离,只要距离小于指定距离,可以认定符合要求,但是拟合的曲线点非常多,计算照样是o(n)的,但这样最精确,如果怕复杂度高,而用户画的线一般比较规则的话,应该去掉冗余的点。

参考:

http://baike.baidu.com/link?url=9QAERb8PzCQLhzteD_SjqZitykNSZCIHquRG_7GW2BlqrYxKQyy716MG5IIA-UNR0310BbcajPRfYUZ6T2r1T_

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值