分享
[20181212]经纬度编码方法推荐-plus code简介
输入“/”快速插入
[20181212]经纬度编码方法推荐-plus code简介
今天罗孚为大家推荐一种经纬度编码的方法——plus code,原名open location code,是Google于2014年发明的,旨在将表示地理位置的经纬度通过算法推导成一个字符串。
plus code的用途
用一串字符表示地球上的任一位置
发明plus code的初衷,就是希望能够通过一个编码标识地球的任何一个地方。
我们最常用的位置编码是地址编码,通过行政区划、道路和门牌号等信息找到具体的位置信息,这在日常生活中非常常见,比如送快递。
但若你在京东或天猫上买东西,直接送回乡下老家,怎么办?还能记得门址信息吗?一方面城市化进程变迁,也许门址早已不是当初的门址,另一方面即便有门牌号,一个陌生人能否顺利找到,也是未知问题。
门址无法找到,那我们用经纬度,经纬度是一个非常精确的位置信息。没错,但除了电影中会有通过十几个数字(即经纬度)来寻找目标的场景,我们在日常生活中有用到吗?加上国家的法律因素,连通过经纬度导航都不是一个可行的方法。
世界上确实有无法使用门址表示的地方,而经纬度的数值也超出了常人的可记忆范畴,所以Google希望通过一种编码方法,简单明了地表示世界上任一位置。
使用字符串编码来表示经纬度,其实有多种编码方案,但plus code有什么优势?我们后面再讲。只是,罗孚使用plus code并不仅仅为了表示地球上的位置这么简单。
基于位置范围的检索
在电子地图的使用过程中,我们可能经常需要查询酒店、餐饮、景点等数据,也就是我们常说的
POI
检索。其检索方式,除了名称查询外,可能会有周边查询或沿途搜索,比如“徐家汇周围10公里范围内的奥迪4S店”。
周边查询和沿途搜索,都是一种基于经纬度范围的检索,最常规的检索方法,就是一条sql语句,限定一下范围即可,比如:where lat > 31 and lat <32 and lon >121 and lon <121。
直接拿经纬度进行比较,一定不是一个好的方法,当数据量达到千万级,其检索效率低下到无法直视。如何提高检索效率?首先想到的,一定是分块检索,比如将数据进行四叉树切分,根据当前位置找到附近的数据块,然后再在数据块中检索。
数据分幅分块是数据处理中最基本的内容,数据量大了以后必定要做分幅分块处理,比如全国的
POI
数据。数据分幅有很多种方法,比如上述的四叉树方法,或者直接按固定经纬度间隔进行分幅(类似印刷纸质地图所用的分幅),当然按省名称区分也可以算是分幅,只是形状不规则罢了。
罗孚推荐plus code,一定在分幅上有它的优势,待我慢慢道来,我们先来了解一下plus code。
什么是plus code
plus code是一种经纬度编码方法,它能表示地球上的任何一个地方。
plus code将经纬度编码后,一般为十位字符(如果含+号的话,就是11位)。plus code去除了容易混淆的字母以及一些令人不愉快的字符,只取用了20个字符(含部分数字),这20个字符是:2、3、4、5、6、7、8、9、C、F、G、H、J、M、P、Q、R、V、W、X。
plus code的前四个字符是区域代码,基本是1经纬度的范围,也就是约100
100公里的范围,后六位是本地代码,用来描述一个建筑物,面积约为14
14米,差不多是半个篮球场的大小。
但如果觉得十位编码精度不够,是否可以继续拓展呢?当然可以,plus code定义了一个附加规则,可以将代码拓展到11位或12位,其中11位编码差不多代表了3米的范围,应该可以描述一个建筑物的前门或后门,或者是一辆车的大小,定位颗粒更细。需要注意,10位以后的代码不再使用两位编码表示区域,而仅使用了一位,编码方式有所不同。