用 GoogleMaps 的 API 生成经纬度 - 城市名表
今天和同事聊天,突然提到怎么通过经纬度获取城市信息。找了一下网上似乎没有现成的数据库,于是用了半小时撸了个暴力程序。
原理就是:
- 弄个线程池
- 暴力调用 GoogleAPI 去获取位置信息
- 记在 redis 里面
本文仅为娱乐,因为有现成的数据库。请看末尾链接
Google 的 API 出来可能很多都是英文,但是我只想要中文的信息怎么办?
可以弄个函数做判断:
1 | def check_contain_chinese(check_str): |
直接贴全部的代码,写得很挫,抛砖引玉吧:
1 | #!/usr/bin/python |
随便一扫就是几千条数据了。
1 | Idx:5104 Lat:25.3 Lng:117.2 CityName:新罗区 |
还有些问题
- 有些坐标可能并未有数据,可能需要做二次处理,寻找最近的坐标。
- 精度不够,内存大。为了图方便直接暴力 range 了。xrange 都没用上。想真正的扫遍全世界,还是按需生成坐标点吧。
- API 可以通过城市名反查经纬度信息。比如
https://maps.googleapis.com/maps/api/geocode/json?address=%E9%87%8D%E5%BA%86
返回的内容中就有
1 | "bounds" : { |
但是根据文档,这是个 optionally returned。所以,通过暴力扫描 + bounds 查询,应该能省很多很多时间,并且也能满足精确需求。
当然,最好的就是有个数据库。其实,maxmind 已经做了这个事情了,所以本文只是娱乐而已。:D
用 GoogleMaps 的 API 生成经纬度 - 城市名表
https://robinxb.com/posts/2015/googlemaps-get-city-name-with-latitude-and-longitude/