一、背景
(正)地理编码指的是:将地理位置名称转换成经纬度;
逆地理编码指的是:将经纬度转换成地理位置信息,如地名、所在的省份或城市等
百度地图提供了相应的API,可以方便调用。相应的说明文档如下:
正地理编码
逆地理编码
具体API的参数可以查看相应的“服务文档”:
不过首次使用时需要申请,具体在控制台。申请AK的方式可参见其他文章。
二、源码
废话不多说,直接放源码。这里提供了Python调用这两个API的方法。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Author: Wild Orange
# @Email: jixuanfan_seu@
# @Date: -06-21 16:06:14
# @Last Modified time: -07-01 19:35:28
import requests
AK='[这里填写自己申请的AK值]'
def Pos2Coord(name):
'''
@func: 通过百度地图API将地理名称转换成经纬度
@note: 官方文档 /d/file/02/10192002180007.html
@output:
lng: 经度
lat: 纬度
conf: 打点绝对精度(即坐标点的误差范围)
comp: 描述地址理解程度。分值范围0-100,分值越大,服务对地址理解程度越高
level: 能精确理解的地址类型
'''
url = '/d/file/02/1002180007
res = requests.get(url)
if res.status_code==200:
val=res.json()
if val['status']==0:
retVal={'lng':val['result']['location']['lng'],'lat':val['result']['location']['lat'],
'conf':val['result']['confidence'],'comp':val['result']['comprehension'],'level':val['result']['level']}
else:
retVal=None
return retVal
else:
print('无法获取%s经纬度'%name)
def Coord2Pos(lng,lat,town='true'):
'''
@func: 通过百度地图API将经纬度转换成地理名称
@input:
lng: 经度
lat: 纬度
town: 是否获取乡镇级地理位置信息,默认获取。可选参数(true/false)
@output:
address:解析后的地理位置名称
province:省份名称
city:城市名
district:县级行政区划名
town: 乡镇级行政区划
adcode: 县级行政区划编码
town_code: 镇级行政区划编码
'''
url='/d/file/02/10222002180007
res=requests.get(url)
if res.status_code==200:
val=res.json()
if val['status']==0:
val=val['result']
retVal={'address':val['formatted_address'],'province':val['addressComponent']['province'],
'city':val['addressComponent']['city'],'district':val['addressComponent']['district'],
'town':val['addressComponent']['town'],'adcode':val['addressComponent']['adcode'],
'town_code':val['addressComponent']['town_code']}
else:
retVal=None
return retVal
else:
print('无法获取(%s,%s)的地理信息!'%(lat,lng))
注意:
函数只返回一些较为常用的地理位置信息。之前提到的官网中的说明文档是最全的,如果确实有需要,可以修改程序代码。