本發(fā)明涉及物流系統(tǒng)技術(shù)領(lǐng)域,特別涉及一種運(yùn)單信息自動(dòng)錄入和狀態(tài)自動(dòng)同步的算法。
背景技術(shù):
在物流信息化應(yīng)用中,國(guó)內(nèi)已有的信息技術(shù)主要在錄單,調(diào)度,回單等環(huán)節(jié)的軟件工具的開發(fā),只是把這些工作的工具紙筆替換鍵盤和電子存檔,主要還是由人來完成運(yùn)單的信息錄入和狀態(tài)變換操作,這對(duì)物流中的人工操作并未減少,人工錄單的重復(fù)工作容易使操作人員產(chǎn)生工作疲勞,且物流信息更新慢。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的旨在至少解決所述技術(shù)缺陷之一。
為此,本發(fā)明的目的在于提出一種運(yùn)單信息自動(dòng)錄入和狀態(tài)自動(dòng)同步的算法,解決了人工錄單的重復(fù)工作的問題,實(shí)現(xiàn)了貨物位置的實(shí)時(shí)跟蹤,完成了運(yùn)單狀態(tài)的自動(dòng)同步。
為了實(shí)現(xiàn)上述目的,本發(fā)明提供一種運(yùn)單信息自動(dòng)錄入和狀態(tài)自動(dòng)同步的算法,包括以下步驟:
步驟S1,位置數(shù)據(jù)的采集,通過GPS系統(tǒng)獲取車輛定位數(shù)據(jù);
步驟S2,數(shù)據(jù)預(yù)處理,將車輛所在位置的經(jīng)度、緯度轉(zhuǎn)化為地圖標(biāo)準(zhǔn)類型的經(jīng)緯度;
步驟S3:計(jì)算車輛所在位置與路線設(shè)置中所設(shè)置的發(fā)貨點(diǎn)的之間距離;
步驟S4:計(jì)算車輛是否在發(fā)貨點(diǎn)的圍欄內(nèi);
當(dāng)車輛在發(fā)貨點(diǎn)的圍欄內(nèi),且僅當(dāng)首次出現(xiàn)在發(fā)貨點(diǎn)的圍欄內(nèi)時(shí),系統(tǒng)會(huì)自動(dòng)記錄此條信息;
當(dāng)車輛在發(fā)貨點(diǎn)的圍欄范圍外,且之前系統(tǒng)有記錄此車進(jìn)入發(fā)貨點(diǎn)的記錄,則判定此車駛出發(fā)貨點(diǎn)的圍欄,系統(tǒng)會(huì)自動(dòng)記錄此條信息;
步驟S5:計(jì)算車輛所在位置與路線設(shè)置中所設(shè)置的收貨點(diǎn)的之間距離;
步驟S6:計(jì)算車輛是否在收貨點(diǎn)的圍欄內(nèi);
當(dāng)車輛在收貨點(diǎn)的圍欄內(nèi),且僅當(dāng)首次出現(xiàn)在收貨點(diǎn)的圍欄內(nèi)時(shí),系統(tǒng)會(huì)自動(dòng)記錄此條信息;
當(dāng)車輛在收貨點(diǎn)的圍欄范圍外,且之前系統(tǒng)有記錄此車進(jìn)入收貨點(diǎn)的記錄,則判定此車駛出收貨點(diǎn)的圍欄,系統(tǒng)會(huì)自動(dòng)記錄此條信息;
當(dāng)系統(tǒng)記錄了車輛駛出收貨點(diǎn)的圍欄時(shí)間的數(shù)據(jù)時(shí),此次監(jiān)聽程序結(jié)束;
步驟7:最后系統(tǒng)將車輛由發(fā)貨點(diǎn)出發(fā)到達(dá)收貨點(diǎn)的行駛軌跡,展示在地圖上。
進(jìn)一步的,在步驟S1中,車輛定位數(shù)據(jù)至少包括:車牌號(hào)、設(shè)備編號(hào)、車輛所在位置的經(jīng)度和維度、車輛定位時(shí)間。
進(jìn)一步的,在步驟S2中,將車輛所在位置的經(jīng)度、緯度轉(zhuǎn)化為地圖標(biāo)準(zhǔn)類型的經(jīng)緯度的計(jì)算算法如下:
a、獲取車輛所在位置的經(jīng)度、緯度;
b、根據(jù)經(jīng)緯度偏移算法計(jì)算地圖標(biāo)準(zhǔn)類型的經(jīng)緯度;
4、如權(quán)利要求1所述的運(yùn)單信息自動(dòng)錄入和狀態(tài)自動(dòng)同步的算法,其特征在于:經(jīng)緯度偏移算法包括以下步驟:
a、先將原始經(jīng)緯度(lat、lon)進(jìn)行緯度轉(zhuǎn)換:
轉(zhuǎn)換后緯度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表示衛(wèi)星橢球坐標(biāo)投影到平面地圖坐標(biāo)系的投影因子,ee表示橢球的偏心率,lat原始緯度,lon原始經(jīng)度;
b、將原始經(jīng)緯度(lat、lon)進(jìn)行經(jīng)度轉(zhuǎn)換;
轉(zhuǎn)換后經(jīng)度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、再轉(zhuǎn)換成GCJ經(jīng)緯度;
GCJ緯度gLat=(dLat*180.0)/((a*(1-ee))/(magic*sqrtMagic)*pi);
GCJ經(jīng)度gLon=(dLon*180.0)/(a/sqrtMagic*Math.cos(radLat)*pi);
d、最后將GCJ經(jīng)緯度轉(zhuǎn)換為地圖標(biāo)準(zhǔn)類型的經(jīng)緯度;
地圖標(biāo)準(zhǔn)類型的經(jīng)度bd_lon=z*Math.cos(theta)+0.0065;
地圖標(biāo)準(zhǔn)類型的緯度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表示圓周率轉(zhuǎn)換量。
進(jìn)一步的,在步驟S3中,計(jì)算車輛所在位置與路線設(shè)置中所設(shè)置的發(fā)貨點(diǎn)的之間距離的算法公式如下:
距離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表示為發(fā)貨點(diǎn)的緯度,lat2車輛所在位置的緯度;
經(jīng)緯度轉(zhuǎn)換為弧度rad=經(jīng)度(緯度)*Math.PI/180.0;
基于googleMap算法,計(jì)算得到兩點(diǎn)之間的距離a=rad(lat1)-rad(lat2);
進(jìn)一步的,在步驟S4中,通過車輛所在位置與路線設(shè)置中所設(shè)置的發(fā)貨點(diǎn)的之間距離distance和發(fā)貨點(diǎn)的圍欄的半徑Ra之間的關(guān)系來計(jì)算車輛是否在發(fā)貨點(diǎn)的圍欄內(nèi);
如果distance大于Ra,則車輛在發(fā)貨點(diǎn)的圍欄范圍外;
如果distance小于等于Ra,則車輛在發(fā)貨點(diǎn)的圍欄內(nèi)。
進(jìn)一步的,在步驟S5中,通過車輛所在位置與路線設(shè)置中所設(shè)置的收貨點(diǎn)的之間距離distance和收貨點(diǎn)的圍欄的半徑Ra之間的關(guān)系來計(jì)算車輛是否在收貨點(diǎn)的圍欄內(nèi);
如果distance大于Ra,則車輛在收貨點(diǎn)的圍欄范圍外;并查詢這條路線有無該車輛進(jìn)入收貨點(diǎn)的圍欄的記錄,如果有記錄,代表此時(shí)該車輛已經(jīng)駛出收貨點(diǎn)的圍欄,如果沒有記錄,則該車輛并沒有進(jìn)入到收貨點(diǎn)的圍欄內(nèi);
如果distance小于等于Ra,則車輛在收貨點(diǎn)的圍欄內(nèi)。
進(jìn)一步的,當(dāng)車輛在收貨點(diǎn)的圍欄內(nèi)時(shí),則執(zhí)行以下操作:
a、查詢這條路線有無這輛車駛出發(fā)貨點(diǎn)的圍欄的記錄,如果有記錄,代表此車是已經(jīng)駛出發(fā)貨點(diǎn)的圍欄并且首次進(jìn)入收貨點(diǎn)的圍欄;
b、如果是首次進(jìn)入收貨點(diǎn)的圍欄,則自動(dòng)新增一條數(shù)據(jù),記錄相關(guān)信息,并推送信息。
本發(fā)明通過在發(fā)貨點(diǎn)和收貨點(diǎn)處設(shè)置電子圍欄,然后由利用算法來分別計(jì)算車輛所在位置與發(fā)貨點(diǎn)和收貨點(diǎn)的距離,進(jìn)而分別與發(fā)貨點(diǎn)和收貨點(diǎn)處設(shè)置電子圍欄半徑進(jìn)行比較,從而判斷車輛是否處于入欄狀態(tài)、出欄狀態(tài),同時(shí)自動(dòng)將該信息記錄上傳,實(shí)現(xiàn)物流運(yùn)單信息自動(dòng)錄入和狀態(tài)自動(dòng)同步功能,解決了人工錄單的重復(fù)工作的問題,實(shí)現(xiàn)了貨物位置的實(shí)時(shí)跟蹤,完成了運(yùn)單狀態(tài)的自動(dòng)同步,真正意義上實(shí)現(xiàn)了物流的智能化。
本發(fā)明附加的方面和優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本發(fā)明的實(shí)踐了解到。
附圖說明
本發(fā)明的上述和/或附加的方面和優(yōu)點(diǎn)從結(jié)合下面附圖對(duì)實(shí)施例的描述中將變得明顯和容易理解,其中:
圖1為本發(fā)明的流程圖;
圖2為本發(fā)明中將車輛所在位置的經(jīng)緯度轉(zhuǎn)化為地圖標(biāo)準(zhǔn)類型的經(jīng)緯度算法流程圖;
圖3為本發(fā)明中計(jì)算車輛所在位置與發(fā)貨點(diǎn)的之間距離的算法流程圖;
圖4為本發(fā)明中整體監(jiān)聽程序流程圖。
具體實(shí)施方式
下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號(hào)表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實(shí)施例是示例性的,旨在用于解釋本發(fā)明,而不能理解為對(duì)本發(fā)明的限制。
本發(fā)明提供一種運(yùn)單信息自動(dòng)錄入和狀態(tài)自動(dòng)同步的算法,參考附圖1所示,包括以下步驟:
步驟S1,位置數(shù)據(jù)的采集,通過GPS系統(tǒng)獲取車輛定位數(shù)據(jù);
車輛定位數(shù)據(jù)至少包括:車牌號(hào)、設(shè)備編號(hào)、車輛所在位置的經(jīng)度和維度、車輛定位時(shí)間,以便于將車輛信息與物流運(yùn)單信息進(jìn)行綁定。
步驟S2,數(shù)據(jù)預(yù)處理,將車輛所在位置的經(jīng)度、緯度轉(zhuǎn)化為地圖標(biāo)準(zhǔn)類型的經(jīng)緯度;其算法流程圖參考圖2所示。
將車輛所在位置的經(jīng)度、緯度轉(zhuǎn)化為地圖標(biāo)準(zhǔn)類型的經(jīng)緯度的計(jì)算算法如下:
a、獲取車輛所在位置的經(jīng)度、緯度;
b、根據(jù)經(jīng)緯度偏移算法計(jì)算地圖標(biāo)準(zhǔn)類型的經(jīng)緯度;
其中,經(jīng)緯度偏移算法包括以下步驟:
a、先將原始經(jīng)緯度(lat、lon)進(jìn)行緯度轉(zhuǎn)換:
轉(zhuǎn)換后緯度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表示衛(wèi)星橢球坐標(biāo)投影到平面地圖坐標(biāo)系的投影因子,ee表示橢球的偏心率,lat原始緯度,lon原始經(jīng)度;
b、將原始經(jīng)緯度(lat、lon)進(jìn)行經(jīng)度轉(zhuǎn)換;
轉(zhuǎn)換后經(jīng)度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、再轉(zhuǎn)換成GCJ經(jīng)緯度;
GCJ緯度gLat=(dLat*180.0)/((a*(1-ee))/(magic*sqrtMagic)*pi);
GCJ經(jīng)度gLon=(dLon*180.0)/(a/sqrtMagic*Math.cos(radLat)*pi);
d、最后將GCJ經(jīng)緯度轉(zhuǎn)換為地圖標(biāo)準(zhǔn)類型的經(jīng)緯度;
地圖標(biāo)準(zhǔn)類型的經(jīng)度bd_lon=z*Math.cos(theta)+0.0065;
地圖標(biāo)準(zhǔn)類型的緯度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表示圓周率轉(zhuǎn)換量。
步驟S3:計(jì)算車輛所在位置與路線設(shè)置中所設(shè)置的發(fā)貨點(diǎn)的之間距離;其算法流程圖如圖3所示。
計(jì)算車輛所在位置與路線設(shè)置中所設(shè)置的發(fā)貨點(diǎn)的之間距離的算法公式如下:
距離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表示為發(fā)貨點(diǎn)的緯度,lat2車輛所在位置的緯度;
經(jīng)緯度轉(zhuǎn)換為弧度rad=經(jīng)度(緯度)*Math.PI/180.0;
基于googleMap算法,計(jì)算得到兩點(diǎn)之間的距離a=rad(lat1)-rad(lat2);
googleMap算法采用墨卡托(Mercator)投影,也就是等角圓柱投影,其他圖均是由256*256的小圖塊拼接而成,而且這些圖塊的URL都是不變的。
步驟S4:計(jì)算車輛是否在發(fā)貨點(diǎn)的圍欄內(nèi);
當(dāng)車輛在發(fā)貨點(diǎn)的圍欄內(nèi),且僅當(dāng)首次出現(xiàn)在發(fā)貨點(diǎn)的圍欄內(nèi)時(shí),系統(tǒng)會(huì)自動(dòng)記錄此條信息;
當(dāng)車輛在發(fā)貨點(diǎn)的圍欄范圍外,且之前系統(tǒng)有記錄此車進(jìn)入發(fā)貨點(diǎn)的記錄,則判定此車駛出發(fā)貨點(diǎn)的圍欄,系統(tǒng)會(huì)自動(dòng)記錄此條信息;
通過車輛所在位置與路線設(shè)置中所設(shè)置的發(fā)貨點(diǎn)的之間距離distance和發(fā)貨點(diǎn)的圍欄的半徑Ra之間的關(guān)系來計(jì)算車輛是否在發(fā)貨點(diǎn)的圍欄內(nèi);
如果distance大于Ra,則車輛在發(fā)貨點(diǎn)的圍欄范圍外;
如果distance小于等于Ra,則車輛在發(fā)貨點(diǎn)的圍欄內(nèi)。
步驟S5:計(jì)算車輛所在位置與路線設(shè)置中所設(shè)置的收貨點(diǎn)的之間距離;
通過車輛所在位置與路線設(shè)置中所設(shè)置的收貨點(diǎn)的之間距離distance和收貨點(diǎn)的圍欄的半徑Ra之間的關(guān)系來計(jì)算車輛是否在收貨點(diǎn)的圍欄內(nèi);
如果distance大于Ra,則車輛在收貨點(diǎn)的圍欄范圍外;并查詢這條路線有無該車輛進(jìn)入收貨點(diǎn)的圍欄的記錄,如果有記錄,代表此時(shí)該車輛已經(jīng)駛出收貨點(diǎn)的圍欄,如果沒有記錄,則該車輛并沒有進(jìn)入到收貨點(diǎn)的圍欄內(nèi);
如果distance小于等于Ra,則車輛在收貨點(diǎn)的圍欄內(nèi)。
其中,當(dāng)車輛在收貨點(diǎn)的圍欄內(nèi)時(shí),則執(zhí)行以下操作:
a、查詢這條路線有無這輛車駛出發(fā)貨點(diǎn)的圍欄的記錄,如果有記錄,代表此車是已經(jīng)駛出發(fā)貨點(diǎn)的圍欄并且首次進(jìn)入收貨點(diǎn)的圍欄;
b、如果是首次進(jìn)入收貨點(diǎn)的圍欄,則自動(dòng)新增一條數(shù)據(jù),記錄相關(guān)信息,并推送信息。
步驟S6:計(jì)算車輛是否在收貨點(diǎn)的圍欄內(nèi);
當(dāng)車輛在收貨點(diǎn)的圍欄內(nèi),且僅當(dāng)首次出現(xiàn)在收貨點(diǎn)的圍欄內(nèi)時(shí),系統(tǒng)會(huì)自動(dòng)記錄此條信息;
當(dāng)車輛在收貨點(diǎn)的圍欄范圍外,且之前系統(tǒng)有記錄此車進(jìn)入收貨點(diǎn)的記錄,則判定此車駛出收貨點(diǎn)的圍欄,系統(tǒng)會(huì)自動(dòng)記錄此條信息;
當(dāng)系統(tǒng)記錄了車輛駛出收貨點(diǎn)的圍欄時(shí)間的數(shù)據(jù)時(shí),此次監(jiān)聽程序結(jié)束;
整體監(jiān)聽程序流程圖如圖4所示。
步驟7:最后系統(tǒng)將車輛由發(fā)貨點(diǎn)出發(fā)到達(dá)收貨點(diǎn)的行駛軌跡,展示在地圖上。
工作原理:本發(fā)明在發(fā)貨點(diǎn)和收貨點(diǎn)處設(shè)置電子圍欄,并通過GPS系統(tǒng)獲取車輛定位數(shù)據(jù),然后利用經(jīng)緯度偏移算法,計(jì)算車輛的地圖標(biāo)準(zhǔn)類型的經(jīng)緯度定位數(shù)據(jù),接著根據(jù)經(jīng)緯度定位數(shù)據(jù)來分別計(jì)算車輛所在位置與發(fā)貨點(diǎn)和收貨點(diǎn)的距離,進(jìn)而分別與發(fā)貨點(diǎn)和收貨點(diǎn)處設(shè)置電子圍欄半徑進(jìn)行比較并記錄,判斷車輛所在位置是否在發(fā)貨點(diǎn)或收貨點(diǎn)處設(shè)置電子圍欄內(nèi)部,進(jìn)而判斷車輛是否處于入欄狀態(tài)、出欄狀態(tài),同時(shí)自動(dòng)將該信息記錄上傳,實(shí)現(xiàn)物流運(yùn)單信息自動(dòng)錄入和狀態(tài)自動(dòng)同步功能。
本發(fā)明解決了人工錄單的重復(fù)工作的問題,實(shí)現(xiàn)了貨物位置的實(shí)時(shí)跟蹤,完成了運(yùn)單狀態(tài)的自動(dòng)同步,真正意義上實(shí)現(xiàn)了物流的智能化。
盡管上面已經(jīng)示出和描述了本發(fā)明的實(shí)施例,可以理解的是,上述實(shí)施例是示例性的,不能理解為對(duì)本發(fā)明的限制,本領(lǐng)域的普通技術(shù)人員在不脫離本發(fā)明的原理和宗旨的情況下在本發(fā)明的范圍內(nèi)可以對(duì)上述實(shí)施例進(jìn)行變化、修改、替換和變型。本發(fā)明的范圍由所附權(quán)利要求極其等同限定。