地图搜索高速一法

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

发布了19 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qman007/article/details/103956455