如何计算一个城市(地级市)的邻近城市?
我暂时想到的思路是把所有城市用地图API获取经纬度,用经纬度计算距离,取最近的5个城市。
如果不包含省会,再加上省会。
大佬们有没有什么思路,或者现成的方案?
如何计算一个城市(地级市)的邻近城市?
我暂时想到的思路是把所有城市用地图API获取经纬度,用经纬度计算距离,取最近的5个城市。
如果不包含省会,再加上省会。
大佬们有没有什么思路,或者现成的方案?
把城市的经纬度转成geohash,值越接近距离就越近,然后用取前面几位,比较相似度即可。
例如:
成都市:wm6jb
绵阳市:wmd7n
都江堰:wm98m
德阳市:wmd1p
自贡市:wm4wb
达州市:wms3t
攀枝花:wk8r4
丽江市:whz2b
昆明市:wk3js
昭通市:wkcg8
geohash长度 | Lat位数 | Lng位数 | Lat误差 | Lng误差 | km误差 |
---|---|---|---|---|---|
1 | 2 | 3 | ±23 | ±23 | ±2500 |
2 | 5 | 5 | ± 2.8 | ±5.6 | ±630 |
3 | 7 | 8 | ± 0.70 | ± 0.7 | ±78 |
4 | 10 | 10 | ± 0.087 | ± 0.18 | ±20 |
5 | 12 | 13 | ± 0.022 | ± 0.022 | ±2.4 |
6 | 15 | 15 | ± 0.0027 | ± 0.0055 | ±0.61 |
7 | 17 | 18 | ±0.00068 | ±0.00068 | ±0.076 |
8 | 20 | 20 | ±0.000086 | ±0.000172 | ±0.01911 |
9 | 22 | 23 | ±0.000021 | ±0.000021 | ±0.00478 |
10 | 25 | 25 | ±0.00000268 | ±0.00000536 | ±0.0005971 |
11 | 27 | 28 | ±0.00000067 | ±0.00000067 | ±0.0001492 |
12 | 30 | 30 | ±0.00000008 | ±0.00000017 | ±0.0000186 |
关于 geohash 的原理可以参考
2 回答3.1k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
1 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读
2 回答1.2k 阅读
1 回答1.2k 阅读
最直接的思路是取得所有城市的经纬度之后,用勾股定理的方式换算直接距离,但这会带来一个问题:上千甚至上万城市的经纬度之差先平方然后开根号,最后再比较并排序,会消耗大量CPU时间。
所以后来我们的做法是:以这个城市的经纬度为中心,然后在经度和纬度上各增加一个小的值,看有没有城市落在这个区间里,如果没有足够的话,再稍微扩大一下范围再查一次,直到有大于5个城市落在这个区间里,然后我们再在这一部分城市中进行计算排序就可以了,这样前期只需要用到简单的加减法,速度会比直接平方的情况快不少。这只是一个思路,仅供参考。