地址解析的方式繁多,Google 官方提供的Geocoding API是其中之一,可将地址信息(中英文皆可)整理、转换为经纬度信息。

本文将提供Geocoding API的基础使用指南,包括:

  1. 设置谷歌云平台账号及项目
  2. 基础地址请求代码
  3. 返回值解析及信息提取

输入地址,如“上海市徐汇区华山路1954号”,

可得到相应经纬度输出:

Adsress: China, Shang Hai Shi, Xu Hui Qu, 华山路1954号 邮政编码: 200052
Latitude: 31.19864
Longitude: 121.4365

使用前的准备工作

Step1:登陆并创建项目

使用Geocoding API需要先在谷歌云平台(Google Cloud Platform)登陆并创建项目:

https://console.cloud.google.com/https://console.cloud.google.com/

Note:

  • 使用API的前提是账号已关联付款账户,如果没有,可以在Cloud Console中的Billing page设置,否则无法使用

Step2: 为项目中设置key

在API和服务中点击“凭据”或“key”,生成可使用的API密钥

Step3: 启用API和服务 

在“已启用的API和服务”中搜索并勾选Geocoding API

Okk,到这里准备工作就完成啦,下面我们来一步步看该如何使用。


1. 理解请求格式

首先,官方给出的请求格式是:

https://maps.googleapis.com/maps/api/geocode/outputFormat?parameters

OutputFormat有json和xml两种形式可选,就我们接下来的简单地址解析任务而言,json格式更便捷,我们在接下来的代码中选择json格式。

Parameters主要包括需解析的地址、设置的key。

请求地址可定义为:

url = 'https://maps.googleapis.com/maps/api/geocode/json?{}&key={}'.format(urllib.parse.urlencode({'address':address}), key)

这里我们使用urllib.parse.urlencode ()来处理输入的地址中的空格和符号,否则url可能无法解析。key需要提前设定为自己账号中的凭据。

2. 设定请求function

基于requests:

# Google Geocoding
import json
import requests
import urllib# define a function of crawing json from google api
def geturl(url):r = requests.get(url, timeout = 10)r.encoding = r.apparent_encodingreturn r.text

3. 设定response 整理函数

# define a function of parsing json from google api
def getinfo(js):try: js = json.loads(text)except:js = Noneif not js or 'status' not in js or js['status'] != 'OK':print('-----------Something Wrong-------------')print(text)else:print('Adsress:', js['results'][0]['formatted_address'])print('Latitude:', js['results'][0]['geometry']['location']['lat'])print('Longitude:', js['results'][0]['geometry']['location']['lng'])

为什么这么设置呢?

我们可以来发送一个请求基于返回值看看。

下面的这段代码可以基于输入的地址发送请求,Google会返回一段json格式的信息:

# Enter any location (English or Chinese)
# Print the corresponding json file
address = input('Give me an address: ')
url = 'https://maps.googleapis.com/maps/api/geocode/json?{}&key={}'.format(urllib.parse.urlencode({'address':address}), key)
print('Retrieving', url)
text = geturl(url)
try: js = json.loads(text)
except:js = None
print(json.dumps(js,indent = 4))

e.g. 输入“北京市海淀区北京大学”,输出的结果是:

{"results": [{"address_components": [{"long_name": "Haidian District","short_name": "Haidian District","types": ["political","sublocality","sublocality_level_1"]},{"long_name": "Beijing","short_name": "Beijing","types": ["administrative_area_level_1","political"]},{"long_name": "China","short_name": "CN","types": ["country","political"]}],"formatted_address": "Haidian District, Beijing, China","geometry": {"bounds": {"northeast": {"lat": 40.1613399,"lng": 116.3950898},"southwest": {"lat": 39.8867299,"lng": 116.05007}},"location": {"lat": 39.9999093,"lng": 116.3150572},"location_type": "APPROXIMATE","viewport": {"northeast": {"lat": 40.1613399,"lng": 116.3950898},"southwest": {"lat": 39.8867299,"lng": 116.05007}}},"partial_match": true,"place_id": "ChIJY61lyDdR8DURicN9xoOvSNM","types": ["political","sublocality","sublocality_level_1"]}],"status": "OK"
}

函数的设定基于上述response结构。


所以,对单一地址发送请求、获取经纬度信息的代码如下:

# Google Geocoding
import json
import requests
import urllibkey = 'ENTER_YOUR_KEY_HERE'#Replace with your own key, otherwise, the code won't run# define a function of crawing json from google api
def geturl(url):r = requests.get(url, timeout = 10)r.encoding = r.apparent_encodingreturn r.text# define a function of parsing json from google api
def getinfo(js):try: js = json.loads(text)except:js = Noneif not js or 'status' not in js or js['status'] != 'OK':print('-----------Something Wrong-------------')print(text)else:print('Adsress:', js['results'][0]['formatted_address'])print('Latitude:', js['results'][0]['geometry']['location']['lat'])print('Longitude:', js['results'][0]['geometry']['location']['lng'])# Get the latitude and longitude with defined functions
address = '1954 Huashan road, Xuhui District, Shanghai' #replace with your address
url = 'https://maps.googleapis.com/maps/api/geocode/json?{}&key={}'.format(urllib.parse.urlencode({'address':address}), key)
text = geturl(url)
try: js = json.loads(text)
except:js = None
getinfo(js)

