这几天遇到一个问题,那就是如何对地址做排序。
排序的目的是想从近到远把地址做排序,我们就可以按照地址的距离,根据一定范围去找到这些地方,而不至于往返走冤枉路。
如果地址很规范,那么排序就会很容易,但是实际生活中地址的描述是千差万别的,比如同一个地方,有的用路名、有的用标志建筑,有的用的是门牌号。所以会有某一条路和另外一条路二者是相邻的,但是从排序角度看,就不是那么容易把它们分到一起。
那么如何解决这个问题呢,假如我们对一个城市的门牌号重新排序,如何实现找到相邻的片区和地址,把它们排到一起呢。
常见的做法有几个:
第一、在地图上把每一个地点做定位标点,按照定位圈出一个个片区,并做排序。这个看着是很好的策略,但是如何把每个点都标注到地图里,这本身就是一个巨大的工作量。
为了解决这个问题,一般大家会想到拿到第三方的地图信息,直接获取到对应的门店和地址定位。
假如解决了定位问题,那么如何排序其实也是一个难题,我们要对定位做一个距离计算,根据经纬度计算并划分一个个片区。
第二、倘若没有定位,那么根据地址做排序,那么还是要找到几个标志性建筑和地标物,确定几个大点,再看每一条路距离这些标志点的距离,并把它们分类放在一起,再做排序,其实这个办法并便捷,需要大量的匹配和计算。
第三、估算法。找到一个目标区域,确定它周围的几条路信息,然后找到这几条路,并做排序。
这几个办法综合看起来,有定位是最容易做排序的,而有定位之后还要依赖于一定的算法做片区计算,其实本质都是要确定中心点、划分片区,再计算具体门店的定位于中心点的距离,再片区内的划分进去,不再则继续根据其他中心点计算,直到把每个店都划分到一个个片区为止。
总结下,对地址排序的办法:
1、确定中心点或标志点;
2、找到相邻的地址或定位;
3、按照一定范围距离计算每个点与中心点的距离;
4、根据距离划分片区;
5、根据片区做排序。
这里包含两个思想,第一个是找到标志点;第二是划分片区。一个是算距离,一个是做集合。
网友评论