地图搜索高速一法

如何在地图上搜索?譬如:搜索A地到B地有几条道路或者有几个如家酒店或肯德基店。
首先建模的时候图层是必须的,道路在道路图层,酒店在酒店图层,肯德基在餐饮店图层等,这样在对应的图层中搜索速度和效率就会好很多,但这里有个问题:图层中的图元与经纬度要建立关系,这样搜索的时候两个经纬度圈定位置范围,所有图层中图元的经纬度落在此位置范围内的就都能搜索出来了,然而这种搜索在数据库层面上无法避免全量搜索(不管是什么where条件,都会导致搜索索引的全量,不管是哈希表还是红黑树,最终是要全量扫描索引),而且是每个图层都要搜索查询,随着数据量的增大,执行sql的速度自然就会越来越慢,如果再结合动态的路况信息…肯定是越来越慢!只有避免全量索引搜索才是提速的关键,如何避免全量索引搜索关键在于地理位置范围的建模:即该位置范围内都有什么图元。有了这个模型,那搜索查询就完全不需要全量索引查询了,只要select 该位置范围内的图元关键字(头部为图层id,后面是图元id)就可以了,postgresql的数组型的列正好适用。模型简介:把地图的最小比例尺下的基准经纬度(基准刻度)和其方圆500米内所有图元关键字建立关系,基准经纬度的数量是恒定不变的,因此查询基准经纬度方圆500米内的所有图元关键字的时间复杂度是O(1)。如此从A地到B地的搜索可以通过计算A到B所属多少个基准经纬度500米范围(譬如:4个基准经纬度方圆500米范围),所有范围内有什么图元就可以轻松查到(有可能需要去重)。这个过程只跟基准经纬度这个索引有关,跟其它任何图层下的任何图元都没一分钱的关系,无论将来图层增加多少 图元增加多少,搜索查询的速度恒定不变!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值