原理:主要是通过调用百度地图的开放接口,先通过输入具体地址调用获取地理编码接口(http://api.map.baidu.com/geocoding/v3/?ak=你申请的ak&output=json&address=地址)获取该地址的地理编码,得到经纬度,再通过逆地理编码服务接口(https://api.map.baidu.com/reverse_geocoding/v3/?ak=你申请的ak&output=json&location=经纬度数据) 将位置坐标解析成对应的行政区划数据以及周边高权重地标地点分布情况 ,对响应数据进行处理,最终得到地址所属省份。
1.申请百度地图ak
2.具体代码实现
import json
import sys
import requests
# 根据中文名地址获取经纬度地址
def getLocation(address):
url = "http://api.map.baidu.com/geocoding/v3/?ak=你申请的ak&output=json&address="+address
response = requests.get(url)
if response.status_code == 200:
responseBody = json.loads(response.text)
if responseBody['status'] == 0:
result = responseBody['result']
location = result['location']
lng = location['lng']
lat = location['lat']
return (str(lat)+ "," + str(lng))
# 根据经纬度地址获取所属省份
def getProvinceByLocation(location):
url = "https://api.map.baidu.com/reverse_geocoding/v3/?ak=你申请的ak&output=json&location="+location
response = requests.get(url)
if response.status_code == 200:
responseBody = json.loads(response.text)
if responseBody['status'] == 0:
result = responseBody['result']
addressComponent = result['addressComponent']
province = addressComponent['province']
return province
with open("待解码数据.txt",'r',encoding='utf-8') as file,open("广东省内入境口岸.txt","a",encoding='utf-8') as guangDongFile,open("解析错误的入境口岸地址.txt","a",encoding='utf-8') as errorFile:
lines = file.readlines()
total = len(lines)
index = 0
for address in lines:
address = address.rstrip('\n')
try:
province = getProvinceByLocation(getLocation(address))
if '广东省' == province:
guangDongFile.write(address)
guangDongFile.write("\n")
except:
errorFile.write(address)
errorFile.write("\n")
percent = float(index) * 100 / float(total)
index += 1
sys.stdout.write("%.4f" % percent)
sys.stdout.write("%\r")
sys.stdout.flush()
sys.stdout.write("100%\r")
sys.stdout.flush()