本发明涉及物流系统技术领域,特别涉及一种运单信息自动录入和状态自动同步的算法。
背景技术:
在物流信息化应用中,国内已有的信息技术主要在录单,调度,回单等环节的软件工具的开发,只是把这些工作的工具纸笔替换键盘和电子存档,主要还是由人来完成运单的信息录入和状态变换操作,这对物流中的人工操作并未减少,人工录单的重复工作容易使操作人员产生工作疲劳,且物流信息更新慢。
技术实现要素:
本发明的目的旨在至少解决所述技术缺陷之一。
为此,本发明的目的在于提出一种运单信息自动录入和状态自动同步的算法,解决了人工录单的重复工作的问题,实现了货物位置的实时跟踪,完成了运单状态的自动同步。
为了实现上述目的,本发明提供一种运单信息自动录入和状态自动同步的算法,包括以下步骤:
步骤S1,位置数据的采集,通过GPS系统获取车辆定位数据;
步骤S2,数据预处理,将车辆所在位置的经度、纬度转化为地图标准类型的经纬度;
步骤S3:计算车辆所在位置与路线设置中所设置的发货点的之间距离;
步骤S4:计算车辆是否在发货点的围栏内;
当车辆在发货点的围栏内,且仅当首次出现在发货点的围栏内时,系统会自动记录此条信息;
当车辆在发货点的围栏范围外,且之前系统有记录此车进入发货点的记录,则判定此车驶出发货点的围栏,系统会自动记录此条信息;
步骤S5:计算车辆所在位置与路线设置中所设置的收货点的之间距离;
步骤S6:计算车辆是否在收货点的围栏内;
当车辆在收货点的围栏内,且仅当首次出现在收货点的围栏内时,系统会自动记录此条信息;
当车辆在收货点的围栏范围外,且之前系统有记录此车进入收货点的记录,则判定此车驶出收货点的围栏,系统会自动记录此条信息;
当系统记录了车辆驶出收货点的围栏时间的数据时,此次监听程序结束;
步骤7:最后系统将车辆由发货点出发到达收货点的行驶轨迹,展示在地图上。
进一步的,在步骤S1中,车辆定位数据至少包括:车牌号、设备编号、车辆所在位置的经度和维度、车辆定位时间。
进一步的,在步骤S2中,将车辆所在位置的经度、纬度转化为地图标准类型的经纬度的计算算法如下:
a、获取车辆所在位置的经度、纬度;
b、根据经纬度偏移算法计算地图标准类型的经纬度;
4、如权利要求1所述的运单信息自动录入和状态自动同步的算法,其特征在于:经纬度偏移算法包括以下步骤:
a、先将原始经纬度(lat、lon)进行纬度转换:
转换后纬度dLat=-100.0+2.0*(lon-105.0)+3.0*(lat-35.0)+0.2*(lat-35.0)*(lat-35.0)+0.1*(lon-105.0)*(lat-35.0)+0.2*Math.sqrt(Math.abs(lon-105.0))+(20.0*Math.sin(6.0*(lon-105.0)*pi)+20.0*Math.sin(2.0*(lon-105.0)*pi))*2.0/3.0+(20.0*Math.sin((lat-35.0)*pi)+40.0*Math.sin((lat-35.0)/3.0*pi))*2.0/3.0+(160.0*Math.sin((lat-35.0)/12.0*pi)+320*Math.sin((lat-35.0)*pi/30.0))*2.0/3.0;
其中,pi表示圆周率,a表示卫星椭球坐标投影到平面地图坐标系的投影因子,ee表示椭球的偏心率,lat原始纬度,lon原始经度;
b、将原始经纬度(lat、lon)进行经度转换;
转换后经度dLon=300.0+(lon-105.0)+2.0*(lat-35.0)+0.1*(lon-105.0)*(lon-105.0)+0.1*(lon-105.0)*(lat-35.0)+0.1*Math.sqrt(Math.abs(lon-105.0))+(20.0*Math.sin(6.0*(lon-105.0)*pi)+20.0*Math.sin(2.0*(lon-105.0)*pi))*2.0/3.0+(20.0*Math.sin((lon-105.0)*pi)+40.0*Math.sin((lon-105.0)/3.0*pi))*2.0/3.0+(150.0*Math.sin((lon-105.0)/12.0*pi)+300.0*Math.sin((lon-105.0)/30.0*pi))*2.0/3.0;
c、再转换成GCJ经纬度;
GCJ纬度gLat=(dLat*180.0)/((a*(1-ee))/(magic*sqrtMagic)*pi);
GCJ经度gLon=(dLon*180.0)/(a/sqrtMagic*Math.cos(radLat)*pi);
d、最后将GCJ经纬度转换为地图标准类型的经纬度;
地图标准类型的经度bd_lon=z*Math.cos(theta)+0.0065;
地图标准类型的纬度bd_lat=z*Math.sin(theta)+0.006;
其中,theta=Math.atan2(gLat,gLon)+0.000003*Math.cos(gLon*x_pi);
z=Math.sqrt(gLon*gLon+gLat*gLat)+0.00002*Math.sin(gLat*x_pi);
x_pi表示圆周率转换量。
进一步的,在步骤S3中,计算车辆所在位置与路线设置中所设置的发货点的之间距离的算法公式如下:
距离distance=Math.round(s*10000)/10000;
其中,
s=2*Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2)+Math.cos(radLat1)*Math.c os(radLat2)*Math.pow(Math.sin(b/2),2)))*EARTH_RADIUS;
r表示地球赤道半径,pi表示圆周率,EARTH_RADIUS表示赤道半径;lat1表示为发货点的纬度,lat2车辆所在位置的纬度;
经纬度转换为弧度rad=经度(纬度)*Math.PI/180.0;
基于googleMap算法,计算得到两点之间的距离a=rad(lat1)-rad(lat2);
进一步的,在步骤S4中,通过车辆所在位置与路线设置中所设置的发货点的之间距离distance和发货点的围栏的半径Ra之间的关系来计算车辆是否在发货点的围栏内;
如果distance大于Ra,则车辆在发货点的围栏范围外;
如果distance小于等于Ra,则车辆在发货点的围栏内。
进一步的,在步骤S5中,通过车辆所在位置与路线设置中所设置的收货点的之间距离distance和收货点的围栏的半径Ra之间的关系来计算车辆是否在收货点的围栏内;
如果distance大于Ra,则车辆在收货点的围栏范围外;并查询这条路线有无该车辆进入收货点的围栏的记录,如果有记录,代表此时该车辆已经驶出收货点的围栏,如果没有记录,则该车辆并没有进入到收货点的围栏内;
如果distance小于等于Ra,则车辆在收货点的围栏内。
进一步的,当车辆在收货点的围栏内时,则执行以下操作:
a、查询这条路线有无这辆车驶出发货点的围栏的记录,如果有记录,代表此车是已经驶出发货点的围栏并且首次进入收货点的围栏;
b、如果是首次进入收货点的围栏,则自动新增一条数据,记录相关信息,并推送信息。
本发明通过在发货点和收货点处设置电子围栏,然后由利用算法来分别计算车辆所在位置与发货点和收货点的距离,进而分别与发货点和收货点处设置电子围栏半径进行比较,从而判断车辆是否处于入栏状态、出栏状态,同时自动将该信息记录上传,实现物流运单信息自动录入和状态自动同步功能,解决了人工录单的重复工作的问题,实现了货物位置的实时跟踪,完成了运单状态的自动同步,真正意义上实现了物流的智能化。
本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1为本发明的流程图;
图2为本发明中将车辆所在位置的经纬度转化为地图标准类型的经纬度算法流程图;
图3为本发明中计算车辆所在位置与发货点的之间距离的算法流程图;
图4为本发明中整体监听程序流程图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
本发明提供一种运单信息自动录入和状态自动同步的算法,参考附图1所示,包括以下步骤:
步骤S1,位置数据的采集,通过GPS系统获取车辆定位数据;
车辆定位数据至少包括:车牌号、设备编号、车辆所在位置的经度和维度、车辆定位时间,以便于将车辆信息与物流运单信息进行绑定。
步骤S2,数据预处理,将车辆所在位置的经度、纬度转化为地图标准类型的经纬度;其算法流程图参考图2所示。
将车辆所在位置的经度、纬度转化为地图标准类型的经纬度的计算算法如下:
a、获取车辆所在位置的经度、纬度;
b、根据经纬度偏移算法计算地图标准类型的经纬度;
其中,经纬度偏移算法包括以下步骤:
a、先将原始经纬度(lat、lon)进行纬度转换:
转换后纬度dLat=-100.0+2.0*(lon-105.0)+3.0*(lat-35.0)+0.2*(lat-35.0)*(lat-35.0)+0.1*(lon-105.0)*(lat-35.0)+0.2*Math.sqrt(Math.abs(lon-105.0))+(20.0*Math.sin(6.0*(lon-105.0)*pi)+20.0*Math.sin(2.0*(lon-105.0)*pi))*2.0/3.0+(20.0*Math.sin((lat-35.0)*pi)+40.0*Math.sin((lat-35.0)/3.0*pi))*2.0/3.0+(160.0*Math.sin((lat-35.0)/12.0*pi)+320*Math.sin((lat-35.0)*pi/30.0))*2.0/3.0;
其中,pi表示圆周率,a表示卫星椭球坐标投影到平面地图坐标系的投影因子,ee表示椭球的偏心率,lat原始纬度,lon原始经度;
b、将原始经纬度(lat、lon)进行经度转换;
转换后经度dLon=300.0+(lon-105.0)+2.0*(lat-35.0)+0.1*(lon-105.0)*(lon-105.0)+0.1*(lon-105.0)*(lat-35.0)+0.1*Math.sqrt(Math.abs(lon-105.0))+(20.0*Math.sin(6.0*(lon-105.0)*pi)+20.0*Math.sin(2.0*(lon-105.0)*pi))*2.0/3.0+(20.0*Math.sin((lon-105.0)*pi)+40.0*Math.sin((lon-105.0)/3.0*pi))*2.0/3.0+(150.0*Math.sin((lon-105.0)/12.0*pi)+300.0*Math.sin((lon-105.0)/30.0*pi))*2.0/3.0;
c、再转换成GCJ经纬度;
GCJ纬度gLat=(dLat*180.0)/((a*(1-ee))/(magic*sqrtMagic)*pi);
GCJ经度gLon=(dLon*180.0)/(a/sqrtMagic*Math.cos(radLat)*pi);
d、最后将GCJ经纬度转换为地图标准类型的经纬度;
地图标准类型的经度bd_lon=z*Math.cos(theta)+0.0065;
地图标准类型的纬度bd_lat=z*Math.sin(theta)+0.006;
其中,theta=Math.atan2(gLat,gLon)+0.000003*Math.cos(gLon*x_pi);
z=Math.sqrt(gLon*gLon+gLat*gLat)+0.00002*Math.sin(gLat*x_pi);
x_pi表示圆周率转换量。
步骤S3:计算车辆所在位置与路线设置中所设置的发货点的之间距离;其算法流程图如图3所示。
计算车辆所在位置与路线设置中所设置的发货点的之间距离的算法公式如下:
距离distance=Math.round(s*10000)/10000;
其中,
s=2*Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2)+Math.cos(radLat1)*Math.c os(radLat2)*Math.pow(Math.sin(b/2),2)))*EARTH_RADIUS;
r表示地球赤道半径,pi表示圆周率,EARTH_RADIUS表示赤道半径;lat1表示为发货点的纬度,lat2车辆所在位置的纬度;
经纬度转换为弧度rad=经度(纬度)*Math.PI/180.0;
基于googleMap算法,计算得到两点之间的距离a=rad(lat1)-rad(lat2);
googleMap算法采用墨卡托(Mercator)投影,也就是等角圆柱投影,其他图均是由256*256的小图块拼接而成,而且这些图块的URL都是不变的。
步骤S4:计算车辆是否在发货点的围栏内;
当车辆在发货点的围栏内,且仅当首次出现在发货点的围栏内时,系统会自动记录此条信息;
当车辆在发货点的围栏范围外,且之前系统有记录此车进入发货点的记录,则判定此车驶出发货点的围栏,系统会自动记录此条信息;
通过车辆所在位置与路线设置中所设置的发货点的之间距离distance和发货点的围栏的半径Ra之间的关系来计算车辆是否在发货点的围栏内;
如果distance大于Ra,则车辆在发货点的围栏范围外;
如果distance小于等于Ra,则车辆在发货点的围栏内。
步骤S5:计算车辆所在位置与路线设置中所设置的收货点的之间距离;
通过车辆所在位置与路线设置中所设置的收货点的之间距离distance和收货点的围栏的半径Ra之间的关系来计算车辆是否在收货点的围栏内;
如果distance大于Ra,则车辆在收货点的围栏范围外;并查询这条路线有无该车辆进入收货点的围栏的记录,如果有记录,代表此时该车辆已经驶出收货点的围栏,如果没有记录,则该车辆并没有进入到收货点的围栏内;
如果distance小于等于Ra,则车辆在收货点的围栏内。
其中,当车辆在收货点的围栏内时,则执行以下操作:
a、查询这条路线有无这辆车驶出发货点的围栏的记录,如果有记录,代表此车是已经驶出发货点的围栏并且首次进入收货点的围栏;
b、如果是首次进入收货点的围栏,则自动新增一条数据,记录相关信息,并推送信息。
步骤S6:计算车辆是否在收货点的围栏内;
当车辆在收货点的围栏内,且仅当首次出现在收货点的围栏内时,系统会自动记录此条信息;
当车辆在收货点的围栏范围外,且之前系统有记录此车进入收货点的记录,则判定此车驶出收货点的围栏,系统会自动记录此条信息;
当系统记录了车辆驶出收货点的围栏时间的数据时,此次监听程序结束;
整体监听程序流程图如图4所示。
步骤7:最后系统将车辆由发货点出发到达收货点的行驶轨迹,展示在地图上。
工作原理:本发明在发货点和收货点处设置电子围栏,并通过GPS系统获取车辆定位数据,然后利用经纬度偏移算法,计算车辆的地图标准类型的经纬度定位数据,接着根据经纬度定位数据来分别计算车辆所在位置与发货点和收货点的距离,进而分别与发货点和收货点处设置电子围栏半径进行比较并记录,判断车辆所在位置是否在发货点或收货点处设置电子围栏内部,进而判断车辆是否处于入栏状态、出栏状态,同时自动将该信息记录上传,实现物流运单信息自动录入和状态自动同步功能。
本发明解决了人工录单的重复工作的问题,实现了货物位置的实时跟踪,完成了运单状态的自动同步,真正意义上实现了物流的智能化。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在不脱离本发明的原理和宗旨的情况下在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。本发明的范围由所附权利要求极其等同限定。