快速入门

流程介绍

  1. 初始化一个DumapClient。

    DumapClient 提供调用位置服务的相关openAPI接口,DuMap Python SDK的基本调用都是通过该client 进行。用户可以参考调用示例,进行配置Dumap OpenAPI创建Dumap Client,完成初始化客户端的操作。

  2. 调用相关Open API 接口。

    如果你熟悉python 相关代码可以直接参考完整示例接口调用示例

获取密钥

要使用位置服务,您需要拥有一个有效的 AK(Access Key ID)和SK(Secret Access Key)用来进行签名认证。AK/SK是由系统分配给用户的,均为字符串,用于标识用户,为访问OpenAPI做签名验证。

可以通过如下步骤获得并了解您的AK/SK信息:

1.注册百度智能云账号

2.创建AK/SK

调用示例

Dumap SDK 是针对OpenAPI调用的客户端,为方便开发者调用位置服务相关的API进行的封装。

配置Dumap OpenAPI

在新建DumapClient之前,需要先创建配置文件对DumapClient进行配置,以下将此配置文件命名为dumap_sample_conf.py,具体配置信息如下所示:

#!/usr/bin/env python
#coding=utf-8

#导入Python标准日志模块 和BCE相关配置
import logging
from baidubce.bce_client_configuration import BceClientConfiguration
from baidubce.auth.bce_credentials import BceCredentials
# 配置dumap 的调用HOST
HOST = b'lbs.baidubce.com'

# online AK SK 配置AK SK 
AK = b''
SK = b''
# 配置默认调用的APP_ID (在Dumap console 上可见)
APP_ID = b''

#设置日志文件输出的顺序、结构和内容
logger = logging.getLogger('baidubce.services.dumap.DumapClient')
fh = logging.FileHandler('sample.log')
fh.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
logger.setLevel(logging.DEBUG)
logger.addHandler(fh)

#创建BceClientConfiguration
config = BceClientConfiguration(credentials=BceCredentials(AK, SK), endpoint=HOST)
config.retry_policy.max_error_retry = 0

注意:

  1. 针对日志文件,Logging有如下级别:DEBUG,INFO,WARNING,ERROR,CRITICAL。
  2. 在上面代码中,access_key_id对应控制台中的“Access Key ID”,secret_access_key对应控制台中的“Access Key Secret”,获取方式请参考 如何获取AK / SK
  3. 上面的方式用户需要自己指定默认的APP_ID ,在用户console 列表页可见 位置服务, 如果代码中需要是用其他app 只需要在调用接口地方修改即可。

创建Dumap Client

在完成上述配置之后,参考如下代码新建一个DumapClient, 进行简单调用

# coding=utf-8
#导入dumapt配置文件
import dumap_sample_conf 

#导入Dumap相关模块
from baidubce.services.dumap.dumap_client import DumapClient

#新建DumapClient
dumap_client = DumapClient(dumap_sample_conf.config)

调用相关OPENAPI接口

位置服务通过API提供了多种能力,可以通过创建好的dumap_client 直接传入相关的参数进行调用。

说明:
返回的为BceRespone类型。
response.metadata 中为返回信息的header 部分。
response.body 中返回的信息中body的字符串。可以根据调用期待的返回类型进行解析。

调用地点检索服务示例

params = {}
    params['query'] = 'ATM机'
    params['tag'] = '银行'
    params['region'] = '北京'
    params['output'] = 'json'

    response = dumap_client.call_open_api(
            uri=b'/place/v2/search',
            app_id=dumap_sample_conf.APP_ID,
            params=params)

更多请求参数及返回参数说明请参考地点检索服务接口文档

调用地理编码服务示例

params = {}
    params['address'] = '北京市海淀区上地十街10号'

    response = dumap_client.call_open_api(
            uri=b'/geocoder/v2/',
            app_id=dumap_sample_conf.APP_ID,
            params=params)

更多请求参数及返回参数说明请参考正/逆地理编码服务接口文档

调用坐标转换服务示例

params = {}
    params['coords'] = '114.21892734521,29.575429778924'
    params['from'] = 1
    params['to'] = 5
    params['output'] = 'json'

    response = dumap_client.call_open_api(
            uri=b'/geoconv/v1/',
            app_id=dumap_sample_conf.APP_ID,
            params=params)

更多请求参数及返回参数说明请参考坐标转换服务接口文档

调用路线规划服务示例

params = {}
    params['origin'] = '40.056878,116.30815'
    params['destination'] = '31.222965,121.505821'

    response = dumap_client.call_open_api(
        uri=b'/direction/v2/transit',
        app_id=dumap_sample_conf.APP_ID,
        params=params)

更多请求参数及返回参数说明请参考路线规划服务接口文档

调用普通IP定位服务示例

