在给定精度级别为多边形创建Geohash可能会产生大量的地理位置。通过从最高级别开始并迭代直到最佳混合酿造,创建跨越各个级别的地理相位的最佳组合以表示多边形。结果精度与起始geohash级别的精度保持一致,但对于大型多边形,数据大小会显着减小,从而提高速度和性能。
参考了下文
https://github.com/ashwin711/georaptor
传入参数 geohashes为set。geohashes 里geohash精度一致。
base32 = '0123456789bcdefghjkmnpqrstuvwxyz'
def compress(geohashes):
# geohashes is set
if len(geohashes) == 0:
return set()
part_geohashes = set()
noPart_geohashes = set()
no_geohashes = set()
for geohash in geohashes:
part = geohash[:-1]
if part not in part_geohashes:
if part not in no_geohashes:
combinations = set(part + x for x in base32)
if combinations.issubset(geohashes):
part_geohashes.add(part)
else:
no_geohashes.add(part)
noPart_geohashes.add(geohash)
else:
noPart_geohashes.add(geohash)
return compress(part_geohashes) | noPart_geohashes