python调用高德地图api获得poi

1,280 阅读3分钟

高德地图开发指南的一些调用api文档在这个网址

https://lbs.amap.com/api/webservice/guide/api/newpoisearch

周边搜索 API 服务地址(get请求) https://restapi.amap.com/v5/place/around?parameters 地理编码 API 服务地址(get请求) htmlhttps://restapi.amap.com/v3/geocode/geo?parameters 步行路径规划API URL(get请求)

https://restapi.amap.com/v3/direction/walking?parameters

骑行路径规划API URL(get请求)

https://restapi.amap.com/v4/direction/bicycling?parameters

代码如下

import requests
import json


def current_location(key, address):
    # 获取当前位置的经纬度
    info = requests.get("https://restapi.amap.com/v3/geocode/geo?parameters",
                        params={"key": "3fbf8b85af364be7acbf51b22a81b04e",
                                "address": address})
    # 使用get方法调用api,同时传入key和address参数(见文档)
    dict = json.loads(info.text)
    # json.loads()是用来读取字符串的,即可以把文件打开,用readline()读取一行,然后json.loads()一行
    # json.load()也可用来读取文件的,即将文件打开然后就可以直接读取
    # print(dict["geocodes"][0]["location"])  查看一下位置信息
    return (dict["geocodes"][0]["location"])  # 返回位置信息


def destination_info(key, address, keywords, radius):
    # 获取目的场所周围poi及poi的经纬度
    info = requests.get("https://restapi.amap.com/v3/place/around?parameters",
                        params={"key":"3fbf8b85af364be7acbf51b22a81b04e",
                                "location": current_location(key, address),
                                "keywords": keywords,
                                "radius": radius})
    # 使用get方法调用api,同时传入key,location(当前位置),keywords(目的场所关键字),radisu参数(见文档)
    dict = json.loads(info.text)
    # 由于目的地关键字有很多位置,比如输入饭店,就会有很多有具体位置的饭店显示,所以要存入列表
    poistionlist = [(poistion["name"], poistion["location"]) for poistion in dict["pois"]]
    return (poistionlist)


def way_to_destination_ride(key, address, keywords, radius):
    # 获取指定位置到周围指定poi的骑行路径规划
    poistionlist = destination_info(key, address, keywords, radius)
    origin = current_location(key, address)
    theway = []
    for poistion in poistionlist:
        info = requests.get("https://restapi.amap.com/v4/direction/bicycling?parameters",
                            params={"key": key,
                                    "origin": origin,
                                    "destination": poistion[1]})
        # 使用get方法调用api,同时传入key,origin(起点经纬度),destination(目的地经纬度)参数(见文档)
        dict = json.loads(info.text)
        the_way_to_destination = [pois["instruction"] for pois in dict["data"]["paths"][0]["steps"]]
        theway.append((poistion[0], the_way_to_destination))
    return theway
def way_to_destination_walk(key, address, keywords, radius):
    # 获取指定位置到周围指定poi的步行路径规划
    poistionlist = destination_info("3fbf8b85af364be7acbf51b22a81b04e", address, keywords, radius)
    origin = current_location("3fbf8b85af364be7acbf51b22a81b04e", address)
    theway = []
    for poistion in poistionlist:
        info = requests.get("https://restapi.amap.com/v3/direction/walking?parameters",
                            params={"key":"3fbf8b85af364be7acbf51b22a81b04e",

                                    "origin": origin,
                                    "destination": poistion[1]})
        # 使用get方法调用api,同时传入key,origin(起点经纬度),destination(目的地经纬度)参数(见文档)
        dict = json.loads(info.text)
        the_way_to_destination = [pois["instruction"] for pois in dict["route"]["paths"][0]["steps"]]
        theway.append((poistion[0], the_way_to_destination))
    return theway

def way_to_destination_drive(key, address, keywords, radius):
    # 获取指定位置到周围指定poi的开车路径规划
    poistionlist = destination_info("3fbf8b85af364be7acbf51b22a81b04e", address, keywords, radius)
    origin = current_location("3fbf8b85af364be7acbf51b22a81b04e", address)
    theway = []
    for poistion in poistionlist:
        info = requests.get("https://restapi.amap.com/v3/direction/driving?parameters",
                            params={"key":"3fbf8b85af364be7acbf51b22a81b04e",

                                    "origin": origin,
                                    "destination": poistion[1]})
        # 使用get方法调用api,同时传入key,origin(起点经纬度),destination(目的地经纬度)参数(见文档)
        dict = json.loads(info.text)
        the_way_to_destination = [pois["instruction"] for pois in dict["route"]["paths"][0]["steps"]]
        theway.append((poistion[0], the_way_to_destination))
    return theway

address = input("使用者所处位置:")
keywords = input("目的场所:")
way_of=input("出行方式(步行输入1,骑行输入2,开车输入3):")
if int(way_of)==1:
    while True:
        try:
            radius = int(input("搜索范围(米):"))
            break
        except ValueError:
            print("请输入整数")  # 规定radius只能为int,默认为1000m,范围是0-3000m
    for way in way_to_destination_walk("3fbf8b85af364be7acbf51b22a81b04e", address, keywords, radius):
        print(way[0])
        for step in way[1]:
            print(step)
if int(way_of)==2:
    while True:
        try:
            radius = int(input("搜索范围(米):"))
            break
        except ValueError:
            print("请输入整数")  # 规定radius只能为int,默认为1000m,范围是0-3000m
    for way in way_to_destination_ride("3fbf8b85af364be7acbf51b22a81b04e", address, keywords, radius):
        print(way[0])
        for step in way[1]:
            print(step)
else:
    while True:
        try:
            radius = int(input("搜索范围(米):"))
            break
        except ValueError:
            print("请输入整数")  # 规定radius只能为int,默认为1000m,范围是0-3000m
    for way in way_to_destination_drive("3fbf8b85af364be7acbf51b22a81b04e", address, keywords, radius):
        print(way[0])
        for step in way[1]:
            print(step)





输出调用方式 一定要看好输出格式啊,步行,骑行,驾车都不一样啊,哎呀~~~~~~(搞了很长时间才发现是route不是routes)

笑死了