如何计算一个城市的邻近城市?
如何计算一个城市(地级市)的邻近城市?
我暂时想到的思路是把所有城市用地图API获取经纬度,用经纬度计算距离,取最近的5个城市。
如果不包含省会,再加上省会。
大佬们有没有什么思路,或者现成的方案?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如何计算一个城市(地级市)的邻近城市?
我暂时想到的思路是把所有城市用地图API获取经纬度,用经纬度计算距离,取最近的5个城市。
如果不包含省会,再加上省会。
大佬们有没有什么思路,或者现成的方案?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
最直接的思路是取得所有城市的经纬度之后,用勾股定理的方式换算直接距离,但这会带来一个问题:上千甚至上万城市的经纬度之差先平方然后开根号,最后再比较并排序,会消耗大量CPU时间。
所以后来我们的做法是:以这个城市的经纬度为中心,然后在经度和纬度上各增加一个小的值,看有没有城市落在这个区间里,如果没有足够的话,再稍微扩大一下范围再查一次,直到有大于5个城市落在这个区间里,然后我们再在这一部分城市中进行计算排序就可以了,这样前期只需要用到简单的加减法,速度会比直接平方的情况快不少。这只是一个思路,仅供参考。
把城市的经纬度转成geohash,值越接近距离就越近,然后用取前面几位,比较相似度即可。
例如:
成都市:wm6jb
绵阳市:wmd7n
都江堰:wm98m
德阳市:wmd1p
自贡市:wm4wb
达州市:wms3t
攀枝花:wk8r4
丽江市:whz2b
昆明市:wk3js
昭通市:wkcg8
关于 geohash 的原理可以参考