说到保存地址,我们通常会想到保存经纬度,用经纬度来定位一些东西。我觉得目前大部分电脑服务器存储的地址都是经纬度。比如百度地图中存储的经纬度数据精度为6位小数,精确到分米;存储在高德地图中的经纬度数据的精度为小数点后8位,精确到毫米。百度地图和高德地图是全场景应用,可以在任何场景下使用。但是,在某些场景中,它会变得繁琐并消耗大量资源。
有一个场景,你需要找出谁是你的邻居。每次都要计算数据库中的大量数据,计算公式相当复杂。D = 111.12 cos {1/}显然不是,这显然需要宝贵的时间。
目前流行的做法是先记录它属于哪个省,然后是市县,然后是街道和城镇,然后是具体地址。计算和你在同一条街或同一乡镇的人的经纬度地址,算出谁是你的邻居。这样,当一个人碰巧住在街道的边缘,而这条街道又不是方圆和不规则的,很明显,邻居在计算时也必须包括附近的人。省-市-区-县-街道-乡镇-的地址用十六进制表示,例如abcdfa 8-1a B4-2cd 4-3 ef4-aaaaaaaaaaaa12,用32个十六进制字符占据5个单位。
有没有更准确方便的记录方法?尤其是没有条件,只获得居民经纬度的时候?
我们试图给出最好的答案。
首先,网格对应的区域。比如地球,我们把它看成一个球体,并把地球网格化。当然,要分割球体,网格不能像下图那么大,必须区分到合适的大小。
把地球表面铺在一个正方形平面上,先处理这个长4007.6万米的正方形平面。这个正方形的平面需要分多小?
0.00001度的经纬度精确到1米。我们在定义住宅的时候,在1平方米以内定义显然是不现实的。通常在10米乘10米空之间,即100平方米以内。所以经纬度要求为0.0001,最高经纬度为,最低经纬度为。地球分为3,600,000 * 3,600,000个区块网格,即1.296e13个区块网格和12,96 1亿个。平面XY坐标轴上放这么多块,地球表面就展开了,对应着从子午线{,,},从东到西,从南到北的{,,}。。对于设备测量的北纬,加90度,对于东经,从360减去测量的度数。
如此多的数值,对于普通的电脑服务器来说,无论是查找还是比较,还是计算,都是一种负担。我们必须分开。合理拆分多少级?这可以通过使用公式a x = n来计算。
当拆分为两级时,相当于在二维坐标中记录一个值,非常容易理解。
当拆分为三个级别时,相当于在三维坐标中记录一个值。对应这里的情况,1.296e13的区块面积分成23490块23490*23490,23490个平面堆叠在一起形成一个立方体。在这个立方体中,有些值没有对应的平面点,导致资源浪费。认真想想也没关系。在计算机世界中,一个EXCEL文件中有23,490个SHEETs,每个SHEETs包含23,490 * 23,490个数值。
分为四个等级时,1898*1898*1898*1898。在计算机世界中,有1898个EXCEL文件,每个文件中有1898个SHEETs和1898*1898个值。
等等。
专业人员根据需要调整拆分阶段的数量。
在这里,我认为记录一个地址只能用4个单位和16个十进制来保存,比如1898-1898-1898-1898。节省空时间和时间。这些都是基于10m * 10m精度的地址。邻居的定义是什么?假设所有定义距离为100米的邻居都是邻居,直接根据经纬度地址和小数点后第三位数字进行调整,得到邻居地址。都很简单。
等等。
总之,为了节省大量的地址信息,这种用法非常经济。在大数据的今天,非常容易遇到,平衡内存和存储的矛盾空是一个很好的方法。