获取百度poi第一步:划分网格
1、获取百度api一些注意事项
1、坐标拾取:左下–右上(西南sw-东北ne)
2、坐标格式:(纬度,经度)–(lat,lng)
3、一次返回400条限制
4、尺度:
1度~111km
0.1度~11km
0.05度~5.5km
0.02度~2.2km --> 2.2*2.2~5km2 一 一般5km2内不会有某种poi超过400条
2、划分网格思路
#例如两个纬度值a,b,划分大小为0.02
a=39.35
b=40.11
ls=[str(b)]
#大值减0.02,直到小于a,中间的过程值即为网格的纬度
while b-a>0:
m = b-0.02 #获得的m值即为中间要求的纬度
#把所有的m追加到一个列表中,并且以b为结尾,因为肯定要包括区间,所以上面的ls包括了b
b = b-0.02
ls.append('%.2f'%m)
ls = sorted(ls) #升序排列
3、经纬度划分
class LocaDiv(object):
#定义传入参数,锚点坐标,分割大小
def __init__(self,loc_all,divd):
self.loc_all = loc_all #锚点的坐标 例如('39.11,157.22,39.45,160.44')
self.divide = divd #划分区间
#定义范围,左下sw,右上ne
#及ne的lat和lng都是大的那一个
#处理纬度
def lat_all(self):
lat_sw = float(self.loc_all.split(',')[0])
lat_ne = float(self.loc_all.split(',')[1])
#把'39.11,157.22,39.45,160.44'分割成列表
#sw索引为0,ne索引为2
#切割纬度
lat_list=[str(lat_ne)]
while lat_ne-lat_sw>0:
m = lat_ne = self.divd
lat_ne = lat_ne - self.divd
lat_list.append('%.2f'%m)
return sorted(lat_list)
#两个经度
def lng_all(self):
lng_sw = float(self.loc_all.split(',')[1])
lng_ne = float(self.loc_all.split(',')[3])
#同理,切割后索引分别为1,3
#切割经度
lng_list = [str(lng_ne)]
while lng_ne-lng_sw>0:
m = lng_ne - self.divd
lng_ne = lng_ne - self.divd
lng_list.append('%.2f'%m)
return sorted(lng_list)
if __name__ == '__main__':
loc = LocaDiv('39.05,114.98,39.15,115.15',0.02)
lat = loc.lat()
lng = loc.lng()
得到的结果(如果print的话)
lat: [‘39.05’, ‘39.07’, ‘39.09’, ‘39.11’, ‘39.13’, ‘39.15’]
lng: [‘114.97’, ‘114.99’, ‘115.01’, ‘115.03’, ‘115.05’, ‘115.07’, ‘115.09’, ‘115.11’, ‘115.13’, ‘115.15’]
len(lat)= 6
len(lng)=10
4、经纬组合
1.组合方格示意图:
2.网格组合:
(1)每个点的横纵坐标分别是得到的lat,lng,循环组合(lat[0],lng[0])(lat[0],lng[1])…
(2)得到网格的数量为(lat数量-1)x(lng数量-1) 例如图中(7-1)x(7-1)=36
(3)每个小方格的左下、右上坐标组合共36次,即从lat[0]开始遍历,共遍历36次
(4)组合特征为等差数列,(lat[x],lat[x+m])
(5)m值为(lng的个数+1) 图中两边相等,例子不太合适,但是懒得改了
3.代码
#经纬坐标组合
latlng_list = []
for i in range(0,len(lat)):
a = lat[i]
for k in range(0,len(lng)):
b = lng[k]
ab = a + ',' +b
latlng_list.append(ab)
#组合网格并获取坐标
#网格数量
n = (len(lat)-1)*(len(lng)-1)
#组合网格
ls = []
for k in range(n): #组合遍历次数=网格数
a = latlng_list[k] #左下坐标
b = latlng_list[k+len(lng)+1] #右上坐标
ab = a + ',' + b
ls.append(ab)
#print(ls)