## uni-map-service 公共模块 聚合了多家地图供应商的服务端API ::: warning 注意 uni-map-service公共模块仅能在云函数/云对象内使用。如果您不了解公共模块,请[参阅](cf-common.md) ::: > 插件市场地址:[https://ext.dcloud.net.cn/plugin?name=uni-map-service](https://ext.dcloud.net.cn/plugin?name=uni-map-service) ## 配置@config 待补充 ## 公共返回参数@publicresult 以下所有API均会返回的参数 |参数 |说明 | |--- |--- | |errCode |为0代表成功,其他均为失败 | |errMsg |失败后的提示 | |originalResult | 原始返回结果(供应商接口原始返回结果,需new UniMapService时,设置needOriginalResult: true) | |result | 插件返回结果(抹平各平台差异后的返回结果) | ## 初始化实例 在调用API前,需要先初始化实例 ```js // 初始化实例 let uniMapService = new UniMapService({ provider: "qqmap", // 指定使用哪家地图供应商 needOriginalResult: false, // 是否需要返回原始信息 }); ``` **参数** |参数 |类型 |必填 |说明 |兼容性 | |:-- |:-: |:-: |:-- |:-: | |provider |String |是 |指定使用哪家地图供应商 |all | |needOriginalResult |Boolean|否 |是否需要返回原始信息,默认false|all | **provider可选项** - qqmap 腾讯地图 - amap 高德地图 ## API@api ### 逆地址解析(坐标转地址)@location2address **示例** ```js // 引入uni-map-service公共模块 const UniMapService = require('uni-map-service'); // 初始化实例 let uniMapService = new UniMapService({ provider: "qqmap", // 指定使用哪家地图供应商 }); // 调用API let result = await uniMapService.location2address({ location: "39.908815,116.397507" }); console.log("result", result); ``` **请求参数** |参数 |类型 |必填 |说明 |兼容性 | |:-- |:-: |:-: |:-- |:-: | |location |String |是 |经纬度(GCJ02坐标系),格式:location=lat<纬度>,lng<经度> |all | |get_poi |Number |否 |是否返回周边地点(POI)列表
0:不返回(默认)
1:返回 |all | |poi_options|String |否 |周边POI(AOI)列表控制参数 |腾讯地图 | |poitype |String |否 |返回附近POI类型 | 高德地图| |radius |String |否 |搜索半径(radius取值范围在0~3000,默认是1000。单位:米) | 高德地图| |roadlevel |Number |否 |道路等级
0:显示所有道路
1:过滤非主干道路,仅输出主干道路数据 |高德地图 | |homeorcorp |String |否 |是否优化POI返回顺序 | 高德地图| **返回参数** 仅列出result内的参数,其他参数见 [公共返回参数](#publicresult) |参数 |类型 |说明 |兼容性 | |:-- |:-: |:-- |:-: | |formatted_addresses| String|详细地址 |all | |country | String|国家 |all | |province | String|省 |all | |city | String|市 |all | |district | String|区 |all | |street | String|街道/道路,可能为空字串|all | |street_number | String|门牌,可能为空字串 |all | |adcode | String|行政区划代码 |all | |towncode | String|乡镇街道编码 |all | |pois | Array |周边POI |all | |  |-- id |String |id |all | |  |-- title |String |地点名称 |all | |  |-- address |String |地址 |all | |  |-- location |Object |经纬度 |all | |  |-- distance |Number |距离(米) |all | |  |-- direction|String |方位 |all | |  |-- category |String |类别 |all | ### 地址解析(地址转坐标)@address2location **示例** ```js // 引入uni-map-service公共模块 const UniMapService = require('uni-map-service'); // 初始化实例 let uniMapService = new UniMapService({ provider: "qqmap", // 指定使用哪家地图供应商 }); // 调用API let result = await uniMapService.address2location({ address: "北京市海淀区彩和坊路海淀西大街74号" }); console.log("result", result); ``` **请求参数** |参数 |类型 |必填 |说明 |兼容性 | |:-- |:-: |:-: |:-- |:-: | |address|String |是 |地址(注:地址中请包含城市名称,以及需要对地址进行URL编码,否则会影响解析效果)|all | |city |String |否 |指定查询的城市(不传则在全国范围内查询) |all | **返回参数** 仅列出result内的参数,其他参数见 [公共返回参数](#publicresult) |参数 |类型 |说明 |兼容性 | |:-- |:-: |:-- |:-: | |location |Object | 经纬度 |all | |  |-- lat|Number |纬度 |all | |  |-- lng|Number |经度 |all | |adcode |String |行政区划代码 |all | |province | String|省 |all | |city | String|市 |all | |district | String|区,可能为空字串 |all | |street | String|街道/道路,可能为空字串|all | |street_number| String|门牌,可能为空字串 |all | ### 坐标转换@translate **示例** ```js // 引入uni-map-service公共模块 const UniMapService = require('uni-map-service'); // 初始化实例 let uniMapService = new UniMapService({ provider: "qqmap", // 指定使用哪家地图供应商 }); // 调用API let result = await uniMapService.translate({ locations: "39.12,116.83;30.21,115.43", type: 3 }); console.log("result", result); ``` **请求参数** |参数 |类型 |必填 |说明 |兼容性 | |:-- |:-: |:-: |:-- |:-: | |locations |Array |是 |预转换的坐标,支持批量转换 |all | |  |-- lat|Number|纬度 |all | |  |-- lng|Number|经度 |all | |type |Number |否 |输入的locations的坐标类型,
可选值:
1:GPS
2:sogou
3:baidu
4:mapbar
6:sogou |腾讯地图:全部支持; 高德地图:1、3、4| **返回参数** 仅列出result内的参数,其他参数见 [公共返回参数](#publicresult) |参数 |类型 |说明 |兼容性 | |:-- |:-: |:-- |:-: | |locations |Array | 坐标转换结果,转换后的坐标顺序与输入顺序一致|all | |  |-- lat|Number |纬度 |all | |  |-- lng|Number |经度 |all | ### IP定位@ip2location **示例** ```js // 引入uni-map-service公共模块 const UniMapService = require('uni-map-service'); // 初始化实例 let uniMapService = new UniMapService({ provider: "qqmap", // 指定使用哪家地图供应商 }); // 调用API let result = await uniMapService.ip2location({ ip: "111.206.145.41" }); console.log("result", result); ``` **请求参数** |参数 |类型 |必填 |说明 |兼容性 | |:-- |:-: |:-: |:-- |:-: | |ip |String |是 | IP地址|all | **返回参数** 仅列出result内的参数,其他参数见 [公共返回参数](#publicresult) |参数 |类型 |说明 |兼容性 | |:-- |:-: |:-- |:-: | |location |Object | 坐标 |腾讯地图 | |  |-- lat|Number |纬度 |腾讯地图 | |  |-- lng|Number |经度 |腾讯地图 | |nation |String | 国家 |腾讯地图 | |nation_code |String | 国家代码(ISO3166标准3位数字码)|腾讯地图 | |adcode |Number | 行政区划代码 |all | |province |String | 省 |all | |city |String | 市,可能为空 |all | |district |String | 区,可能为空 |腾讯地图 | |rectangle |String | 所在城市矩形区域范围 |高德地图 | ### 关键词输入提示@inputtips **示例** ```js // 引入uni-map-service公共模块 const UniMapService = require('uni-map-service'); // 初始化实例 let uniMapService = new UniMapService({ provider: "qqmap", // 指定使用哪家地图供应商 }); // 调用API let result = await uniMapService.inputtips({ keyword: "人民医院", region: "北京市" }); console.log("result", result); ``` **请求参数** |参数 |类型 |必填 |说明 |兼容性 | |:-- |:-: |:-: |:-- |:-: | |keyword |String |是 | 用户输入的关键词(希望获取后续提示的关键词) |all | |city |String |是 | 限制城市范围 |all | |citylimit |Boolean|否 | false:当前城市无结果时,自动扩大范围到全国匹配(默认)
true:固定在当前城市 | all | |location |String |否 | 定位坐标,传入后,若用户搜索关键词为类别词(如酒店、餐馆时),
与此坐标距离近的地点将靠前显示
格式:location=lat<纬度>,lng<经度>|all | |get_subpois |Number |否 | 是否返回子地点,如大厦停车场、出入口等取值
0:不返回(默认)
1:返回) |腾讯地图 | |policy |Number |否 | 检索策略 |腾讯地图 | |filter |String |否 | 筛选条件 |腾讯地图 | |address_format |String |否 |可选值:short 返回“不带行政区划的”短地址 |腾讯地图 | |page\_index |Number |否 | 页码,从1开始,最大页码需通过count进行计算,必须与page_size同时使用 |腾讯地图 | |page\_size |Number |否 | 每页条数,取值范围1-20,必须与page_index 同时使用 |腾讯地图 | |datatype |Number |否 | 返回的数据类型,多种数据类型用“\|”分隔
可选值:
all:返回所有数据类型
poi:返回POI数据类型
bus:返回公交站点数据类型
busline:返回公交线路数据类型|高德地图 | **返回参数** 仅列出result内的参数,其他参数见 [公共返回参数](#publicresult) |参数 |类型 |说明 |兼容性 | |:-- |:-: |:-- |:-: | |data |Array | 提示词数组,每项为一个POI对象 |all | |  |-- id |String |若数据为POI类型,则返回POI ID;若数据为bus类型,则返回bus id;若数据为busline类型,则返回busline id。|all | |  |-- title |String |地点名称 |all | |  |-- address |String |地址 |all | |  |-- category |String |分类 |腾讯地图 | |  |-- type |String |POI类型,值说明:0:普通POI / 1:公交车站 / 2:地铁站 / 3:公交线路 / 4:行政区划 |腾讯地图 | |  |-- location |String |经纬度 |all | |   |-- lat|Number |纬度 |all | |   |-- lng|Number |经度 |all | |  |-- adcode |Number |行政区划代码 |all | |  |-- province |String |省 |腾讯地图 | |  |-- city |String |市 |腾讯地图 | |  |-- district |String |区/县,当type(POI类型)为3(公交线路)时,district由city补全 |腾讯地图 | |sub_pois |String |子地点列表,仅在输入参数get\_subpois=1时返回 |腾讯地图 | |  |-- parent_id|String |主地点ID,对应data中的地点ID |腾讯地图 | |  |-- id |String |地点唯一标识 |腾讯地图 | |  |-- title |String |地点名称 |腾讯地图 | |  |-- address |String |地址 |腾讯地图 | |  |-- category |String |POI(地点)分类 |腾讯地图 | |  |-- location |String |地址 |腾讯地图 | |   |-- lat|Number |纬度 |all | |   |-- lng|Number |经度 |all | |  |-- adcode |String |行政区划代码 |腾讯地图 | |  |-- city |String |地址 |腾讯地图 | |  |-- address |String |地点所在城市名称 |腾讯地图 | ### 路线规划(驾车/步行/骑行/电动车/公交)@route **示例** ```js // 引入uni-map-service公共模块 const UniMapService = require('uni-map-service'); // 初始化实例 let uniMapService = new UniMapService({ provider: "qqmap", // 指定使用哪家地图供应商 }); // 调用API let result = await uniMapService.route({ mode: "driving", from: "40.034852,116.319820", to: "39.771075,116.351395" }); console.log("result", result); ``` **请求参数** |参数 |类型 |必填 |适用mode |说明 |兼容性 | |:-- |:-: |:-: |:-: |:-- |:-: | |mode |String |是 | 通用 | 交通方式
driving:驾车
walking:步行
bicycling:骑行
ebicycling:电动车
transit:公交 |all | |from |String |是 | 通用 | 起点位置坐标,格式:lat,lng |all | |to |String |是 | 通用 | 终点位置坐标,格式:lat,lng |all | |to_poi |String |否 | 通用 | 终点POI ID,传入后,优先级高于from(坐标) |all | |show_fields |Number |否 | 通用 | 返回结果控制,show\_fields用来筛选response结果中可选字段。
show\_fields的使用需要遵循如下规则:
1、具体可指定返回的字段类请见下方返回结果说明中的“show\_fields”内字段类型
2、多个字段间采用“,”进行分割
3、show\_fields未设置时,只返回基础信息类内字段
|高德地图 | |from_poi |String |否 | 驾车、公交 | 起点POI ID,传入后,优先级高于from(坐标) |all | |policy |String |否 | 驾车、公交 |算路策略,详情见下方policy值范围 |all | |waypoints |String |否 | 驾车 |途经点,格式:lat1,lng1;lat2,lng2;…
腾讯地图最大支持30个
高德地图最大支持16个 |all | |avoidpolygons |String |否 | 驾车 | 避让区域 |all | |road_type |Number |否 | 驾车 | [from辅助参数] 起点道路类型 |all | |plate |String |否 | 驾车 | 车牌号,填入后,路线引擎会根据车牌对限行区域进行避让,不填则不不考虑限行问题 |all | |cartype |Number |否 | 驾车 | 车辆类型(影响限行规则),
取值:
0:[默认]普通汽车
1:新能源
2:插电式混动汽车 |腾讯地图:0、1; 高德地图:全部支持 | |heading |Number |否 | 驾车 | [from辅助参数]在起点位置时的车头方向,数值型,取值范围0至360(0度代表正北,顺时针一周360度) |腾讯地图 | |speed |Number |否 | 驾车 | [from辅助参数]速度,单位:米/秒,默认3。 当速度低于1.39米/秒时,heading将被忽略 |腾讯地图 | |accuracy |Number |否 | 驾车 | [from辅助参数]定位精度,单位:米,取>0数值,默认5。 当定位精度>30米时heading参数将被忽略 |腾讯地图 | |from_track |Number |否 | 驾车 | [from辅助参数]起点轨迹 |腾讯地图 | |get_mp |Number |否 | 驾车 | 是否返回多方案
0:[默认]仅返回一条路线方案
1:返回多方案(最多可返回三条方案供用户备选) |腾讯地图 | |get_speed |Number |否 | 驾车 | 是否返回路况(道路速度)
0:[默认]不返回路况 1:返回路况 |腾讯地图 | |added_fields |Number |否 | 驾车 | 返回指定标准附加字段,取值支持 cities 路线途经行政区划信息(按路线A途经顺序排序) |腾讯地图 | |no_step |Number |否 | 驾车 | 不返回路线引导信息,可使回包数据量更小,
取值:
0:[默认]返回路线引导信息
1:不返回 |腾讯地图 | |avoidroad |String |否 | 驾车 | 避让道路名,只支持一条避让道路 |高德地图 | |ferry |Number |否 | 驾车 | 是否使用轮渡
0:使用渡轮
1:不使用渡轮 |高德地图 | |departure_time |Number |否 | 公交 | 出发时间,用于过滤掉非运营时段的线路,格式为Unix时间戳,默认使用当前时间 |腾讯地图 | |city1 |String |是 | 公交 | 起点所在城市(仅支持citycode,相同时代表同城,不同时代表跨城) |高德地图 | |city2 |String |是 | 公交 | 目的地所在城市(仅支持citycode,相同时代表同城,不同时代表跨城) |高德地图 | |multiexport |Number |否 | 公交 | 地铁出入口数量
0:只返回一个地铁出入口
1:返回全部地铁出入口 |高德地图 | |max_trans |Number |否 | 公交 | 最大换乘次数 |高德地图 | |nightflag |Number |否 | 公交 | 考虑夜班车
0:不考虑夜班车
1:考虑夜班车 |高德地图 | |date |String |否 | 公交 | 请求日期 例如:2013-10-28 |高德地图 | |time |String |否 | 公交 | 请求时间 例如:9-54 |高德地图 | |alternative_route|Number |否 | 步行、骑行、电动车、公交 | 返回方案条数 最大3条,mode为公交时,最大10条 |高德地图 | **【驾车】方式policy值范围** 0:速度优先(只返回一条路线),此路线不一定距离最短 1:费用优先(只返回一条路线),不走收费路段,且耗时最少的路线 2:距离优先(只返回一条路线),仅走距离最短的路线,但是可能存在穿越小路/小区的情况 3:速度优先(只返回一条路线),不走快速路,例如京通快速路 32:高德地图APP默认策略 33:躲避拥堵 34:高速优先 35:不走高速 36:少收费 37:大路优先 38:速度最快 39:躲避拥堵+高速优先 40:躲避拥堵+不走高速 41:躲避拥堵+少收费 42:少收费+不走高速 43:躲避拥堵+少收费+不走高速 44:躲避拥堵+大路优先 45:躲避拥堵+速度最快 101:该策略会通过终点坐标查找所在地点(如小区/大厦等),并使用地点出入口做为目的地,使路径更为合理 注意:高德地图支持除101外的所有策略,腾讯地图只支持 0、34、35、36、37、101 **【公交】方式policy值范围** 0:默认模式 1:最经济模式,票价最低 2:最少换乘模式,换乘次数少 3:最少步行模式,尽可能减少步行距离 4:最舒适模式,尽可能乘坐空调车 5:不乘地铁模式,不乘坐地铁路线 6:地铁图模式,起终点都是地铁站(地铁图模式下originpoi及destinationpoi为必填项) 7:地铁优先模式,步行距离不超过4KM 8:时间短模式,方案花费总时间最少 注意:高德地图支持所有策略,腾讯地图只支持 0、2、3、5、6、7 **返回参数** 注意:此接口固定返回originalResult参数(透传供应商接口原始返回结果) 腾讯地图: [返回参数:驾车(driving)](https://lbs.qq.com/service/webService/webServiceGuide/webServiceRoute#2) [返回参数:步行(walking)](https://lbs.qq.com/service/webService/webServiceGuide/webServiceRoute#3) [返回参数:骑行(bicycling)](https://lbs.qq.com/service/webService/webServiceGuide/webServiceRoute#4) [返回参数:电动车(ebicycling)](https://lbs.qq.com/service/webService/webServiceGuide/webServiceRoute#5) [返回参数:公交(transit)](https://lbs.qq.com/service/webService/webServiceGuide/webServiceRoute#6) 高德地图: [返回参数:驾车(driving)](https://lbs.amap.com/api/webservice/guide/api/newroute#t5) [返回参数:步行(walking)](https://lbs.amap.com/api/webservice/guide/api/newroute#t6) [返回参数:骑行(bicycling)](https://lbs.amap.com/api/webservice/guide/api/newroute#t7) [返回参数:电动车(ebicycling)](https://lbs.amap.com/api/webservice/guide/api/newroute#t8) [返回参数:公交(transit)](https://lbs.amap.com/api/webservice/guide/api/newroute#t9) ## 全局错误码@errorcode | 错误模块 | 错误码 | 说明 | |:-- |:--: |:-- | | uni-map-service | 110 | 请求来源未被授权 | | uni-map-service | 111 | 签名验证失败 | | uni-map-service | 112 | IP未被授权 | | uni-map-service | 113 | 此功能未被授权 | | uni-map-service | 120 | 此key每秒请求量已达到上限 | | uni-map-service | 121 | 此key每日调用量已达到上限 | | uni-map-service | 160 | sig参数不支持此请求类型 | | uni-map-service | 161 | sig参数不支持和非object的POST JSON一起使用 | | uni-map-service | 190 | 无效的KEY | | uni-map-service | 199 | 此key未开启webservice功能 | | uni-map-service | 301 | 缺少必要字段key | | uni-map-service | 311 | key格式错误 | | uni-map-service | 300 | 缺少必要字段 | | uni-map-service | 306 | 缺少参数 | | uni-map-service | 310 | 参数格式错误 | | uni-map-service |320 |参数数据类型错误 | | uni-map-service |330 |参数长度错误 | | uni-map-service |351 |存在不共存的参数 | | uni-map-service |324 |get和post中的同一参数值不相同 | | uni-map-service |326 |起终点距离过近 | | uni-map-service |327 |附近无公交站 | | uni-map-service |328 |无可达公交路线 | | uni-map-service |329 |无可达火车路线 | | uni-map-service |331 |查询条件过长 | | uni-map-service |332 |途径点个数超过限制 | | uni-map-service |333 |存在无法吸附的坐标点 | | uni-map-service |335 |不支持该城市的公交查询 | | uni-map-service |341 |缺少keyword(关键词) | | uni-map-service |344 |附近无火车站(公交) | | uni-map-service |347 |查询无结果 | | uni-map-service |348 |参数错误 | | uni-map-service |364 |是否扩大搜索参数只能为0或1 | | uni-map-service |365 |纬度不能超过±90 | | uni-map-service |366 |经度不能超过±180 | | uni-map-service |373 |起终点距离超长 | | uni-map-service |374 |起终点坐标错误 | | uni-map-service |375 |局域网IP无法定位 | | uni-map-service |377 |提供的起终点无法规划出导航线路 | | uni-map-service |378 |提供的起终点无法规划出步行线路 | | uni-map-service |379 |提供的起终点无法规划出公交线路 | | uni-map-service |380 |坐标类型必须在有坐标的情况下使用 | | uni-map-service |382 |IP无法定位 | | uni-map-service |384 |提供的起终点无法规划出骑行线路 | | uni-map-service |387 |没有对应的POI | | uni-map-service |393 |没有符合条件的数据 | | uni-map-service |394 |错误的查询条件 | | uni-map-service |395 |传入参数不合法 | | uni-map-service |396 |最多支持200个坐标点,且起终点数目乘积最多为625(距离矩阵) | | uni-map-service |397 |一对多最多支持200个坐标点,多对多最多支持25个坐标点且起终点数目乘积最多为625(距离矩阵) | | uni-map-service |500 |服务响应失败 | ## 常见问题 ### 使用uni-map-service后,我还需要购买5万元的地图商业授权费用吗? 答:待补充