params = {}
    params['ip'] = '127.0.0.1'

    response = dumap_client.call_open_api(
        uri=b'/location/ip',
        app_id=dumap_sample_conf.APP_ID,
        params=params)

更多请求参数及返回参数说明请参考普通IP定位服务接口文档

调用智能硬件定位服务示例

body_elem_0 = {}

    body_elem_0['accesstype'] = 0
    body_elem_0['output'] = 'JSON'
    body_elem_0['need_rgc'] = 'Y'

    body = [body_elem_0]

    params = {}
    params['src'] = ''
    params['prod'] = ''
    params['ver'] = '1.0'
    params['trace'] = False
    params['body'] = body

    response = dumap_client.call_open_api(
        uri=b'/locapi/v2',
        app_id=dumap_sample_conf.APP_ID,
        body=json.dumps(params),
        method=b'POST'
    )

更多请求参数及返回参数说明请参考智能硬件定位服务接口文档

完整示例

dumapClient 返回的均为BceRespone类型

说明:
response.metadata 中为返回信息的header 部分
response.body 中返回的信息中body的字符串。可以根据调用期待的返回类型进行解析

解析xml的返回信息

在请求参数中的output 设定为xml 时,返回的结果的body中为xml的String
如果需要相关解析 可以采用cElementTree等相关的python 解析工具。
下面的例子以cElementTree为方案 ,调用地理编码服务接口的返回处理:

说明:
这一版完整代码 是conf 直接在代码里
记得输入AK SK 和 APP_ID

# coding=utf-8

import logging
from baidubce.bce_client_configuration import BceClientConfiguration
from baidubce.auth.bce_credentials import BceCredentials
from baidubce.services.dumap.dumap_client import DumapClient
import xml.etree.cElementTree as ET

HOST = b'lbs.baidubce.com'
# online AK SK
AK = b''
SK = b''
APP_ID = b''  # dumap console 可见

logger = logging.getLogger('baidubce.services.dumap.DumapClient')
fh = logging.FileHandler('sample.log')
fh.setLevel(logging.DEBUG)

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
logger.setLevel(logging.DEBUG)
logger.addHandler(fh)

config = BceClientConfiguration(credentials=BceCredentials(AK, SK), endpoint=HOST)
config.retry_policy.max_error_retry = 0


if __name__ == "__main__":
    import logging
    logging.basicConfig(level=logging.INFO)
    __logger = logging.getLogger(__name__)
    dumap_client = DumapClient(config)
    params = {}
    params['address'] = '北京市海淀区上地十街10号'
    response = dumap_client.call_open_api(
        uri=b'/geocoder/v2/',
        app_id=APP_ID,
        params=params)
    print(response)
    # xml 解析
    GeocoderSearchResponse = ET.fromstring(response.body)
    print(GeocoderSearchResponse[0].text)  # status
    print(GeocoderSearchResponse[1][0][0].text)  # GeocoderSearchResponse.result.location.lng
    print(GeocoderSearchResponse[1][0][1].text)  # GeocoderSearchResponse.result.location.lat
    print(GeocoderSearchResponse[1][1].text)  # GeocoderSearchResponse.result.precise

解析json的返回信息

在请求参数中的output 设定为josn 时,返回的结果的body中为josn的String。
如果需要相关解析 可以采用python 自带的josn解析。
下面以调用地点检索服务解析为例子进行说明:

说明:
这一版完整代码是conf 直接在代码里
记得输入AK SK 和 APP_ID

# coding=utf-8

import logging
from baidubce.bce_client_configuration import BceClientConfiguration
from baidubce.auth.bce_credentials import BceCredentials
from baidubce.services.dumap.dumap_client import DumapClient

HOST = b'lbs.baidubce.com'
# online AK SK
AK = b''
SK = b''

APP_ID = b''
logger = logging.getLogger('baidubce.services.dumap.DumapClient')
fh = logging.FileHandler('sample.log')
fh.setLevel(logging.DEBUG)

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
logger.setLevel(logging.DEBUG)
logger.addHandler(fh)

config = BceClientConfiguration(credentials=BceCredentials(AK, SK), endpoint=HOST)
config.retry_policy.max_error_retry = 0

import json
import sys

reload(sys)
sys.setdefaultencoding('utf-8')

if __name__ == "__main__":
    import logging

    logging.basicConfig(level=logging.INFO)
    __logger = logging.getLogger(__name__)

    dumap_client = DumapClient(config)

    # 请求/place/v2/search 参数构造
    params = {}
    params['query'] = 'ATM机'
    params['tag'] = '银行'
    params['region'] = '北京'
    params['output'] = 'json'

    response = dumap_client.call_open_api(
        uri=b'/place/v2/search',
        app_id=APP_ID,
        params=params)
    print(response)

    # josn 解析
    body = json.loads(response.body)
    print(body["status"])
    print(body["results"][0]["name"])