问题描述
我有一些数据,这些数据具有以字符串形式存储的唯一ID:
ddd.dddddaddd.dddddz
其中d
是一些数字,而a
/ z
是一些字母字符。数字可以是0-9,E
的字符可以是W
或a
,而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)。