使用百度API获取地名坐标信息

使用百度API获取地名坐标信息

百度API使用前需要申请AK 申请地址:http://lbsyun.baidu.com/apiconsole/key

在这里,http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-placeapi 主要使用地名检索API接口

使用Python 通过地点名 构建请求网址 返回json格式的地点信息

请求网址:http://api.map.baidu.com/place/v2/search?query=ATM机&tag=银行®ion=北京&output=json&ak=您的ak //GET请求

返回格式

{
    "status":0,
    "message":"ok",
    "results":[
        {
            "name":"天安门",
            "location":{
                "lat":39.915526,
                "lng":116.403847
            },
            "address":"北京市东城区长安街",
            "province":"北京市",
            "city":"北京市",
            "area":"东城区",
            "street_id":"65e1ee886c885190f60e77ff",
            "detail":1,
            "uid":"65e1ee886c885190f60e77ff"
        },
        {
            "name":"天安门广场",
            "location":{
                "lat":39.909652,
                "lng":116.404177
            },
            "address":"北京市东城区东长安街",
            "province":"北京市",
            "city":"北京市",
            "area":"东城区",
            "street_id":"c9b5fb91d49345bc5d0d0262",
            "detail":1,
            "uid":"c9b5fb91d49345bc5d0d0262"
        },
        {
            "name":"天安门广场-国旗",
            "location":{
                "lat":39.91328,
                "lng":116.40393
            },
            "address":"北京市东城区景山前街4号天安门广场内",
            "province":"北京市",
            "city":"北京市",
            "area":"东城区",
            "street_id":"4ae2adcf574bcd2b38221c66",
            "detail":1,
            "uid":"4ae2adcf574bcd2b38221c66"
        },
        {
            "name":"天安门-华表",
            "location":{
                "lat":39.91433,
                "lng":116.404413
            },
            "address":"北京市东城区东长安街天安门内",
            "province":"北京市",
            "city":"北京市",
            "area":"东城区",
            "street_id":"3ff8be14bf465f3682288ac1",
            "detail":1,
            "uid":"3ff8be14bf465f3682288ac1"
        },
        {
            "name":"天安门东",

一般json的第一个就是地名的地址,这里的坐标是百度坐标系,如使用其他坐标系需要进行转换。

实例:

def get_coor(地名): 
    url = "http://api.map.baidu.com/place/v2/search?query="
    myak = "®ion=北京&output=json&ak=gPItzAVKUHLXAGcVgIzGMOz8PsZKzGdY"                         #ak=9VxOsOtmgPLqx6G9yEHGgYLytoARXeub
    all_url = url+地名+myak
    #print(all_url)
    #  这里设置请求最大次数,如果失败,再次发起请求
    timeout = 500
    socket.setdefaulttimeout(timeout)  # 设置超时
    requests.adapters.DEFAULT_RETRIES = 5
    i = 5
    while i>0:
        try:
            req = requests.get(all_url)
            content = json.loads(req.text)
            if content["status"] != 0:
                print(content["status"])
                print(address)
                return 0
            coor_bd = content["results"][0]["location"]
            return [coor_bd["lng"], coor_bd["lat"]]
        except:
            i = i-1
    print(address,'抓取失败-------------------------------')
    return 0

最终返回地点的坐标

此外,也可是使用geopy第三方包进行地名坐标抓取,geopy还可以使用高德地图API,使用百度API返回的坐标和上面稍有不一样。

你可能感兴趣的:(地名获取)