专栏首页Echo is learning谷歌、腾讯、百度相应API批量获取地理位置坐标信息及其优缺点

谷歌、腾讯、百度相应API批量获取地理位置坐标信息及其优缺点

目录:

  • 申请ak
  • 批量获取地理位置
  • 优缺点对比

目的:通过给定的地理位置名称(如:北京市海淀区上地十街十号),获取经纬度信息。

1、申请ak

以百度Geocoding API为例: http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding

  • 提交之后就会有访问应用的AK,这就是你访问的ak:

2、批量获取地理坐标

对于以下文本文件里的城市:

这里是对以上文本文件里的城市进行查询地理位置的代码:

 1 # coding : utf-8
 2 
 3 """
 4 This program use api to get lon/lat data.
 5 """
 6 
 7 import sys
 8 import requests
 9 
10 def get_degree():
11 
12     local_path = 'D:/home/research/lung_cancer/data/pm25/process/'
13 
14     # 把文本文件里的城市全部放入list里面
15     csv_path = local_path + 'city_2014.csv'
16     loc_list= []
17     line_list = []
18     with open(csv_path, 'r') as handle:
19         for line in handle.readlines()[1:]:
20             loc = line.split(',')[1]
21             loc_list.append(loc)
22             line_list.append(line.strip())
23 
24     num = 0
25 
26     # 将坐标信息写入的新文本文件
27     new_path = local_path + 'city_2014_google.csv'
28     f_handle = open(new_path, 'w')
29 
30     for i in range(len(loc_list)):
31         loc = loc_list[i]
32         try:
33             # Three type apis:baidu,qq,google.
34             # 百度API
35             # request = ('http://api.map.baidu.com/geocoder/v2/?address=' + loc 
36             #         + '&output=json&ak=你的ak')
37             # 腾讯API
38             # request = ('http://apis.map.qq.com/ws/geocoder/v1/?address=' + loc
39             #         + '&key=你的key')
40             # 谷歌API
41             request = ('https://maps.googleapis.com/maps/api/geocode/json?address='
42                     + loc + '&key=你的key')
43             response = requests.get(request)
44             response.raise_for_status()
45             num += 1
46             print('HTTP request successed!--{}'.format(num))
47         except Exception as e:
48             print('HTTP request failed!-{}'.format(str(e)))
49 
50         print(response.text)
51 
52         # eval将json字符串转变为字典
53         lat = eval(response.text)['results'][0]['geometry']['location']['lat']
54         lng = eval(response.text)['results'][0]['geometry']['location']['lng']
55         # 将坐标信息写入硬盘
56         f_handle.write(line_list[i] + ',' + str(round(lat,2)) + ',' 
57                        + str(round(lng,2)) + '\n') 

查询时会返回这样的信息,可以是json或者xml,这里我选择的是json: 

这里是结果,第3、4个分别是纬度和经度:

3、优缺点对比

限制指的是限速和限量。

百度api:限制小,但是不准确; http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding 腾讯api:虽准确,但限制太大; 谷歌api:限制中等,且准确;(最终用) https://developers.google.com/maps/documentation/javascript/geocoding

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python rpy2,tkinter安装问题解决

    Echo_fy
  • R python在无图形用户界面时保存图片

    Echo_fy
  • 简单爬虫 -- 以爬取NASA AOD数据(TIFF文件)为例

    Echo_fy
  • 熟悉white-space

    white-space 属性设置如何处理元素内的空白。 这个属性声明建立布局过程中如何处理元素中的空白符。值 pre-wrap 和 pre-line 是 CS...

    RobinsonZhang
  • github网站证书里的别名

    这个网站上的知识很有用: https://kinsta.com/blog/your-connection-is-not-private/

    Jerry Wang
  • 适配器模式(Adapter)

    Java高级架构
  • Python 列表排序

    本文最先发布在: https://www.itcoder.tech/posts/python-list-sort/

    雪梦科技
  • 前端-Vue2.0 项目开发实战经验

    在不同的路由页面,我们需要动态的修改文档标题,可以将每个页面的标题配置在路由元信息 meta 里面带上,然后在 router.beforeEach 钩子函数中修...

    grain先森
  • D-News周播报|Google发布5款新硬件 扎克伯格出席Oculus大会发VR新品

    大数据文摘
  • 开工!今天撸一波Jetpack下的Lifecycle、ViewModel和LiveData

    保持基本的手部和呼吸道卫生,坚持安全饮食习惯,并尽可能避免与任何表现出有呼吸道疾病症状(如咳嗽和打喷嚏等)的人密切接触。

    Android扫地僧

扫码关注云+社区

领取腾讯云代金券