实务研究 »
调用百度地图
审查公务车运行轨迹
♦卢佳/黄冈市审计
►的十八大以来,中央高度重视公务车管理,中共中央
办公厅、国务院办公厅于2017年出台了《党政机关公 务用车管理办法》。审计发现,公务车改革后,超编制、超 标准配备公务用车,公车私用,车辆维修费中虚列名目等 问题得到有效遏制,但依旧存在私车公养、违规停靠宾馆 景区等违纪现象。为准确判断公务车运行轨迹合理合规 性,笔者在公务用车审计中,借用百度地图开发平台,用 Python调用百度接口抓取宾馆等敏感地址坐标,还原公务 车运行轨迹,为审计判断提供可靠依据。本文结合公务用 车使用审计案例,介绍相关方法的具体运用。
—、审计思路
针对公务车改革后公务车管理违规问题表现形式的 变化,调整审计思路,重点对公务车编制配备和公务用车 使用流程、行驶过程的合规性进行审计。既关注运行轨迹 是否合理合规,有无出现在娱乐场所等敏
感地点,是否存 在绕行或中途逗留风景名胜区,是否存在私车公养、使用 公务车上下班,既享受公务交通补贴又享受公务用车,是 否在指定位置定点停放,节假日是否封存,长期未使用效 率低下的情况。
二、数据采集、整理和分析
采集“互联网+公务用车管理智慧云服务监管平台”的 车辆基本信息和运行轨迹数据作为基础数据。运用Py­thon调用百度接口,从百度地图中抓取相关地点的名称、地址、经纬度。本次审计所需的六类数据汇总情况表如表 I所示。数据采集、整理和分析的难点是获取百度地图AK (密钥),用Python获取所需地址坐标,根据经纬度计算坐 标间的距离。
(一)获取百度地图AK
公务车管理平台使用的是百度地图,百度地图使用的
表1所需数据的汇总情况表
序号数据名称|类型|来源关键字段| 1!
车辆基本
信息
S Q L车管平台单位名称、车牌号、排量、类型2
车辆运行
轨迹
S Q L车管平台车牌号、时间、经度、纬度3
敏感地点
坐标
E X C E L百度地图名称、地址、经度、纬度
4
节假曰曰
期表
E X C E L自定义节日名称、节日日期
5
车辆加油
记录
E X C E L石油公司
单位名称、车牌号、加油时间、
加油数量、单价、金额、
加油站名称
6
车辆制定
停放点
E X C E L
被审单位,
百度地图
单位名称、车牌号、
停放点经度、停放点纬度
BD09坐标,是在火星坐标系(GCJ02)基础上再次加密形
成。使用百度地图WEB服务的流程是:注册百度账号一认
证成为开发者一获取AK—使用集成服务API。
1•登录百度地图开放平台(网址:lbsyun.baidu.
com/),注册账号。
2. 创建应用。填入自定义的应用名称“娱乐场所地点 坐标拾取”,应用类型选择“服务端”,应用服务默认勾选全
部,请求校验方式:1P白名单校验,IP白名单填入:0.0.0.0。
3. 创建应用后,百度会分配给该应用唯一 AK,该AK可 以在“我的应用”中查看。
(—■)用Pyhton编写程序获取所需要的地址坐标
成功注册并获取到AK后,用Pyhton编写程序,利用百
度Web服务API,以http/httpS形式对百度地图P0I行业分
类中的酒店、旅游景点、休闲娱乐等关键词发起检索请求,
匹配出某市相关行业的名称、地址、经纬度,最后将检索到
的地址用panda包完成数据切片人库,并将获取数据转换
为CSV文件整理后导人SQL数据库。
审计月刊/ 2020 / 12 /总第392期 29
实务研究 »
获取地址的Pyhton脚本如下:
importjson
importrequests
import p andasaspd
left_bott〇m=[l14.8633504534,30.4279845204];#设置区域左下角坐标(百度坐标系)
right_top=[ 114.9257857770,30.4828432356];#设置区域 右上角坐标(百度坐标系)
part_n= 5;#设置区域网格(5*5)
url0="api.map.baidu/place/v2/search?y;
x一item=(right j o p[0]-left一bottom[0])/part_n;
y_item=(right」op[1]-left_bottom[1])/part一n;
query= '美食]#搜索关键词设置
ak='rIS66j363SvzPMW2GQtllfGjvhLCVQj81';# 百度地图api信令
n= 0;#切片计数器
feature一data=[]
foriinrange(part_n):
forj i nrange(part_n):
Ieft_bottom_part=[left_bottom[0]+i*x_item,left_bottom[1]+ j*y_item];#切片的左下角坐标
right j o p_part=[right_top[0|+ i*x_item,rightjop[l]+ j*y_ item];#切片的右上角坐标
forkinrange(20):
url=urlO+ 'query=' + query+ '&page一size=20&page_num= >str(k)+x&scope=l&bounds=^
+str(left_bottom_part[1])+、'+str(left_bottom_part[0])+V+ str(right_top_part[1])
+^/+str(right_top_part[0])+"&output=json&ak=x+ak;
print(url)
(url).text
print(data)
hj s on=j s on.l oads(data);
ifhjson['message']=='ok'
datalist=hjson[’results']
foreachindatalist:
feature_data.append(each)
#feature=pd.DataFrame(feature_data)
#else:break
n+= 1;
print('第',str(n),x个切片人库成功')
feature=pd.DataF r ame(feature_data)
<_csv('hotel.csv1# 将结果导出至 hotel.csv文件
(三)用经纬度计算两点之间的距离
经纬度坐标是角度值,不能直线点对点计算,而审计
中需计算弧长。审计组以百度地图抓取到的酒店、餐饮等
坐标点为中心点,对比公务车运行轨迹的坐标,计算公务
车运行在中心点200米范围内,且运行速度为0的记录锁
定为疑点。
1. 公式的推导。弧长的计算公式是:L(弧长)=n(圆心角)x T T(圆周率)x K(半径)+180°=〇:(圆心角弧度数)x R,
在已知两点坐标经纬度后,通过余弦定理ij■算出a,推导公
式如下:
L=2x/?xarcsin (jsin:^H~^u j+cos(^u') x cos(Bw) x sin^-^-y^-j))
2. 比对函数代码如下:
CREATEFUNCTIONfind(@LatBeginREAL,@LngBegin-REAL,@LatEndREAL,@LngEndREAL)
RETURNSFLOAT
AS
BEGIN
DECLARE@DistanceREAL
DECLARE@EARTH_RADIUSREAL
SET@EARTH_RADIUS= 6378.137 --地球半径
DECLARE@RadLatBeginREAL,@RadLatEndREAL,
@RadLatI)iffREAL,@RadLngDiffREAL
SET@RadLatBegin=@LatBegin*PI〇/180.0
SET@RaciLatEnd=@LatEmi*PI〇/180.0
SET@RadLatDiff=@RadLatBegin-@RadLatEnd
SET@RadLngDiff=@LngBegin*PI〇/l80.0 -@LngEnd*PI
0/180.0
SET@Distance= 2 *ASIN(SQRT(POWER(SIN(@RadLat-
Diff/2), 2)+C0S(@RadLatBegin)*C0S(@RadLatEnd)*P0WER (SIN(@RadLngDiff/2),2)))
SET@Distance=@Distance*@EARTH_RADIUS
SET@Distance=Round(@Distance* 10000,2)/ 10000
RETURN@Distance
END
3. 比对函数的运用及结果示例。比对函数用于审查是 否有公务车停留酒店、餐饮等地,比对结果见图1,比对完
后登陆“互联网+公务用车管理智慧云服务监管平台”平台
核实,见图2。
selectb.单位名称,b.车牌号,b.定位时间,a.名称,a.地址,a.
经度敏感地址经度,a.纬度敏感地址纬度,b.经度公务车经
度山.纬度公务车纬度
from基础表_敏感地址坐标a,基础表_车辆运行轨迹b
30审计月刊/ 2020 / 12 /总第392期
实务研究 »
审车时间where行驶速度=0
//—使用find函数判断距离200米内公务车 anddbo.find(a.经度,a.讳度,b•经度,b.讳度)<2运行,但有加油记录的问题。经审查单位相关人员有为私 人小轿车和摩托车加油的情况。
(三)未在指定位置定点停放
3结果丨」消息i______________—____________________________________________________单位名称车牌号定位时间名称 地址 敏感地址经度^感地址^度公夯车经度公务车纬度1某单岳、鄂一~A 20184)8-21 10:31:00.000 某酒店 某大 1•号114.90708 30.440407 114.906952 30.439534
2 '秦單运 ■讲一  A 201WJ8-21 10:31:00.000 某酒吧文化街某大道•号 114.907246 30.43904
3 114.90B952 30.439534
3 某单位 鄂一A 2018^)8-21 10:31:00.000 某酒店餐厅 某大道 *号 114.906822 30.439208 114.906952 30.439534
公务用车应严格执行定点停放制度。审计组通过被 审单位调查收集到公务车的指定停放地点,再根据地点用
图1比对结果
rnim E sifw as
无史机2
雜状态
3合傾位啪图*分折 么校額理这电子围e 这*计分析历史喊
经度
典度图2 “互联网+公务用车管理智慧云服务监管平台”核实
三、锁定审计疑点
审计组运用了经纬度距离比对法匹配位置、平台历史 轨迹查询、数据统计模块来锁定疑点,查出了出人休闲娱 乐场所、私车公养等6类问题。
(一) 出入休闲娱乐场所
将公务车行驶轨迹与宾馆、酒店、农庄等休闲娱乐场 坐标匹配,筛选在休闲娱乐场所有停留(行驶速度=0),并 停留时间超过10分钟的记录。经查某公务车在X酒店停 留并多次出人。
(二) 私车公养
主要审查是否存在单位油卡为私车加油的情况,来反 映私车公养的问题。因绝大多数预算单位都采用购卡充 值加油方式,审计组从石油公司调取相关单位加油记录,首先锁定异常的加油记录,再核实该车运行轨迹是否经过 加油记录中的加油站。
1.按常理一辆车一天内不会多次加油,通过石油公司 提供的加油记录明细出同一单位、同一车辆、同一天多 次加油记录。
Python抓取制定停放点的坐
标经纬度,与停放地点坐标经
纬度匹配来判断是否停放在
单位指定地点,经审查某单位
司机在某酒店送客后,整夜将
车停放在酒店,未按规定将车
停放到指定停车点。
(四) 节假日用车
公务车节假日期间除特
殊工作需要外应当封存停
驶。将公务车运行轨迹与节
假日日期比对,判断是否有节
假日出行的疑点。
(五) 公车私用
主要审查是否有利用职
务之便使用公务车接送出行的情况。将行驶轨迹与住宅
区坐标匹配,筛选出一月内超出10次或一天2次以上出人
同一小区,且停留(行驶速度=0)的记录。
(六)公务车长期未使用效率低下
从平台中提取公务车年出行次数和里程数,按单位分
类汇总,出一年中用车次数为0的记录。
四、应用特点及建议
(一) 对进行了车改,安装了公务车GPS使用平台管理 的单位可采取该方式进行审计,审计中重点关注车辆加油
记录和敏感地点坐标提取,可快速锁定公务车违规行驶、
停车的相关问题。
(二) 利用Python通过百度地图开发平台的A H接口自 动采集百度地图中敏感地址的数据资源,解决批量智能采
集所需地点坐标的问题。
(三) 不足与应对措施。一是百度对地址坐标获取有 数量限制,免费版每天只能调取6000条记录,导致不能按
行政区划来获取,只能划分区域获取,建议购买非免费版;
2018-08-2110:31^6
讼里/侧
114.9069521148
30.439534407145
料定位
O i
2.加油量过大(超过60L)或过小(小于10L)的记录。二是坐标比对不够精准,因为一个地址的建筑范围涉及多
按照以上两条思路,收集单位、车牌号、加油时间、加 油地址等信息,再比对运行轨迹,发现确实存在公务车未个经纬度,而获取到的只有一个经纬度,审计人员无法确 定建筑的范围会导致比对不精准。A
审计月刊/ 2020 / 12 /总第392期
31