Commit f6a8a2c6 authored by liyuanhong's avatar liyuanhong

M500完成了终端插入拔出报警图形功能,以及模拟器完成了终端插入报警;同时增加了模拟器GPs有效性设置功能

parent 84c7ef62
{"name": "gpsLine", "GPSLine": [{"lng": "106.484708", "lat": "29.541383\n"}, {"lng": "106.484708", "lat": "29.541383\n"}, {"lng": "106.48525", "lat": "29.54261\n"}, {"lng": "106.485416", "lat": "29.542851\n"}, {"lng": "106.485576", "lat": "29.543066\n"}, {"lng": "106.485718", "lat": "29.543145\n"}, {"lng": "106.486151", "lat": "29.543361\n"}, {"lng": "106.486681", "lat": "29.543641\n"}, {"lng": "106.487396", "lat": "29.5442\n"}, {"lng": "106.489105", "lat": "29.54584\n"}, {"lng": "106.489171", "lat": "29.54596\n"}, {"lng": "106.48921", "lat": "29.546175\n"}, {"lng": "106.489215", "lat": "29.546413\n"}, {"lng": "106.489138", "lat": "29.546638\n"}, {"lng": "106.48901", "lat": "29.546963\n"}, {"lng": "106.488645", "lat": "29.548548\n"}, {"lng": "106.488666", "lat": "29.548698\n"}, {"lng": "106.488726", "lat": "29.548755\n"}, {"lng": "106.48877", "lat": "29.548778\n"}, {"lng": "106.48883", "lat": "29.54879\n"}, {"lng": "106.488978", "lat": "29.548846\n"}, {"lng": "106.48901", "lat": "29.54884\n"}, {"lng": "106.489726", "lat": "29.548905\n"}, {"lng": "106.48973", "lat": "29.548903\n"}, {"lng": "106.489768", "lat": "29.54894\n"}, {"lng": "106.489768", "lat": "29.54894\n"}, {"lng": "106.489768", "lat": "29.54894\n"}, {"lng": "106.49035", "lat": "29.549128\n"}, {"lng": "106.49035", "lat": "29.549115\n"}, {"lng": "106.490346", "lat": "29.549095\n"}, {"lng": "106.490343", "lat": "29.549085\n"}, {"lng": "106.490343", "lat": "29.549085\n"}, {"lng": "106.490343", "lat": "29.549085\n"}, {"lng": "106.490343", "lat": "29.549085\n"}, {"lng": "106.49037", "lat": "29.549171\n"}, {"lng": "106.490538", "lat": "29.549168\n"}, {"lng": "106.490695", "lat": "29.549196\n"}, {"lng": "106.491661", "lat": "29.549308\n"}, {"lng": "106.491828", "lat": "29.549321\n"}, {"lng": "106.492118", "lat": "29.549441\n"}, {"lng": "106.492333", "lat": "29.549435\n"}, {"lng": "106.492373", "lat": "29.549403\n"}, {"lng": "106.492396", "lat": "29.549403\n"}, {"lng": "106.492396", "lat": "29.549403\n"}, {"lng": "106.492396", "lat": "29.549403\n"}, {"lng": "106.492396", "lat": "29.549403\n"}, {"lng": "106.492846", "lat": "29.549358\n"}, {"lng": "106.492846", "lat": "29.549358\n"}]}
\ No newline at end of file
{"name": "gpsLine", "GPSLine": [{"lng": "106.489936", "lat": "29.571413\n"}, {"lng": "106.489936", "lat": "29.571413\n"}, {"lng": "106.489936", "lat": "29.571413\n"}, {"lng": "106.489936", "lat": "29.571413\n"}, {"lng": "106.489228", "lat": "29.572476\n"}, {"lng": "106.489278", "lat": "29.57247\n"}, {"lng": "106.48928", "lat": "29.572478\n"}, {"lng": "106.489308", "lat": "29.572493\n"}, {"lng": "106.489336", "lat": "29.572491\n"}, {"lng": "106.489401", "lat": "29.572516\n"}, {"lng": "106.489463", "lat": "29.572516\n"}, {"lng": "106.489526", "lat": "29.572513\n"}, {"lng": "106.489551", "lat": "29.572516\n"}, {"lng": "106.48958", "lat": "29.572516\n"}, {"lng": "106.489673", "lat": "29.572513\n"}, {"lng": "106.489723", "lat": "29.572528\n"}, {"lng": "106.48976", "lat": "29.57255\n"}, {"lng": "106.489806", "lat": "29.572548\n"}, {"lng": "106.489945", "lat": "29.572588\n"}, {"lng": "106.490688", "lat": "29.573006\n"}, {"lng": "106.493176", "lat": "29.574358\n"}, {"lng": "106.494316", "lat": "29.575038\n"}, {"lng": "106.494641", "lat": "29.575311\n"}, {"lng": "106.495465", "lat": "29.575978\n"}, {"lng": "106.49554", "lat": "29.576051\n"}, {"lng": "106.495676", "lat": "29.576178\n"}, {"lng": "106.495676", "lat": "29.576178\n"}, {"lng": "106.49603", "lat": "29.576513\n"}, {"lng": "106.497765", "lat": "29.578031\n"}, {"lng": "106.498773", "lat": "29.57854\n"}, {"lng": "106.499798", "lat": "29.578868\n"}, {"lng": "106.501658", "lat": "29.579578\n"}, {"lng": "106.50237", "lat": "29.580096\n"}, {"lng": "106.503121", "lat": "29.580836\n"}, {"lng": "106.50395", "lat": "29.581896\n"}, {"lng": "106.504175", "lat": "29.582433\n"}, {"lng": "106.505063", "lat": "29.584653\n"}, {"lng": "106.50554", "lat": "29.585078\n"}, {"lng": "106.50609", "lat": "29.585436\n"}, {"lng": "106.506691", "lat": "29.585701\n"}, {"lng": "106.507366", "lat": "29.585848\n"}, {"lng": "106.50825", "lat": "29.585931\n"}, {"lng": "106.51094", "lat": "29.586\n"}, {"lng": "106.513358", "lat": "29.586065\n"}, {"lng": "106.516028", "lat": "29.586071\n"}, {"lng": "106.519216", "lat": "29.586091\n"}, {"lng": "106.522845", "lat": "29.586266\n"}, {"lng": "106.523246", "lat": "29.586368\n"}, {"lng": "106.525301", "lat": "29.586976\n"}, {"lng": "106.527695", "lat": "29.587878\n"}, {"lng": "106.528158", "lat": "29.588231\n"}, {"lng": "106.52835", "lat": "29.58837\n"}, {"lng": "106.528901", "lat": "29.588898\n"}, {"lng": "106.530315", "lat": "29.590686\n"}, {"lng": "106.530693", "lat": "29.590921\n"}, {"lng": "106.531298", "lat": "29.591176\n"}, {"lng": "106.531461", "lat": "29.591223\n"}, {"lng": "106.531958", "lat": "29.591311\n"}, {"lng": "106.532708", "lat": "29.591331\n"}, {"lng": "106.53456", "lat": "29.59121\n"}, {"lng": "106.536136", "lat": "29.591001\n"}, {"lng": "106.536763", "lat": "29.590758\n"}, {"lng": "106.537365", "lat": "29.590386\n"}, {"lng": "106.537816", "lat": "29.590071\n"}, {"lng": "106.53997", "lat": "29.588791\n"}, {"lng": "106.54105", "lat": "29.58838\n"}, {"lng": "106.544393", "lat": "29.58736\n"}, {"lng": "106.546295", "lat": "29.586875\n"}, {"lng": "106.54707", "lat": "29.586838\n"}, {"lng": "106.547906", "lat": "29.586898\n"}, {"lng": "106.550141", "lat": "29.58728\n"}, {"lng": "106.550928", "lat": "29.587341\n"}, {"lng": "106.554313", "lat": "29.587185\n"}, {"lng": "106.558706", "lat": "29.587231\n"}, {"lng": "106.564148", "lat": "29.587476\n"}, {"lng": "106.568888", "lat": "29.587811\n"}, {"lng": "106.57465", "lat": "29.588195\n"}, {"lng": "106.581358", "lat": "29.58863\n"}, {"lng": "106.58715", "lat": "29.588625\n"}, {"lng": "106.587683", "lat": "29.588548\n"}, {"lng": "106.588408", "lat": "29.588351\n"}, {"lng": "106.589363", "lat": "29.587905\n"}, {"lng": "106.58993", "lat": "29.587518\n"}, {"lng": "106.590306", "lat": "29.587135\n"}, {"lng": "106.590373", "lat": "29.587008\n"}, {"lng": "106.590413", "lat": "29.58687\n"}, {"lng": "106.59044", "lat": "29.586643\n"}, {"lng": "106.590418", "lat": "29.586578\n"}, {"lng": "106.590366", "lat": "29.586528\n"}, {"lng": "106.590295", "lat": "29.586491\n"}, {"lng": "106.590121", "lat": "29.586416\n"}, {"lng": "106.58978", "lat": "29.586376\n"}, {"lng": "106.589298", "lat": "29.586303\n"}, {"lng": "106.58896", "lat": "29.586151\n"}, {"lng": "106.587671", "lat": "29.585425\n"}, {"lng": "106.587248", "lat": "29.585178\n"}, {"lng": "106.587193", "lat": "29.585103\n"}, {"lng": "106.586845", "lat": "29.584518\n"}, {"lng": "106.586873", "lat": "29.584393\n"}, {"lng": "106.586908", "lat": "29.584336\n"}, {"lng": "106.586978", "lat": "29.584295\n"}, {"lng": "106.587063", "lat": "29.584245\n"}, {"lng": "106.587728", "lat": "29.583933\n"}, {"lng": "106.58852", "lat": "29.583666\n"}, {"lng": "106.588616", "lat": "29.583636\n"}, {"lng": "106.59062", "lat": "29.583203\n"}, {"lng": "106.5909", "lat": "29.583028\n"}, {"lng": "106.590946", "lat": "29.583026\n"}, {"lng": "106.591038", "lat": "29.583023\n"}, {"lng": "106.591191", "lat": "29.582983\n"}, {"lng": "106.591945", "lat": "29.582805\n"}, {"lng": "106.593713", "lat": "29.5825\n"}, {"lng": "106.594765", "lat": "29.582348\n"}, {"lng": "106.595623", "lat": "29.582066\n"}, {"lng": "106.59581", "lat": "29.58191\n"}, {"lng": "106.59589", "lat": "29.581818\n"}, {"lng": "106.596008", "lat": "29.58164\n"}, {"lng": "106.596105", "lat": "29.581355\n"}, {"lng": "106.596305", "lat": "29.5805\n"}, {"lng": "106.596385", "lat": "29.579981\n"}, {"lng": "106.596376", "lat": "29.579921\n"}, {"lng": "106.5964", "lat": "29.57966\n"}, {"lng": "106.596518", "lat": "29.579361\n"}, {"lng": "106.596688", "lat": "29.579113\n"}, {"lng": "106.597758", "lat": "29.577621\n"}, {"lng": "106.597786", "lat": "29.577493\n"}, {"lng": "106.597826", "lat": "29.577223\n"}, {"lng": "106.597873", "lat": "29.577126\n"}, {"lng": "106.597888", "lat": "29.576851\n"}, {"lng": "106.597788", "lat": "29.576398\n"}, {"lng": "106.597645", "lat": "29.57626\n"}, {"lng": "106.59744", "lat": "29.576173\n"}, {"lng": "106.597366", "lat": "29.576155\n"}, {"lng": "106.597295", "lat": "29.576161\n"}, {"lng": "106.597103", "lat": "29.576156\n"}, {"lng": "106.597018", "lat": "29.576163\n"}, {"lng": "106.596796", "lat": "29.576183\n"}, {"lng": "106.596551", "lat": "29.57617\n"}, {"lng": "106.59605", "lat": "29.576128\n"}, {"lng": "106.595771", "lat": "29.576055\n"}, {"lng": "106.595018", "lat": "29.575778\n"}, {"lng": "106.594866", "lat": "29.57571\n"}, {"lng": "106.594543", "lat": "29.575561\n"}, {"lng": "106.594506", "lat": "29.575486\n"}, {"lng": "106.594505", "lat": "29.575436\n"}, {"lng": "106.594511", "lat": "29.575385\n"}, {"lng": "106.594491", "lat": "29.575216\n"}, {"lng": "106.594468", "lat": "29.575196\n"}, {"lng": "106.594391", "lat": "29.575178\n"}, {"lng": "106.594345", "lat": "29.575181\n"}, {"lng": "106.594196", "lat": "29.575205\n"}, {"lng": "106.593868", "lat": "29.575305\n"}, {"lng": "106.59372", "lat": "29.57537\n"}, {"lng": "106.59363", "lat": "29.575435\n"}, {"lng": "106.593523", "lat": "29.575543\n"}, {"lng": "106.5933", "lat": "29.575731\n"}, {"lng": "106.593236", "lat": "29.575753\n"}, {"lng": "106.593095", "lat": "29.575788\n"}, {"lng": "106.59263", "lat": "29.575965\n"}, {"lng": "106.59258", "lat": "29.576035\n"}, {"lng": "106.592545", "lat": "29.576106\n"}, {"lng": "106.592495", "lat": "29.576258\n"}, {"lng": "106.592303", "lat": "29.576691\n"}, {"lng": "106.592215", "lat": "29.576761\n"}, {"lng": "106.592118", "lat": "29.57682\n"}, {"lng": "106.59181", "lat": "29.57696\n"}, {"lng": "106.591708", "lat": "29.576963\n"}, {"lng": "106.59155", "lat": "29.576893\n"}, {"lng": "106.591506", "lat": "29.576825\n"}, {"lng": "106.591498", "lat": "29.576743\n"}, {"lng": "106.591511", "lat": "29.576651\n"}, {"lng": "106.591545", "lat": "29.576583\n"}, {"lng": "106.591563", "lat": "29.57627\n"}, {"lng": "106.591503", "lat": "29.576076\n"}, {"lng": "106.591426", "lat": "29.575991\n"}, {"lng": "106.59105", "lat": "29.575535\n"}, {"lng": "106.590888", "lat": "29.575535\n"}, {"lng": "106.590741", "lat": "29.575553\n"}, {"lng": "106.590668", "lat": "29.575568\n"}, {"lng": "106.590585", "lat": "29.575606\n"}, {"lng": "106.589545", "lat": "29.575728\n"}, {"lng": "106.589331", "lat": "29.575686\n"}, {"lng": "106.588915", "lat": "29.575568\n"}, {"lng": "106.588903", "lat": "29.575546\n"}, {"lng": "106.588861", "lat": "29.575505\n"}, {"lng": "106.588415", "lat": "29.575126\n"}, {"lng": "106.588343", "lat": "29.575101\n"}, {"lng": "106.588276", "lat": "29.575088\n"}, {"lng": "106.588216", "lat": "29.575088\n"}, {"lng": "106.58816", "lat": "29.575098\n"}, {"lng": "106.588105", "lat": "29.575121\n"}, {"lng": "106.588058", "lat": "29.575151\n"}, {"lng": "106.587973", "lat": "29.575213\n"}, {"lng": "106.58742", "lat": "29.57571\n"}, {"lng": "106.587413", "lat": "29.575743\n"}, {"lng": "106.587418", "lat": "29.575771\n"}, {"lng": "106.587436", "lat": "29.575788\n"}, {"lng": "106.587461", "lat": "29.5758\n"}, {"lng": "106.58749", "lat": "29.57581\n"}, {"lng": "106.587545", "lat": "29.575818\n"}, {"lng": "106.587605", "lat": "29.575815\n"}, {"lng": "106.587781", "lat": "29.575788\n"}, {"lng": "106.587861", "lat": "29.57577\n"}, {"lng": "106.587883", "lat": "29.5758\n"}, {"lng": "106.587883", "lat": "29.5758\n"}, {"lng": "106.587883", "lat": "29.5758\n"}, {"lng": "106.587883", "lat": "29.5758"}]}
\ No newline at end of file
{
"name":"GPS轨迹1",
"GPSLine":[
{
"lng":106.586571,
"lat":29.569133
},
{
"lng":106.586935,
"lat":29.569215
},
{
"lng":106.587114,
"lat":29.569215
},
{
"lng":106.587424,
"lat":29.569231
},
{
"lng":106.587685,
"lat":29.569278
},
{
"lng":106.587981,
"lat":29.569298
},
{
"lng":106.588098,
"lat":29.569341
},
{
"lng":106.588287,
"lat":29.569392
},
{
"lng":106.588435,
"lat":29.569439
},
{
"lng":106.588565,
"lat":29.569506
},
{
"lng":106.588646,
"lat":29.569565
},
{
"lng":106.588763,
"lat":29.569651
},
{
"lng":106.588884,
"lat":29.569745
},
{
"lng":106.589073,
"lat":29.569832
},
{
"lng":106.589374,
"lat":29.569977
},
{
"lng":106.589688,
"lat":29.570114
},
{
"lng":106.589993,
"lat":29.570228
},
{
"lng":106.590146,
"lat":29.570271
},
{
"lng":106.590357,
"lat":29.570291
},
{
"lng":106.590573,
"lat":29.570264
},
{
"lng":106.590802,
"lat":29.570248
},
{
"lng":106.59095,
"lat":29.570205
},
{
"lng":106.59108,
"lat":29.570256
},
{
"lng":106.591273,
"lat":29.570421
},
{
"lng":106.591507,
"lat":29.570578
},
{
"lng":106.591673,
"lat":29.570703
},
{
"lng":106.591772,
"lat":29.570774
},
{
"lng":106.591974,
"lat":29.570943
},
{
"lng":106.592145,
"lat":29.57108
},
{
"lng":106.592342,
"lat":29.571261
},
{
"lng":106.592383,
"lat":29.571332
},
{
"lng":106.592527,
"lat":29.571493
},
{
"lng":106.592679,
"lat":29.571642
},
{
"lng":106.592765,
"lat":29.571748
},
{
"lng":106.592877,
"lat":29.571834
},
{
"lng":106.593007,
"lat":29.571901
},
{
"lng":106.593182,
"lat":29.571936
},
{
"lng":106.593308,
"lat":29.571936
},
{
"lng":106.593407,
"lat":29.571874
},
{
"lng":106.593591,
"lat":29.571815
},
{
"lng":106.593784,
"lat":29.571795
},
{
"lng":106.593847,
"lat":29.571862
},
{
"lng":106.593865,
"lat":29.571983
},
{
"lng":106.59391,
"lat":29.572105
},
{
"lng":106.594054,
"lat":29.572144
},
{
"lng":106.594453,
"lat":29.572121
},
{
"lng":106.594665,
"lat":29.57205
},
{
"lng":106.594799,
"lat":29.571968
},
{
"lng":106.594925,
"lat":29.571862
},
{
"lng":106.595078,
"lat":29.57172
},
{
"lng":106.595145,
"lat":29.571607
},
{
"lng":106.595226,
"lat":29.571449
},
{
"lng":106.595239,
"lat":29.571324
},
{
"lng":106.59528,
"lat":29.571124
},
{
"lng":106.59528,
"lat":29.570982
},
{
"lng":106.595289,
"lat":29.570821
},
{
"lng":106.59532,
"lat":29.57066
},
{
"lng":106.59532,
"lat":29.570515
},
{
"lng":106.595325,
"lat":29.570413
},
{
"lng":106.595374,
"lat":29.570158
},
{
"lng":106.595374,
"lat":29.570024
},
{
"lng":106.595406,
"lat":29.56984
},
{
"lng":106.59541,
"lat":29.569631
},
{
"lng":106.59541,
"lat":29.569439
},
{
"lng":106.595451,
"lat":29.569199
},
{
"lng":106.595451,
"lat":29.569074
},
{
"lng":106.595473,
"lat":29.568932
},
{
"lng":106.595495,
"lat":29.568787
},
{
"lng":106.595469,
"lat":29.568563
},
{
"lng":106.595464,
"lat":29.568422
},
{
"lng":106.595401,
"lat":29.568151
},
{
"lng":106.595406,
"lat":29.567947
},
{
"lng":106.595352,
"lat":29.567739
},
{
"lng":106.595334,
"lat":29.567593
},
{
"lng":106.595316,
"lat":29.567397
},
{
"lng":106.595298,
"lat":29.567209
},
{
"lng":106.595266,
"lat":29.567016
},
{
"lng":106.595239,
"lat":29.566777
},
{
"lng":106.595217,
"lat":29.566592
},
{
"lng":106.595186,
"lat":29.566384
},
{
"lng":106.595141,
"lat":29.566188
},
{
"lng":106.595091,
"lat":29.565976
},
{
"lng":106.594997,
"lat":29.565732
},
{
"lng":106.594934,
"lat":29.565544
},
{
"lng":106.594795,
"lat":29.565178
},
{
"lng":106.594678,
"lat":29.564951
},
{
"lng":106.594629,
"lat":29.564758
},
{
"lng":106.594566,
"lat":29.564605
},
{
"lng":106.594691,
"lat":29.564554
},
{
"lng":106.594898,
"lat":29.564507
},
{
"lng":106.595212,
"lat":29.564409
},
{
"lng":106.595626,
"lat":29.564291
},
{
"lng":106.596165,
"lat":29.564134
},
{
"lng":106.596421,
"lat":29.564063
},
{
"lng":106.596704,
"lat":29.563985
},
{
"lng":106.596928,
"lat":29.56391
},
{
"lng":106.59744,
"lat":29.563761
},
{
"lng":106.597867,
"lat":29.563635
},
{
"lng":106.598105,
"lat":29.563553
},
{
"lng":106.598294,
"lat":29.563517
},
{
"lng":106.598572,
"lat":29.563415
},
{
"lng":106.598909,
"lat":29.563317
},
{
"lng":106.599165,
"lat":29.56325
},
{
"lng":106.599673,
"lat":29.563109
},
{
"lng":106.600104,
"lat":29.562975
},
{
"lng":106.600369,
"lat":29.562921
},
{
"lng":106.600571,
"lat":29.562854
},
{
"lng":106.600786,
"lat":29.562807
},
{
"lng":106.600791,
"lat":29.562807
},
{
"lng":106.600804,
"lat":29.562913
},
{
"lng":106.600836,
"lat":29.563082
},
{
"lng":106.600849,
"lat":29.563164
},
{
"lng":106.60089,
"lat":29.56336
},
{
"lng":106.600957,
"lat":29.563623
},
{
"lng":106.600966,
"lat":29.563733
},
{
"lng":106.600966,
"lat":29.563922
},
{
"lng":106.600984,
"lat":29.564216
},
{
"lng":106.601002,
"lat":29.56444
},
{
"lng":106.601011,
"lat":29.564692
},
{
"lng":106.601025,
"lat":29.564978
},
{
"lng":106.601025,
"lat":29.565182
},
{
"lng":106.601047,
"lat":29.565367
},
{
"lng":106.601038,
"lat":29.565508
},
{
"lng":106.601056,
"lat":29.56563
},
{
"lng":106.601051,
"lat":29.565932
},
{
"lng":106.60106,
"lat":29.566129
},
{
"lng":106.601074,
"lat":29.566388
},
{
"lng":106.601096,
"lat":29.566569
},
{
"lng":106.601083,
"lat":29.566706
},
{
"lng":106.601096,
"lat":29.566985
},
{
"lng":106.601083,
"lat":29.567122
},
{
"lng":106.601105,
"lat":29.567271
},
{
"lng":106.601105,
"lat":29.567432
},
{
"lng":106.601114,
"lat":29.567625
},
{
"lng":106.601105,
"lat":29.567723
},
{
"lng":106.601114,
"lat":29.567786
},
{
"lng":106.601132,
"lat":29.568006
},
{
"lng":106.601128,
"lat":29.568112
},
{
"lng":106.601114,
"lat":29.568257
},
{
"lng":106.601119,
"lat":29.568379
},
{
"lng":106.601119,
"lat":29.568646
},
{
"lng":106.601101,
"lat":29.568779
},
{
"lng":106.60111,
"lat":29.568913
},
{
"lng":106.601101,
"lat":29.569031
},
{
"lng":106.601101,
"lat":29.569196
},
{
"lng":106.601083,
"lat":29.569302
},
{
"lng":106.601083,
"lat":29.569435
},
{
"lng":106.601051,
"lat":29.56958
},
{
"lng":106.601029,
"lat":29.569722
},
{
"lng":106.601034,
"lat":29.56984
},
{
"lng":106.600998,
"lat":29.570001
},
{
"lng":106.60098,
"lat":29.570193
},
{
"lng":106.600944,
"lat":29.570354
},
{
"lng":106.600926,
"lat":29.57048
},
{
"lng":106.600885,
"lat":29.570668
},
{
"lng":106.600867,
"lat":29.570825
},
{
"lng":106.600854,
"lat":29.570966
},
{
"lng":106.600849,
"lat":29.571065
},
{
"lng":106.600804,
"lat":29.571186
},
{
"lng":106.600755,
"lat":29.571351
},
{
"lng":106.600769,
"lat":29.57141
},
{
"lng":106.600751,
"lat":29.571512
},
{
"lng":106.600737,
"lat":29.571622
},
{
"lng":106.600697,
"lat":29.571779
},
{
"lng":106.600697,
"lat":29.571901
},
{
"lng":106.600661,
"lat":29.572035
},
{
"lng":106.600638,
"lat":29.572172
},
{
"lng":106.60062,
"lat":29.572357
},
{
"lng":106.600593,
"lat":29.572514
},
{
"lng":106.600571,
"lat":29.572655
},
{
"lng":106.600548,
"lat":29.572828
},
{
"lng":106.60053,
"lat":29.572981
},
{
"lng":106.600499,
"lat":29.573142
},
{
"lng":106.600495,
"lat":29.573267
},
{
"lng":106.600441,
"lat":29.573401
},
{
"lng":106.600423,
"lat":29.573523
},
{
"lng":106.600391,
"lat":29.573754
},
{
"lng":106.600364,
"lat":29.57399
},
{
"lng":106.600328,
"lat":29.574186
},
{
"lng":106.600283,
"lat":29.574379
},
{
"lng":106.600261,
"lat":29.574548
},
{
"lng":106.600234,
"lat":29.574693
},
{
"lng":106.600207,
"lat":29.574846
},
{
"lng":106.600189,
"lat":29.574956
},
{
"lng":106.600162,
"lat":29.575093
},
{
"lng":106.600122,
"lat":29.57525
},
{
"lng":106.600077,
"lat":29.575474
},
{
"lng":106.600009,
"lat":29.575631
},
{
"lng":106.599933,
"lat":29.575831
},
{
"lng":106.599866,
"lat":29.576008
},
{
"lng":106.599758,
"lat":29.576204
},
{
"lng":106.5997,
"lat":29.576326
},
{
"lng":106.599583,
"lat":29.576487
},
{
"lng":106.599479,
"lat":29.576636
},
{
"lng":106.599399,
"lat":29.57677
},
{
"lng":106.5993,
"lat":29.576947
},
{
"lng":106.59921,
"lat":29.577053
},
{
"lng":106.599093,
"lat":29.577182
},
{
"lng":106.59899,
"lat":29.5773
},
{
"lng":106.598909,
"lat":29.577437
},
{
"lng":106.598797,
"lat":29.577512
},
{
"lng":106.598666,
"lat":29.577693
},
{
"lng":106.5985,
"lat":29.57785
},
{
"lng":106.598401,
"lat":29.57796
},
{
"lng":106.598262,
"lat":29.578054
},
{
"lng":106.598168,
"lat":29.578195
},
{
"lng":106.598038,
"lat":29.578297
},
{
"lng":106.598015,
"lat":29.578364
},
{
"lng":106.598015,
"lat":29.578364
}
]
}
{ "name":"GPS轨迹1", "GPSLine":[ { "lng":106.586571, "lat":29.569133 }, { "lng":106.586935, "lat":29.569215 }, { "lng":106.587114, "lat":29.569215 }, { "lng":106.587424, "lat":29.569231 }, { "lng":106.587685, "lat":29.569278 }, { "lng":106.587981, "lat":29.569298 }, { "lng":106.588098, "lat":29.569341 }, { "lng":106.588287, "lat":29.569392 }, { "lng":106.588435, "lat":29.569439 }, { "lng":106.588565, "lat":29.569506 }, { "lng":106.588646, "lat":29.569565 }, { "lng":106.588763, "lat":29.569651 }, { "lng":106.588884, "lat":29.569745 }, { "lng":106.589073, "lat":29.569832 }, { "lng":106.589374, "lat":29.569977 }, { "lng":106.589688, "lat":29.570114 }, { "lng":106.589993, "lat":29.570228 }, { "lng":106.590146, "lat":29.570271 }, { "lng":106.590357, "lat":29.570291 }, { "lng":106.590573, "lat":29.570264 }, { "lng":106.590802, "lat":29.570248 }, { "lng":106.59095, "lat":29.570205 }, { "lng":106.59108, "lat":29.570256 }, { "lng":106.591273, "lat":29.570421 }, { "lng":106.591507, "lat":29.570578 }, { "lng":106.591673, "lat":29.570703 }, { "lng":106.591772, "lat":29.570774 }, { "lng":106.591974, "lat":29.570943 }, { "lng":106.592145, "lat":29.57108 }, { "lng":106.592342, "lat":29.571261 }, { "lng":106.592383, "lat":29.571332 }, { "lng":106.592527, "lat":29.571493 }, { "lng":106.592679, "lat":29.571642 }, { "lng":106.592765, "lat":29.571748 }, { "lng":106.592877, "lat":29.571834 }, { "lng":106.593007, "lat":29.571901 }, { "lng":106.593182, "lat":29.571936 }, { "lng":106.593308, "lat":29.571936 }, { "lng":106.593407, "lat":29.571874 }, { "lng":106.593591, "lat":29.571815 }, { "lng":106.593784, "lat":29.571795 }, { "lng":106.593847, "lat":29.571862 }, { "lng":106.593865, "lat":29.571983 }, { "lng":106.59391, "lat":29.572105 }, { "lng":106.594054, "lat":29.572144 }, { "lng":106.594453, "lat":29.572121 }, { "lng":106.594665, "lat":29.57205 }, { "lng":106.594799, "lat":29.571968 }, { "lng":106.594925, "lat":29.571862 }, { "lng":106.595078, "lat":29.57172 }, { "lng":106.595145, "lat":29.571607 }, { "lng":106.595226, "lat":29.571449 }, { "lng":106.595239, "lat":29.571324 }, { "lng":106.59528, "lat":29.571124 }, { "lng":106.59528, "lat":29.570982 }, { "lng":106.595289, "lat":29.570821 }, { "lng":106.59532, "lat":29.57066 }, { "lng":106.59532, "lat":29.570515 }, { "lng":106.595325, "lat":29.570413 }, { "lng":106.595374, "lat":29.570158 }, { "lng":106.595374, "lat":29.570024 }, { "lng":106.595406, "lat":29.56984 }, { "lng":106.59541, "lat":29.569631 }, { "lng":106.59541, "lat":29.569439 }, { "lng":106.595451, "lat":29.569199 }, { "lng":106.595451, "lat":29.569074 }, { "lng":106.595473, "lat":29.568932 }, { "lng":106.595495, "lat":29.568787 }, { "lng":106.595469, "lat":29.568563 }, { "lng":106.595464, "lat":29.568422 }, { "lng":106.595401, "lat":29.568151 }, { "lng":106.595406, "lat":29.567947 }, { "lng":106.595352, "lat":29.567739 }, { "lng":106.595334, "lat":29.567593 }, { "lng":106.595316, "lat":29.567397 }, { "lng":106.595298, "lat":29.567209 }, { "lng":106.595266, "lat":29.567016 }, { "lng":106.595239, "lat":29.566777 }, { "lng":106.595217, "lat":29.566592 }, { "lng":106.595186, "lat":29.566384 }, { "lng":106.595141, "lat":29.566188 }, { "lng":106.595091, "lat":29.565976 }, { "lng":106.594997, "lat":29.565732 }, { "lng":106.594934, "lat":29.565544 }, { "lng":106.594795, "lat":29.565178 }, { "lng":106.594678, "lat":29.564951 }, { "lng":106.594629, "lat":29.564758 }, { "lng":106.594566, "lat":29.564605 }, { "lng":106.594691, "lat":29.564554 }, { "lng":106.594898, "lat":29.564507 }, { "lng":106.595212, "lat":29.564409 }, { "lng":106.595626, "lat":29.564291 }, { "lng":106.596165, "lat":29.564134 }, { "lng":106.596421, "lat":29.564063 }, { "lng":106.596704, "lat":29.563985 }, { "lng":106.596928, "lat":29.56391 }, { "lng":106.59744, "lat":29.563761 }, { "lng":106.597867, "lat":29.563635 }, { "lng":106.598105, "lat":29.563553 }, { "lng":106.598294, "lat":29.563517 }, { "lng":106.598572, "lat":29.563415 }, { "lng":106.598909, "lat":29.563317 }, { "lng":106.599165, "lat":29.56325 }, { "lng":106.599673, "lat":29.563109 }, { "lng":106.600104, "lat":29.562975 }, { "lng":106.600369, "lat":29.562921 }, { "lng":106.600571, "lat":29.562854 }, { "lng":106.600786, "lat":29.562807 }, { "lng":106.600791, "lat":29.562807 }, { "lng":106.600804, "lat":29.562913 }, { "lng":106.600836, "lat":29.563082 }, { "lng":106.600849, "lat":29.563164 }, { "lng":106.60089, "lat":29.56336 }, { "lng":106.600957, "lat":29.563623 }, { "lng":106.600966, "lat":29.563733 }, { "lng":106.600966, "lat":29.563922 }, { "lng":106.600984, "lat":29.564216 }, { "lng":106.601002, "lat":29.56444 }, { "lng":106.601011, "lat":29.564692 }, { "lng":106.601025, "lat":29.564978 }, { "lng":106.601025, "lat":29.565182 }, { "lng":106.601047, "lat":29.565367 }, { "lng":106.601038, "lat":29.565508 }, { "lng":106.601056, "lat":29.56563 }, { "lng":106.601051, "lat":29.565932 }, { "lng":106.60106, "lat":29.566129 }, { "lng":106.601074, "lat":29.566388 }, { "lng":106.601096, "lat":29.566569 }, { "lng":106.601083, "lat":29.566706 }, { "lng":106.601096, "lat":29.566985 }, { "lng":106.601083, "lat":29.567122 }, { "lng":106.601105, "lat":29.567271 }, { "lng":106.601105, "lat":29.567432 }, { "lng":106.601114, "lat":29.567625 }, { "lng":106.601105, "lat":29.567723 }, { "lng":106.601114, "lat":29.567786 }, { "lng":106.601132, "lat":29.568006 }, { "lng":106.601128, "lat":29.568112 }, { "lng":106.601114, "lat":29.568257 }, { "lng":106.601119, "lat":29.568379 }, { "lng":106.601119, "lat":29.568646 }, { "lng":106.601101, "lat":29.568779 }, { "lng":106.60111, "lat":29.568913 }, { "lng":106.601101, "lat":29.569031 }, { "lng":106.601101, "lat":29.569196 }, { "lng":106.601083, "lat":29.569302 }, { "lng":106.601083, "lat":29.569435 }, { "lng":106.601051, "lat":29.56958 }, { "lng":106.601029, "lat":29.569722 }, { "lng":106.601034, "lat":29.56984 }, { "lng":106.600998, "lat":29.570001 }, { "lng":106.60098, "lat":29.570193 }, { "lng":106.600944, "lat":29.570354 }, { "lng":106.600926, "lat":29.57048 }, { "lng":106.600885, "lat":29.570668 }, { "lng":106.600867, "lat":29.570825 }, { "lng":106.600854, "lat":29.570966 }, { "lng":106.600849, "lat":29.571065 }, { "lng":106.600804, "lat":29.571186 }, { "lng":106.600755, "lat":29.571351 }, { "lng":106.600769, "lat":29.57141 }, { "lng":106.600751, "lat":29.571512 }, { "lng":106.600737, "lat":29.571622 }, { "lng":106.600697, "lat":29.571779 }, { "lng":106.600697, "lat":29.571901 }, { "lng":106.600661, "lat":29.572035 }, { "lng":106.600638, "lat":29.572172 }, { "lng":106.60062, "lat":29.572357 }, { "lng":106.600593, "lat":29.572514 }, { "lng":106.600571, "lat":29.572655 }, { "lng":106.600548, "lat":29.572828 }, { "lng":106.60053, "lat":29.572981 }, { "lng":106.600499, "lat":29.573142 }, { "lng":106.600495, "lat":29.573267 }, { "lng":106.600441, "lat":29.573401 }, { "lng":106.600423, "lat":29.573523 }, { "lng":106.600391, "lat":29.573754 }, { "lng":106.600364, "lat":29.57399 }, { "lng":106.600328, "lat":29.574186 }, { "lng":106.600283, "lat":29.574379 }, { "lng":106.600261, "lat":29.574548 }, { "lng":106.600234, "lat":29.574693 }, { "lng":106.600207, "lat":29.574846 }, { "lng":106.600189, "lat":29.574956 }, { "lng":106.600162, "lat":29.575093 }, { "lng":106.600122, "lat":29.57525 }, { "lng":106.600077, "lat":29.575474 }, { "lng":106.600009, "lat":29.575631 }, { "lng":106.599933, "lat":29.575831 }, { "lng":106.599866, "lat":29.576008 }, { "lng":106.599758, "lat":29.576204 }, { "lng":106.5997, "lat":29.576326 }, { "lng":106.599583, "lat":29.576487 }, { "lng":106.599479, "lat":29.576636 }, { "lng":106.599399, "lat":29.57677 }, { "lng":106.5993, "lat":29.576947 }, { "lng":106.59921, "lat":29.577053 }, { "lng":106.599093, "lat":29.577182 }, { "lng":106.59899, "lat":29.5773 }, { "lng":106.598909, "lat":29.577437 }, { "lng":106.598797, "lat":29.577512 }, { "lng":106.598666, "lat":29.577693 }, { "lng":106.5985, "lat":29.57785 }, { "lng":106.598401, "lat":29.57796 }, { "lng":106.598262, "lat":29.578054 }, { "lng":106.598168, "lat":29.578195 }, { "lng":106.598038, "lat":29.578297 }, { "lng":106.598015, "lat":29.578364 }, { "lng":106.598015, "lat":29.578364 } ] }
\ No newline at end of file
{ "name":"GPS轨迹1", "GPSLine":[ { "lng":106.591507, "lat":29.570578 }, { "lng":106.591673, "lat":29.570703 }, { "lng":106.591772, "lat":29.570774 }, { "lng":106.591974, "lat":29.570943 }, { "lng":106.592145, "lat":29.57108 }, { "lng":106.592342, "lat":29.571261 }, { "lng":106.592383, "lat":29.571332 }, { "lng":106.592527, "lat":29.571493 }, { "lng":106.592679, "lat":29.571642 }, { "lng":106.592765, "lat":29.571748 }, { "lng":106.592877, "lat":29.571834 }, { "lng":106.593007, "lat":29.571901 }, { "lng":106.593182, "lat":29.571936 }, { "lng":106.593308, "lat":29.571936 }, { "lng":106.593407, "lat":29.571874 }, { "lng":106.593591, "lat":29.571815 }, { "lng":106.593784, "lat":29.571795 }, { "lng":106.593847, "lat":29.571862 }, { "lng":106.593865, "lat":29.571983 }, { "lng":106.59391, "lat":29.572105 }, { "lng":106.594054, "lat":29.572144 }, { "lng":106.594453, "lat":29.572121 }, { "lng":106.594665, "lat":29.57205 }, { "lng":106.594799, "lat":29.571968 }, { "lng":106.594925, "lat":29.571862 }, { "lng":106.595078, "lat":29.57172 }, { "lng":106.595145, "lat":29.571607 }, { "lng":106.595226, "lat":29.571449 }, { "lng":106.595239, "lat":29.571324 }, { "lng":106.59528, "lat":29.571124 }, { "lng":106.59528, "lat":29.570982 }, { "lng":106.595289, "lat":29.570821 }, { "lng":106.59532, "lat":29.57066 }, { "lng":106.59532, "lat":29.570515 }, { "lng":106.595325, "lat":29.570413 }, { "lng":106.595374, "lat":29.570158 }, { "lng":106.595374, "lat":29.570024 }, { "lng":106.595406, "lat":29.56984 }, { "lng":106.59541, "lat":29.569631 }, { "lng":106.59541, "lat":29.569439 }, { "lng":106.595451, "lat":29.569199 }, { "lng":106.595451, "lat":29.569074 }, { "lng":106.595473, "lat":29.568932 }, { "lng":106.595495, "lat":29.568787 }, { "lng":106.595469, "lat":29.568563 }, { "lng":106.595464, "lat":29.568422 }, { "lng":106.595401, "lat":29.568151 }, { "lng":106.595406, "lat":29.567947 }, { "lng":106.595352, "lat":29.567739 }, { "lng":106.595334, "lat":29.567593 }, { "lng":106.595316, "lat":29.567397 }, { "lng":106.595298, "lat":29.567209 }, { "lng":106.595266, "lat":29.567016 }, { "lng":106.595239, "lat":29.566777 }, { "lng":106.595217, "lat":29.566592 }, { "lng":106.595186, "lat":29.566384 }, { "lng":106.595141, "lat":29.566188 }, { "lng":106.595091, "lat":29.565976 }, { "lng":106.594997, "lat":29.565732 }, { "lng":106.594934, "lat":29.565544 }, { "lng":106.594795, "lat":29.565178 }, { "lng":106.594678, "lat":29.564951 }, { "lng":106.594629, "lat":29.564758 }, { "lng":106.594566, "lat":29.564605 }, { "lng":106.594691, "lat":29.564554 }, { "lng":106.594898, "lat":29.564507 }, { "lng":106.595212, "lat":29.564409 }, { "lng":106.595626, "lat":29.564291 }, { "lng":106.596165, "lat":29.564134 }, { "lng":106.596421, "lat":29.564063 }, { "lng":106.596704, "lat":29.563985 }, { "lng":106.596928, "lat":29.56391 }, { "lng":106.59744, "lat":29.563761 }, { "lng":106.597867, "lat":29.563635 }, { "lng":106.598105, "lat":29.563553 }, { "lng":106.598294, "lat":29.563517 }, { "lng":106.598572, "lat":29.563415 }, { "lng":106.598909, "lat":29.563317 }, { "lng":106.599165, "lat":29.56325 }, { "lng":106.599673, "lat":29.563109 }, { "lng":106.600104, "lat":29.562975 }, { "lng":106.600369, "lat":29.562921 }, { "lng":106.600571, "lat":29.562854 }, { "lng":106.600786, "lat":29.562807 }, { "lng":106.600791, "lat":29.562807 }, { "lng":106.600804, "lat":29.562913 }, { "lng":106.600836, "lat":29.563082 }, { "lng":106.600849, "lat":29.563164 }, { "lng":106.60089, "lat":29.56336 }, { "lng":106.600957, "lat":29.563623 }, { "lng":106.600966, "lat":29.563733 }, { "lng":106.600966, "lat":29.563922 }, { "lng":106.600984, "lat":29.564216 }, { "lng":106.601002, "lat":29.56444 }, { "lng":106.601011, "lat":29.564692 }, { "lng":106.601025, "lat":29.564978 }, { "lng":106.601025, "lat":29.565182 }, { "lng":106.601047, "lat":29.565367 }, { "lng":106.601038, "lat":29.565508 }, { "lng":106.601056, "lat":29.56563 }, { "lng":106.601051, "lat":29.565932 }, { "lng":106.60106, "lat":29.566129 }, { "lng":106.601074, "lat":29.566388 }, { "lng":106.601096, "lat":29.566569 }, { "lng":106.601083, "lat":29.566706 }, { "lng":106.601096, "lat":29.566985 }, { "lng":106.601083, "lat":29.567122 }, { "lng":106.601105, "lat":29.567271 }, { "lng":106.601105, "lat":29.567432 }, { "lng":106.601114, "lat":29.567625 }, { "lng":106.601105, "lat":29.567723 }, { "lng":106.601114, "lat":29.567786 }, { "lng":106.601132, "lat":29.568006 }, { "lng":106.601128, "lat":29.568112 }, { "lng":106.601114, "lat":29.568257 }, { "lng":106.601119, "lat":29.568379 }, { "lng":106.601119, "lat":29.568646 }, { "lng":106.601101, "lat":29.568779 }, { "lng":106.60111, "lat":29.568913 }, { "lng":106.601101, "lat":29.569031 }, { "lng":106.601101, "lat":29.569196 }, { "lng":106.601083, "lat":29.569302 }, { "lng":106.601083, "lat":29.569435 }, { "lng":106.601051, "lat":29.56958 }, { "lng":106.601029, "lat":29.569722 }, { "lng":106.601034, "lat":29.56984 }, { "lng":106.600998, "lat":29.570001 }, { "lng":106.60098, "lat":29.570193 }, { "lng":106.600944, "lat":29.570354 }, { "lng":106.600926, "lat":29.57048 }, { "lng":106.600885, "lat":29.570668 }, { "lng":106.600867, "lat":29.570825 }, { "lng":106.600854, "lat":29.570966 }, { "lng":106.600849, "lat":29.571065 }, { "lng":106.600804, "lat":29.571186 }, { "lng":106.600755, "lat":29.571351 }, { "lng":106.600769, "lat":29.57141 }, { "lng":106.600751, "lat":29.571512 }, { "lng":106.600737, "lat":29.571622 }, { "lng":106.600697, "lat":29.571779 }, { "lng":106.600697, "lat":29.571901 }, { "lng":106.600661, "lat":29.572035 }, { "lng":106.600638, "lat":29.572172 }, { "lng":106.60062, "lat":29.572357 }, { "lng":106.600593, "lat":29.572514 }, { "lng":106.600571, "lat":29.572655 }, { "lng":106.600548, "lat":29.572828 }, { "lng":106.60053, "lat":29.572981 }, { "lng":106.600499, "lat":29.573142 }, { "lng":106.600495, "lat":29.573267 }, { "lng":106.600441, "lat":29.573401 }, { "lng":106.600423, "lat":29.573523 }, { "lng":106.600391, "lat":29.573754 }, { "lng":106.600364, "lat":29.57399 }, { "lng":106.600328, "lat":29.574186 }, { "lng":106.600283, "lat":29.574379 }, { "lng":106.600261, "lat":29.574548 }, { "lng":106.600234, "lat":29.574693 }, { "lng":106.600207, "lat":29.574846 }, { "lng":106.600189, "lat":29.574956 }, { "lng":106.600162, "lat":29.575093 }, { "lng":106.600122, "lat":29.57525 }, { "lng":106.600077, "lat":29.575474 }, { "lng":106.600009, "lat":29.575631 }, { "lng":106.599933, "lat":29.575831 }, { "lng":106.599866, "lat":29.576008 }, { "lng":106.599758, "lat":29.576204 }, { "lng":106.5997, "lat":29.576326 }, { "lng":106.599583, "lat":29.576487 } ] }
\ No newline at end of file
{"name": "gpsLine", "GPSLine": [{"lng": "106.279711", "lat": "29.585448\n"}, {"lng": "106.279711", "lat": "29.585448\n"}, {"lng": "106.279711", "lat": "29.585448\n"}, {"lng": "106.279711", "lat": "29.585448\n"}, {"lng": "106.279711", "lat": "29.585448\n"}, {"lng": "106.279711", "lat": "29.585448\n"}, {"lng": "106.279711", "lat": "29.585448\n"}, {"lng": "106.279711", "lat": "29.585448\n"}, {"lng": "106.279711", "lat": "29.585448\n"}, {"lng": "106.279711", "lat": "29.585448\n"}, {"lng": "106.279711", "lat": "29.585448\n"}, {"lng": "106.287903", "lat": "29.586623\n"}, {"lng": "106.289041", "lat": "29.586608\n"}, {"lng": "106.293958", "lat": "29.586631\n"}, {"lng": "106.296643", "lat": "29.586603\n"}, {"lng": "106.29702", "lat": "29.586588\n"}, {"lng": "106.297076", "lat": "29.586625\n"}, {"lng": "106.297116", "lat": "29.586675\n"}, {"lng": "106.297148", "lat": "29.58674\n"}, {"lng": "106.297161", "lat": "29.586818\n"}, {"lng": "106.297168", "lat": "29.586906\n"}, {"lng": "106.297275", "lat": "29.58793\n"}, {"lng": "106.297461", "lat": "29.588408\n"}, {"lng": "106.297783", "lat": "29.588835\n"}, {"lng": "106.298863", "lat": "29.589848\n"}, {"lng": "106.299571", "lat": "29.59043\n"}, {"lng": "106.30007", "lat": "29.590666\n"}, {"lng": "106.300655", "lat": "29.59083\n"}, {"lng": "106.301408", "lat": "29.59091\n"}, {"lng": "106.301695", "lat": "29.590925\n"}, {"lng": "106.303111", "lat": "29.590928\n"}, {"lng": "106.30319", "lat": "29.590958\n"}, {"lng": "106.30325", "lat": "29.591001\n"}, {"lng": "106.303288", "lat": "29.59106\n"}, {"lng": "106.303306", "lat": "29.591125\n"}, {"lng": "106.303311", "lat": "29.591196\n"}, {"lng": "106.303321", "lat": "29.59202\n"}, {"lng": "106.303418", "lat": "29.594665\n"}, {"lng": "106.303493", "lat": "29.596323\n"}, {"lng": "106.30351", "lat": "29.597693\n"}, {"lng": "106.303563", "lat": "29.598776\n"}, {"lng": "106.303651", "lat": "29.600776\n"}, {"lng": "106.303651", "lat": "29.600776\n"}, {"lng": "106.303735", "lat": "29.6027\n"}, {"lng": "106.303841", "lat": "29.605561\n"}, {"lng": "106.30389", "lat": "29.605611\n"}, {"lng": "106.303936", "lat": "29.605648\n"}, {"lng": "106.303988", "lat": "29.605683\n"}, {"lng": "106.30405", "lat": "29.605698\n"}, {"lng": "106.304203", "lat": "29.605718\n"}, {"lng": "106.307615", "lat": "29.605741\n"}, {"lng": "106.309696", "lat": "29.605716\n"}, {"lng": "106.309731", "lat": "29.605715\n"}, {"lng": "106.313746", "lat": "29.605721\n"}, {"lng": "106.31563", "lat": "29.605693\n"}, {"lng": "106.320446", "lat": "29.605731\n"}, {"lng": "106.325616", "lat": "29.605701\n"}, {"lng": "106.3258", "lat": "29.605626\n"}, {"lng": "106.326526", "lat": "29.605285\n"}, {"lng": "106.326736", "lat": "29.605265\n"}, {"lng": "106.326958", "lat": "29.605301\n"}, {"lng": "106.327066", "lat": "29.605343\n"}, {"lng": "106.327813", "lat": "29.605686\n"}, {"lng": "106.328125", "lat": "29.605711\n"}, {"lng": "106.328805", "lat": "29.605706\n"}, {"lng": "106.335046", "lat": "29.605946\n"}, {"lng": "106.339763", "lat": "29.606455\n"}, {"lng": "106.342376", "lat": "29.606618\n"}, {"lng": "106.346018", "lat": "29.606541\n"}, {"lng": "106.34853", "lat": "29.606423\n"}, {"lng": "106.352298", "lat": "29.606235\n"}, {"lng": "106.357856", "lat": "29.606015\n"}, {"lng": "106.359951", "lat": "29.605968\n"}, {"lng": "106.360195", "lat": "29.605978\n"}, {"lng": "106.360195", "lat": "29.605978\n"}, {"lng": "106.360341", "lat": "29.60598\n"}, {"lng": "106.360453", "lat": "29.605988\n"}, {"lng": "106.360515", "lat": "29.606005\n"}, {"lng": "106.360578", "lat": "29.606036\n"}, {"lng": "106.360638", "lat": "29.606081\n"}, {"lng": "106.360686", "lat": "29.606136\n"}, {"lng": "106.360756", "lat": "29.606266\n"}, {"lng": "106.360791", "lat": "29.60645\n"}, {"lng": "106.361096", "lat": "29.608673\n"}, {"lng": "106.361216", "lat": "29.611228\n"}, {"lng": "106.36123", "lat": "29.611825\n"}, {"lng": "106.36123", "lat": "29.611825\n"}, {"lng": "106.361245", "lat": "29.612025\n"}, {"lng": "106.361295", "lat": "29.612065\n"}, {"lng": "106.36137", "lat": "29.612091\n"}, {"lng": "106.361458", "lat": "29.612105\n"}, {"lng": "106.362618", "lat": "29.612145\n"}, {"lng": "106.36646", "lat": "29.61203\n"}, {"lng": "106.366696", "lat": "29.612051\n"}, {"lng": "106.37035", "lat": "29.612156\n"}, {"lng": "106.374651", "lat": "29.61214\n"}, {"lng": "106.378093", "lat": "29.612096\n"}, {"lng": "106.378153", "lat": "29.612078\n"}, {"lng": "106.378198", "lat": "29.612083\n"}, {"lng": "106.37833", "lat": "29.612105\n"}, {"lng": "106.37846", "lat": "29.61212\n"}, {"lng": "106.379693", "lat": "29.612105\n"}, {"lng": "106.380753", "lat": "29.61197\n"}, {"lng": "106.381605", "lat": "29.611756\n"}, {"lng": "106.383603", "lat": "29.611061\n"}, {"lng": "106.384098", "lat": "29.610913\n"}, {"lng": "106.384285", "lat": "29.610855\n"}, {"lng": "106.385345", "lat": "29.610528\n"}, {"lng": "106.38565", "lat": "29.610451\n"}, {"lng": "106.38565", "lat": "29.610451\n"}, {"lng": "106.385915", "lat": "29.610401\n"}, {"lng": "106.386206", "lat": "29.610345\n"}, {"lng": "106.386226", "lat": "29.610335\n"}, {"lng": "106.386403", "lat": "29.6103\n"}, {"lng": "106.38658", "lat": "29.61027\n"}, {"lng": "106.386611", "lat": "29.610255\n"}, {"lng": "106.386675", "lat": "29.610243\n"}, {"lng": "106.386825", "lat": "29.610236\n"}, {"lng": "106.386991", "lat": "29.610215\n"}, {"lng": "106.387395", "lat": "29.610166\n"}, {"lng": "106.387485", "lat": "29.610156\n"}, {"lng": "106.387591", "lat": "29.610146\n"}, {"lng": "106.387591", "lat": "29.610146\n"}, {"lng": "106.387638", "lat": "29.610136\n"}, {"lng": "106.38778", "lat": "29.610118\n"}, {"lng": "106.387863", "lat": "29.610113\n"}, {"lng": "106.388031", "lat": "29.610101\n"}, {"lng": "106.388351", "lat": "29.610085\n"}, {"lng": "106.389061", "lat": "29.610033\n"}, {"lng": "106.389386", "lat": "29.609993\n"}, {"lng": "106.389428", "lat": "29.609978\n"}, {"lng": "106.389523", "lat": "29.609993\n"}, {"lng": "106.389571", "lat": "29.61\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.389993", "lat": "29.610195\n"}, {"lng": "106.435588", "lat": "29.605548\n"}, {"lng": "106.438256", "lat": "29.605048\n"}, {"lng": "106.439735", "lat": "29.604535\n"}, {"lng": "106.443626", "lat": "29.603025\n"}, {"lng": "106.4472", "lat": "29.601625\n"}, {"lng": "106.451066", "lat": "29.600068\n"}, {"lng": "106.454213", "lat": "29.598905\n"}, {"lng": "106.45434", "lat": "29.59888\n"}, {"lng": "106.454888", "lat": "29.598818\n"}, {"lng": "106.456268", "lat": "29.59885\n"}, {"lng": "106.457346", "lat": "29.598828\n"}, {"lng": "106.457583", "lat": "29.5988\n"}, {"lng": "106.458478", "lat": "29.598606\n"}, {"lng": "106.459485", "lat": "29.598228\n"}, {"lng": "106.461946", "lat": "29.596961\n"}, {"lng": "106.463806", "lat": "29.595875\n"}, {"lng": "106.46479", "lat": "29.595176\n"}, {"lng": "106.465008", "lat": "29.595086\n"}, {"lng": "106.465338", "lat": "29.59501\n"}, {"lng": "106.465613", "lat": "29.594993\n"}, {"lng": "106.466701", "lat": "29.59499\n"}, {"lng": "106.467031", "lat": "29.59493\n"}, {"lng": "106.4674", "lat": "29.594861\n"}, {"lng": "106.467635", "lat": "29.594811\n"}, {"lng": "106.468015", "lat": "29.594733\n"}, {"lng": "106.468356", "lat": "29.594663\n"}, {"lng": "106.468688", "lat": "29.594606\n"}, {"lng": "106.469243", "lat": "29.594496\n"}, {"lng": "106.4697", "lat": "29.594405\n"}, {"lng": "106.470393", "lat": "29.594256\n"}, {"lng": "106.470938", "lat": "29.594128\n"}, {"lng": "106.471188", "lat": "29.594086\n"}, {"lng": "106.471315", "lat": "29.59407\n"}, {"lng": "106.471315", "lat": "29.59407\n"}, {"lng": "106.471381", "lat": "29.593996\n"}, {"lng": "106.471381", "lat": "29.593996\n"}, {"lng": "106.471381", "lat": "29.593996\n"}, {"lng": "106.471381", "lat": "29.593996\n"}, {"lng": "106.471381", "lat": "29.593996\n"}, {"lng": "106.471016", "lat": "29.59573\n"}, {"lng": "106.471043", "lat": "29.59598\n"}, {"lng": "106.471066", "lat": "29.596046\n"}, {"lng": "106.471141", "lat": "29.596221\n"}, {"lng": "106.47149", "lat": "29.596728\n"}, {"lng": "106.471711", "lat": "29.597083\n"}, {"lng": "106.471793", "lat": "29.597168\n"}, {"lng": "106.471921", "lat": "29.597321\n"}, {"lng": "106.472008", "lat": "29.59745\n"}, {"lng": "106.473231", "lat": "29.599268\n"}, {"lng": "106.474456", "lat": "29.600981\n"}, {"lng": "106.476253", "lat": "29.603555\n"}, {"lng": "106.478031", "lat": "29.605808\n"}, {"lng": "106.478705", "lat": "29.606413\n"}, {"lng": "106.479531", "lat": "29.606973\n"}, {"lng": "106.479635", "lat": "29.607038\n"}, {"lng": "106.48009", "lat": "29.607296\n"}, {"lng": "106.4814", "lat": "29.607835\n"}, {"lng": "106.483045", "lat": "29.608393\n"}, {"lng": "106.484661", "lat": "29.608958\n"}, {"lng": "106.486753", "lat": "29.609663\n"}, {"lng": "106.488121", "lat": "29.610041\n"}, {"lng": "106.488623", "lat": "29.610021\n"}, {"lng": "106.488958", "lat": "29.609928\n"}, {"lng": "106.489265", "lat": "29.609778\n"}, {"lng": "106.489535", "lat": "29.609585\n"}, {"lng": "106.489755", "lat": "29.609358\n"}, {"lng": "106.489908", "lat": "29.609111\n"}, {"lng": "106.490006", "lat": "29.608851\n"}, {"lng": "106.49004", "lat": "29.608458\n"}, {"lng": "106.490031", "lat": "29.60833\n"}, {"lng": "106.489563", "lat": "29.606326\n"}, {"lng": "106.489528", "lat": "29.606178\n"}, {"lng": "106.489513", "lat": "29.606031\n"}, {"lng": "106.48948", "lat": "29.604848\n"}, {"lng": "106.48942", "lat": "29.604678\n"}, {"lng": "106.489378", "lat": "29.604641\n"}, {"lng": "106.489325", "lat": "29.604611\n"}, {"lng": "106.489313", "lat": "29.604593\n"}, {"lng": "106.48927", "lat": "29.60456\n"}, {"lng": "106.489196", "lat": "29.604556\n"}, {"lng": "106.489078", "lat": "29.60457\n"}, {"lng": "106.48942", "lat": "29.60452\n"}, {"lng": "106.489513", "lat": "29.604593\n"}, {"lng": "106.489671", "lat": "29.604805\n"}, {"lng": "106.489826", "lat": "29.605506\n"}, {"lng": "106.489901", "lat": "29.605845\n"}, {"lng": "106.489911", "lat": "29.605966\n"}, {"lng": "106.489981", "lat": "29.606478\n"}, {"lng": "106.490048", "lat": "29.606725\n"}, {"lng": "106.490123", "lat": "29.607035\n"}, {"lng": "106.490426", "lat": "29.608278\n"}, {"lng": "106.49082", "lat": "29.60894\n"}, {"lng": "106.492993", "lat": "29.611308\n"}, {"lng": "106.493921", "lat": "29.611998\n"}, {"lng": "106.49428", "lat": "29.612191\n"}, {"lng": "106.496546", "lat": "29.613038\n"}, {"lng": "106.499858", "lat": "29.614171\n"}, {"lng": "106.501808", "lat": "29.614551\n"}, {"lng": "106.506008", "lat": "29.614793\n"}, {"lng": "106.511356", "lat": "29.615113\n"}, {"lng": "106.51573", "lat": "29.615883\n"}, {"lng": "106.52062", "lat": "29.6174\n"}, {"lng": "106.521103", "lat": "29.61761\n"}, {"lng": "106.523751", "lat": "29.618693\n"}, {"lng": "106.524405", "lat": "29.6188\n"}, {"lng": "106.525161", "lat": "29.61881\n"}, {"lng": "106.525318", "lat": "29.618796\n"}, {"lng": "106.526193", "lat": "29.618633\n"}, {"lng": "106.528783", "lat": "29.617955\n"}, {"lng": "106.5296", "lat": "29.617983\n"}, {"lng": "106.530508", "lat": "29.618173\n"}, {"lng": "106.530946", "lat": "29.618333\n"}, {"lng": "106.536373", "lat": "29.621093\n"}, {"lng": "106.538231", "lat": "29.621951\n"}, {"lng": "106.539586", "lat": "29.622285\n"}, {"lng": "106.541451", "lat": "29.622491\n"}, {"lng": "106.547163", "lat": "29.62288\n"}, {"lng": "106.551135", "lat": "29.62318\n"}, {"lng": "106.551746", "lat": "29.623071\n"}, {"lng": "106.552366", "lat": "29.622858\n"}, {"lng": "106.552928", "lat": "29.622525\n"}, {"lng": "106.553408", "lat": "29.622078\n"}, {"lng": "106.553761", "lat": "29.621568\n"}, {"lng": "106.553971", "lat": "29.621085\n"}, {"lng": "106.55433", "lat": "29.619071\n"}, {"lng": "106.554345", "lat": "29.61893\n"}, {"lng": "106.55461", "lat": "29.617645\n"}, {"lng": "106.555123", "lat": "29.616488\n"}, {"lng": "106.555801", "lat": "29.615525\n"}, {"lng": "106.556685", "lat": "29.614673\n"}, {"lng": "106.557566", "lat": "29.614041\n"}, {"lng": "106.558643", "lat": "29.613508\n"}, {"lng": "106.559913", "lat": "29.613148\n"}, {"lng": "106.565655", "lat": "29.611973\n"}, {"lng": "106.574231", "lat": "29.609888\n"}, {"lng": "106.581846", "lat": "29.606735\n"}, {"lng": "106.589951", "lat": "29.603261\n"}, {"lng": "106.594541", "lat": "29.6011\n"}, {"lng": "106.5959", "lat": "29.60005\n"}, {"lng": "106.596643", "lat": "29.599225\n"}, {"lng": "106.597645", "lat": "29.597795\n"}, {"lng": "106.598491", "lat": "29.595783\n"}, {"lng": "106.599025", "lat": "29.593788\n"}, {"lng": "106.599518", "lat": "29.591826\n"}, {"lng": "106.599483", "lat": "29.591545\n"}, {"lng": "106.599243", "lat": "29.590313\n"}, {"lng": "106.599315", "lat": "29.589813\n"}, {"lng": "106.599588", "lat": "29.588765\n"}, {"lng": "106.600148", "lat": "29.586796\n"}, {"lng": "106.600188", "lat": "29.586675\n"}, {"lng": "106.600201", "lat": "29.58652\n"}, {"lng": "106.600196", "lat": "29.586075\n"}, {"lng": "106.60011", "lat": "29.584358\n"}, {"lng": "106.600033", "lat": "29.584201\n"}, {"lng": "106.599591", "lat": "29.583591\n"}, {"lng": "106.59953", "lat": "29.583356\n"}, {"lng": "106.599535", "lat": "29.58319\n"}, {"lng": "106.599583", "lat": "29.582196\n"}, {"lng": "106.59954", "lat": "29.582101\n"}, {"lng": "106.599541", "lat": "29.58202\n"}, {"lng": "106.599566", "lat": "29.58186\n"}, {"lng": "106.599556", "lat": "29.58143\n"}, {"lng": "106.599531", "lat": "29.581238\n"}, {"lng": "106.59942", "lat": "29.580988\n"}, {"lng": "106.599075", "lat": "29.580548\n"}, {"lng": "106.598998", "lat": "29.580371\n"}, {"lng": "106.598826", "lat": "29.580243\n"}, {"lng": "106.598598", "lat": "29.580171\n"}, {"lng": "106.598381", "lat": "29.580156\n"}, {"lng": "106.598215", "lat": "29.580195\n"}, {"lng": "106.598066", "lat": "29.580266\n"}, {"lng": "106.597168", "lat": "29.580861\n"}, {"lng": "106.5971", "lat": "29.580881\n"}, {"lng": "106.596883", "lat": "29.580918\n"}, {"lng": "106.596485", "lat": "29.58094\n"}, {"lng": "106.596395", "lat": "29.580918\n"}, {"lng": "106.596351", "lat": "29.580896\n"}, {"lng": "106.596285", "lat": "29.580825\n"}, {"lng": "106.596246", "lat": "29.580695\n"}, {"lng": "106.596253", "lat": "29.580378\n"}, {"lng": "106.596355", "lat": "29.579646\n"}, {"lng": "106.596563", "lat": "29.579251\n"}, {"lng": "106.597333", "lat": "29.578206\n"}, {"lng": "106.597531", "lat": "29.578023\n"}, {"lng": "106.597761", "lat": "29.577653\n"}, {"lng": "106.597776", "lat": "29.5775\n"}, {"lng": "106.597778", "lat": "29.577413\n"}, {"lng": "106.597756", "lat": "29.577235\n"}, {"lng": "106.597618", "lat": "29.5769\n"}, {"lng": "106.597361", "lat": "29.576315\n"}, {"lng": "106.597266", "lat": "29.57608\n"}, {"lng": "106.597143", "lat": "29.576006\n"}, {"lng": "106.597116", "lat": "29.575966\n"}, {"lng": "106.597083", "lat": "29.57593\n"}, {"lng": "106.597056", "lat": "29.575915\n"}, {"lng": "106.596976", "lat": "29.575886\n"}, {"lng": "106.596916", "lat": "29.575878\n"}, {"lng": "106.596776", "lat": "29.575915\n"}, {"lng": "106.596406", "lat": "29.576011\n"}, {"lng": "106.596253", "lat": "29.576018\n"}, {"lng": "106.59586", "lat": "29.575971\n"}, {"lng": "106.595778", "lat": "29.575956\n"}, {"lng": "106.595226", "lat": "29.575818\n"}, {"lng": "106.595013", "lat": "29.575741\n"}, {"lng": "106.594976", "lat": "29.575726\n"}, {"lng": "106.594956", "lat": "29.575711\n"}, {"lng": "106.594896", "lat": "29.575681\n"}, {"lng": "106.594661", "lat": "29.575591\n"}, {"lng": "106.59453", "lat": "29.575545\n"}, {"lng": "106.594498", "lat": "29.575518\n"}, {"lng": "106.594478", "lat": "29.575486\n"}, {"lng": "106.59447", "lat": "29.575451\n"}, {"lng": "106.59447", "lat": "29.57541\n"}, {"lng": "106.594483", "lat": "29.575275\n"}, {"lng": "106.594473", "lat": "29.575185\n"}, {"lng": "106.594428", "lat": "29.57513\n"}, {"lng": "106.594391", "lat": "29.575121\n"}, {"lng": "106.59435", "lat": "29.575125\n"}, {"lng": "106.594305", "lat": "29.575135\n"}, {"lng": "106.594198", "lat": "29.575166\n"}, {"lng": "106.593661", "lat": "29.575371\n"}, {"lng": "106.593606", "lat": "29.575411\n"}, {"lng": "106.593476", "lat": "29.575548\n"}, {"lng": "106.593363", "lat": "29.575676\n"}, {"lng": "106.59325", "lat": "29.575738\n"}, {"lng": "106.593176", "lat": "29.57576\n"}, {"lng": "106.592536", "lat": "29.57602\n"}, {"lng": "106.592505", "lat": "29.576071\n"}, {"lng": "106.592468", "lat": "29.576196\n"}, {"lng": "106.592301", "lat": "29.576678\n"}, {"lng": "106.592231", "lat": "29.576746\n"}, {"lng": "106.592063", "lat": "29.576848\n"}, {"lng": "106.591801", "lat": "29.576965\n"}, {"lng": "106.591715", "lat": "29.57698\n"}, {"lng": "106.591633", "lat": "29.57697\n"}, {"lng": "106.591563", "lat": "29.57694\n"}, {"lng": "106.591481", "lat": "29.576833\n"}, {"lng": "106.591441", "lat": "29.576718\n"}, {"lng": "106.591441", "lat": "29.57665\n"}, {"lng": "106.59147", "lat": "29.576533\n"}, {"lng": "106.591456", "lat": "29.576468\n"}, {"lng": "106.591225", "lat": "29.575853\n"}, {"lng": "106.591078", "lat": "29.575711\n"}, {"lng": "106.590995", "lat": "29.575673\n"}, {"lng": "106.590653", "lat": "29.575616\n"}, {"lng": "106.590346", "lat": "29.575651\n"}, {"lng": "106.589585", "lat": "29.575773\n"}, {"lng": "106.58941", "lat": "29.57574\n"}, {"lng": "106.588855", "lat": "29.575533\n"}, {"lng": "106.58867", "lat": "29.575393\n"}, {"lng": "106.588263", "lat": "29.57508\n"}, {"lng": "106.58818", "lat": "29.575058\n"}, {"lng": "106.588093", "lat": "29.575065\n"}, {"lng": "106.588011", "lat": "29.575108\n"}, {"lng": "106.587836", "lat": "29.575231\n"}, {"lng": "106.587395", "lat": "29.575621\n"}, {"lng": "106.587358", "lat": "29.575683\n"}, {"lng": "106.587353", "lat": "29.575735\n"}, {"lng": "106.58738", "lat": "29.575775\n"}, {"lng": "106.587416", "lat": "29.575803\n"}, {"lng": "106.587458", "lat": "29.575811\n"}, {"lng": "106.587495", "lat": "29.575813\n"}, {"lng": "106.587595", "lat": "29.575806\n"}, {"lng": "106.587818", "lat": "29.575816\n"}, {"lng": "106.587845", "lat": "29.575825\n"}, {"lng": "106.587845", "lat": "29.575825\n"}, {"lng": "106.587845", "lat": "29.575825"}]}
\ No newline at end of file
{"name": "gpsLine", "GPSLine": [{"lng": "106.279711", "lat": "29.585448\n"}, {"lng": "106.279711", "lat": "29.585448\n"}, {"lng": "106.279711", "lat": "29.585448\n"}, {"lng": "106.279711", "lat": "29.585448\n"}, {"lng": "106.279711", "lat": "29.585448\n"}, {"lng": "106.279711", "lat": "29.585448\n"}, {"lng": "106.279711", "lat": "29.585448\n"}, {"lng": "106.279711", "lat": "29.585448\n"}, {"lng": "106.279711", "lat": "29.585448\n"}, {"lng": "106.279711", "lat": "29.585448\n"}, {"lng": "106.279711", "lat": "29.585448\n"}, {"lng": "106.287903", "lat": "29.586623\n"}, {"lng": "106.289041", "lat": "29.586608\n"}, {"lng": "106.293958", "lat": "29.586631\n"}, {"lng": "106.296643", "lat": "29.586603\n"}, {"lng": "106.29702", "lat": "29.586588\n"}, {"lng": "106.297076", "lat": "29.586625\n"}, {"lng": "106.297116", "lat": "29.586675\n"}, {"lng": "106.297148", "lat": "29.58674\n"}, {"lng": "106.297161", "lat": "29.586818\n"}, {"lng": "106.297168", "lat": "29.586906\n"}, {"lng": "106.297275", "lat": "29.58793\n"}, {"lng": "106.297461", "lat": "29.588408\n"}, {"lng": "106.297783", "lat": "29.588835\n"}, {"lng": "106.298863", "lat": "29.589848\n"}, {"lng": "106.299571", "lat": "29.59043\n"}, {"lng": "106.30007", "lat": "29.590666\n"}, {"lng": "106.300655", "lat": "29.59083\n"}, {"lng": "106.301408", "lat": "29.59091\n"}, {"lng": "106.301695", "lat": "29.590925\n"}, {"lng": "106.303111", "lat": "29.590928\n"}, {"lng": "106.30319", "lat": "29.590958\n"}, {"lng": "106.30325", "lat": "29.591001\n"}, {"lng": "106.303288", "lat": "29.59106\n"}, {"lng": "106.303306", "lat": "29.591125\n"}, {"lng": "106.303311", "lat": "29.591196\n"}, {"lng": "106.303321", "lat": "29.59202\n"}, {"lng": "106.303418", "lat": "29.594665\n"}, {"lng": "106.303493", "lat": "29.596323\n"}, {"lng": "106.30351", "lat": "29.597693\n"}]}
\ No newline at end of file
{"name": "gpsLine", "GPSLine": [{"lng": "106.597495", "lat": "29.715498\n"}, {"lng": "106.597495", "lat": "29.715498\n"}, {"lng": "106.597495", "lat": "29.715498\n"}, {"lng": "106.597495", "lat": "29.715498\n"}, {"lng": "106.597258", "lat": "29.715191\n"}, {"lng": "106.597231", "lat": "29.715181\n"}, {"lng": "106.597195", "lat": "29.715178\n"}, {"lng": "106.597143", "lat": "29.71518\n"}, {"lng": "106.597008", "lat": "29.715185\n"}, {"lng": "106.596721", "lat": "29.715243\n"}, {"lng": "106.596056", "lat": "29.71545\n"}, {"lng": "106.595986", "lat": "29.715498\n"}, {"lng": "106.595931", "lat": "29.715558\n"}, {"lng": "106.5959", "lat": "29.715636\n"}, {"lng": "106.595863", "lat": "29.715915\n"}, {"lng": "106.59576", "lat": "29.71727\n"}, {"lng": "106.595735", "lat": "29.71755\n"}, {"lng": "106.595878", "lat": "29.719105\n"}, {"lng": "106.596391", "lat": "29.720531\n"}, {"lng": "106.596681", "lat": "29.721093\n"}, {"lng": "106.598001", "lat": "29.723316\n"}, {"lng": "106.598043", "lat": "29.723341\n"}, {"lng": "106.598103", "lat": "29.723356\n"}, {"lng": "106.59817", "lat": "29.723376\n"}, {"lng": "106.59835", "lat": "29.723391\n"}, {"lng": "106.59857", "lat": "29.723391\n"}, {"lng": "106.602948", "lat": "29.72335\n"}, {"lng": "106.604158", "lat": "29.723346\n"}, {"lng": "106.606105", "lat": "29.723356\n"}, {"lng": "106.608568", "lat": "29.723358\n"}, {"lng": "106.6087", "lat": "29.723363\n"}, {"lng": "106.6087", "lat": "29.723363\n"}, {"lng": "106.609365", "lat": "29.723346\n"}, {"lng": "106.609385", "lat": "29.723343\n"}, {"lng": "106.609385", "lat": "29.723343\n"}, {"lng": "106.609868", "lat": "29.723355\n"}, {"lng": "106.613723", "lat": "29.723353\n"}, {"lng": "106.614495", "lat": "29.723273\n"}, {"lng": "106.615505", "lat": "29.723008\n"}, {"lng": "106.615505", "lat": "29.723008\n"}, {"lng": "106.62447", "lat": "29.72212\n"}, {"lng": "106.625515", "lat": "29.722123\n"}, {"lng": "106.625515", "lat": "29.722123\n"}, {"lng": "106.632141", "lat": "29.721476\n"}, {"lng": "106.632235", "lat": "29.721426\n"}, {"lng": "106.632291", "lat": "29.721336\n"}, {"lng": "106.632326", "lat": "29.721255\n"}, {"lng": "106.632323", "lat": "29.721166\n"}, {"lng": "106.632263", "lat": "29.720966\n"}, {"lng": "106.631975", "lat": "29.719906\n"}, {"lng": "106.630851", "lat": "29.716403\n"}, {"lng": "106.631013", "lat": "29.716293\n"}, {"lng": "106.631165", "lat": "29.716255\n"}, {"lng": "106.631915", "lat": "29.715973\n"}, {"lng": "106.632115", "lat": "29.71581\n"}, {"lng": "106.63227", "lat": "29.715611\n"}, {"lng": "106.632333", "lat": "29.715418\n"}, {"lng": "106.632333", "lat": "29.715213\n"}, {"lng": "106.632271", "lat": "29.715005\n"}, {"lng": "106.631836", "lat": "29.713595\n"}, {"lng": "106.631435", "lat": "29.712523\n"}, {"lng": "106.631308", "lat": "29.712408\n"}, {"lng": "106.631201", "lat": "29.712295\n"}, {"lng": "106.631171", "lat": "29.712231\n"}, {"lng": "106.63116", "lat": "29.712165\n"}, {"lng": "106.631158", "lat": "29.712096\n"}, {"lng": "106.631136", "lat": "29.711848\n"}, {"lng": "106.630786", "lat": "29.710756\n"}, {"lng": "106.629801", "lat": "29.707925\n"}, {"lng": "106.629801", "lat": "29.707925\n"}, {"lng": "106.629801", "lat": "29.707925\n"}, {"lng": "106.628816", "lat": "29.704841\n"}, {"lng": "106.628831", "lat": "29.70477\n"}, {"lng": "106.628873", "lat": "29.704711\n"}, {"lng": "106.628938", "lat": "29.704668\n"}, {"lng": "106.629025", "lat": "29.704651\n"}, {"lng": "106.629123", "lat": "29.704651\n"}, {"lng": "106.630831", "lat": "29.70468\n"}, {"lng": "106.632243", "lat": "29.704356\n"}, {"lng": "106.633906", "lat": "29.703646\n"}, {"lng": "106.635908", "lat": "29.702735\n"}, {"lng": "106.639518", "lat": "29.701456\n"}, {"lng": "106.640381", "lat": "29.701475\n"}, {"lng": "106.640603", "lat": "29.70151\n"}, {"lng": "106.641648", "lat": "29.701748\n"}, {"lng": "106.644295", "lat": "29.702938\n"}, {"lng": "106.644538", "lat": "29.703033\n"}, {"lng": "106.64464", "lat": "29.703038\n"}, {"lng": "106.644741", "lat": "29.703023\n"}, {"lng": "106.647585", "lat": "29.702196\n"}, {"lng": "106.647681", "lat": "29.702121\n"}, {"lng": "106.647763", "lat": "29.702031\n"}, {"lng": "106.647898", "lat": "29.701816\n"}, {"lng": "106.647966", "lat": "29.70157\n"}, {"lng": "106.647958", "lat": "29.701445\n"}, {"lng": "106.646828", "lat": "29.697065\n"}, {"lng": "106.644126", "lat": "29.689963\n"}, {"lng": "106.64176", "lat": "29.686225\n"}, {"lng": "106.638655", "lat": "29.682431\n"}, {"lng": "106.632641", "lat": "29.675176\n"}, {"lng": "106.628875", "lat": "29.669918\n"}, {"lng": "106.628273", "lat": "29.66877\n"}, {"lng": "106.624655", "lat": "29.661561\n"}, {"lng": "106.62259", "lat": "29.658756\n"}, {"lng": "106.618748", "lat": "29.65431\n"}, {"lng": "106.613693", "lat": "29.647371\n"}, {"lng": "106.608845", "lat": "29.640648\n"}, {"lng": "106.607166", "lat": "29.637853\n"}, {"lng": "106.606445", "lat": "29.63572\n"}, {"lng": "106.606165", "lat": "29.634108\n"}, {"lng": "106.60618", "lat": "29.631573\n"}, {"lng": "106.606673", "lat": "29.627206\n"}, {"lng": "106.60695", "lat": "29.61928\n"}, {"lng": "106.607138", "lat": "29.610996\n"}, {"lng": "106.606578", "lat": "29.604418\n"}, {"lng": "106.605823", "lat": "29.598575\n"}, {"lng": "106.604053", "lat": "29.593738\n"}, {"lng": "106.60236", "lat": "29.58983\n"}, {"lng": "106.602068", "lat": "29.589403\n"}, {"lng": "106.601778", "lat": "29.589135\n"}, {"lng": "106.601461", "lat": "29.588945\n"}, {"lng": "106.60107", "lat": "29.588793\n"}, {"lng": "106.600653", "lat": "29.58872\n"}, {"lng": "106.600198", "lat": "29.588718\n"}, {"lng": "106.599111", "lat": "29.588773\n"}, {"lng": "106.593851", "lat": "29.588923\n"}, {"lng": "106.591751", "lat": "29.588931\n"}, {"lng": "106.591641", "lat": "29.588973\n"}, {"lng": "106.591555", "lat": "29.589033\n"}, {"lng": "106.591486", "lat": "29.589106\n"}, {"lng": "106.591436", "lat": "29.589191\n"}, {"lng": "106.591405", "lat": "29.589286\n"}, {"lng": "106.591231", "lat": "29.590408\n"}, {"lng": "106.591223", "lat": "29.590531\n"}, {"lng": "106.591208", "lat": "29.592293\n"}, {"lng": "106.591495", "lat": "29.593398\n"}, {"lng": "106.591518", "lat": "29.593476\n"}, {"lng": "106.591518", "lat": "29.593476\n"}, {"lng": "106.591546", "lat": "29.593823\n"}, {"lng": "106.591515", "lat": "29.593871\n"}, {"lng": "106.59147", "lat": "29.593911\n"}, {"lng": "106.591413", "lat": "29.593945\n"}, {"lng": "106.591348", "lat": "29.593963\n"}, {"lng": "106.591273", "lat": "29.593976\n"}, {"lng": "106.590715", "lat": "29.59408\n"}, {"lng": "106.590285", "lat": "29.594135\n"}, {"lng": "106.590176", "lat": "29.594151\n"}, {"lng": "106.587883", "lat": "29.594633\n"}, {"lng": "106.587883", "lat": "29.594641\n"}, {"lng": "106.58583", "lat": "29.595106\n"}, {"lng": "106.585778", "lat": "29.59519\n"}, {"lng": "106.585751", "lat": "29.595281\n"}, {"lng": "106.585756", "lat": "29.595496\n"}, {"lng": "106.58588", "lat": "29.596118\n"}, {"lng": "106.585941", "lat": "29.596226\n"}, {"lng": "106.586123", "lat": "29.596411\n"}, {"lng": "106.586503", "lat": "29.596635\n"}, {"lng": "106.586975", "lat": "29.59696\n"}, {"lng": "106.587038", "lat": "29.597063\n"}, {"lng": "106.58711", "lat": "29.597273\n"}, {"lng": "106.587143", "lat": "29.59769\n"}, {"lng": "106.587171", "lat": "29.599486\n"}, {"lng": "106.587098", "lat": "29.599621\n"}, {"lng": "106.58692", "lat": "29.599823\n"}, {"lng": "106.586703", "lat": "29.599965\n"}, {"lng": "106.586316", "lat": "29.600108\n"}, {"lng": "106.583935", "lat": "29.600895\n"}, {"lng": "106.583715", "lat": "29.600953\n"}, {"lng": "106.583641", "lat": "29.600951\n"}, {"lng": "106.583568", "lat": "29.600925\n"}, {"lng": "106.583503", "lat": "29.600876\n"}, {"lng": "106.583451", "lat": "29.600808\n"}, {"lng": "106.58342", "lat": "29.600708\n"}, {"lng": "106.582803", "lat": "29.598305\n"}, {"lng": "106.582431", "lat": "29.596901\n"}, {"lng": "106.580938", "lat": "29.592926\n"}, {"lng": "106.580518", "lat": "29.590686\n"}, {"lng": "106.580463", "lat": "29.59025\n"}, {"lng": "106.580446", "lat": "29.58901\n"}, {"lng": "106.580448", "lat": "29.58523\n"}, {"lng": "106.580383", "lat": "29.58225\n"}, {"lng": "106.580535", "lat": "29.58181\n"}, {"lng": "106.580938", "lat": "29.581141\n"}, {"lng": "106.581355", "lat": "29.580713\n"}, {"lng": "106.581948", "lat": "29.580281\n"}, {"lng": "106.58283", "lat": "29.579855\n"}, {"lng": "106.583291", "lat": "29.57967\n"}, {"lng": "106.583413", "lat": "29.579613\n"}, {"lng": "106.583413", "lat": "29.579613\n"}, {"lng": "106.585158", "lat": "29.577626\n"}, {"lng": "106.586611", "lat": "29.576251\n"}, {"lng": "106.587248", "lat": "29.575718\n"}, {"lng": "106.587286", "lat": "29.575708\n"}, {"lng": "106.587328", "lat": "29.575711\n"}, {"lng": "106.587368", "lat": "29.575726\n"}, {"lng": "106.587458", "lat": "29.575771\n"}, {"lng": "106.587538", "lat": "29.575788\n"}, {"lng": "106.587618", "lat": "29.575786\n"}, {"lng": "106.587833", "lat": "29.575755\n"}, {"lng": "106.587853", "lat": "29.57572\n"}, {"lng": "106.587885", "lat": "29.575676\n"}, {"lng": "106.58792", "lat": "29.575621\n"}, {"lng": "106.58792", "lat": "29.575621\n"}, {"lng": "106.58792", "lat": "29.575621\n"}, {"lng": "106.58792", "lat": "29.575621\n"}, {"lng": "106.58792", "lat": "29.575621\n"}, {"lng": "106.58792", "lat": "29.575621\n"}, {"lng": "106.58792", "lat": "29.575621"}]}
\ No newline at end of file
{"name": "gpsLine", "GPSLine": [{"lng": "106.599021", "lat": "29.58118\n"}, {"lng": "106.599021", "lat": "29.58118\n"}, {"lng": "106.598375", "lat": "29.580248\n"}, {"lng": "106.598233", "lat": "29.580251\n"}, {"lng": "106.598086", "lat": "29.580311\n"}, {"lng": "106.598025", "lat": "29.580328\n"}, {"lng": "106.597785", "lat": "29.580461\n"}, {"lng": "106.597433", "lat": "29.580715\n"}, {"lng": "106.59717", "lat": "29.580863\n"}, {"lng": "106.596965", "lat": "29.580923\n"}, {"lng": "106.596686", "lat": "29.580965\n"}, {"lng": "106.596516", "lat": "29.580965\n"}, {"lng": "106.596516", "lat": "29.580965\n"}, {"lng": "106.596293", "lat": "29.580956\n"}, {"lng": "106.59627", "lat": "29.58092\n"}, {"lng": "106.59626", "lat": "29.580863\n"}, {"lng": "106.596256", "lat": "29.580786\n"}, {"lng": "106.596293", "lat": "29.58042\n"}, {"lng": "106.59639", "lat": "29.579695\n"}, {"lng": "106.59648", "lat": "29.579493\n"}, {"lng": "106.596866", "lat": "29.57891\n"}, {"lng": "106.5976", "lat": "29.577858\n"}, {"lng": "106.597736", "lat": "29.577583\n"}, {"lng": "106.597738", "lat": "29.577518\n"}, {"lng": "106.597733", "lat": "29.57715\n"}, {"lng": "106.597666", "lat": "29.576971\n"}, {"lng": "106.597101", "lat": "29.575966\n"}, {"lng": "106.597026", "lat": "29.575928\n"}, {"lng": "106.596896", "lat": "29.575918\n"}, {"lng": "106.596751", "lat": "29.575935\n"}, {"lng": "106.596655", "lat": "29.575958\n"}, {"lng": "106.596513", "lat": "29.575993\n"}, {"lng": "106.596305", "lat": "29.576015\n"}, {"lng": "106.59592", "lat": "29.576016\n"}, {"lng": "106.595193", "lat": "29.575835\n"}, {"lng": "106.594995", "lat": "29.575755\n"}, {"lng": "106.594668", "lat": "29.5756\n"}, {"lng": "106.594515", "lat": "29.575545\n"}, {"lng": "106.594465", "lat": "29.575485\n"}, {"lng": "106.59446", "lat": "29.575448\n"}, {"lng": "106.59446", "lat": "29.575385\n"}, {"lng": "106.594466", "lat": "29.575341\n"}, {"lng": "106.594483", "lat": "29.575148\n"}, {"lng": "106.594466", "lat": "29.575131\n"}, {"lng": "106.594435", "lat": "29.575125\n"}, {"lng": "106.594396", "lat": "29.575126\n"}, {"lng": "106.59435", "lat": "29.575135\n"}, {"lng": "106.594291", "lat": "29.57515\n"}, {"lng": "106.593961", "lat": "29.575268\n"}, {"lng": "106.593655", "lat": "29.57541\n"}, {"lng": "106.593603", "lat": "29.57545\n"}, {"lng": "106.593445", "lat": "29.575618\n"}, {"lng": "106.593338", "lat": "29.57573\n"}, {"lng": "106.593236", "lat": "29.57578\n"}, {"lng": "106.592581", "lat": "29.576023\n"}, {"lng": "106.592536", "lat": "29.576076\n"}, {"lng": "106.592508", "lat": "29.576135\n"}, {"lng": "106.592493", "lat": "29.576208\n"}, {"lng": "106.592476", "lat": "29.576285\n"}, {"lng": "106.592346", "lat": "29.57666\n"}, {"lng": "106.59228", "lat": "29.576743\n"}, {"lng": "106.59219", "lat": "29.576816\n"}, {"lng": "106.591973", "lat": "29.576921\n"}, {"lng": "106.591771", "lat": "29.576991\n"}, {"lng": "106.591618", "lat": "29.576983\n"}, {"lng": "106.591565", "lat": "29.576953\n"}, {"lng": "106.591531", "lat": "29.576908\n"}, {"lng": "106.591508", "lat": "29.576856\n"}, {"lng": "106.59149", "lat": "29.57673\n"}, {"lng": "106.591485", "lat": "29.576293\n"}, {"lng": "106.59144", "lat": "29.576208\n"}, {"lng": "106.591411", "lat": "29.576081\n"}, {"lng": "106.59126", "lat": "29.575768\n"}, {"lng": "106.591028", "lat": "29.575528\n"}, {"lng": "106.590843", "lat": "29.57537\n"}, {"lng": "106.590715", "lat": "29.575391\n"}, {"lng": "106.59059", "lat": "29.575416\n"}, {"lng": "106.590465", "lat": "29.575441\n"}, {"lng": "106.590355", "lat": "29.575483\n"}, {"lng": "106.589895", "lat": "29.575628\n"}, {"lng": "106.589628", "lat": "29.575645\n"}, {"lng": "106.589491", "lat": "29.575616\n"}, {"lng": "106.589208", "lat": "29.575585\n"}, {"lng": "106.588721", "lat": "29.575371\n"}, {"lng": "106.588195", "lat": "29.575006\n"}, {"lng": "106.588145", "lat": "29.575001\n"}, {"lng": "106.58803", "lat": "29.57503\n"}, {"lng": "106.587971", "lat": "29.575073\n"}, {"lng": "106.587826", "lat": "29.575193\n"}, {"lng": "106.58736", "lat": "29.575653\n"}, {"lng": "106.58735", "lat": "29.575705\n"}, {"lng": "106.587358", "lat": "29.575745\n"}, {"lng": "106.58738", "lat": "29.575771\n"}, {"lng": "106.587411", "lat": "29.575786\n"}, {"lng": "106.587455", "lat": "29.575795\n"}, {"lng": "106.587495", "lat": "29.575796\n"}, {"lng": "106.587571", "lat": "29.575791\n"}, {"lng": "106.587713", "lat": "29.575773\n"}, {"lng": "106.58799", "lat": "29.575745\n"}, {"lng": "106.58799", "lat": "29.575745\n"}, {"lng": "106.58799", "lat": "29.575745\n"}]}
\ No newline at end of file
{"name": "gpsLine", "GPSLine": [{"lng": "106.484645", "lat": "29.519863\n"}, {"lng": "106.484645", "lat": "29.519863\n"}, {"lng": "106.484645", "lat": "29.519863\n"}, {"lng": "106.484645", "lat": "29.519863\n"}, {"lng": "106.484645", "lat": "29.519863\n"}, {"lng": "106.484645", "lat": "29.519863\n"}, {"lng": "106.484645", "lat": "29.519863\n"}, {"lng": "106.484645", "lat": "29.519863\n"}, {"lng": "106.484645", "lat": "29.519863\n"}, {"lng": "106.484645", "lat": "29.519863\n"}, {"lng": "106.498255", "lat": "29.51929\n"}, {"lng": "106.49839", "lat": "29.519245\n"}, {"lng": "106.498496", "lat": "29.519196\n"}, {"lng": "106.498686", "lat": "29.519095\n"}, {"lng": "106.498731", "lat": "29.519106\n"}, {"lng": "106.49879", "lat": "29.519121\n"}, {"lng": "106.498851", "lat": "29.519141\n"}, {"lng": "106.499026", "lat": "29.519215\n"}, {"lng": "106.499136", "lat": "29.519258\n"}, {"lng": "106.49923", "lat": "29.519415\n"}, {"lng": "106.499251", "lat": "29.519476\n"}, {"lng": "106.49952", "lat": "29.519686\n"}, {"lng": "106.500043", "lat": "29.520288\n"}, {"lng": "106.500173", "lat": "29.52039\n"}, {"lng": "106.500246", "lat": "29.520403\n"}, {"lng": "106.501561", "lat": "29.521333\n"}, {"lng": "106.502366", "lat": "29.52206\n"}, {"lng": "106.502606", "lat": "29.522266\n"}, {"lng": "106.502881", "lat": "29.522416\n"}, {"lng": "106.503096", "lat": "29.52248\n"}, {"lng": "106.50344", "lat": "29.522505\n"}, {"lng": "106.503656", "lat": "29.522483\n"}, {"lng": "106.50396", "lat": "29.52239\n"}, {"lng": "106.50414", "lat": "29.52232\n"}, {"lng": "106.504521", "lat": "29.522191\n"}, {"lng": "106.504866", "lat": "29.522156\n"}, {"lng": "106.506228", "lat": "29.52215\n"}, {"lng": "106.506621", "lat": "29.522256\n"}, {"lng": "106.507173", "lat": "29.522475\n"}, {"lng": "106.507423", "lat": "29.52261\n"}, {"lng": "106.507683", "lat": "29.522835\n"}, {"lng": "106.50822", "lat": "29.523151\n"}, {"lng": "106.509468", "lat": "29.52365\n"}, {"lng": "106.5102", "lat": "29.523761\n"}, {"lng": "106.511401", "lat": "29.523706\n"}, {"lng": "106.516661", "lat": "29.523321\n"}, {"lng": "106.520538", "lat": "29.523081\n"}, {"lng": "106.525145", "lat": "29.523038\n"}, {"lng": "106.530208", "lat": "29.52304\n"}, {"lng": "106.534585", "lat": "29.523023\n"}, {"lng": "106.536085", "lat": "29.522871\n"}, {"lng": "106.53838", "lat": "29.522366\n"}, {"lng": "106.538986", "lat": "29.522248\n"}, {"lng": "106.53921", "lat": "29.52228\n"}, {"lng": "106.539255", "lat": "29.522316\n"}, {"lng": "106.539286", "lat": "29.522361\n"}, {"lng": "106.539286", "lat": "29.52241\n"}, {"lng": "106.539268", "lat": "29.52246\n"}, {"lng": "106.539235", "lat": "29.522498\n"}, {"lng": "106.539196", "lat": "29.522511\n"}, {"lng": "106.539136", "lat": "29.522541\n"}, {"lng": "106.538613", "lat": "29.522701\n"}, {"lng": "106.537718", "lat": "29.522915\n"}, {"lng": "106.536041", "lat": "29.523331\n"}, {"lng": "106.535086", "lat": "29.523863\n"}, {"lng": "106.535016", "lat": "29.52399\n"}, {"lng": "106.535003", "lat": "29.524065\n"}, {"lng": "106.535001", "lat": "29.52414\n"}, {"lng": "106.535031", "lat": "29.524296\n"}, {"lng": "106.53507", "lat": "29.524366\n"}, {"lng": "106.535133", "lat": "29.524436\n"}, {"lng": "106.535296", "lat": "29.52455\n"}, {"lng": "106.535813", "lat": "29.524886\n"}, {"lng": "106.53595", "lat": "29.525051\n"}, {"lng": "106.535985", "lat": "29.525153\n"}, {"lng": "106.53598", "lat": "29.525195\n"}, {"lng": "106.53596", "lat": "29.525226\n"}, {"lng": "106.535921", "lat": "29.525256\n"}, {"lng": "106.535871", "lat": "29.52527\n"}, {"lng": "106.53581", "lat": "29.52526\n"}, {"lng": "106.535745", "lat": "29.525235\n"}, {"lng": "106.535548", "lat": "29.525113\n"}, {"lng": "106.535295", "lat": "29.52499\n"}, {"lng": "106.534181", "lat": "29.524505\n"}, {"lng": "106.534015", "lat": "29.524511\n"}, {"lng": "106.533921", "lat": "29.524543\n"}, {"lng": "106.533768", "lat": "29.524628\n"}, {"lng": "106.533665", "lat": "29.524743\n"}, {"lng": "106.53361", "lat": "29.524888\n"}, {"lng": "106.533585", "lat": "29.525051\n"}, {"lng": "106.533611", "lat": "29.525138\n"}, {"lng": "106.533673", "lat": "29.525208\n"}, {"lng": "106.533736", "lat": "29.525261\n"}, {"lng": "106.533976", "lat": "29.525435\n"}, {"lng": "106.534098", "lat": "29.525563\n"}, {"lng": "106.5341", "lat": "29.525606\n"}, {"lng": "106.534081", "lat": "29.525646\n"}, {"lng": "106.534018", "lat": "29.525793\n"}, {"lng": "106.534031", "lat": "29.525828\n"}, {"lng": "106.534056", "lat": "29.525858\n"}, {"lng": "106.534106", "lat": "29.525928\n"}, {"lng": "106.534096", "lat": "29.525956\n"}, {"lng": "106.534076", "lat": "29.525965\n"}, {"lng": "106.53405", "lat": "29.525968\n"}, {"lng": "106.53402", "lat": "29.525961\n"}, {"lng": "106.533986", "lat": "29.525936\n"}, {"lng": "106.533455", "lat": "29.525546\n"}, {"lng": "106.5332", "lat": "29.525413\n"}, {"lng": "106.532426", "lat": "29.525155\n"}, {"lng": "106.532353", "lat": "29.525163\n"}, {"lng": "106.53229", "lat": "29.5252\n"}, {"lng": "106.532241", "lat": "29.525253\n"}, {"lng": "106.532198", "lat": "29.525315\n"}, {"lng": "106.531586", "lat": "29.5269\n"}, {"lng": "106.531363", "lat": "29.52778\n"}, {"lng": "106.531326", "lat": "29.528746\n"}, {"lng": "106.531458", "lat": "29.529691\n"}, {"lng": "106.532046", "lat": "29.53156\n"}, {"lng": "106.53357", "lat": "29.535643\n"}, {"lng": "106.53374", "lat": "29.535928\n"}, {"lng": "106.534836", "lat": "29.5374\n"}, {"lng": "106.536893", "lat": "29.539351\n"}, {"lng": "106.538446", "lat": "29.540533\n"}, {"lng": "106.539238", "lat": "29.540896\n"}, {"lng": "106.540116", "lat": "29.541156\n"}, {"lng": "106.540788", "lat": "29.541235\n"}, {"lng": "106.541853", "lat": "29.541261\n"}, {"lng": "106.54615", "lat": "29.540981\n"}, {"lng": "106.549441", "lat": "29.540926\n"}, {"lng": "106.550593", "lat": "29.54118\n"}, {"lng": "106.551516", "lat": "29.541558\n"}, {"lng": "106.554295", "lat": "29.542755\n"}, {"lng": "106.555916", "lat": "29.543063\n"}, {"lng": "106.556861", "lat": "29.543186\n"}, {"lng": "106.560363", "lat": "29.54361\n"}, {"lng": "106.561361", "lat": "29.543498\n"}, {"lng": "106.562058", "lat": "29.543373\n"}, {"lng": "106.563295", "lat": "29.543205\n"}, {"lng": "106.564865", "lat": "29.543231\n"}, {"lng": "106.567205", "lat": "29.543681\n"}, {"lng": "106.571403", "lat": "29.544415\n"}, {"lng": "106.574481", "lat": "29.544786\n"}, {"lng": "106.574908", "lat": "29.544871\n"}, {"lng": "106.574951", "lat": "29.544865\n"}, {"lng": "106.574981", "lat": "29.54487\n"}, {"lng": "106.575065", "lat": "29.544883\n"}, {"lng": "106.575368", "lat": "29.544971\n"}, {"lng": "106.575446", "lat": "29.545\n"}, {"lng": "106.57792", "lat": "29.545733\n"}, {"lng": "106.57879", "lat": "29.545958\n"}, {"lng": "106.5819", "lat": "29.546685\n"}, {"lng": "106.582638", "lat": "29.546916\n"}, {"lng": "106.583336", "lat": "29.547221\n"}, {"lng": "106.584188", "lat": "29.5478\n"}, {"lng": "106.584356", "lat": "29.547933\n"}, {"lng": "106.584933", "lat": "29.548418\n"}, {"lng": "106.585056", "lat": "29.548348\n"}, {"lng": "106.585081", "lat": "29.548358\n"}, {"lng": "106.585181", "lat": "29.548448\n"}, {"lng": "106.58525", "lat": "29.54856\n"}, {"lng": "106.58583", "lat": "29.549613\n"}, {"lng": "106.586525", "lat": "29.551088\n"}, {"lng": "106.588258", "lat": "29.554658\n"}, {"lng": "106.589325", "lat": "29.556971\n"}, {"lng": "106.590013", "lat": "29.558385\n"}, {"lng": "106.590681", "lat": "29.560546\n"}, {"lng": "106.59077", "lat": "29.561608\n"}, {"lng": "106.590806", "lat": "29.563003\n"}, {"lng": "106.590851", "lat": "29.563895\n"}, {"lng": "106.590766", "lat": "29.566858\n"}, {"lng": "106.590591", "lat": "29.568281\n"}, {"lng": "106.589873", "lat": "29.572468\n"}, {"lng": "106.589526", "lat": "29.573176\n"}, {"lng": "106.588891", "lat": "29.574146\n"}, {"lng": "106.588333", "lat": "29.574741\n"}, {"lng": "106.587363", "lat": "29.575703\n"}, {"lng": "106.587371", "lat": "29.575726\n"}, {"lng": "106.58739", "lat": "29.575745\n"}, {"lng": "106.587408", "lat": "29.575756\n"}, {"lng": "106.587425", "lat": "29.575766\n"}, {"lng": "106.587478", "lat": "29.575786\n"}, {"lng": "106.587505", "lat": "29.575788\n"}, {"lng": "106.587645", "lat": "29.57578\n"}, {"lng": "106.58777", "lat": "29.575776\n"}, {"lng": "106.587808", "lat": "29.575805\n"}, {"lng": "106.587808", "lat": "29.575805\n"}, {"lng": "106.587808", "lat": "29.575805\n"}, {"lng": "106.587808", "lat": "29.575805\n"}]}
\ No newline at end of file
{"time": {"dateTime": "2020-05-15 11:41:18", "date": "2020-05-15", "time": "11:41:18"}, "curDayTravel": {"todayTotalMilleage": 0, "todayTotalOil": 0, "todayTotalTime": 0, "theMilleage": 0, "theOil": 0, "theTime": 0}, "travelData": {"totalMilleage": 262817, "totalOil": 24827, "totalTime": 15522}, "event": {"threeRapid": {"totalRapidlyAccelerate": 14, "totalSharpSlowdown": 13, "totalSharpTurn": 13}}} {"time": {"dateTime": "2020-05-18 11:54:49", "date": "2020-05-18", "time": "11:54:49"}, "curDayTravel": {"todayTotalMilleage": 20920, "todayTotalOil": 2020, "todayTotalTime": 1260, "theMilleage": 1000, "theOil": 100, "theTime": 60}, "travelData": {"totalMilleage": 283737, "totalOil": 26847, "totalTime": 16782}, "event": {"threeRapid": {"totalRapidlyAccelerate": 14, "totalSharpSlowdown": 13, "totalSharpTurn": 13}}}
\ No newline at end of file \ No newline at end of file
#encoding:utf-8
from lib.protocol.m300.M300Base import M300Base
'''
定义报警协议类
'''
class Alarm_protocol_m300(M300Base):
def __init__(self,waterCode = 3,DEV_ID = "M121501010001",encryptionType=0,alarmType="0001",data = {}):
super().__init__() # 不执行该方法,无法使用父类里面定义的属性
self.waterCode = waterCode #消息流水号
self.DEV_ID = DEV_ID #设备Id
self.encryptionType = encryptionType # 消息属性里面的是否加密字段
self.alarmType = alarmType
if len(data) == 0:
self.GPSPkg = "14031b0e22160265b86206ed8c7002029402290000006e00016802988100000000000000"
self.GSMPkg = "0000000000"
self.CANStatus = "ffffffffffffffffffff00000000000000000000"
else:
pass
#################################################
# 生成消息
#################################################
def generateMsg(self):
msg = self.IDENTIFY
FUNID = "0021" #功能id
waterCode = self.int2hexStringByBytes(self.waterCode,2) #消息流水号
DEV_ID = self.devid2hexString(self.DEV_ID) #设备id
msgBody = self.getMsgBody() # 消息体
msgLen = int(len(msgBody) / 2)
property = self.getMsgProperty(msgBodyLen=msgLen,encryptionType=self.encryptionType)
checkCode = self.getCheckCode(FUNID + waterCode + DEV_ID + property + msgBody)
msg = msg + FUNID + waterCode + DEV_ID + property + msgBody + checkCode + self.IDENTIFY
return msg
#################################################
# 获取消息体
#################################################
def getMsgBody(self):
GPSPkg = self.GPSPkg
GSMPkg = self.GSMPkg
CANStatus = self.CANStatus
alarmContent = ""
if self.alarmType == "0001": #汽车点火上报
extra = ""
alarmContent = "0001" + self.int2hexStringByBytes(int(len(extra)/2)) + extra
elif self.alarmType == "0002": #汽车熄火上报
extra = ""
alarmContent = "0002" + self.int2hexStringByBytes(int(len(extra)/2)) + extra
return GPSPkg + GSMPkg + CANStatus + alarmContent
if __name__ == "__main__":
print(Alarm_protocol_m300().generateMsg())
...@@ -29,6 +29,17 @@ class GPS_protocol_m300(M300Base): ...@@ -29,6 +29,17 @@ class GPS_protocol_m300(M300Base):
self.tripMark = tripMark #驾驶循环标签 self.tripMark = tripMark #驾驶循环标签
self.reserve = "0000000000" #保留字段 #设备Id self.reserve = "0000000000" #保留字段 #设备Id
def setLatitude(self,data):
self.latitude = data
def setLongitude(self,data):
self.longitude = data
def setDirection(self,data):
self.direction = data
def setDateInfo(self,data):
self.dateInfo = data
################################################# #################################################
# 生成消息 # 生成消息
...@@ -89,3 +100,4 @@ class GPS_protocol_m300(M300Base): ...@@ -89,3 +100,4 @@ class GPS_protocol_m300(M300Base):
if __name__ == "__main__": if __name__ == "__main__":
print(GPS_protocol_m300().generateMsg()) print(GPS_protocol_m300().generateMsg())
print(GPS_protocol_m300().getMsgBody())
...@@ -62,6 +62,28 @@ class OBDCAN_protocol_m300(M300Base): ...@@ -62,6 +62,28 @@ class OBDCAN_protocol_m300(M300Base):
self.retail = "00000000000000000000" self.retail = "00000000000000000000"
self.tripMark = tripMark #驾驶循环标签 self.tripMark = tripMark #驾驶循环标签
def setTimeInfo(self,data):
self.timeInfo = data
def setAccstatus(self,data):
if data == 1:
return self.safeStatus | 1
elif data == 0:
return self.safeStatus & ~1
def setEngineSpeed(self,data):
self.engineSpeed = data
def setSpeed(self,data):
self.speed = data
def setDashboardTotailMilleage(self,data):
self.dashboardTotailMilleage = data
def setTotalMilleage(self,data):
self.totalMilleage = data
def setTotalOil(self,data):
self.totalOil = data
def setCarTotalRunTime(self,data):
self.carTotalRunTime = data
################################################# #################################################
# 生成消息 # 生成消息
......
#encoding:utf-8
from lib.protocol.m300.M300Base import M300Base
'''
定义报警事件需要的数据包
'''
class AlarmEventData(M300Base):
def __init__(self):
pass
########################################################
# 获取CAN状态数据包
########################################################
def getCANStatusData(self,safeStatus=0,doorStatus=0,lockStatus=0,windowStatus=0,lightStatus=0,swichStatusA=0,swichStatusB=0):
statusMask = "ffffffffffffffffffff" # 状态掩码
safeStatus = self.int2hexStringByBytes(safeStatus) # 安全状态
doorStatus = self.int2hexStringByBytes(doorStatus) # 门状态
lockStatus = self.int2hexStringByBytes(lockStatus) # 锁状态
windowStatus = self.int2hexStringByBytes(windowStatus) # 窗户状态
lightStatus = self.int2hexStringByBytes(lightStatus) # 灯状态
swichStatusA = self.int2hexStringByBytes(swichStatusA) # 开关状态A
swichStatusB = self.int2hexStringByBytes(swichStatusB) # 开关状态B
retain1 = "00" # 预留
retain2 = "00" # 预留
retain3 = "00" # 预留
data = statusMask + safeStatus + doorStatus + lockStatus + windowStatus + lightStatus
data = data + swichStatusA + swichStatusB + retain1 + retain2 + retain3
return data
if __name__ == "__main__":
print(AlarmEventData().getCANStatusData())
\ No newline at end of file
...@@ -208,6 +208,14 @@ class EventReport_protocol(ProtocolBase): ...@@ -208,6 +208,14 @@ class EventReport_protocol(ProtocolBase):
##################################################### #####################################################
def getExtraData_GUI(self,eventData): def getExtraData_GUI(self,eventData):
data = "" data = ""
if ("0001" in eventData.keys()): # 终端插入报警
eventObj = EventClass()
theData = eventObj.terminalInsertionAlarmExtraInfo()
data = data + "0001" + self.int2hexStringByBytes(int((len(theData) / 2)), 2) + theData
if ("0002" in eventData.keys()): # 终端拔出报警
eventObj = EventClass()
theData = eventObj.terminalInsertionAlarmExtraInfo()
data = data + "0002" + self.int2hexStringByBytes(int((len(theData) / 2)), 2) + theData
if("0003" in eventData.keys()): #汽车电瓶低电压报警 if("0003" in eventData.keys()): #汽车电瓶低电压报警
theData = "" theData = ""
data = data + "0003" + self.int2hexStringByBytes(int((len(theData) / 2)),2) + theData data = data + "0003" + self.int2hexStringByBytes(int((len(theData) / 2)),2) + theData
......
...@@ -13,7 +13,7 @@ from lib.protocol.report.ProtocolBase import ProtocolBase ...@@ -13,7 +13,7 @@ from lib.protocol.report.ProtocolBase import ProtocolBase
''' '''
class GPSReport_protocol(ProtocolBase): class GPSReport_protocol(ProtocolBase):
def __init__(self,msgCount = 1,WATER_CODE = 1000,DEV_ID = "M121501010001",UTCTime="2020-01-09 18:19:38",latitude=40.22077,longitude=116.23128,speed=60,directionAngle=80.8,elevation=2999.9,positionStar=3,Pdop=0.3,Hdop=0.4,Vdop=0.5,statusBit=175,valtage=36.9,OBDSpeed=60.9,engineSpeed=3000,GPSTotalMileage=12800,totalOil=100000,totalTime=2020002,GPSTimestamp=1578565178): def __init__(self,msgCount = 1,WATER_CODE = 1000,DEV_ID = "M121501010001",UTCTime="2020-01-09 18:19:38",latitude=40.22077,longitude=116.23128,speed=60,directionAngle=80.8,elevation=2999.9,positionStar=3,Pdop=0.3,Hdop=0.4,Vdop=0.5,statusBit=9,valtage=36.9,OBDSpeed=60.9,engineSpeed=3000,GPSTotalMileage=12800,totalOil=100000,totalTime=2020002,GPSTimestamp=1578565178):
super().__init__() super().__init__()
self.msgCount = int(msgCount) # 设置默认要发送的GPS数据包个数 self.msgCount = int(msgCount) # 设置默认要发送的GPS数据包个数
...@@ -320,15 +320,14 @@ class GPSReport_protocol(ProtocolBase): ...@@ -320,15 +320,14 @@ class GPSReport_protocol(ProtocolBase):
# Bit1:当前统计里程模式: # Bit1:当前统计里程模式:
# 0-GPS统计里程;1-OBD统计里程; # 0-GPS统计里程;1-OBD统计里程;
# Bit0:指示当前车辆点熄火状态:0-熄火,1-点火 # Bit0:指示当前车辆点熄火状态:0-熄火,1-点火
# (按照低位在前高位在后的方式去计算)
##################################################### #####################################################
def getStatusBit(self,num): def getStatusBit(self,num):
fireStatus = 0 #点火状态,128表示点火,0表示熄火 fireStatus = 1 #点火状态,1表示点火,0表示熄火
mileageWay = 64 #0里程统计模式,表示GPS里程,64表示OBD里程 mileageWay = 0 #0里程统计模式,0表示GPS里程,4表示OBD里程
locationWay = 32 #定位类型,32表示2D定位,48表示3D定位 locationWay = 8 #定位类型,8表示2D定位,12表示3D定位
locationMode = 0 #定位模式,0表示自动模式,2表示单GPS模式,4表示单BDS模式,6表示GPS+BDS双模式 locationMode = 0 #定位模式,0表示自动模式,16表示单GPS模式,32表示单BDS模式,48表示GPS+BDS双模式
isLocationValid = 1 #当前定位是否有效,1表示有效,0表示无效 isLocationValid = 128 #当前定位是否有效,128表示有效,0表示无效
# num = fireStatus + mileageWay + locationWay + locationMode + isLocationValid
statusbitHex = self.int2hexString(num) statusbitHex = self.int2hexString(num)
return statusbitHex return statusbitHex
...@@ -459,6 +458,13 @@ class GPSReport_protocol(ProtocolBase): ...@@ -459,6 +458,13 @@ class GPSReport_protocol(ProtocolBase):
# 设置状态字节 # 设置状态字节
def setStatusBit(self,statusBit): def setStatusBit(self,statusBit):
self.statusBit = int(statusBit) self.statusBit = int(statusBit)
# 设置Gps 有效或者无效;0:无效 1:有效
def setGpsValid(self,data):
if data == 1:
self.statusBit = self.statusBit | 1 << 7
elif data == 0:
self.statusBit = self.statusBit & ~(1 << 7)
# 设置电压值 # 设置电压值
def setValtage(self,valtage): def setValtage(self,valtage):
......
...@@ -34,7 +34,7 @@ port = 9008 ...@@ -34,7 +34,7 @@ port = 9008
# host = "10.100.5.251" # host = "10.100.5.251"
# port = 9008 # port = 9008
# msg = GPSReport_protocol().generateGpsMsg() #GPS消息数据 msg = GPSReport_protocol().generateGpsMsg() #GPS消息数据
# msg = OBDReport_protocol().generateOBDReportMsg() #OBD终端上报数据 # msg = OBDReport_protocol().generateOBDReportMsg() #OBD终端上报数据
# msg = OBDReport_CAN_protocol().generateOBDReportCANMsg() #OBD终端上报CAN数据 # msg = OBDReport_CAN_protocol().generateOBDReportCANMsg() #OBD终端上报CAN数据
# msg = HeartBeatReport_protocol().generateHeartBeatMsg() #终端上报心跳协议 # msg = HeartBeatReport_protocol().generateHeartBeatMsg() #终端上报心跳协议
...@@ -48,7 +48,7 @@ port = 9008 ...@@ -48,7 +48,7 @@ port = 9008
# msg = CommonReport_protocol().generateCommonMsg() #通用应答消息 # msg = CommonReport_protocol().generateCommonMsg() #通用应答消息
# msg = VoltageDataReport_protocol().generateMsg() #终端上报电瓶电压采样数据 # msg = VoltageDataReport_protocol().generateMsg() #终端上报电瓶电压采样数据
# msg = TroubleCode_protocol().generateMsg() #终端上报故障码数据包 # msg = TroubleCode_protocol().generateMsg() #终端上报故障码数据包
msg = SensorSampling_protocol().generateMsg() #1.2.37终端上报Sensor采样数据 # msg = SensorSampling_protocol().generateMsg() #1.2.37终端上报Sensor采样数据
print(msg) print(msg)
BUF_SIZE = 1024 BUF_SIZE = 1024
......
#coding:utf-8
##################################################
# 定义M300 车机行驶过程中产生的数据类
##################################################
import datetime
import json
import time
class M300SimulaterDataService():
def __init__(self,path="/data/m300Tools/carData/",fileName="default.json"):
self.data = {}
self.path = path #保存车机数据文件地址
self.fileName = fileName #保存车机数据文件
def setPath(self,data):
self.path = data
def setFileName(self,data):
self.fileName = data
def setData(self,data):
self.data = data
####################################################
# 生成一个默认数据模板
####################################################
def genDataTemplate(self):
data = {}
timeStamp = time.time()
timeArray = time.localtime(timeStamp)
data["time"] = {} #定义时间数据项
data["time"]["dateTime"] = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
data["time"]["date"] = time.strftime("%Y-%m-%d", timeArray)
data["time"]["time"] = time.strftime("%H:%M:%S", timeArray)
data["curDayTravel"] = {} #定义当天行驶数据项
data["curDayTravel"]["todayTotalMilleage"] = 0 #今日行驶总里程
data["curDayTravel"]["todayTotalOil"] = 0 #今日行驶总油耗
data["curDayTravel"]["todayTotalTime"] = 0 #今日行驶总时间
data["curDayTravel"]["theMilleage"] = 0 #本次行驶总里程
data["curDayTravel"]["theOil"] = 0 #本次行驶总油耗
data["curDayTravel"]["theTime"] = 0 #本次行驶总时间
data["travelData"] = {} #定义所有行驶数据
data["travelData"]["totalMilleage"] = 0 #行驶总里程
data["travelData"]["totalOil"] = 0 #行驶总油耗
data["travelData"]["totalTime"] = 0 #行驶总时间
data["event"] = {}
data["event"]["threeRapid"] = {} #急加速,急减速,急转弯基本数据
data["event"]["threeRapid"]["totalRapidlyAccelerate"] = 0 #急加速总次数
data["event"]["threeRapid"]["totalSharpSlowdown"] = 0 #急减速总次数
data["event"]["threeRapid"]["totalSharpTurn"] = 0 #急转弯总次数
return data
####################################################
# 修复默认数据模板
# 用于在升级模拟器的时候,对增加的字段进行初始化
####################################################
def fixDataTemplate(self,data):
if not "event" in data:
data["event"] = {}
data["event"]["threeRapid"] = {}
data["event"]["threeRapid"]["totalRapidlyAccelerate"] = 0 # 急加速总次数
data["event"]["threeRapid"]["totalSharpSlowdown"] = 0 # 急减速总次数
data["event"]["threeRapid"]["totalSharpTurn"] = 0 # 急转弯总次数
if not "threeRapid" in data["event"]:
data["event"]["threeRapid"] = {}
data["event"]["threeRapid"]["totalRapidlyAccelerate"] = 0 #急加速总次数
data["event"]["threeRapid"]["totalSharpSlowdown"] = 0 #急减速总次数
data["event"]["threeRapid"]["totalSharpTurn"] = 0 #急转弯总次数
return data
#设今日行驶总里程,同时写入文件
def setTodayTotalMilleage(self,data):
self.data["curDayTravel"]["todayTotalMilleage"] = data
self.writeToFile(self.path + self.fileName,self.data)
#设今日行驶总油耗,同时写入文件
def setTodayTodayTotalOil(self,data):
self.data["curDayTravel"]["todayTotalOil"] = data
self.writeToFile(self.path + self.fileName,self.data)
#设今日行驶总时间,同时写入文件
def setTodayTodayTotalTime(self,data):
self.data["curDayTravel"]["todayTotalTime"] = data
self.writeToFile(self.path + self.fileName,self.data)
#设本次行驶总里程,同时写入文件
def setTheMilleage(self,data):
self.data["curDayTravel"]["theMilleage"] = data
self.writeToFile(self.path + self.fileName,self.data)
#设本次行驶总油耗,同时写入文件
def setTheOil(self,data):
self.data["curDayTravel"]["theOil"] = data
self.writeToFile(self.path + self.fileName,self.data)
#设本次行驶总时间,同时写入文件
def setTheTime(self,data):
self.data["curDayTravel"]["theTime"] = data
self.writeToFile(self.path + self.fileName,self.data)
#设总里程,同时写入文件
def setTotalMilleage(self,data):
self.data["travelData"]["totalMilleage"] = data
self.writeToFile(self.path + self.fileName,self.data)
#设总油耗,同时写入文件
def setTotalOil(self,data):
self.data["travelData"]["totalOil"] = data
self.writeToFile(self.path + self.fileName,self.data)
#设总时间,同时写入文件
def setTotalTime(self,data):
self.data["travelData"]["totalTime"] = data
self.writeToFile(self.path + self.fileName,self.data)
#设置急加速总次数,同时写入文件
def setTotalRapidlyAccelerateCount(self,data):
if not "event" in data:
data["event"] = {}
if not "threeRapid" in data["event"]:
data["event"]["threeRapid"] = {}
data["event"]["threeRapid"]["totalRapidlyAccelerate"] = data
self.writeToFile(self.path + self.fileName, self.data)
# 设置急减速总次数,同时写入文件
def setTotalSharpSlowdown(self,data):
if not "event" in data:
data["event"] = {}
if not "threeRapid" in data["event"]:
data["event"]["threeRapid"] = {}
data["event"]["threeRapid"]["totalSharpSlowdown"] = data
self.writeToFile(self.path + self.fileName, self.data)
# 设置急转弯总次数,同时写入文件
def setTotalSharpTurn(self,data):
if not "event" in data:
data["event"] = {}
if not "threeRapid" in data["event"]:
data["event"]["threeRapid"] = {}
data["event"]["threeRapid"]["totalSharpTurn"] = data
self.writeToFile(self.path + self.fileName, self.data)
#设今日日期时间
def setDateTime2file(self,data):
self.data["time"]["dateTime"] = data
self.writeToFile(self.path + self.fileName,self.data)
#设今日日期
def setDate2file(self,data):
self.data["time"]["date"] = data
self.writeToFile(self.path + self.fileName,self.data)
#设今日时间
def setTime2file(self,data):
self.data["time"]["time"] = data
self.writeToFile(self.path + self.fileName,self.data)
####################################################
# 将数据持久化到已经设定好的文件
####################################################
def setData2file(self):
self.writeToFile(self.path + self.fileName,self.data)
####################################################
# 将数据写入文件
####################################################
def writeToFile(self,path,data):
with open(path,"w",encoding="utf-8") as fi:
data = json.dumps(data)
fi.write(data)
####################################################
# 从文件读取数据
####################################################
def readFromFile(self,path):
with open(path, "r", encoding="utf-8") as fi:
content = fi.read()
conJson = json.loads(content)
timeStamp = time.time()
timeArray = time.localtime(timeStamp)
dateTimeM = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
dateM = time.strftime("%Y-%m-%d", timeArray)
timeM = time.strftime("%H:%M:%S", timeArray)
if dateM == conJson["time"]["date"]:
pass
else: #如果不是当天日期,则将日期设置为当天
conJson["time"]["dateTime"] = dateTimeM
conJson["time"]["date"] = dateM
conJson["time"]["time"] = timeM
data["curDayTravel"]["todayTotalMilleage"] = 0 # 今日行驶总里程
data["curDayTravel"]["todayTotalOil"] = 0 # 今日行驶总油耗
data["curDayTravel"]["todayTotalTime"] = 0 # 今日行驶总时间
self.setTodayTotalMilleage(0)
self.setTodayTodayTotalOil(0)
self.setTodayTodayTotalTime(0)
self.setDateTime2file(dateTimeM)
self.setData2file(dateM)
self.setTime2file(timeM)
conJson = self.fixDataTemplate(conJson) #每次读取,都会对数据进行修复
self.data = conJson
if __name__ == "__main__":
print(M300SimulaterDataService().genDataTemplate())
data = M300SimulaterDataService().genDataTemplate()
M300SimulaterDataService().writeToFile("../../../data/m300Tools/carData/M202003060520.json",data)
\ No newline at end of file
#coding:utf-8
'''
M300车机模拟服务类
'''
import binascii
import json
import math
import os
import threading
import time
import traceback
from time import sleep
from lib.protocol.m300.GPS_protocol_m300 import GPS_protocol_m300
from lib.protocol.m300.OBDCAN_protocol_m300 import OBDCAN_protocol_m300
from lib.protocol.message.Location_msg import Location_msg
from lib.protocol.message.TerminalCommonMsgRes_msg import TerminalCommonMsgRes_msg
from lib.protocol.message.TerminalRegister_msg import TerminalRegister_msg
from lib.protocol.message.TerminalVersionInfo_msg import TerminalVersionInfo_msg
from lib.socket.service.MessageSimulaterDataService import MessageSimulaterDataService
from lib.socket.service.websocket_service import Websocket_service
class M300SimulaterService():
def __init__(self):
self.data = {} #用来接收模拟器传过来的参数
self.carData = {} #保存车辆行驶数据
self.carDataObj = None #管理车辆行驶数据对象
self.socket = None
self.sendDur = 5 #设置默认多久发一条消息
self.serviceStatus = 0 #服务状态,0表示未启动,1表示启动
self.websocket = None #网页与服务的通信socket
self.websocketId = "" #当前连接的webSocketId
self.timeout = 1 #socket的超时时间
self.gpsLine = [] #GPS 轨迹
self.gpsLineIndex = 0 #GPS 轨迹索引
self.travelStatus = 0 #0,表示未行驶,1表示开始行驶同时开启了接收消息服务,2表示值开启了接收消息的服务
self.carId = "" #车机号
self.sn = 0 #消息流水号
self.travelDirection = 0 #行驶方向,0表示正向行驶,1表示反向行驶
self.directAngle = 60 #汽车方向角
'''
为0表示正常发送,type为1表示数据写入本地
# 用来控制发送消息的方式(是正常发送,还是将发送的数据保存到本地,不发送)
'''
self.sendType = 0
# 定义要发送的obd数据
self.OBDdata = {"fireStatus":1,"ACCStatus":0,"engineSpeed":300,"speed":0,"meterMileage":6000,"totailMileage":600,"totalOilExpen":30,"totalRunTime":10}
# 定义初始的obd数据,与上面的OBD数据保持一致,主要用于汽车行驶过程中数据变化量的计算
self.OBDdataOri = {"fireStatus": 1, "ACCStatus": 0, "engineSpeed": 300, "speed": 0, "meterMileage": 6000,"totailMileage": 600, "totalOilExpen": 30, "totalRunTime": 10}
#设置套接字
def setSocket(self,data):
self.socket = data
def setSendDur(self,data):
self.sendDur = data
def setTimeout(self,data):
self.timeout = data
def setCarId(self,data):
self.carId = data
def setData(self,data):
self.data = data
def setWebsocketId(self):
sleep(0.1)
self.websocketId = self.websocket.getCurrentClientId()
def setWebsocket(self,data):
self.websocket = data
def setSn(self,data):
self.sn = data
def setCarData(self,data):
self.carData = data
def setServiceStatus(self,data):
self.serviceStatus = data
def setCarSpeed(self,data):
self.data["travelData"]["carSpeed"] = data
def setOilExpend(self,data):
self.data["travelData"]["oilExpend"] = data
def setSendDur(self,data):
self.sendDur = int(data)
def setSendType(self,data):
self.sendType = data
def getWebsocket(self):
return self.websocket
def getGpsLineIndex(self):
return self.gpsLineIndex
def getGpsLine(self):
return self.gpsLine
def getTravelStatus(self):
return self.travelStatus
def getSn(self):
return self.sn
def getCarData(self):
return self.carData
#######################################################
# type 为0表示正常发送,type为1表示数据写入本地
#######################################################
def sendMsg(self,msg):
if self.sendType == 0:
self.socket.setTimeOut(self.timeout)
self.socket.send(msg)
elif self.sendType == 1:
msgId = self.getMsgFunId(msg)
if msgId == "0021":
self.saveMsgLocal("event.txt",msg)
elif msgId == "0010":
self.saveMsgLocal("gps.txt",msg)
elif msgId == "0012":
self.saveMsgLocal("obd.txt",msg)
def revMsg(self):
self.socket.setTimeOut(self.timeout)
return self.socket.receive()
#发送消息,可指定消息的描述类型
def serviceSendMsg(self,msg,type): #type字段目前废掉没有实际意
self.sendMsg(msg)
type = self.getMsgFunId(msg)
self.websocket.sendMsgToClient(">>>>" + type + ":" + msg,self.websocketId)
def serviceSend(self):
while self.serviceStatus == 1:
gpsMsg = ""
OBDMsg = ""
if self.travelStatus == 0: #行驶服务未启动
latitude = self.gpsLine[self.gpsLineIndex]["lat"]
longitude = self.gpsLine[self.gpsLineIndex]["lng"]
gpsMsg = self.genGPSMsg(latitude,longitude)
elif self.travelStatus == 1: #行驶服务启动
if self.gpsLineIndex < len(self.gpsLine) and self.gpsLineIndex != -1: #如果正向行驶和反向行驶的轨迹点都没有跑完
OBDMsg = self.genOBDMsg(self.OBDdata["fireStatus"],self.OBDdata["ACCStatus"],self.OBDdata["engineSpeed"], \
self.OBDdata["speed"],self.OBDdata["meterMileage"],self.OBDdata["totailMileage"], \
self.OBDdata["totalOilExpen"],self.OBDdata["totalRunTime"])
self.OBDdata["engineSpeed"] = 3000
self.OBDdata["speed"] = int(self.data["travelData"]["carSpeed"])
self.OBDdata["meterMileage"] = self.OBDdata["meterMileage"] + int(self.sendDur * (self.OBDdata["speed"] * 1000 / 3600))
self.OBDdata["totailMileage"] = self.OBDdata["totailMileage"] + int(self.sendDur * (self.OBDdata["speed"] * 1000 / 3600))
oilExpend = int(self.data["travelData"]["oilExpend"])
self.OBDdata["totalOilExpen"] = self.OBDdata["totalOilExpen"] + int((self.sendDur * (self.OBDdata["speed"] * 1000 / 3600)) * (1000 / (oilExpend *1000)))
self.OBDdata["totalRunTime"] = self.OBDdata["totalRunTime"] + self.sendDur
latitude = self.gpsLine[self.gpsLineIndex]["lat"]
longitude = self.gpsLine[self.gpsLineIndex]["lng"]
# print("经度:" + str(longitude) + " 维度:" + str(latitude))
gpsMsg = self.genGPSMsg(latitude, longitude)
if self.travelDirection == 0:
self.gpsLineIndex = self.gpsLineIndex + 1 #正向行驶
else:
self.gpsLineIndex = self.gpsLineIndex - 1 #反向行驶
elif self.gpsLineIndex == len(self.gpsLine) or self.gpsLineIndex == -1: #如果反向行驶和反向行驶刚好跑完
if int(self.data["travelData"]["travelLoop"]) == 0: #没有设置循环行驶
self.gpsLineIndex = self.gpsLineIndex - 1
self.stopTravel()
self.websocket.sendMsgToClient("gps轨迹跑完,自动停止行驶!",self.websocketId)
else: #设置了循环行驶
if self.travelDirection == 0:
self.gpsLineIndex = self.gpsLineIndex - 1
self.travelDirection = 1
self.websocket.sendMsgToClient("gps轨迹正向行驶跑完,变换行驶方向......",self.websocketId)
else:
self.gpsLineIndex = self.gpsLineIndex + 1
self.travelDirection = 0
self.websocket.sendMsgToClient("gps轨迹反向行驶跑完,变换行驶方向......",self.websocketId)
OBDMsg = self.genOBDMsg(self.OBDdata["fireStatus"], self.OBDdata["ACCStatus"],self.OBDdata["engineSpeed"], \
self.OBDdata["speed"], self.OBDdata["meterMileage"],self.OBDdata["totailMileage"], \
self.OBDdata["totalOilExpen"], self.OBDdata["totalRunTime"])
self.OBDdata["engineSpeed"] = 3000
self.OBDdata["speed"] = int(self.data["travelData"]["carSpeed"])
self.OBDdata["meterMileage"] = self.OBDdata["meterMileage"] + int(self.sendDur * (self.OBDdata["speed"] * 1000 / 3600))
self.OBDdata["totailMileage"] = self.OBDdata["totailMileage"] + int(self.sendDur * (self.OBDdata["speed"] * 1000 / 3600))
oilExpend = int(self.data["travelData"]["oilExpend"])
self.OBDdata["totalOilExpen"] = self.OBDdata["totalOilExpen"] + int((self.sendDur * (self.OBDdata["speed"] * 1000 / 3600)) * (1000 / (oilExpend * 1000)))
self.OBDdata["totalRunTime"] = self.OBDdata["totalRunTime"] + self.sendDur
latitude = self.gpsLine[self.gpsLineIndex]["lat"]
longitude = self.gpsLine[self.gpsLineIndex]["lng"]
gpsMsg = self.genGPSMsg(latitude, longitude)
self.carDataObj.setTodayTotalMilleage(self.carData["curDayTravel"]["todayTotalMilleage"] + self.OBDdata["totailMileage"] - self.OBDdataOri["totailMileage"])
self.carDataObj.setTheMilleage(self.carData["curDayTravel"]["theMilleage"] + self.OBDdata["totailMileage"] -self.OBDdataOri["totailMileage"])
self.carDataObj.setTotalMilleage(self.carData["travelData"]["totalMilleage"] + self.OBDdata["totailMileage"] - self.OBDdataOri["totailMileage"])
temp = self.OBDdata["totailMileage"]
self.OBDdataOri["totailMileage"] = temp
self.carDataObj.setTodayTodayTotalOil(self.carData["curDayTravel"]["todayTotalOil"] + self.OBDdata["totalOilExpen"] - self.OBDdataOri["totalOilExpen"])
self.carDataObj.setTheOil(self.carData["curDayTravel"]["theOil"] + self.OBDdata["totalOilExpen"] - self.OBDdataOri["totalOilExpen"])
self.carDataObj.setTotalOil(self.carData["travelData"]["totalOil"] + self.OBDdata["totalOilExpen"] - self.OBDdataOri["totalOilExpen"])
self.OBDdataOri["totalOilExpen"] = self.OBDdata["totalOilExpen"]
self.carDataObj.setTodayTodayTotalTime(self.carData["curDayTravel"]["todayTotalTime"] + self.OBDdata["totalRunTime"] - self.OBDdataOri["totalRunTime"])
self.carDataObj.setTheTime(self.carData["curDayTravel"]["theTime"] + self.OBDdata["totalRunTime"] - self.OBDdataOri["totalRunTime"])
self.carDataObj.setTotalTime(self.carData["travelData"]["totalTime"] + self.OBDdata["totalRunTime"] - self.OBDdataOri["totalRunTime"])
self.OBDdataOri["totalRunTime"] = self.OBDdata["totalRunTime"]
if OBDMsg != "":
self.sendMsg(OBDMsg)
self.sn = self.sn + 1
type = self.getMsgFunId(OBDMsg)
info = type + ">>>>:" + OBDMsg
self.websocket.sendMsgToClient(info,self.websocketId)
if gpsMsg != "":
sleep(0.1)
self.sendMsg(gpsMsg)
self.sn = self.sn + 1
type = self.getMsgFunId(gpsMsg)
info = type + ">>>>:" + gpsMsg
self.websocket.sendMsgToClient(info,self.websocketId)
sleep(self.sendDur)
def serviceRev(self):
self.serviceStatus = 2 #2代表只启动了接收消息的进程,1代表了接收和发送都启动了
while self.serviceStatus != 0:
self.socket.setTimeOut(self.timeout)
d = self.revMsg()
d = str(binascii.b2a_hex(d))[2:][:-1]
type = self.getMsgFunId(d)
info = type + "<<<<:" + d
self.websocket.sendMsgToClient(info,self.websocketId)
self.doResponse(d)
#启动与页面交互的websockt服务
def websocketService(self):
self.websocket = Websocket_service()
self.websocket.setHost("0.0.0.0")
self.websocket.setPort(5005)
self.websocket.startWebsocketServer()
#启动定时发送消息和接收消息的服务
def startService(self):
self.serviceStatus = 1
t1 = threading.Thread(target=self.serviceSend,args=())
t1.start()
#启动与页面交互的websocket服务
def startWebsocketService(self):
if self.websocket == None:
t = threading.Thread(target=self.websocketService, args=())
t.start()
t2 = threading.Thread(target=self.serviceRev, args=())
t2.start()
t3 = threading.Thread(target=self.setWebsocketId, args=())
t3.start()
# 为websocket服务添加一个新的客户端连接
def addNewWebsocket(self):
t2 = threading.Thread(target=self.serviceRev, args=())
t2.start()
t3 = threading.Thread(target=self.setWebsocketId, args=())
t3.start()
#停止定时发送消息的服务
def stopService(self):
self.serviceStatus = 0
self.gpsLine = []
self.gpsLineIndex = 0
self.travelStatus = 0
def closeSocket(self):
try:
self.socket.close()
except BaseException as e:
# 打印异常信息
traceback.print_exc()
#停止websocket服务
def stopWebsocketService(self):
try:
self.websocket.close()
self.websocket = None
except BaseException as e:
# 打印异常信息
traceback.print_exc()
########################################################
# 开始行驶
########################################################
def startTravel(self):
self.travelStatus = 1
########################################################
# 停止行驶
########################################################
def stopTravel(self):
self.travelStatus = 0
self.serviceStatus = 0
#获取收到消息的功能id
def getMsgFunId(self,msg):
funId = msg[26:30]
return funId
#收到 某些类型的消息后执行回复操作
def doResponse(self,msg):
msgFunId = self.getMsgFunId(msg)
if msgFunId == "8205":
msg = Common_response(resId="8205").generateCommonMsg()
self.sendMsg(msg)
self.sn = self.sn + 1
type = self.getMsgFunId(msg)
self.websocket.sendMsgToClient(type + ">>>>设置GPSR通信参数应答:" + msg,self.websocketId)
elif msgFunId == "8206":
msg = Common_response(resId="8206").generateCommonMsg()
self.sendMsg(msg)
self.sn = self.sn + 1
type = self.getMsgFunId(msg)
self.websocket.sendMsgToClient(type + ">>>>设置车辆OBD适配信息应答:" + msg,self.websocketId)
elif msgFunId == "8300":
msg = Update_response().generateUpdateMsg()
self.sendMsg(msg)
self.sn = self.sn + 1
type = self.getMsgFunId(msg)
self.websocket.sendMsgToClient(type + ">>>>升级_平台通知终端远程升级应答:" + msg,self.websocketId)
#设置GPS轨迹
def setGpsLine(self,fileName):
with open("data/protocolTools/GPSLines/" + fileName,"r",encoding="utf-8") as fi:
content = fi.read()
conJson = json.loads(content)
self.gpsLine = conJson["GPSLine"]
#点火,发送点火事件
def fireOn(self):
if not os.path.exists("data/protocolTools/carData/" + self.carId + ".json"):
psdsObj = ProtocolSimulaterDataService()
data = psdsObj.genDataTemplate()
psdsObj.writeToFile("data/protocolTools/carData/" + self.carId + ".json",data)
#读取车机行驶数据
with open("data/protocolTools/carData/" + self.carId + ".json", "r", encoding="utf-8") as fi:
content = fi.read()
conJson = json.loads(content)
conJson["curDayTravel"]["theMilleage"] = 0 # 本次行驶总里程
conJson["curDayTravel"]["theOil"] = 0 # 本次行驶总油耗
conJson["curDayTravel"]["theTime"] = 0 # 本次行驶总时间
timeStamp = time.time()
timeArray = time.localtime(timeStamp)
dateTimeM = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
dateM = time.strftime("%Y-%m-%d", timeArray)
timeM = time.strftime("%H:%M:%S", timeArray)
dataFile = self.carId + ".json"
self.carDataObj = ProtocolSimulaterDataService("data/protocolTools/carData/", dataFile)
self.carDataObj.setData(conJson)
if dateM == conJson["time"]["date"]:
self.OBDdata["totailMileage"] = conJson["travelData"]["totalMilleage"]
self.OBDdataOri["totailMileage"] = conJson["travelData"]["totalMilleage"]
self.OBDdata["totalOilExpen"] = conJson["travelData"]["totalOil"]
self.OBDdataOri["totalOilExpen"] = conJson["travelData"]["totalOil"]
self.OBDdata["totalRunTime"] = conJson["travelData"]["totalTime"]
self.OBDdataOri["totalRunTime"] = conJson["travelData"]["totalTime"]
else: #如果不是当天日期,则将日期设置为当天,并写入车辆数据文件
conJson["curDayTravel"]["todayTotalMilleage"] = 0 # 今日行驶总里程
conJson["curDayTravel"]["todayTotalOil"] = 0 # 今日行驶总油耗
conJson["curDayTravel"]["todayTotalTime"] = 0 # 今日行驶总时间
self.carDataObj.setTodayTotalMilleage(0)
self.carDataObj.setTodayTodayTotalOil(0)
self.carDataObj.setTodayTodayTotalTime(0)
self.carDataObj.setDateTime2file(dateTimeM)
self.carDataObj.setDate2file(dateM)
self.carDataObj.setTime2file(timeM)
self.OBDdata["totailMileage"] = conJson["travelData"]["totalMilleage"]
self.OBDdataOri["totailMileage"] = conJson["travelData"]["totalMilleage"]
self.OBDdata["totalOilExpen"] = conJson["travelData"]["totalOil"]
self.OBDdataOri["totalOilExpen"] = conJson["travelData"]["totalOil"]
self.OBDdata["totalRunTime"] = conJson["travelData"]["totalTime"]
self.OBDdataOri["totalRunTime"] = conJson["travelData"]["totalTime"]
self.carData = self.carDataObj.fixDataTemplate(conJson)
# fireOnEventObj = EventReport_protocol(DEV_ID=self.carId,WATER_CODE=self.sn)
# gpsData = self.genGPSData(self.gpsLine[0]["lat"], self.gpsLine[0]["lng"])
# fireOnEventObj.setGPSPkg(gpsData)
# fireOnEventObj.setEventType("0010")
# firOnEventMsg = fireOnEventObj.generateEventMsg()
# type = self.getMsgFunId(firOnEventMsg)
# self.sendMsg(firOnEventMsg)
# self.sn = self.sn + 1
# self.websocket.sendMsgToClient(type + ">>>>:" + firOnEventMsg,self.websocketId)
jdata = {"WATER_CODE": "0003", "DEV_ID": "M121501010001",
"gpsInfo": {"UTCTime": "2020-04-30 14:59:33", "latitude": "40.22077", "longitude": "116.23128",
"speed": "80.8", "directionAngle": "80.8", "elevation": "2999.9", "positionStar": "3",
"Pdop": "0.3", "Hdop": "0.4", "Vdop": "0.5", "statusBit": 162, "valtage": "36.9",
"OBDSpeed": "60.9", "engineSpeed": "3000", "GPSTotalMileage": "12800",
"totalOil": "100000",
"totalTime": "2020002", "GPSTimestamp": "1588229973"},
"securityData": {"securityStatus": 107, "doorStatus": 0, "lockStatus": 0, "windowStatus": 0,
"lightStatus": 0, "onoffStatusA": 0, "onoffStatusB": 112, "dataByte": 249}, "event": {
"0010": {"allRapidlyAccelerateCount": "5", "allSharpSlowdownCount": "6", "allSharpTurn": "4",
"dataProperty": "1"}}}
jdata["event"]["0010"]["allRapidlyAccelerateCount"] = self.carData["event"]["threeRapid"]["totalRapidlyAccelerate"]
jdata["event"]["0010"]["allSharpSlowdownCount"] = self.carData["event"]["threeRapid"]["totalSharpSlowdown"]
jdata["event"]["0010"]["allSharpTurn"] = self.carData["event"]["threeRapid"]["totalSharpTurn"]
jdata["DEV_ID"] = self.carId
obj = EventReport_protocol(data=jdata)
gpsData = self.genGPSData2()
obj.setGPSPkg(gpsData)
obj.setEventType("0010")
msg = obj.generateEventMsg()
type = self.getMsgFunId(msg)
self.sendMsg(msg)
self.sn = self.sn + 1
self.websocket.sendMsgToClient(type + ">>>>:" + msg, self.websocketId)
sleep(0.1)
gpsMsg = self.genGPSMsg(self.gpsLine[0]["lat"],self.gpsLine[0]["lng"])
type = self.getMsgFunId(gpsMsg)
self.sendMsg(gpsMsg)
self.sn = self.sn + 1
self.websocket.sendMsgToClient(type + ">>>>:" + gpsMsg,self.websocketId)
sleep(0.1)
OBDMsg = self.genOBDMsg(self.OBDdata["fireStatus"],1,self.OBDdata["engineSpeed"], \
self.OBDdata["speed"],self.OBDdata["meterMileage"],self.OBDdata["totailMileage"], \
self.OBDdata["totalOilExpen"],self.OBDdata["totalRunTime"])
type = self.getMsgFunId(OBDMsg)
self.sendMsg(OBDMsg)
self.sn = self.sn + 1
self.websocket.sendMsgToClient(type + ">>>>:" + OBDMsg,self.websocketId)
# 熄火,发送熄火事件
def fireOff(self):
gpsLineIndex = self.gpsLineIndex
if gpsLineIndex >= len(self.gpsLine):
gpsLineIndex = gpsLineIndex - 1
# fireOffEventObj = EventReport_protocol(DEV_ID=self.carId)
# gpsData = self.genGPSData(self.gpsLine[gpsLineIndex]["lat"],self.gpsLine[gpsLineIndex]["lng"])
# fireOffEventObj.setGPSPkg(gpsData)
# fireOffEventObj.setEventType("0011")
# fireOffEventMsg = fireOffEventObj.generateEventMsg()
# type = self.getMsgFunId(fireOffEventMsg)
# self.sendMsg(fireOffEventMsg)
# self.sn = self.sn + 1
# self.websocket.sendMsgToClient(type + ">>>>:" + fireOffEventMsg,self.websocketId)
jdata = {"WATER_CODE": "0003", "DEV_ID": "M121501010001",
"gpsInfo": {"UTCTime": "2020-04-30 14:59:33", "latitude": "40.22077", "longitude": "116.23128",
"speed": "80.8", "directionAngle": "80.8", "elevation": "2999.9", "positionStar": "3",
"Pdop": "0.3", "Hdop": "0.4", "Vdop": "0.5", "statusBit": 162, "valtage": "36.9",
"OBDSpeed": "60.9", "engineSpeed": "3000", "GPSTotalMileage": "12800",
"totalOil": "100000",
"totalTime": "2020002", "GPSTimestamp": "1588229973"},
"securityData": {"securityStatus": 107, "doorStatus": 0, "lockStatus": 0, "windowStatus": 0,
"lightStatus": 0, "onoffStatusA": 0, "onoffStatusB": 112, "dataByte": 249}, "event": {
"0011": {"allRapidlyAccelerateCount": "5", "allSharpSlowdownCount": "6", "allSharpTurn": "4",
"dataProperty": "1"}}}
jdata["event"]["0011"]["allRapidlyAccelerateCount"] = self.carData["event"]["threeRapid"]["totalRapidlyAccelerate"]
jdata["event"]["0011"]["allSharpSlowdownCount"] = self.carData["event"]["threeRapid"]["totalSharpSlowdown"]
jdata["event"]["0011"]["allSharpTurn"] = self.carData["event"]["threeRapid"]["totalSharpTurn"]
jdata["DEV_ID"] = self.carId
obj = EventReport_protocol(data=jdata)
gpsData = self.genGPSData2()
obj.setGPSPkg(gpsData)
obj.setEventType("0011")
msg = obj.generateEventMsg()
type = self.getMsgFunId(msg)
self.sendMsg(msg)
self.sn = self.sn + 1
self.websocket.sendMsgToClient(type + ">>>>:" + msg, self.websocketId)
sleep(0.1)
gpsMsg = self.genGPSMsg(self.gpsLine[gpsLineIndex]["lat"], self.gpsLine[gpsLineIndex]["lng"])
type = self.getMsgFunId(gpsMsg)
self.sendMsg(gpsMsg)
self.sn = self.sn + 1
self.websocket.sendMsgToClient(type + ">>>>:" + gpsMsg,self.websocketId)
#根据特定参数,生成GPS消息
def genGPSMsg(self,latitude,longtitude):
gpsObj = GPS_protocol_m300(DEV_ID=self.carId,waterCode=self.sn)
gpsObj.setLatitude(latitude)
gpsObj.setLongitude(longtitude)
gpsObj.setDirection(self.getDirAngle())
timeS = int(time.time()) - 8 * 3600
timeArray = time.localtime(timeS)
UTCTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
gpsObj.setUTCTime(UTCTime)
msg = gpsObj.generateMsg()
return msg
#根据特定参数,生成GPS消息体,不包含消息头
def genGPSData(self,latitude,longtitude):
gpsObj = GPS_protocol_m300(DEV_ID=self.carId,waterCode=self.sn)
gpsObj.setLatitude(latitude)
gpsObj.setLongitude(longtitude)
gpsObj.setDirection(self.getDirAngle())
timeS = int(time.time()) - 8 * 3600
timeArray = time.localtime(timeS)
UTCTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
gpsObj.setDateInfo(UTCTime)
data = gpsObj.getMsgBody()
return data
#根据当前所在GPS点,生成GPS消息体,不包含消息头
def genGPSData2(self):
gpsObj = GPS_protocol_m300(DEV_ID=self.carId,waterCode=self.sn)
gpsObj.setLatitude(self.gpsLine[self.gpsLineIndex]["lat"])
gpsObj.setLongitude(self.gpsLine[self.gpsLineIndex]["lng"])
gpsObj.setDirection(self.getDirAngle())
timeS = int(time.time()) - 8 * 3600
timeArray = time.localtime(timeS)
UTCTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
gpsObj.setDateInfo(UTCTime)
data = gpsObj.generateGpsData()
return data
# 根据特定参数,生成OBD CAN消息
def genOBDMsg(self,fireStatus=1,ACCStatus=0,engineSpeed=300,speed=0,meterMileage=6000, \
totailMileage=600,totalOilExpend=30,totalRunTime=10):
OBDObj = OBDCAN_protocol_m300(DEV_ID=self.carId,waterCode=self.sn)
timeS = int(time.time()) - 8 * 3600
timeArray = time.localtime(timeS)
UTCTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
OBDObj.setTimeInfo(UTCTime)
OBDObj.setAccstatus(ACCStatus)
OBDObj.setEngineSpeed(engineSpeed) # 设置发动机转速
OBDObj.setSpeed(speed) # 设置车辆速度
OBDObj.setDashboardTotailMilleage(meterMileage) # 设置仪表里程值
OBDObj.setTotalMilleage(totailMileage) # 设置总里程值
OBDObj.setTotalOil(totalOilExpend) # 设置总耗油量
OBDObj.setCarTotalRunTime(totalRunTime) # 设置车辆运行时间
msg = OBDObj.generateOBDReportCANMsg()
return msg
###########################################################
#获取方向角
###########################################################
def getDirAngle(self):
dire = self.directAngle
if self.travelDirection == 0:
if self.gpsLineIndex == 0:
return int(self.directAngle)
lngCut = (float(self.gpsLine[self.gpsLineIndex]["lng"]) - float(self.gpsLine[self.gpsLineIndex - 1]["lng"])) * 1000000
latCut = (float(self.gpsLine[self.gpsLineIndex]["lat"]) - float(self.gpsLine[self.gpsLineIndex - 1]["lat"])) * 1000000
if latCut == 0: #除数维度不能为0
latCut = 1
if lngCut == 0 or latCut == 0:
return int(self.directAngle)
val = lngCut / latCut
dire = math.atan2(1, val) * 180 / math.pi
if lngCut > 0 and latCut > 0:
dire = 90 - dire
if lngCut < 0 and latCut > 0:
dire = 270 + 180 - dire
elif latCut < 0 and lngCut > 0:
dire = 270 - dire
elif lngCut < 0 and latCut < 0:
dire = 180 + 90 - dire
self.directAngle = dire
elif self.travelDirection == 1:
if self.gpsLineIndex == (len(self.gpsLine) - 1):
return int(self.directAngle)
lngCut = (float(self.gpsLine[self.gpsLineIndex]["lng"]) - float(self.gpsLine[self.gpsLineIndex + 1]["lng"])) * 1000000
latCut = (float(self.gpsLine[self.gpsLineIndex]["lat"]) - float(self.gpsLine[self.gpsLineIndex + 1]["lat"])) * 1000000
if latCut == 0: #除数维度不能为0
latCut = 1
if lngCut == 0 or latCut == 0:
return int(self.directAngle)
val = lngCut / latCut
dire = math.atan2(1, val) * 180 / math.pi
if lngCut > 0 and latCut > 0:
dire = 90 - dire
if lngCut < 0 and latCut > 0:
dire = 270 + 180 - dire
elif latCut < 0 and lngCut > 0:
dire = 270 - dire
elif lngCut < 0 and latCut < 0:
dire = 180 + 90 - dire
self.directAngle = dire
return int(dire)
###########################################################
# 将要发送的数据保存到本地
###########################################################
def saveMsgLocal(self,fName,data):
timeStamp = time.time()
timeArray = time.localtime(timeStamp)
curTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
thePath = 'data/protocolTools/sendMsg'
if not os.path.exists(thePath):
os.makedirs(thePath)
thePath = thePath + "/" + self.carId + "/"
if not os.path.exists(thePath):
os.makedirs(thePath)
with open(thePath + fName, "a", encoding="utf-8") as fi:
fi.write("[" + curTime +"]" + data + "\n")
if __name__ == "__main__":
pass
#coding:utf-8 #coding:utf-8
################################################## ##################################################
# 定义M500 车机行驶过程中产生的数据类 # 定义车安优 车机行驶过程中产生的数据类
################################################## ##################################################
import datetime import datetime
import json import json
......
...@@ -44,6 +44,7 @@ class ProtocolSimulaterService(): ...@@ -44,6 +44,7 @@ class ProtocolSimulaterService():
# 用来控制发送消息的方式(是正常发送,还是将发送的数据保存到本地,不发送) # 用来控制发送消息的方式(是正常发送,还是将发送的数据保存到本地,不发送)
''' '''
self.sendType = 0 self.sendType = 0
self.GPSValid = 1 #用来控制GPS数据是有效还是无效 0:无效 1:有效
# 定义要发送的obd数据 # 定义要发送的obd数据
self.OBDdata = {"fireStatus":1,"ACCStatus":0,"engineSpeed":300,"speed":0,"meterMileage":6000,"totailMileage":600,"totalOilExpen":30,"totalRunTime":10} self.OBDdata = {"fireStatus":1,"ACCStatus":0,"engineSpeed":300,"speed":0,"meterMileage":6000,"totailMileage":600,"totalOilExpen":30,"totalRunTime":10}
# 定义初始的obd数据,与上面的OBD数据保持一致,主要用于汽车行驶过程中数据变化量的计算 # 定义初始的obd数据,与上面的OBD数据保持一致,主要用于汽车行驶过程中数据变化量的计算
...@@ -79,6 +80,8 @@ class ProtocolSimulaterService(): ...@@ -79,6 +80,8 @@ class ProtocolSimulaterService():
self.sendDur = int(data) self.sendDur = int(data)
def setSendType(self,data): def setSendType(self,data):
self.sendType = data self.sendType = data
def setGPSValid(self,data):
self.GPSValid = data
...@@ -374,7 +377,7 @@ class ProtocolSimulaterService(): ...@@ -374,7 +377,7 @@ class ProtocolSimulaterService():
"OBDSpeed": "60.9", "engineSpeed": "3000", "GPSTotalMileage": "12800", "OBDSpeed": "60.9", "engineSpeed": "3000", "GPSTotalMileage": "12800",
"totalOil": "100000", "totalOil": "100000",
"totalTime": "2020002", "GPSTimestamp": "1588229973"}, "totalTime": "2020002", "GPSTimestamp": "1588229973"},
"securityData": {"securityStatus": 107, "doorStatus": 0, "lockStatus": 0, "windowStatus": 0, "securityData": {"securityStatus": 137, "doorStatus": 0, "lockStatus": 0, "windowStatus": 0,
"lightStatus": 0, "onoffStatusA": 0, "onoffStatusB": 112, "dataByte": 249}, "event": { "lightStatus": 0, "onoffStatusA": 0, "onoffStatusB": 112, "dataByte": 249}, "event": {
"0010": {"allRapidlyAccelerateCount": "5", "allSharpSlowdownCount": "6", "allSharpTurn": "4", "0010": {"allRapidlyAccelerateCount": "5", "allSharpSlowdownCount": "6", "allSharpTurn": "4",
"dataProperty": "1"}}} "dataProperty": "1"}}}
...@@ -430,7 +433,7 @@ class ProtocolSimulaterService(): ...@@ -430,7 +433,7 @@ class ProtocolSimulaterService():
"OBDSpeed": "60.9", "engineSpeed": "3000", "GPSTotalMileage": "12800", "OBDSpeed": "60.9", "engineSpeed": "3000", "GPSTotalMileage": "12800",
"totalOil": "100000", "totalOil": "100000",
"totalTime": "2020002", "GPSTimestamp": "1588229973"}, "totalTime": "2020002", "GPSTimestamp": "1588229973"},
"securityData": {"securityStatus": 107, "doorStatus": 0, "lockStatus": 0, "windowStatus": 0, "securityData": {"securityStatus": 137, "doorStatus": 0, "lockStatus": 0, "windowStatus": 0,
"lightStatus": 0, "onoffStatusA": 0, "onoffStatusB": 112, "dataByte": 249}, "event": { "lightStatus": 0, "onoffStatusA": 0, "onoffStatusB": 112, "dataByte": 249}, "event": {
"0011": {"allRapidlyAccelerateCount": "5", "allSharpSlowdownCount": "6", "allSharpTurn": "4", "0011": {"allRapidlyAccelerateCount": "5", "allSharpSlowdownCount": "6", "allSharpTurn": "4",
"dataProperty": "1"}}} "dataProperty": "1"}}}
...@@ -460,6 +463,10 @@ class ProtocolSimulaterService(): ...@@ -460,6 +463,10 @@ class ProtocolSimulaterService():
gpsObj = GPSReport_protocol(DEV_ID=self.carId,WATER_CODE=self.sn) gpsObj = GPSReport_protocol(DEV_ID=self.carId,WATER_CODE=self.sn)
gpsObj.setLatitude(latitude) gpsObj.setLatitude(latitude)
gpsObj.setLongitude(longtitude) gpsObj.setLongitude(longtitude)
if self.GPSValid == 1:
gpsObj.setGpsValid(1)
elif self.GPSValid == 0:
gpsObj.setGpsValid(0)
gpsObj.setDirectionAngle(self.getDirAngle()) gpsObj.setDirectionAngle(self.getDirAngle())
timeS = int(time.time()) - 8 * 3600 timeS = int(time.time()) - 8 * 3600
timeArray = time.localtime(timeS) timeArray = time.localtime(timeS)
...@@ -473,6 +480,10 @@ class ProtocolSimulaterService(): ...@@ -473,6 +480,10 @@ class ProtocolSimulaterService():
gpsObj = GPSReport_protocol(DEV_ID=self.carId,WATER_CODE=self.sn) gpsObj = GPSReport_protocol(DEV_ID=self.carId,WATER_CODE=self.sn)
gpsObj.setLatitude(latitude) gpsObj.setLatitude(latitude)
gpsObj.setLongitude(longtitude) gpsObj.setLongitude(longtitude)
if self.GPSValid == 1:
gpsObj.setGpsValid(1)
elif self.GPSValid == 0:
gpsObj.setGpsValid(0)
gpsObj.setDirectionAngle(self.getDirAngle()) gpsObj.setDirectionAngle(self.getDirAngle())
timeS = int(time.time()) - 8 * 3600 timeS = int(time.time()) - 8 * 3600
timeArray = time.localtime(timeS) timeArray = time.localtime(timeS)
......
...@@ -18,6 +18,8 @@ function m300ProtocolManTab(e){ ...@@ -18,6 +18,8 @@ function m300ProtocolManTab(e){
$(location).attr('href', "http://" + window.location.host + "/m300Tools/P_m300Protocol_view/P_GPS_m300_page"); $(location).attr('href', "http://" + window.location.host + "/m300Tools/P_m300Protocol_view/P_GPS_m300_page");
}else if(id == "P_CAN_m300_msg"){ }else if(id == "P_CAN_m300_msg"){
$(location).attr('href', "http://" + window.location.host + "/m300Tools/P_m300Protocol_view/P_CAN_m300_page"); $(location).attr('href', "http://" + window.location.host + "/m300Tools/P_m300Protocol_view/P_CAN_m300_page");
}else if(id == "P_alarm_m300_msg"){
$(location).attr('href', "http://" + window.location.host + "/m300Tools/P_m300Protocol_view/P_alarm_m300_page");
}else{ }else{
alert(id) alert(id)
} }
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
<option value="1024">加密</option> <option value="1024">加密</option>
</select> </select>
</div> </div>
<H3 style="border-bottom: 1px solid #eee;">设置心跳消息内容:</H3> <H3 style="border-bottom: 1px solid #eee;">设置OBD消息内容:</H3>
<ul class="protocol_content" style="padding:0px;"> <ul class="protocol_content" style="padding:0px;">
<li><label>时间:</label><input id="timeInfo" type="text" class="form-control" value=""></li> <li><label>时间:</label><input id="timeInfo" type="text" class="form-control" value=""></li>
<li><label>协议类别:</label> <li><label>协议类别:</label>
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
<option value="1024">加密</option> <option value="1024">加密</option>
</select> </select>
</div> </div>
<H3 style="border-bottom: 1px solid #eee;">设置心跳消息内容:</H3> <H3 style="border-bottom: 1px solid #eee;">设置GPS消息内容:</H3>
<ul class="protocol_content" style="padding:0px;"> <ul class="protocol_content" style="padding:0px;">
<li><label>日期:</label><input id="dateInfo" type="text" class="form-control" value=""></li> <li><label>日期:</label><input id="dateInfo" type="text" class="form-control" value=""></li>
<li style="width:495px;"><label>维度:</label><sapn> <li style="width:495px;"><label>维度:</label><sapn>
......
{% extends "m300Tools/report/P_heartBeat_m300_page.html" %}
{% block title %}Alarm_msg{% endblock %}
{% block content_1 %}
<div id="container3" style="width:100%;min-height:750px;float:left;_background:green;margin-top:10px;_border-top: 1px solid #eee;">
<div style="width:100%;_background:green;padding:5px;padding-top:0px;">
<h3 style="border-bottom: 1px solid #eee;">设置消息头:</h3>
<label>功能ID:</label><input id="FUNID" type="text" class="form-control" disabled="disabled" value="0021" style="width:80px;">
<label>消息序列号:</label><input id="waterCode" type="text" class="form-control" value="1" style="width:60px;">
<label>设备ID:</label><input id="DEV_ID" type="text" class="form-control" value="M202004070000" style="width:150px;">
<label>是否加密:</label><select style="width:100px;" id="encryptionType" class="form-control">
<option value="0">不加密</option>
<option value="1024">加密</option>
</select>
</div>
<H3 style="border-bottom: 1px solid #eee;">设置报警消息内容:</H3>
<div style="width:100%;border-width:1px;border-style:solid;border-color:darkgray;border-radius:10px;padding:2px;">
<h4>GPS报警信息</h4>
<ul class="protocol_content" style="padding:0px;">
<li><label>日期:</label><input id="dateInfo" type="text" class="form-control" value=""></li>
<li style="width:495px;"><label>维度:</label><sapn>
<input id="latitude" type="text" class="form-control" value="40.22077">
<select style="width:80px;" id="latitudeType" class="form-control">
<option value="0">北纬</option>
<option value="1">南纬</option></select>
</sapn></li>
<li style="width:495px;"><label>经度:</label><sapn>
<input id="longitude" type="text" class="form-control" value="116.23128">
<select style="width:80px;" id="longitudeType" class="form-control">
<option value="0">东经</option>
<option value="1">西经</option></select>
</sapn></li>
<li><label>定位星数:</label><input id="positionStar" type="text" class="form-control" value="2"></li>
<li><label>速度:</label><input id="speed" type="text" class="form-control" value="66.0"></li>
<li><label>方向角:</label><input id="direction" type="text" class="form-control" value="55.3"></li>
<li><label>海拔高度:</label><input id="altitude" type="text" class="form-control" value="11.0"></li>
<li><label>ACC状态:</label><select style="width:155px;" id="ACCStatus" class="form-control">
<option value="0"></option>
<option value="1" selected="selected"></option></select></li>
<li><label style="word-break:break-all;font-size:10px;">汽车电瓶电压:</label><input id="valtage" type="text" class="form-control" value="36.0"></li>
<li><label style="word-break:break-all;font-size:10px;">汽车OBD速度:</label><input id="OBDSpeed" type="text" class="form-control" value="66.4"></li>
<li><label style="word-break:break-all;font-size:10px;">GPS定位是否有效:</label><select style="width:155px;" id="valid_1" class="form-control">
<option value="0"></option>
<option value="1" selected="selected"></option></select></li>
<li><label style="word-break:break-all;font-size:10px;">车机是否处于修车模式:</label><select style="width:155px;" id="valid_2" class="form-control">
<option value="0"></option>
<option value="128"></option></select></li>
<li><label style="word-break:break-all;font-size:10px;">驾驶循环标签:</label><input id="tripMark" type="text" class="form-control" value="0"></li>
</ul>
</div>
<div style="width:100%;border-width:1px;border-style:solid;border-color:darkgray;border-radius:10px;padding:2px;margin-top:5px;">
<h4>GSM主基站数据包</h4>
<ul class="protocol_content" style="padding:0px;">
<li><label>运营商类别:</label><sapn>
<select style="width:120px;" id="operatorType" class="form-control">
<option value="1">移动</option>
<option value="2">联通</option>
<option value="3">电信</option>
</select>
</sapn></li>
<li><label>服务器LAC:</label><input id="LAC" type="text" class="form-control" value="1234"></li>
<li><label style="word-break:break-all;font-size:10px;">服务器CellID:</label><input id="CellID" type="text" class="form-control" value="5678"></li>
</ul>
</div>
<div style="width:100%;border-width:1px;border-style:solid;border-color:darkgray;border-radius:10px;padding:2px;margin-top:5px;">
<h4>CAN状态数据包</h4>
<ul class="protocol_content" style="padding:0px;">
<li style="width:350px;"><label>状态掩码:</label><input style="width:250px;" id="statusMask" type="text" class="form-control" value="ffffffffffffffffffff"></li>
<li style="width:100%;border-width:1px;border-style:solid;border-color:darkgray;border-radius:10px;padding:2px;"><h4>安全状态:</h4>
<div style="width:100%" id="safeStatus">
<sapn><label>ACC状态:</label><select style="width:65px;" id="CAN_accStatus" class="form-control">
<option value="0"></option>
<option value="1"></option></select></sapn>
<sapn><label style="word-break:break-all;font-size:10px;">设防撤防状态:</label><select style="width:65px;" id="defenseStatus" class="form-control">
<option value="0"></option>
<option value="2"></option></select></sapn>
<sapn><label>脚刹状态:</label><select style="width:65px;" id="brakeStatus" class="form-control">
<option value="0"></option>
<option value="4"></option></select></sapn>
<sapn><label>是否踩油门:</label><select style="width:65px;" id="acceleratorStatus" class="form-control">
<option value="0"></option>
<option value="8"></option></select></sapn>
<sapn><label>手刹状态:</label><select style="width:65px;" id="handBrakeStatus" class="form-control">
<option value="0"></option>
<option value="16"></option></select></sapn>
<sapn><label style="word-break:break-all;font-size:10px;">主驾驶安全带:</label><select style="width:65px;" id="mainSafetyBelt" class="form-control">
<option value="0"></option>
<option value="32"></option></select></sapn>
<sapn><label style="word-break:break-all;font-size:10px;">副驾驶安全带:</label><select style="width:65px;" id="subSafetyBelt" class="form-control">
<option value="0"></option>
<option value="64"></option></select></sapn>
</div>
<li style="width:100%;border-width:1px;border-style:solid;border-color:darkgray;border-radius:10px;padding:2px;"><h4>门状态:</h4>
<div style="width:100%" id="doorStatus">
<sapn><label>左前门:</label><select style="width:65px;" id="lfDoorStatus" class="form-control">
<option value="0"></option>
<option value="1"></option></select></sapn>
<sapn><label>右前门:</label><select style="width:65px;" id="rfDoorStatus" class="form-control">
<option value="0"></option>
<option value="2"></option></select></sapn>
<sapn><label>左后门:</label><select style="width:65px;" id="lbDoorStatus" class="form-control">
<option value="0"></option>
<option value="4"></option></select></sapn>
<sapn><label>右后门:</label><select style="width:65px;" id="rbDoorStatus" class="form-control">
<option value="0"></option>
<option value="8"></option></select></sapn>
<sapn><label>后备箱:</label><select style="width:65px;" id="trunk" class="form-control">
<option value="0"></option>
<option value="16"></option></select></sapn>
<sapn><label>发动机盖:</label><select style="width:65px;" id="enginCover" class="form-control">
<option value="0"></option>
<option value="32"></option></select></sapn>
</div>
</li>
<li style="width:100%;border-width:1px;border-style:solid;border-color:darkgray;border-radius:10px;padding:2px;"><h4>锁状态:</h4>
<div style="width:100%" id="lockStatus">
<sapn><label style="word-break:break-all;font-size:10px;">左前门锁状态:</label><select style="width:65px;" id="lfDoorLockStatus" class="form-control">
<option value="0"></option>
<option value="1"></option></select></sapn>
<sapn><label style="word-break:break-all;font-size:10px;">右前门锁状态:</label><select style="width:65px;" id="rfDoorLockStatus" class="form-control">
<option value="0"></option>
<option value="2"></option></select></sapn>
<sapn><label style="word-break:break-all;font-size:10px;">左后门锁状态:</label><select style="width:65px;" id="lbDoorLockStatus" class="form-control">
<option value="0"></option>
<option value="4"></option></select></sapn>
<sapn><label style="word-break:break-all;font-size:10px;">右后门锁状态:</label><select style="width:65px;" id="rbDoorLockStatus" class="form-control">
<option value="0"></option>
<option value="8"></option></select></sapn>
</div>
</li>
<li style="width:100%;border-width:1px;border-style:solid;border-color:darkgray;border-radius:10px;padding:2px;"><h4>窗户状态:</h4>
<div style="width:100%" id="windowStatus">
<sapn><label style="width:80px;">左前窗:</label><select style="width:65px;" id="lfWindowStatus" class="form-control">
<option value="0"></option>
<option value="1"></option></select></sapn>
<sapn><label style="width:80px;">右前窗:</label><select style="width:65px;" id="rfWindowStatus" class="form-control">
<option value="0"></option>
<option value="2"></option></select></sapn>
<sapn><label style="width:80px;">左后窗:</label><select style="width:65px;" id="lbWindowStatus" class="form-control">
<option value="0"></option>
<option value="4"></option></select></sapn>
<sapn><label style="width:80px;">右后窗:</label><select style="width:65px;" id="rbWindowStatus" class="form-control">
<option value="0"></option>
<option value="8"></option></select></sapn>
<sapn><label style="width:80px;">天窗开关:</label><select style="width:65px;" id="topWindowStatus" class="form-control">
<option value="0"></option>
<option value="16"></option></select></sapn>
<sapn><label style="width:80px;">左转向灯:</label><select style="width:65px;" id="lTurnLight" class="form-control">
<option value="0"></option>
<option value="32"></option></select></sapn>
<sapn><label style="width:80px;">右转向灯:</label><select style="width:65px;" id="rTurnLight" class="form-control">
<option value="0"></option>
<option value="64"></option></select></sapn>
<sapn><label style="width:80px;">阅读灯:</label><select style="width:65px;" id="readLight" class="form-control">
<option value="0"></option>
<option value="128"></option></select></sapn>
</div>
</li>
<li style="width:100%;border-width:1px;border-style:solid;border-color:darkgray;border-radius:10px;padding:2px;"><h4>灯状态:</h4>
<div style="width:100%" id="lightStatus">
<sapn><label style="width:80px;">近光灯:</label><select style="width:65px;" id="lowHeadlight" class="form-control">
<option value="0"></option>
<option value="1"></option></select></sapn>
<sapn><label style="width:80px;">远光灯:</label><select style="width:65px;" id="highHeadlight" class="form-control">
<option value="0"></option>
<option value="2"></option></select></sapn>
<sapn><label style="width:80px;">前雾灯:</label><select style="width:65px;" id="ffogLight" class="form-control">
<option value="0"></option>
<option value="4"></option></select></sapn>
<sapn><label style="width:80px;">后雾灯:</label><select style="width:65px;" id="bfogLight" class="form-control">
<option value="0"></option>
<option value="8"></option></select></sapn>
<sapn><label style="width:80px;">危险灯:</label><select style="width:65px;" id="dangerLight" class="form-control">
<option value="0"></option>
<option value="16"></option></select></sapn>
<sapn><label style="width:80px;">倒车灯:</label><select style="width:65px;" id="backCarLight" class="form-control">
<option value="0"></option>
<option value="32"></option></select></sapn>
<sapn><label style="width:80px;">auto灯:</label><select style="width:65px;" id="autoLight" class="form-control">
<option value="0"></option>
<option value="64"></option></select></sapn>
<sapn><label style="width:80px;">示宽灯:</label><select style="width:65px;" id="widthLight" class="form-control">
<option value="0"></option>
<option value="128"></option></select></sapn>
</div>
</li>
<li style="width:100%;border-width:1px;border-style:solid;border-color:darkgray;border-radius:10px;padding:2px;"><h4>开关状态A:</h4>
<div style="width:100%" id="swichStatusA">
<sapn><label>机油报警:</label><select style="width:65px;" id="machineOilWarning" class="form-control">
<option value="0"></option>
<option value="1"></option></select></sapn>
<sapn><label>燃油报警:</label><select style="width:65px;" id="oilWarning" class="form-control">
<option value="0"></option>
<option value="2"></option></select></sapn>
<sapn><label>雨刷报警:</label><select style="width:65px;" id="wiperWarning" class="form-control">
<option value="0"></option>
<option value="4"></option></select></sapn>
<sapn><label>喇叭报警:</label><select style="width:65px;" id="loudsspeakerWaring" class="form-control">
<option value="0"></option>
<option value="8"></option></select></sapn>
<sapn><label>空调:</label><select style="width:65px;" id="airConditionerWaring" class="form-control">
<option value="0"></option>
<option value="16"></option></select></sapn>
<sapn><label>后视镜状态:</label><select style="width:65px;" id="backMirrorWaring" class="form-control">
<option value="0"></option>
<option value="32"></option></select></sapn>
</div>
</li>
<li style="width:100%;border-width:1px;border-style:solid;border-color:darkgray;border-radius:10px;padding:2px;"><h4>开关状态B:</h4>
<div style="width:100%" id="swichStatusB">
<sapn><label>档位:</label><select style="width:100px;" id="gears" class="form-control">
<option value="0">P档</option>
<option value="16">R档</option>
<option value="32">N档</option>
<option value="48">D档</option>
<option value="64">1档</option>
<option value="80">2档</option>
<option value="96">3档</option>
<option value="112">4档</option>
<option value="128">5档</option>
<option value="144">6档</option>
<option value="160">M档</option>
<option value="176">S档</option></select></sapn>
</div>
</li>
</ul>
<sapn><label>报警类别:</label><input id="alarmType" type="text" class="form-control" value="0001"></sapn>
</div>
<H3 style="border-bottom: 1px solid #eee;">控制:</H3>
<div style="width:100%;padding:5px;margin-top:10px;">
<button type="button" class="btn btn-primary" id="sendMsgBtn">发送消息</button>
</div>
<H3 style="border-bottom: 1px solid #eee;">返回信息:</H3>
<div style="width:100%;padding:5px;margin-top:10px;">
<textarea id="showFeedback" style="width:100%;padding:5px;" rows="8"></textarea>
</div>
</div>
<script>
//发送GPS数据
$("#sendMsgBtn").click(function(){
var FUNID = $("#FUNID").val();
var waterCode = $("#waterCode").val();
var DEV_ID = $("#DEV_ID").val();
var encryptionType = $("#encryptionType").val();
var dateInfo = $("#dateInfo").val();
var latitude = parseFloat($("#latitude").val());
var latitudeType = parseInt($("#latitudeType").val());
if(latitudeType == 1){
latitude = latitude + 2147483648 / 1000000
}
var longitude = parseFloat($("#longitude").val());
var longitudeType = parseInt($("#longitudeType").val());
if(longitudeType == 1){
longitude = longitude + 2147483648 / 1000000
}
var positionStar = $("#positionStar").val();
var speed = $("#speed").val();
var direction = $("#direction").val();
var altitude = $("#altitude").val();
var ACCStatus = $("#ACCStatus").val();
var valtage = $("#valtage").val();
var OBDSpeed = $("#OBDSpeed").val();
var valid_1 = parseInt($("#valid_1").val());
var valid_2 = parseInt($("#valid_2").val());
var valid = valid_1 + valid_2
var tripMark = $("#tripMark").val();
var data = {};
data["FUNID"] = FUNID;
data["waterCode"] = waterCode;
data["DEV_ID"] = DEV_ID;
data["encryptionType"] = encryptionType;
data["dateInfo"] = dateInfo;
data["latitude"] = latitude;
data["longitude"] = longitude;
data["positionStar"] = positionStar;
data["speed"] = speed;
data["direction"] = direction;
data["altitude"] = altitude;
data["ACCStatus"] = ACCStatus;
data["valtage"] = valtage;
data["OBDSpeed"] = OBDSpeed;
data["valid"] = valid;
data["tripMark"] = tripMark;
var host = window.location.host;
$("#showFeedback").val("")
$.ajax({
url:"http://" + host + "/m300Tools/P_m300Protocol_process/porcessGPSMsg",
type:"post",
data:data,
dataType:"json",
success:function(data){
if(data.status == 200){
//window.location.reload()
var theShow = "原始数据: " + data.msgSend + "\n";
theShow = theShow + "收到数据: " + data.result + "\n";
theShow = theShow + "收到数据16进制: " + data.rev + "\n";
theShow = theShow + "解析数据: " + JSON.stringify(data.orgRev) + "\n";
$("#showFeedback").val(theShow)
}else{
$("#showFeedback").val(data.message)
alert(data.message);
}
}
});
});
//设置当前时间到UTC时间输入框
(function(){
var curTime = getCurTime();
$("#dateInfo").val(curTime);
})();
</script>
{% endblock %}
\ No newline at end of file
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
<li role="presentation"><a id="P_version_m300_msg" {% if arg.path[2]=="P_version_m300_page" %} class="link-tab" {% endif %} onclick="m300ProtocolManTab(this)">版本消息</b></a></li> <li role="presentation"><a id="P_version_m300_msg" {% if arg.path[2]=="P_version_m300_page" %} class="link-tab" {% endif %} onclick="m300ProtocolManTab(this)">版本消息</b></a></li>
<li role="presentation"><a id="P_GPS_m300_msg" {% if arg.path[2]=="P_GPS_m300_page" %} class="link-tab" {% endif %} onclick="m300ProtocolManTab(this)">GPS消息</b></a></li> <li role="presentation"><a id="P_GPS_m300_msg" {% if arg.path[2]=="P_GPS_m300_page" %} class="link-tab" {% endif %} onclick="m300ProtocolManTab(this)">GPS消息</b></a></li>
<li role="presentation"><a id="P_CAN_m300_msg" {% if arg.path[2]=="P_CAN_m300_page" %} class="link-tab" {% endif %} onclick="m300ProtocolManTab(this)">CAN消息</b></a></li> <li role="presentation"><a id="P_CAN_m300_msg" {% if arg.path[2]=="P_CAN_m300_page" %} class="link-tab" {% endif %} onclick="m300ProtocolManTab(this)">CAN消息</b></a></li>
<li role="presentation"><a id="P_alarm_m300_msg" {% if arg.path[2]=="P_alarm_m300_page" %} class="link-tab" {% endif %} onclick="m300ProtocolManTab(this)">报警消息</b></a></li>
</ul> </ul>
{% endblock %} {% endblock %}
{% block content_1 %} {% block content_1 %}
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
<option value="1024">加密</option> <option value="1024">加密</option>
</select> </select>
</div> </div>
<H3 style="border-bottom: 1px solid #eee;">设置心跳消息内容:</H3> <H3 style="border-bottom: 1px solid #eee;">设置登录消息内容:</H3>
<ul class="protocol_content" style="padding:0px;"> <ul class="protocol_content" style="padding:0px;">
<label style="color:red;width:130px;">登录消息无消息体...</label> <label style="color:red;width:130px;">登录消息无消息体...</label>
</ul> </ul>
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
<option value="1024">加密</option> <option value="1024">加密</option>
</select> </select>
</div> </div>
<H3 style="border-bottom: 1px solid #eee;">设置心跳消息内容:</H3> <H3 style="border-bottom: 1px solid #eee;">设置版本消息内容:</H3>
<ul class="protocol_content" style="padding:0px;"> <ul class="protocol_content" style="padding:0px;">
<li><label>软件版本号:</label><input id="SWVersion" type="text" class="form-control" value="VSTA000GV100"></li> <li><label>软件版本号:</label><input id="SWVersion" type="text" class="form-control" value="VSTA000GV100"></li>
<li><label>软件日期:</label><input id="SWDate" type="text" class="form-control" value="2020-03-30"></li> <li><label>软件日期:</label><input id="SWDate" type="text" class="form-control" value="2020-03-30"></li>
......
...@@ -66,26 +66,26 @@ ...@@ -66,26 +66,26 @@
<li style="width:100%;"> <li style="width:100%;">
<h5><b>状态位:</b></h5> <h5><b>状态位:</b></h5>
<label style="font-size:12px;">当前定位是否有效:</label><select id="isLocationValid" class="form-control" style="width:100px;"> <label style="font-size:12px;">当前定位是否有效:</label><select id="isLocationValid" class="form-control" style="width:100px;">
<option value="1">有效</option> <option value="128">有效</option>
<option value="0">无效</option> <option value="0">无效</option>
</select> </select>
<label style="font-size:12px;">当前定位模式:</label><select id="locationMode" class="form-control" style="width:170px;"> <label style="font-size:12px;">当前定位模式:</label><select id="locationMode" class="form-control" style="width:170px;">
<option value="0">自动模式</option> <option value="0">自动模式</option>
<option value="2">单GPS模式</option> <option value="16">单GPS模式</option>
<option value="4">单BDS模式</option> <option value="32">单BDS模式</option>
<option value="6">GPS+BDS双模式</option> <option value="48">GPS+BDS双模式</option>
</select> </select>
<label style="font-size:12px;">定位类型:</label><select id="locationType" class="form-control" style="width:100px;"> <label style="font-size:12px;">定位类型:</label><select id="locationType" class="form-control" style="width:100px;">
<option value="32">2D定位</option> <option value="8">2D定位</option>
<option value="48">3D定位</option> <option value="12">3D定位</option>
</select> </select>
<label style="font-size:12px;">统计里程模式:</label><select id="staticMileageMode" class="form-control" style="width:150px;"> <label style="font-size:12px;">统计里程模式:</label><select id="staticMileageMode" class="form-control" style="width:150px;">
<option value="0">GPS统计里程</option> <option value="0">GPS统计里程</option>
<option value="64">OBD统计里程</option> <option value="2">OBD统计里程</option>
</select> </select>
<label style="font-size:12px;">车辆点熄火状态:</label><select id="fireStatus" class="form-control" style="width:100px;"> <label style="font-size:12px;">车辆点熄火状态:</label><select id="fireStatus" class="form-control" style="width:100px;">
<option value="0">熄火</option> <option value="0">熄火</option>
<option value="128" selected="selected">点火</option> <option value="1" selected="selected">点火</option>
</select> </select>
</li> </li>
<li><label>电瓶电压:</label><input id="valtage" type="text" class="form-control" value="36.9"></li> <li><label>电瓶电压:</label><input id="valtage" type="text" class="form-control" value="36.9"></li>
...@@ -130,7 +130,7 @@ ...@@ -130,7 +130,7 @@
var Vdop = $("#Vdop").val(); var Vdop = $("#Vdop").val();
var isLocationValid = parseInt($("#isLocationValid").val()); var isLocationValid = parseInt($("#isLocationValid").val());
var locationMode = parseInt($("#isLocationValid").val()); var locationMode = parseInt($("#locationMode").val());
var locationType = parseInt($("#locationType").val()); var locationType = parseInt($("#locationType").val());
var staticMileageMode = parseInt($("#staticMileageMode").val()); var staticMileageMode = parseInt($("#staticMileageMode").val());
var fireStatus = parseInt($("#fireStatus").val()); var fireStatus = parseInt($("#fireStatus").val());
......
...@@ -124,6 +124,7 @@ ...@@ -124,6 +124,7 @@
</h5> </h5>
<div id="event_area" style="display:none;"> <div id="event_area" style="display:none;">
<div style="margin-top:10px;width:100%;border-width:1px;border-style:solid;border-color:darkgray;border-radius:10px;padding:2px;background:skyblue;"> <div style="margin-top:10px;width:100%;border-width:1px;border-style:solid;border-color:darkgray;border-radius:10px;padding:2px;background:skyblue;">
<label style="padding: 0px 10px;"><input type="checkbox" id="insertAlarm_check" onclick="eventSelect(this)" checked />终端插入报警 </label>
<label style="padding: 0px 10px;"><input type="checkbox" id="lowVoltage_check" onclick="eventSelect(this)" checked />汽车电瓶低电压报警 </label> <label style="padding: 0px 10px;"><input type="checkbox" id="lowVoltage_check" onclick="eventSelect(this)" checked />汽车电瓶低电压报警 </label>
<label style="padding: 0px 10px;"><input type="checkbox" id="powerOff_check" onclick="eventSelect(this)" checked />终端主电断电报警 </label> <label style="padding: 0px 10px;"><input type="checkbox" id="powerOff_check" onclick="eventSelect(this)" checked />终端主电断电报警 </label>
<label style="padding: 0px 10px;"><input type="checkbox" id="rapidlyAccelerateEvent_check" onclick="eventSelect(this)" checked />急加速 </label> <label style="padding: 0px 10px;"><input type="checkbox" id="rapidlyAccelerateEvent_check" onclick="eventSelect(this)" checked />急加速 </label>
...@@ -137,6 +138,7 @@ ...@@ -137,6 +138,7 @@
<label style="padding: 0px 10px;"><input type="checkbox" id="surplusOil_check" onclick="eventSelect(this)" checked />剩余油量异常告警 </label> <label style="padding: 0px 10px;"><input type="checkbox" id="surplusOil_check" onclick="eventSelect(this)" checked />剩余油量异常告警 </label>
</div> </div>
<div style="padding:10px;"> <div style="padding:10px;">
<span id="insertAlarm_button" style="display:inline;"><button type="button" class="btn btn-primary" onclick="sendInsertAlarmEvent(this)">终端插入报警</button></label></span>
<span id="lowVoltage_button" style="display:inline;"><button type="button" class="btn btn-primary" onclick="sendLowVoltageEvent(this)">汽车电瓶低电压报警</button></label></span> <span id="lowVoltage_button" style="display:inline;"><button type="button" class="btn btn-primary" onclick="sendLowVoltageEvent(this)">汽车电瓶低电压报警</button></label></span>
<span id="powerOff_button" style="display:inline;"><button type="button" class="btn btn-primary" onclick="sendPowerOffEvent(this)">终端主电断电报警</button></label></span> <span id="powerOff_button" style="display:inline;"><button type="button" class="btn btn-primary" onclick="sendPowerOffEvent(this)">终端主电断电报警</button></label></span>
<span id="rapidlyAccelerateEvent_button" style="display:inline;"><button type="button" class="btn btn-primary" onclick="sendRapidlyAccelerateEvent(this)">急加速</button></label></span> <span id="rapidlyAccelerateEvent_button" style="display:inline;"><button type="button" class="btn btn-primary" onclick="sendRapidlyAccelerateEvent(this)">急加速</button></label></span>
...@@ -164,6 +166,10 @@ ...@@ -164,6 +166,10 @@
<span style="margin-left:10px"><label>油耗(Km/L):</label><input style="width:80px;margin-right:5px;" id="change_oilExpend" type="text" class="form-control" value="10"><button type="button" class="btn btn-primary" onclick="changeOilExpend()">改变油耗</button></span> <span style="margin-left:10px"><label>油耗(Km/L):</label><input style="width:80px;margin-right:5px;" id="change_oilExpend" type="text" class="form-control" value="10"><button type="button" class="btn btn-primary" onclick="changeOilExpend()">改变油耗</button></span>
<span style="margin-left:10px"><label>上报间隔(秒):</label><input style="width:80px;margin-right:5px;" id="change_durTime" type="text" class="form-control" value="5"><button type="button" class="btn btn-primary" onclick="changeDurTime()">改变上报间隔</button></span> <span style="margin-left:10px"><label>上报间隔(秒):</label><input style="width:80px;margin-right:5px;" id="change_durTime" type="text" class="form-control" value="5"><button type="button" class="btn btn-primary" onclick="changeDurTime()">改变上报间隔</button></span>
<span style="margin-left:10px;"><button title="点击后,将会把上报的消息存到本地,不上报消息;用来模拟车机无信号的情况" type="button" class="btn btn-primary" onclick="storeMsg()" id="storeMsgBut">存储上报消息</button><label style="color:red;" id="storeMsgLab">未存储...</label></span> <span style="margin-left:10px;"><button title="点击后,将会把上报的消息存到本地,不上报消息;用来模拟车机无信号的情况" type="button" class="btn btn-primary" onclick="storeMsg()" id="storeMsgBut">存储上报消息</button><label style="color:red;" id="storeMsgLab">未存储...</label></span>
<span style="margin-top:10px;display:inline-block;border-width:1px;border-style:solid;border-color:darkgray;border-radius:10px;padding:1px 10px;margin-left:10px;">
<label><input name="GPSValie" value="1" type="radio" onclick="changeGPSValid(this)" checked="checked">GPS有效</label>
<label style="margin-left:10px;color:red;"><input name="GPSValie" value="0" type="radio" onclick="changeGPSValid(this)">GPS无效</label>
</span>
</div> </div>
</div> </div>
</div> </div>
...@@ -646,7 +652,9 @@ function isShowEventArea(e){ ...@@ -646,7 +652,9 @@ function isShowEventArea(e){
//事件的选择与取消选择 //事件的选择与取消选择
function eventSelect(e){ function eventSelect(e){
if($(e).is(':checked')){ if($(e).is(':checked')){
if($(e).attr("id") == "lowVoltage_check"){ if($(e).attr("id") == "insertAlarm_check"){
$("#insertAlarm_button").css("display","inline")
}else if($(e).attr("id") == "lowVoltage_check"){
$("#lowVoltage_button").css("display","inline") $("#lowVoltage_button").css("display","inline")
}else if($(e).attr("id") == "powerOff_check"){ }else if($(e).attr("id") == "powerOff_check"){
$("#powerOff_button").css("display","inline") $("#powerOff_button").css("display","inline")
...@@ -670,7 +678,9 @@ function eventSelect(e){ ...@@ -670,7 +678,9 @@ function eventSelect(e){
$("#surplusOil_button").css("display","inline") $("#surplusOil_button").css("display","inline")
} }
}else{ }else{
if($(e).attr("id") == "lowVoltage_check"){ if($(e).attr("id") == "insertAlarm_check"){
$("#insertAlarm_button").css("display","none")
}else if($(e).attr("id") == "lowVoltage_check"){
$("#lowVoltage_button").css("display","none") $("#lowVoltage_button").css("display","none")
}else if($(e).attr("id") == "powerOff_check"){ }else if($(e).attr("id") == "powerOff_check"){
$("#powerOff_button").css("display","none") $("#powerOff_button").css("display","none")
...@@ -695,6 +705,12 @@ function eventSelect(e){ ...@@ -695,6 +705,12 @@ function eventSelect(e){
} }
} }
} }
//发送终端插入报警
function sendInsertAlarmEvent(){
var data = getPageData()
url = "/protocolTools/M_carSimulater_process/sendInsertAlarmEvent";
sendjson(data,url);
}
//发送汽车电瓶低电压报警 //发送汽车电瓶低电压报警
function sendLowVoltageEvent(){ function sendLowVoltageEvent(){
var data = getPageData() var data = getPageData()
...@@ -885,6 +901,20 @@ function storeMsg(){ ...@@ -885,6 +901,20 @@ function storeMsg(){
} }
} }
//控制GPS是否有效
function changeGPSValid(e){
var data = {}
var carId = $("#carId").val()
var GPSValid = $(e).val()
data["carId"] = carId
data["GPSValid"] = GPSValid
//会话session数据
data["session"] = {}
var sessionId = $("#curSession").val()
data["session"]["sessionId"] = sessionId
url = "/protocolTools/M_carSimulater_process/controlGPSValid";
sendjson(data,url);
}
</script> </script>
{% endblock %} {% endblock %}
</div> </div>
......
...@@ -293,6 +293,7 @@ ...@@ -293,6 +293,7 @@
</div> </div>
<div style="margin-top:10px;width:100%;border-width:1px;border-style:solid;border-color:darkgray;border-radius:10px;padding:2px;background:skyblue;"> <div style="margin-top:10px;width:100%;border-width:1px;border-style:solid;border-color:darkgray;border-radius:10px;padding:2px;background:skyblue;">
<h5><b>选择要上报的事件:</b></h5> <h5><b>选择要上报的事件:</b></h5>
<label style="padding: 0px 10px;"><input type="checkbox" id="0001" onclick="eventSelect(this)"/>终端插入报警 </label>
<label style="padding: 0px 10px;"><input type="checkbox" id="0003" onclick="eventSelect(this)"/>汽车电瓶低电压报警 </label> <label style="padding: 0px 10px;"><input type="checkbox" id="0003" onclick="eventSelect(this)"/>汽车电瓶低电压报警 </label>
<label style="padding: 0px 10px;"><input type="checkbox" id="0004" onclick="eventSelect(this)"/>终端主电断电报警 </label> <label style="padding: 0px 10px;"><input type="checkbox" id="0004" onclick="eventSelect(this)"/>终端主电断电报警 </label>
<label style="padding: 0px 10px;"><input type="checkbox" id="0010" onclick="eventSelect(this)"/>点火 </label> <label style="padding: 0px 10px;"><input type="checkbox" id="0010" onclick="eventSelect(this)"/>点火 </label>
...@@ -310,6 +311,10 @@ ...@@ -310,6 +311,10 @@
<label style="padding: 0px 10px;"><input type="checkbox" id="0037" onclick="eventSelect(this)"/>高档低速报警 </label> <label style="padding: 0px 10px;"><input type="checkbox" id="0037" onclick="eventSelect(this)"/>高档低速报警 </label>
<label style="padding: 0px 10px;"><input type="checkbox" id="004A" onclick="eventSelect(this)"/>剩余油量异常告警 </label> <label style="padding: 0px 10px;"><input type="checkbox" id="004A" onclick="eventSelect(this)"/>剩余油量异常告警 </label>
</div> </div>
<div id="0001_area" style="display:none;margin-top:10px;width:100%;border-width:1px;border-style:solid;border-color:darkgray;border-radius:10px;padding:2px;_background:skyblue;">
<h5><b>终端插入报警:</b></h5>
<span><label>插入时间:</label><input style="width:160px;" id="insertTime" type="text" class="form-control" value="5"></span>
</div>
<div id="0010_area" style="display:none;margin-top:10px;width:100%;border-width:1px;border-style:solid;border-color:darkgray;border-radius:10px;padding:2px;_background:skyblue;"> <div id="0010_area" style="display:none;margin-top:10px;width:100%;border-width:1px;border-style:solid;border-color:darkgray;border-radius:10px;padding:2px;_background:skyblue;">
<h5><b>点火事件:</b></h5> <h5><b>点火事件:</b></h5>
<span><label>急加速总次数:</label><input style="width:80px;" id="fire_allRapidlyAccelerateCount" type="text" class="form-control" value="5"></span> <span><label>急加速总次数:</label><input style="width:80px;" id="fire_allRapidlyAccelerateCount" type="text" class="form-control" value="5"></span>
...@@ -568,6 +573,9 @@ function getData(){ ...@@ -568,6 +573,9 @@ function getData(){
data["gpsInfo"] = getGPSData(); data["gpsInfo"] = getGPSData();
data["securityData"] = getSecurityData() data["securityData"] = getSecurityData()
data["event"] = {}; data["event"] = {};
if($("#0001").is(':checked')){
data["event"]["0001"] = get0001(); //获取熄火事件数据
}
if($("#0003").is(':checked')){ if($("#0003").is(':checked')){
data["event"]["0003"] = {}; //汽车电瓶低电压报警 data["event"]["0003"] = {}; //汽车电瓶低电压报警
} }
...@@ -610,6 +618,11 @@ function getData(){ ...@@ -610,6 +618,11 @@ function getData(){
return data; return data;
} }
function get0001(){ //获取终端插入报警事件数据
data = {};
data["insertTime"] = $("#insertTime").val();
return data;
}
function get0010(){ //获取点火事件数据 function get0010(){ //获取点火事件数据
data = {}; data = {};
data["allRapidlyAccelerateCount"] = $("#fire_allRapidlyAccelerateCount").val(); data["allRapidlyAccelerateCount"] = $("#fire_allRapidlyAccelerateCount").val();
...@@ -701,7 +714,9 @@ function isShowSecurityArea(e){ ...@@ -701,7 +714,9 @@ function isShowSecurityArea(e){
//事件多选按钮的处理事项 //事件多选按钮的处理事项
function eventSelect(e){ function eventSelect(e){
if($(e).is(':checked')){ if($(e).is(':checked')){
if($(e).attr("id") == "0010"){ if($(e).attr("id") == "0001"){
$("#0001_area").css("display","block")
}else if($(e).attr("id") == "0010"){
$("#0010_area").css("display","block") $("#0010_area").css("display","block")
}else if($(e).attr("id") == "0011"){ }else if($(e).attr("id") == "0011"){
$("#0011_area").css("display","block") $("#0011_area").css("display","block")
...@@ -721,7 +736,9 @@ function eventSelect(e){ ...@@ -721,7 +736,9 @@ function eventSelect(e){
$("#004A_area").css("display","block") $("#004A_area").css("display","block")
} }
}else{ }else{
if($(e).attr("id") == "0010"){ if($(e).attr("id") == "0001"){
$("#0001_area").css("display","none")
}else if($(e).attr("id") == "0010"){
$("#0010_area").css("display","none") $("#0010_area").css("display","none")
}else if($(e).attr("id") == "0011"){ }else if($(e).attr("id") == "0011"){
$("#0011_area").css("display","none") $("#0011_area").css("display","none")
...@@ -747,6 +764,7 @@ function eventSelect(e){ ...@@ -747,6 +764,7 @@ function eventSelect(e){
(function(){ (function(){
var curTime = getCurTime(); var curTime = getCurTime();
$("#UTCTime").val(curTime); $("#UTCTime").val(curTime);
$("#insertTime").val(curTime);
})(); })();
//设置当前时间戳到GPS信息时间戳输入框 //设置当前时间戳到GPS信息时间戳输入框
......
...@@ -108,4 +108,18 @@ def P_CAN_m300_page(): ...@@ -108,4 +108,18 @@ def P_CAN_m300_page():
arg = {} arg = {}
path = "m300Tools/report/P_CAN_m300_page.html" path = "m300Tools/report/P_CAN_m300_page.html"
arg["path"] = reqPath.split("/") arg["path"] = reqPath.split("/")
return render_template(path,arg=arg)
##########################################
# 【视图类型】访问OBD CAN协议页面
##########################################
@P_m300Protocol_view.route('/P_alarm_m300_page')
def P_alarm_m300_page():
#获取请求的路劲
url = request.url
reqPath = re.findall("http://(.*)$",url)[0]
reqPath = re.findall("/(.*)$", reqPath)[0]
arg = {}
path = "m300Tools/report/P_alarm_m300_page.html"
arg["path"] = reqPath.split("/")
return render_template(path,arg=arg) return render_template(path,arg=arg)
\ No newline at end of file
...@@ -395,6 +395,48 @@ def getConnects(): ...@@ -395,6 +395,48 @@ def getConnects():
return Response(json.dumps(data), mimetype='application/json') return Response(json.dumps(data), mimetype='application/json')
#--------------------------------------- 发送事件逻辑 --------------------------------------- #--------------------------------------- 发送事件逻辑 ---------------------------------------
##########################################
# 【接口类型】发送终端插入报警事件
##########################################
@M_carSimulater_process.route("/sendInsertAlarmEvent",methods=['POST'])
def sendInsertAlarmEvent():
params = request.get_data()
params = json.loads(params.decode("utf-8"))
sessionId = params["session"]["sessionId"]
data = {}
if not sessionId in connects.keys():
data["status"] = "4003"
data["message"] = "Error: 未启动服务,不可发送终端插入报警事件!"
return Response(json.dumps(data), mimetype='application/json')
service = connects[sessionId]["service"]
try:
jdata = {"WATER_CODE": "0003", "DEV_ID": "M121501010001",
"gpsInfo": {"UTCTime": "2020-04-30 14:59:33", "latitude": "40.22077", "longitude": "116.23128",
"speed": "80.8", "directionAngle": "80.8", "elevation": "2999.9", "positionStar": "3",
"Pdop": "0.3", "Hdop": "0.4", "Vdop": "0.5", "statusBit": 162, "valtage": "36.9",
"OBDSpeed": "60.9", "engineSpeed": "3000", "GPSTotalMileage": "12800", "totalOil": "100000",
"totalTime": "2020002", "GPSTimestamp": "1588229973"},
"securityData": {"securityStatus": 107, "doorStatus": 0, "lockStatus": 0, "windowStatus": 0,
"lightStatus": 0, "onoffStatusA": 0, "onoffStatusB": 112, "dataByte": 249},
"event": {"0001": {}}}
jdata["DEV_ID"] = params["carId"]
obj = EventReport_protocol(data=jdata)
gpsData = service.genGPSData2()
obj.setGPSPkg(gpsData)
obj.setEventType("0001")
msg = obj.generateEventMsg()
service.serviceSendMsg(msg, "发送终端插入报警事件")
service.setSn(service.getSn() + 1)
data["status"] = "200"
data["message"] = "发送终端插入报警事件成功!"
except BaseException as e:
# 打印异常信息
traceback.print_exc()
data["status"] = "4003"
data["message"] = "Error: 发送终端插入报警事件失败!"
return Response(json.dumps(data), mimetype='application/json')
########################################## ##########################################
# 【接口类型】发送汽车电瓶低电压事件 # 【接口类型】发送汽车电瓶低电压事件
########################################## ##########################################
...@@ -1042,4 +1084,31 @@ def controlStoreMsg(): ...@@ -1042,4 +1084,31 @@ def controlStoreMsg():
traceback.print_exc() traceback.print_exc()
data["status"] = "4003" data["status"] = "4003"
data["message"] = "Error: 控制是否存储消息到本地失败!" data["message"] = "Error: 控制是否存储消息到本地失败!"
return Response(json.dumps(data), mimetype='application/json')
##########################################
# 【接口类型】控制GPS 是有效还是无效
##########################################
@M_carSimulater_process.route("/controlGPSValid",methods=['POST'])
def controlGPSValid():
params = request.get_data()
params = json.loads(params.decode("utf-8"))
sessionId = params["session"]["sessionId"]
data = {}
if not sessionId in connects.keys():
data["status"] = "4003"
data["message"] = "Error: 未启动服务,不可设置GPS有效信息!"
return Response(json.dumps(data), mimetype='application/json')
service = connects[sessionId]["service"]
try:
GPSValid = int(params["GPSValid"])
service.setGPSValid(GPSValid)
data["status"] = "200"
data["message"] = "设置GPS有效信息成功!"
except BaseException as e:
# 打印异常信息
traceback.print_exc()
data["status"] = "4003"
data["message"] = "Error: 设置GPS有效信息失败!"
return Response(json.dumps(data), mimetype='application/json') return Response(json.dumps(data), mimetype='application/json')
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment