查看原文
其他

数据治理 | 根据地址获取经纬度及行政区划——API的妙用

快点关注→ 数据Seminar 2022-12-31

本文目录

一、引言

二、行政区划代码、经纬度简介

1.行政区划代码

2.经纬度

三、使用高德 Web服务API

1.地理编码

2.逆地理编码

四、结束语

本文共3030个字,阅读大约需要8分钟,欢迎指正!

Part1引言

在我们日常的工作学习中,经常会与各种各样的数据打交道。其中地址数据是一种比较特殊的数据,地址本身是一串字符,其中包含很多有价值的信息,比如省份,城市等;一个标准的地址是对现实世界中一个位置的描述,而这也是经纬度的含义所在,由于经纬度的特性(例如:可以快速定位唯一位置),大家非常倾向于使用经纬度来补充地址数据。同时我国制定的“行政区划代码”可以表示省份,城市等信息。这样一来,经纬度和行政区划代码就成为了极为常用的地址补充数据。
那我们如何根据地址来获取经纬度以及行政区划代码呢?本文来为您介绍。

Part2行政区划代码、经纬度简介

1行政区划代码

行政区划代码是由“中国国家标准化管理委员会”公布的用于对我国管辖区域内各层级行政区划编制进行替代的数字编码。完整的行政区划代码有 12 位,较为常用的的是前六位。行政区划代码各位含义如下图所示:

其中行政区划代码的第一位是根据我国的几大地区来编码的,例如:

  • “1” 代表华北地区,如北京市(110000);
  • “2” 代表东北地区,如黑龙江省(230000);
  • “3” 代表华东地区,如江苏省(320000);
  • “4” 代表中南地区,如广东省(440000);
  • “5” 代表西南地区,如四川省(510000);
  • “6” 代表西北地区,如新疆维吾尔自治区(650000)。

课外小补充💡企研·学术大数据平台 | 雁过留痕——中国历年行政区划(修正)数据正式上线

2经纬度

经纬度是经度与纬度组成的坐标系统,是一种利用三度空间的球面来定义地球上的空间的球面坐标系统,能够标示地球上的任何一个位置。

——百度百科

世界上有许多种不同标准的经纬度,即存在不同的经纬度坐标系,我国常用的经纬度坐标系主要有下表中的几种:
名称别称简介
WGS84地球坐标系、GPS坐标系国际上通用的坐标系。设备包含的GPS芯片或者北斗芯片获取的经纬度一般都是为WGS84地理坐标系,目前谷歌地图采用的是WGS84坐标系(中国范围除外)
GCJ-02火星坐标系由中国国家测绘局(G表示Guojia国家,C表示Cehui测绘,J表示Ju局)制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。
BD09百度坐标系经GCJ-02坐标系加密后的坐标系,由百度公司提供

Part3使用高德 Web服务API

地址与经纬度的转换主要由地理服务厂商提供,国内“御三家”服务商分别是高德,百度以及腾讯。各个服务商对于地址的解析并不相同,如果你的地址数据并不完整,可能需要同时使用多个服务商的结果来获取经纬度以及验证所得结果的准确性。
篇幅有限,我们这里以高德地图为例,为大家介绍如何使用地图 API 根据地址获取经纬度和其他信息(高德地图默认使用的经纬度坐标系是 GCJ-02)。

1地理编码

地理编码,也称正地理编码,是根据文本地址返回地址所在位置经纬度的处理过程。也就是说,当我们现有的数据是文本地址,想要获取经纬度和其他信息时可以使用此服务,使用高德提供的地理编码服务的 Python 代码如下:
# 导入 Python 网络请求模块
import requests

# 定义使用高德 API 进行地理编码的方法
def geocoding_by_address(address, city):

    # 使用高德 Web服务API 所需的 key, 需要前往高德开放平台申请
    key = '40a3821347789169d5cb88c4d152bbc1'
    
    # 发送地理编码请求的 url
    url = 'https://restapi.amap.com/v3/geocode/geo'
    
    # 向地理编码服务传入的参数
    parameters = {
        'key':key,         # 使用服务所需的 key, 必需参数
        'address':address, # 进行地理编码的地址,必需参数
        'city':city,       # 城市,传入该参数可以增加该地区的权重
    }

    # 使用上面定义的参数到指定 url 去请求数据
    resp = requests.get(
            url, 
            params=parameters
        )
    # 解析异常
    resp.raise_for_status()

    # 以 json 格式返回请求结果
    return resp.json()

# 示例,调用上面定义的地理编码方法
# 第一个参数是我们想要进行地理编码的文本地址
# 第二个参数可以传入省份、地市,传入该参数后,会尽可能地返回指定地区的位置信息
# 第二个参数为空时,会在全国范围内寻找
result = geocoding_by_address('杭州市钱塘区2号大街100号''')
result
下面是以上示例返回的结果:
返回结果的各部分的含义如下图所示:
我们可以像处理 Python 字典一样从地理编码请求结果中提取数据,代码如下:
# 返回结果为字符型数据

# 提取经纬度
gis = result['geocodes'][0]['location']
# 经度在前,纬度在后
print(gis)  # 输出:120.393592,30.311114

# 提取六位行政区划代码
adcode = result['geocodes'][0]['adcode']
print(adcode)  # 输出:330114

2逆地理编码

逆地理编码是与地理编码相反的过程:
使用高德提供的逆地理编码服务的 Python 代码如下:
# 定义使用高德 API 进行逆地理编码的方法
def inverse_geocoding(lng, lat):

    # 使用高德 Web服务API 所需的 key, 需要前往高德开放平台申请
    key = '40a3821347789169d5cb88c4d152bbc1'
    
    # 发送逆地理编码请求的 url
    url = 'https://restapi.amap.com/v3/geocode/regeo'

    # 将传入的经纬度转为字符型,如果已经是字符则不做任何操作
    try:
        lng = str(lng)
        lat = str(lat)
    except:
        pass

    # API 所需的坐标格式是使用逗号分隔经纬度,需要预先适配
    location = ','.join([lng, lat])
    
    # 向地理编码服务传入的参数
    parameters = {
        'key':key,           # 使用服务所需的 key, 必需参数
        'location':location, # 进行逆地理编码所需的坐标,必需参数
    }

    # 使用上面定义的参数到指定 url 去请求数据
    resp = requests.get(
            url, 
            params=parameters
        )
    # 解析异常
    resp.raise_for_status()

    # 以 json 格式返回请求结果
    return resp.json()

# 示例,使用正地理编码获取的经纬度进行逆地理编码
# 逆地理编码需要同时传入坐标点的经纬度值
# 传入参数,经度在前,纬度在后
result = inverse_geocoding(120.393592,30.311114)
result
所得结果如下图所示:
返回结果的各部分的含义可以前往以下链接查看:
https://lbs.amap.com/api/webservice/guide/api/georegeo
其中 formatted_address 表示输入经纬度所对应的现实地址,我们在正地理编码中使用地址杭州市钱塘区2号大街100号去获取该地点的经纬度,随后使用返回的经纬度进行逆地理编码,所匹配到的地址同样是杭州市钱塘区2号大街100号。这也反映了该 API 服务的准确性。

Part4结束语

地理编码和逆地理编码可以自由地转换文本地址和经纬度,并附带有其他有价值的地理相关信息。希望本文介绍的技巧对大家的工作及研究有所帮助。


我们将在数据治理板块中推出一系列原创推文,帮助读者搭建一个完整的社科研究数据治理软硬件体系。该板块将涉及以下几个模块(点击标题即可跳转至相应合集):
  1. 计算机基础知识
  2. 编程基础
  3. 数据采集
  4. 数据存储
  5. 数据清洗
  6. 数据实验室搭建
  7. 数据治理特别篇



星标⭐我们不迷路!想要文章及时到,文末“在看”少不了!

点击搜索你感兴趣的内容吧

往期推荐


基本无害 | 使回归有意义——基本原理(2)

基本无害 | 使回归有意义——基本原理(1)

基本无害 | 第二章(全)理想的实验

数据治理 | 工企地址清洗——Python的妙用

数据治理 | 数据量越来越大,Stata总奔溃?看来……





数据Seminar




这里是大数据、分析技术与学术研究的三叉路口


文 | 《社科领域大数据治理实务手册》


    欢迎扫描👇二维码添加关注    

点击下方“阅读全文”了解更多

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存