根据字符串值创建唯一的短ID

问题描述

我有一些数据,这些数据具有以字符串形式存储的唯一ID:

ddd.dddddaddd.dddddz

其中d是一些数字,而a / z是一些字母字符。数字可以是0-9,E的字符可以是Wa,而N的字符可以是S

我想将其转换为唯一的整数,而我使用z模块尝试过的返回:

hashlib

有没有一种方法可以从字符串中生成唯一的整数ID,使其不超过12位数字?我知道我永远不需要12位以上的唯一整数ID。

解决方法

简单一些:

>>> s = '123.45678W123.45678S'
>>> int(s.translate(str.maketrans('EWNS','1234','.')))
123456782123456784

这不是问题中仍然要问的12位数字,而是注释中允许的20位数字以下。

,

在处理坐标时,我会尽力将信息保留在最后的12位ID中。

  • 如果您的观点是全球性的,则可能有必要保留学位,但程度可能会很广泛,因此在准确性方面您可能会牺牲一些信息。
  • 如果您的点是局部的(都在小于10度的范围内),则可以跳过度的前两位,而将焦点放在小数点上。
  • 由于两点可能彼此靠近,因此谨慎地保留一位数字作为序列号。

关于广泛观点的建议:

s = "123.45678N123.45678E"
ident = "".join([s[0:6],s[10:16]]).replace(".","")
q = 0
if s[9]=="N":
    q+=1
if s[-1]=="E":
    q+=2
ident+=str(q)+'0'

该示例将转换为123451234530

在为每个ID计算了初始ident号之后,如果已经使用了ident,则应该遍历它们并递增最后一位数字。

通过这种方式,您只需将前10位数字分隔为ddd.dd格式的两个度,然后使用[-2]数字作为象限的指示符即可轻松地从ID重构位置(0:SW,1 :SE,2:NW,3:NE)。