基于百度api的某类空间设施/公共设施(养老院、医院、学校等)经纬度POI检索获取方法

【前言】最近帮忙处理了一个需求,需要计算某城市的养老院的可达性,但是首先需要获取所有养老院的位置经纬度,这个可以通过调用百度地图api的**【行政区划区域检索】**服务来实现。
在这里插入图片描述

具体思路是:
1、构建请求的url
检索城市region、关键字query(如养老院、学校、医院等)、检索分类tag(很有用,提高搜索准确性)、每页数量page_size、返回页数page_num等,具体看API详细文档
https://lbsyun.baidu.com/faq/api?title=webapi/guide/webservice-placeapi/district

我这里的示例:

url='https://api.map.baidu.com/place/v2/search?query=养老&tag=行政单位&region=XX城市&page_size=20&page_num='+str(numpage)+'&output=json&ak='

2、发送请求
3、获取请求结果
4、解析结果入表

详细代码附上

import requests
import json
import time
starttime=time.asctime(time.localtime(time.time()))   
starttime1=time.time();
def getjson(numpage):
    # 先纬度后经度
    url='https://api.map.baidu.com/place/v2/search?query=养老&tag=行政单位&region=柳州&page_size=20&page_num='+str(numpage)+'&output=json&ak='
    
    while True:
        try:
            response=requests.get(url=url,timeout=5)
            break
        except requests.exceptions.ConnectionError:
            print ('ConnectionError -- please wait 3 sec')
            time.sleep(3)
        except requests.exceptions.ChunkedEncodingError:
            print ('ChunkedEncodingError -- please wait 3 sec')
            time.sleep(3)
        except:
            print ('Unknow error')
            time.sleep(3)
    html=response.text
    decodejson=json.loads(html)
    return decodejson
file_object2=open(r'C:\Users\49520\Desktop\discal\poiresult.txt','w')
count=0
idn=0
try:
    for num in range(0,6):
        decodejson=getjson(num)
        print(decodejson.get('total'))
        if decodejson.get('status')==0:#表示运行成功
            result=decodejson.get('results')
            print(len(result))
            if len(result)>0:     
                for item in result:
                    name2=item.get('name')
                    print(name2)
                    location=item.get('location')
                    print(location.get('lng'),idn)
                    idn=idn+1
                    file_object2.write(str(idn)+','+str(name2)+','+str(location.get('lat')) +','+str(location.get('lng'))+'\n')

        else:
            print (str(coor)+','+ str(decodejson.get('status'))+decodejson.get('message'))
finally:
        file_object2.close()
        print ('finish')

限制条件:
普通用户一次检索只能返回10页的结果,比如每页10个,10页就是10*10=100个结果,如果搜索的内容过多数据会请求不全,建议每次查询缩小范围,控制查询的结果,可以切割区域查询。

如有需求,可私信联系!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值