# -*- coding: utf-8 -*-
"""验证：每个小区到最近网点/到指定网点的距离，检查是否有 0 km 循环引用。"""
import io, json, math

d = json.load(io.open(r'D:\workbbbbbb\build\geodb.json', encoding='utf-8'))
orgs = d['orgs']
byname = {o['n']: o for o in orgs}
out = []


def hav(a, b, c, e):
    R = 6371.0
    p1 = math.radians(a); p2 = math.radians(c)
    dp = p2 - p1; dl = math.radians(e - b)
    x = math.sin(dp / 2) ** 2 + math.cos(p1) * math.cos(p2) * math.sin(dl / 2) ** 2
    return 2 * R * math.asin(math.sqrt(x))


for h in d['homes']:
    t = d['dist'][h['n']]
    pairs = sorted(((v, c) for c, v in t.items()))[:3]
    line = '%-8s %-8s %s,%s src=%s | 最近: %s' % (
        h['n'], h['a'][:8], h['lat'], h['lng'], h.get('src', ''),
        ' / '.join('%s %.2fkm' % (byname.get(c, {}).get('n', c), v) for v, c in pairs))
    out.append(line)

out.append('--- 指定点校验 ---')
checks = [('桦枫居', '石桥支行'), ('吉鸿家园', '杭州慧仁路社区支行'), ('吉鸿家园', '三墩支行'),
          ('慧仁家园', '杭州慧仁路社区支行'), ('海上海', '良渚支行'), ('崇盛里', '拱宸桥支行'),
          ('盛世钱塘', '四季青支行'), ('水韵康桥康泽苑', '拱宸桥支行')]
for home, org in checks:
    o = byname.get(org)
    if not o:
        out.append('%s -> %s : 网点不存在' % (home, org))
        continue
    h = [x for x in d['homes'] if x['n'] == home][0]
    dd = hav(h['lat'], h['lng'], o['lat'], o['lng'])
    out.append('%s -> %s : %.2f km  (网点 %s %s)' % (home, org, dd, o['r2'], o['a']))

zero = []
for h in d['homes']:
    for c, v in d['dist'][h['n']].items():
        if v < 0.05:
            zero.append('%s -> %s (%.3f)' % (h['n'], byname.get(c, {}).get('n', c), v))
out.append('--- 距离<0.05km 的配对: %d ---' % len(zero))
out.extend(zero[:20])

io.open(r'D:\workbbbbbb\build\_chk_geo.txt', 'w', encoding='utf-8').write('\n'.join(out))
print('ok', len(out))
