今天调用高德地图API利用给定地址获取到了其标准地域纬度(省市县),并对应了其行政区域代码。
但是在这期间也遇到了问题:
①:一开始我是通过API获取给定地址的经纬度,再利用其经纬度从高德地图爬取其省市县标准地域纬度及其行政区域代码
首先获取经纬度:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 def get_coordinates(address,ak): 2 #ak为注册高德平台后创建与应用获取的key,address为查询地址 3 url="http://restapi.amap.com/v3/geocode/geo?key=%s&address=%s"%(ak,address) 4 data=requests.get(url) 5 #获取坐标 字典类型 6 coordinates=data.json() 7 #判断是否获取到该地址的相关信息,因为有的查询不出来,避免报错 8 if coordinates['count'] == '0': 9 coordinates = {} 10 else: 11 coordinates=coordinates['geocodes'][0]['location'] 12 #返回值为'经度,纬度'格式 13 return coordinates
之后获取标准地域纬度及行政区域代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 def get_code(coordinates): 2 if len(coordinates) != 0: 3 data = {} 4 data["longitude"] = coordinates.split(',', 1)[0] 5 data["latitude"] = coordinates.split(',', 1)[1] 6 url = "https://www.amap.com/service/regeo?longitude="+data["longitude"]+"&latitude="+data["latitude"] 7 data = requests.get(url) 8 contest=data.json() 9 #所处位置 10 location = contest["data"]["desc"] 11 #若地址为多个则只取第一个 12 location = location.split(",")[0]+location.split(",")[1]+location.split(",")[2] 13 #行政区划代码 14 code = contest["data"]["districtadcode"] 15 result = [location,code] 16 else: 17 result = [] 18 return result
返回的return为list数组,包含标准地域纬度及其行政区域代码。这种方法获得的地域格式会有瑕疵,比如我们输入的地址属于天津,那么它会返回“天津市天津市xx县”。
②:然后我就直接通过API获取其省、市、县进行组合,代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 def get_coordinates(address,ak): 2 url = "http://restapi.amap.com/v3/geocode/geo?key=%s&address=%s"%(ak,address) 3 data = requests.get(url) 4 #获取坐标 字典类型 5 location = data.json() 6 #判断是否获取到详细信息 7 if location['count'] == '0': 8 result = [] 9 else: 10 #分别获取省市县各个级别 11 province = location['geocodes'][0]['province'] 12 city = location['geocodes'][0]['city'] 13 district = location['geocodes'][0]['district'] 14 code = location['geocodes'][0]['adcode'] 15 print(province,city,district,code) 16 #下面这部分是解决获取的县内容为空的问题 17 if len(district) == 0: 18 if province == city: 19 province_city_district = province 20 else: 21 province_city_district = province + city 22 else: 23 if province == city: 24 province_city_district = province + district 25 else: 26 province_city_district = province + city + district 27 result = [province_city_district, code] 28 #返回值为'经度,纬度'格式 29 return result
这个一开始我的目光全聚焦在这种方法可以解决直辖市重复书写(比如:天津市天津市xx县)的问题,但后来遇到了个问题,那就是县级内容有的为空,所以我添加了判断语句,但是后来又发现市级也有可能为空。
经过测试,我发现第二种情况下获取的数据市级、县级为空时,第一种情况却能够获取到其内容。所以我就放弃了第二方法。
希望能对大家有所帮助✿✿ヽ(°▽°)ノ✿