python 乡镇轮廓 高德_python3 高德常用方法归类

1 classMethod:2 def __init__(self):3 self.keys =KEY()4 self.k =self.keys.get_key()5

6 #访问网址

7 defget_response(self, base_url_, params_):8 """

9 :param base_url_: 网址10 :param params_: 访问网址的参数字典11 :return: 访问网址的响应内容12 """

13 whileTrue:14 try:15 response_ =requests.get(base_url_, params_)16 response_ =response_.json()17 infocode = int(response_['infocode'])18 if infocode != 10000:19 print(infocode, self.k)20 self.k =self.keys.next_key()21 params_['key'] =self.k22 else:23 break

24 exceptrequests.exceptions.ConnectionError:25 print('wait a moment')26 for i in range(60, 0, -1):27 print("倒计时{}秒".format(i), flush=True, end="\b"*5)28 time.sleep(1)29 exceptException as e:30 print(e)31 returnresponse_32

33 #gps坐标转化高德坐标

34 defexchange(self, coordinate):35 """

36 :param coordinate: 坐标 经度,纬度|经度,纬度……37 :return: 高德坐标38 """

39 base_url = 'https://restapi.amap.com/v3/assistant/coordinate/convert'

40 _params_ = {'locations': coordinate, 'coordsys': 'gps', 'output': 'json', 'key': self.k}41

42 return self.get_response(base_url, _params_)['locations'].replace(';', '|')43

44 #获取行政区信息

45 def get_region(self, *args, coordinate='', batch=False):46 """

47 :param coordinate: 坐标字符串48 :param args: 坐标 经度,纬度|经度,纬度……49 :param batch: 批量查询50 :return: 省,市,区(县),详细地址51 """

52 if coordinate == '':53 temp =[]54 for i in range(0, len(args), 2):55 temp.append('{},{}'.format(args[i], args[i+1]))56 str_coordinate = '|'.join(temp)57 else:58 str_coordinate =coordinate59

60 base_url = 'https://restapi.amap.com/v3/geocode/regeo'

61 _params_ = {'location': self.exchange(str_coordinate), 'extensions': 'all',62 'output': 'json', 'key': self.k, 'batch': str(batch).lower()}63

64 response =self.get_response(base_url, _params_)65

66 if notbatch:67 province = response['regeocode']['addressComponent']['province']68 city = response['regeocode']['addressComponent']['city']69 district = response['regeocode']['addressComponent']['district']70 address = response['regeocode']['formatted_address']71 pois = [[r['type'].split(';')[0], float(r['distance'])] for r in response['regeocode']['pois'][:3]]72

73 returnprovince, city, district, address, pois74 else:75 regeocodes = response['regeocodes']76 result =[]77 for r inregeocodes:78 result.append(79 (80 r['addressComponent']['province'],81 r['addressComponent']['city'],82 r['addressComponent']['district'],83 r['formatted_address'],84 [[i['type'].split(';')[0], float(i['distance'])] for i in r['pois'][:3]]85 )86 )87 returnresult88

89 #获取POI信息(多边形搜索--矩形搜索)

90 def get_poi(self, lon, lat, lon_gap, lat_gap, poi_type, output_poiname=False):91 """

92 :param lon: 矩形中心经度93 :param lat: 矩形中心纬度94 :param lon_gap: 矩形经度间隔95 :param lat_gap: 矩形纬度间隔96 :param poi_type: 查询POI类型97 :param output_poiname: 输出POI name98 :return: 相应poi数量99 """

100 base_url = 'https://restapi.amap.com/v3/place/polygon'

101 params = {'polygon': self.exchange('{},{}|{},{}'.102 format(lon-lon_gap/2, lat+lat_gap/2, lon+lon_gap/2, lat-lat_gap/2)),103 'types': poi_type, 'output': 'json', 'key': self.k, 'page': 1, 'offset': 20}104

105 response =self.get_response(base_url, params)106 n = int(response['count'])107

108 ifoutput_poiname:109 print('Crawling POI {} name'.format(poi_type))110 name = ['{}({})'.format(e['name'], e['typecode']) for e in response['pois']]111 while params['page'] < ceil(n/20):112 params['page'] += 1

113 name += ['{}({})'.format(e['name'], e['typecode']) for e in self.get_response(base_url, params)['pois']]114

115 returnn, name116 else:117 returnn118

119 defget_distance(self, o_lon, o_lat, d_lon, d_lat):120 base_url = 'https://restapi.amap.com/v3/direction/driving'

121 parameters ={122 'key': self.k, 'strategy': 2, 'nosteps': 1, 'extensions': 'base',123 'origin': self.exchange('{},{}'.format(o_lon, o_lat)),124 'destination': self.exchange('{},{}'.format(d_lon, d_lat))125 }126

127 response =self.get_response(base_url, parameters)128

129 return float(response['route']['paths'][0]['distance'])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值