更详细的信息可参考:

https://developers.google.com/maps/documentation/geocoding/cloud-setuphttps://developers.google.com/maps/documentation/geocoding/cloud-setup

完整Code下载地址:

GitHub - Liagogo/Google_Geocoding_API: Beginner's guidance for using google geocoding api. Let's turn addresses into langitude & longitudehttps://github.com/Liagogo/Google_Geocoding_API

地址解析:使用Google API将地址文本转换为经纬度相关推荐

  1. Java 调用Google Map Api解析地址,解析经纬度实例

    Java 调用Google Map Api解析地址,解析经纬度实例 使用google地图的反向地址解析功能,提供一个经纬度得到对应地址,或者给出模糊地址,得到经纬度,放在java后台代码中处理,这个使 ...

  2. ip转经纬度 php源码_php编程之如何输入地址自动转换为经纬度

    对于一些地图或地理位置的显示,通常要用到经纬度来表示,也就是用户输入地址之后,系统能够根据用户输入的位置信息进行经纬度的转换,那么这在技术上该如何实现呢?下面就来为大家简单介绍一下重点部分的代码实现, ...

  3. ArcGIS for qml - 地址地标转换为经纬度(地理编码)

    实现输入地址地标转换为其经纬度 本文链接:地理编码 作者: 狐狸家的鱼 Github: 八至 一.地理编码 1.地理编码含义 地址编码(或地理编码)是使用地址中包含的信息来插入地图上的相应位置的过程. ...

  4. 使用高德地图api批量将地址转换为经纬度

    有时候需要将一些地址信息转换为经纬度信息,在echarts地图上展示,一下代码可以批量将地址转换为经纬度. 如果没有安装requests或openpyxl 使用: pip install reques ...

  5. 利用Google API 进行IP地址定位

    先说一句 精度在国内只能到城市 通常来讲, 定位主要有以下4种方法: 1.      GPS 2.      Wi-Fi access point 3.      cell tower 4.      ...

  6. Google API:如何访问Google Analytics(分析)数据?

    在深入研究Google Analytics(分析)API之前,了解一些Google Analytics(分析)术语及其关系总是很有用的. Google帐户:要访问Google Analytics(分析 ...

  7. vb 关于窗口样式的API以及处理文本的API参考

    管我们使用什么计算机语言开发,VC,VB,BCB,JAVA,NET你都脱离不开操作系统,它就是我们软件的生存土壤,JAVA的跨平台其实是因为它的虚拟机,实质上虚拟机还是要依靠操作系统,.net可以说博 ...

  8. 利用python查询电脑配置_干货|利用Python将地址转换为经纬度坐标

    本文主要讲述利用Python将文本格式的地址转换为数字格式的经纬度坐标数据,主要步骤有: 注册高德地图API账号,申请Web服务的Key 了解并测试地理编码API服务 利用Python实现地址转坐标 ...

  9. 淘宝api开发教程(淘宝API测试地址,参数说明)

    API一词相信每一个开发人员都不陌生,API是软件系统之间或不同组成部分之间进行连接的约定.特别是移动应用程序和微服务架构的不断普及,API就是他们成功背后的功臣,这个时候如何设计和开发API就显得格 ...

  10. 使用C++访问Google API

    Google提供了一套基于SOAP的Web API提供给Web开发人员用于让我们可以更加便利的使用Google提供的服务,诸如相册.日历.文档等.可惜Google官方只提供了.net.JAVA.Pyt ...

最新文章

  1. 深度学习以及卷积基础
  2. 10815 - Andy's First Dictionary
  3. php 复杂数组排序,如何利用php array_multisort函数 对数据库结果进行复杂排序
  4. android大智慧安装目录,大智慧的文件目录结构
  5. 计算机网络10--路由冗余备份,缺省(静态)路由配置
  6. python-skimage.io,filters,transform
  7. 逻辑思维训练和推理思维训练
  8. 微信领取淘宝内部优惠券教程免费
  9. UTI 唯一类型标识
  10. 连连支付提现人民币的时候汇率是怎么样的?
  11. ubuntu 禁用笔记本触摸板
  12. 团队管理4 | 技术管理如何兼顾技术
  13. 【安全系列】setoolkit钓鱼
  14. 基于QT5实现简易计算器
  15. c语言中数组元素的正确引用,1. 若有定义:int a[2][3];,以下选项中对a数组元素正确引用的是...
  16. Python写爱心闪光动图
  17. 推出企业版开源数据库,Cockroach Labs 完成 2700 万美元新融资
  18. Google Fonts的使用
  19. AMD推土机系列问世,8核CPU处理速度创世界记录
  20. 清除idea JetbrainsAgent插件

热门文章

  1. NSX-T业务转发04—— 多层Tier0Tier1路由
  2. 计算机固态硬盘装系统,固态硬盘装系统,小编教你固态硬盘如何装系统
  3. Java操作excel锁定
  4. 2019年全国大学生电子设计竞赛D题简易电路特性测试仪试题
  5. 视频怎么剪辑才好看?学视频剪辑必读入门指南
  6. 挖掘目录穿越漏洞实战经验
  7. js 函数传参改变div属性
  8. “学习方法”学习笔记(一)费曼技巧
  9. c语言 switch案例,c语言switch case语句使用例子
  10. 计算机同步增长率公式,行测资料分析增长率的计算技巧