一:简介

七夕节在配送过程中,发现配送员由于文化有限,在使用导航软件上有极大的障碍。这不仅拖慢了整个配送过程,也不利于业务的增长。于是我想到了,在订单上打印一个二维码,扫描二维码,则就可以导航到收货地点。

在一段时间的尝试后,我敲定了此方案的可行性。

由于美图和饿了么订单打印,已在飞鹅打印机上固定了模板,我无法修改他们的打印模板。所以,只能为小程序的订单,打印地址二维码。

二:方案

由于各个地图公司都没有提供直接的接口,让地图转为二维码,所以退而求其次,需要先将地址转为url,进入这个url可以进入地图界面,然后将url转为二维码。

2.1 地图转url

  1. 百度地图方案

在查看了几个地图技术文档后,我找到了百度地图的接口。

地址:http://lbsyun.baidu.com/index.php?title=uri/api/web

此接口提供了免费的调起地图的url方案。由于我们只能拿到收货地址,所以可以使用下面的接口

服务地址

1
http://api.map.baidu.com/geocoder   //PC&Webapp服务地址

示例

1
http://api.map.baidu.com/geocoder?address=北京市海淀区上地信息路9号奎科科技大厦&output=html&src=webapp.baidu.openAPIdemo

打开后的页面

2

  1. 高德地图方案

高德地图提供Web调起地图的接口格式如下:

1
https://uri.amap.com/marker?position=116.473195,39.993253

url参数:

参数名称 值(点击可编辑) 参数说明 是否必选 备注
position 116.473195,39.993253 位置点经纬度坐标,格式为: position=lon,lat lon表示经度,lat表示纬度
name 首开广场 用户自定义显示名称
src mypage 使用方来源信息 为保证服务质量建议填写
coordinate gaode 坐标系参数coordinate=gaode,表示高德坐标(gcj02坐标),coordinate=wgs84,表示wgs84坐标(GPS原始坐标) 默认为高德坐标系(gcj02坐标系)
callnative 0 是否尝试调起高德地图APP并在APP中查看,0表示不调起,1表示调起, 默认值为0 该参数仅在移动端有效

和百度地图不同的是,这个接口不提供类似搜索功能的接口方式,其中经纬度为必填项,因此,我们必须将订单地址,先调用高德的地理名称转经纬度api,在调用此接口。

详细的地理编码api参见:https://lbs.amap.com/api/webservice/guide/api/georegeo/

通过上述两个api获取,地址的链接,详细php函数如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* [getAddressUrl 生成地址url]
* @param [string] $taddress [订单地址]
* @return [string] [返回地址url]
*/
public function getAddressUrl($address){
$api = "https://restapi.amap.com/v3/geocode/geo";
$key = "你申请的高德地图key";
$request_url = $api."?address=".$address."&output=JSON&key=".$key;
$response = file_get_contents($request_url);
$obj = json_decode($response);
if(strcmp($obj->status,"1")==0){
$location_code = $obj->geocodes["0"]->location;
$address_url = "https://uri.amap.com/marker?position=".$location_code."&name=".$address;
}else{
return 0;
}
return $address_url;
}

对比高德地图和百度地图。百度地图在编程方面更加方便,但是对于扫描二维码体验而言,百度地图必须使用浏览器扫描,或者微信扫描后根据提示打开浏览器,然后由浏览器调起百度地图进入导航。直接使用百度地图扫描二维码是无法调出导航的,而且百度地图扫描功能隐藏在搜索框之中,使用非常不方便。相对而言,用户使用高德地图api生成的二维码使用高德地图首页的扫一扫功能,可以直接进入导航界面。

2.2 url转二维码

在网上能找到许多提供url转二维码的api接口。

在简书https://www.jianshu.com/p/064ab5c811cf 里,提供了许多接口。

由于飞鹅打印机的技术文档中说明了,只需要在打印时在<QR>标签中输入url即可自动转换,所以,不在需要使用额外的接口。

⭐但是需要注意的是,通过get来获取url二维码,必须先使用url_encode将url编码,否则二维码中将丢失url的参数信息。

评论