爬取百度POI(1)

获取百度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])
        #同理,切割后索引分别为13
	
	#切割经度
	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)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值