如何计算一个城市的邻近城市?

发布于 2022-09-12 01:30:53 字数 129 浏览 21 评论 0

如何计算一个城市(地级市)的邻近城市?

我暂时想到的思路是把所有城市用地图API获取经纬度,用经纬度计算距离,取最近的5个城市。

如果不包含省会,再加上省会。

大佬们有没有什么思路,或者现成的方案?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

入怼 2022-09-19 01:30:53

最直接的思路是取得所有城市的经纬度之后,用勾股定理的方式换算直接距离,但这会带来一个问题:上千甚至上万城市的经纬度之差先平方然后开根号,最后再比较并排序,会消耗大量CPU时间。

所以后来我们的做法是:以这个城市的经纬度为中心,然后在经度和纬度上各增加一个小的值,看有没有城市落在这个区间里,如果没有足够的话,再稍微扩大一下范围再查一次,直到有大于5个城市落在这个区间里,然后我们再在这一部分城市中进行计算排序就可以了,这样前期只需要用到简单的加减法,速度会比直接平方的情况快不少。这只是一个思路,仅供参考。

抹茶夏天i‖ 2022-09-19 01:30:53

把城市的经纬度转成geohash,值越接近距离就越近,然后用取前面几位,比较相似度即可

例如:
成都市:wm6jb
绵阳市:wmd7n
都江堰:wm98m
德阳市:wmd1p
自贡市:wm4wb
达州市:wms3t
攀枝花:wk8r4
丽江市:whz2b
昆明市:wk3js
昭通市:wkcg8

geohash长度Lat位数Lng位数Lat误差Lng误差km误差
123±23±23±2500
255± 2.8±5.6±630
378± 0.70± 0.7±78
41010± 0.087± 0.18±20
51213± 0.022± 0.022±2.4
61515± 0.0027± 0.0055±0.61
71718±0.00068±0.00068±0.076
82020±0.000086±0.000172±0.01911
92223±0.000021±0.000021±0.00478
102525±0.00000268±0.00000536±0.0005971
112728±0.00000067±0.00000067±0.0001492
123030±0.00000008±0.00000017±0.0000186

关于 geohash 的原理可以参考

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文