WME Export Trajet

Export GPS point of your drives.

目前为 2015-12-16 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name WME Export Trajet
  3. // @name:fr WME Export Trajet
  4. // @version 0.7
  5. // @description Export GPS point of your drives.
  6. // @description:fr Export des coordonée GPS de vos trajet.
  7. // @include https://www.waze.com/editor/*
  8. // @include https://www.waze.com/*/editor/*
  9. // @include https://editor-beta.waze.com/*
  10. // @exclude https://www.waze.com/user/*
  11. // @namespace https://gf.qytechs.cn/fr/scripts/14832-wme-export-trajet
  12. // @author seb-d59
  13. // @copyright seb-d59 - 2015
  14. // ==/UserScript==
  15.  
  16.  
  17. var WMEExpT_Version = 0.7;
  18. var WMEExpT_Name = "WME Export Trajet";
  19.  
  20. var WMEExpT = {};
  21. var icon_export="iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3wgBFAggT+iJkgAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAADUklEQVR42u2dTWsTURSGn5lOrEoJVYsff0AqUhHEreBW40IR/FiJKze6cV2NuhFdiFgQXLgQf0ARXIk7t3UhLYp/QBTFEksbmibjYk4kxHSMucn96JwXhtAmTU6fOfecc++cuYmwoxIQ459aQMPkDSILRk4CN4EZDwEuAQ+BZTxVCbgH/ACaHh4/gUdykr3UODAvxqaeHkYQY1STwBXg9iAQEwcG14AFYMXBZ1c2ifttiAB3/icmugC4AFwWI1OLoeRlF7waUDaF6ALgihhXd1CydOo5cNUUoqsYmDr63E6I0wKxZhITi5xEGsB9U4hFz8LLMlQHhqhljCFEBWgIUQEaQlSAhhAVoCHEpMCgJoBdspjQrTUpccgptleBapEBHpPpXd6cvJQzYzkMxEUGWAZO9vG6U3klYJEBDpIDWt1/U5Qk0iJbvq8N+42L4oENsmsfMNi1mRjYAM4UFWC7PKkOOOrGgRdF9sBOT3QaRFUKUAEqQAWoUoAKUAH2rW3ADux0km05gBGwBzgnj5ECHGwadR64AUz5BjEEgBGwl2xR87pvEENJIjFwwEeIIWVhLyGOejVmA7jI8DqxOiECPAG+465ZaeQA273Io/JE5xCTnMA9JsZGjkfIPmB7DsQImAO+uYDYC+AYWe9cBTgC7HQIMQH2AwdzPPGaQL4FfLUNMenhedPAXeAE2fVP14km/sdzU8AF+XnWticmPbyvIvCmAsrQZeCseOBjiYlOzm4sw2UiwHn9buAScBqL13q6AbaAz7i5BcFU68Ai8H4Emb9vgE3gNfBOhsFGIPDqwBuJ3R9dxsBUDJjtysKuEsmYZNhDYkcevCrwwfZJTzYpfpeAT/IPuJ4pzQBPgaO+wcsrpFMxxvUQXpfMWvcRXmiLCd7BswGw1+2ur+T3wcML0QO9gmdjNWaYWgXe+gQvJIBrHXWeN/BCAdiUwn7eN3ghAEzJGiOfAV9sTtG2kgf+kiP10bgQAKY+G6e9MQpQASpABahSgApQASpAlQJUgApQAaoUoAIMSC7WA/M2vPFVk2zSseYCYD8b3vimCeB4rxHrAmC/G94EEe4Sn4zRJPK3RrbhjWPVyJo5W6P2QNMNb3zVIvAAaNi6faHE1iqZ/nyNxm/UEhZ+/DhJcwAAAABJRU5ErkJggg==";
  22. var lang={};
  23. WMEExpT.Trajets = {'list': {},'objects':{}};
  24.  
  25. var resultRequest={};
  26.  
  27. var debug=true;
  28.  
  29. // *********************
  30. // ** HELPER FUNCTION **
  31. // *********************
  32.  
  33. function log(msg, obj)
  34. {
  35. if (obj === undefined)
  36. console.log(WMEExpT_Name + " v" + WMEExpT_Version + " - " + msg);
  37. else if (debug)
  38. console.debug(WMEExpT_Name + " v" + WMEExpT_Version + " - " + msg + " " ,obj);
  39. }
  40.  
  41. function getId(node) {
  42. return document.getElementById(node);
  43. }
  44. function getElementsByClassName(classname, node) {
  45. node || (node = document.getElementsByTagName("body")[0]);
  46. for (var a = [], re = new RegExp("\\b" + classname + "\\b"), els = node.getElementsByTagName("*"), i = 0, j = els.length;i < j;i++) {
  47. re.test(els[i].className) && a.push(els[i]);
  48. }
  49. return a;
  50. }
  51. function getFunctionWithArgs(func, args) {
  52. return (
  53. function () {
  54. var json_args = JSON.stringify(args);
  55. return function() {
  56. var args = JSON.parse(json_args);
  57. func.apply(this, args);
  58. };
  59. }
  60. )();
  61. }
  62.  
  63.  
  64. // *************
  65. // ** INIT **
  66. // *************
  67. function WMEExpT_bootstrap() {
  68. if (typeof unsafeWindow === "undefined") {
  69. unsafeWindow = ( function () {
  70. var dummyElem = document.createElement('p');
  71. dummyElem.setAttribute('onclick', 'return window;');
  72. return dummyElem.onclick();
  73. }) ();
  74. }
  75.  
  76. /* begin running the code! */
  77. log("starting");
  78. WMEExpT_init();
  79. }
  80.  
  81.  
  82. function WMEExpT_init(){
  83. // Waze object needed
  84. /*
  85. WMEExpTWaze = unsafeWindow.Waze;
  86. if(typeof(WMEExpTWaze) === 'undefined'){
  87. if (debug) { console.error("WME Export Trajet - WMEExpTWaze : NOK"); }
  88. window.setTimeout(WMEExpT_init, 500);
  89. return;
  90. }
  91. WMEExpTMap = WMEExpTWaze.map;
  92. if(typeof(WMEExpTMap) === 'undefined'){
  93. if (debug) { console.error("WME Export Trajet - WMEExpTmap : NOK"); }
  94. window.setTimeout(WMEExpT_init, 500);
  95. return;
  96. }
  97. WMEExpTModel = WMEExpTWaze.model;
  98. if(typeof(WMEExpTModel) === 'undefined'){
  99. if (debug) { console.error("WME Export Trajet - WMEExpTModel DOM : NOK"); }
  100. window.setTimeout(WMEExpT_init, 500);
  101. return;
  102. }
  103. // OpenLayers
  104. WMEExpTOpenLayers = unsafeWindow.OpenLayers;
  105. if(typeof(WMEExpTOpenLayers) === 'undefined'){
  106. if (debug) { console.error("WME Export Trajet - OpenLayers : NOK"); }
  107. window.setTimeout(WMEExpT_init, 500);
  108. return;
  109. }
  110. */
  111. // Traductions
  112. WMEExpTI18n = unsafeWindow.I18n.locale;
  113. if(typeof(WMEExpTI18n) === 'undefined'){
  114. if (debug) { console.error("WME Export Trajet - WMEExpTI18n : NOK"); }
  115. setTimeout(WMEExpT_init, 500);
  116. return;
  117. }
  118. // Waze GUI needed
  119. WMEExpT_userInfo = getId("user-info");
  120. if(typeof(WMEExpT_userInfo) === 'undefined'){
  121. if (debug) { console.error("WME Export Trajet - WMEExpT_userInfo : NOK"); }
  122. setTimeout(WMEExpT_init, 500);
  123. return;
  124. }
  125. WMEExpT_navTabs = getElementsByClassName("nav-tabs", WMEExpT_userInfo)[0];
  126. if(typeof(WMEExpT_navTabs) === 'undefined'){
  127. if (debug) { console.error("WME Export Trajet - WMEExpT_navTabs : NOK"); }
  128. setTimeout(WMEExpT_init, 500);
  129. return;
  130. }
  131. WMEExpT_tabContent = getElementsByClassName("tab-content", WMEExpT_userInfo)[0];
  132. if(typeof(WMEExpT_tabContent) === 'undefined'){
  133. if (debug) { console.error("WME Export Trajet - WMEExpT_tabContent : NOK"); }
  134. setTimeout(WMEExpT_init, 500);
  135. return;
  136. }
  137. WMEExpTDrives = getId("sidepanel-drives");
  138. if(typeof(WMEExpTDrives) === 'undefined'){
  139. if (debug) { console.error("WME Export Trajet - WMEExpTDrives : NOK"); }
  140. setTimeout(WMEExpT_Main, 1000);
  141. return;
  142. }
  143.  
  144. /*
  145. if (typeof(localStorage.WMEExportTrajets) !== "undefined") {
  146. localStorage.removeItem("WMEExportTrajets");
  147. }
  148. if (typeof(sessionStorage.WMEExportTrajets) !== "undefined") {
  149. sessionStorage.removeItem("WMEExportTrajets");
  150. }
  151. */
  152. //======================================================
  153.  
  154. // Translation
  155. if (WMEExpTI18n == "fr") {
  156. lang = new Array("Export","Selectionnez le trajet");
  157. }
  158. else {
  159. lang = new Array("Export","Select the Drive");
  160. }
  161. log("init ok");
  162. // Then running
  163. WMEExpT_css();
  164. }
  165.  
  166.  
  167. // *************
  168. // ** HTML **
  169. // *************
  170.  
  171. function WMEExpT_css() {
  172. var Scss = document.createElement("style");
  173. Scss.type = "text/css";
  174. var css =".CSETcontent {width:260px; margin-left:10px; box-shadow: 0 4px 10px #aaa;}";
  175. css +=".divl {float:left; text-align:center;}";
  176. css +=".divr {float:right; text-align:center;}";
  177. css +="#export {width:35px; height:22px;}";
  178. Scss.innerHTML = css;
  179. document.body.appendChild(Scss);
  180. log('CSS Ok');
  181. WMEExpT_html();
  182. }
  183.  
  184.  
  185. function WMEExpT_html() {
  186. var addon= document.createElement('div', "ExpT-cotent");
  187. var content = "<div style='float:left; margin-left:5px;'><b><a href='https://gf.qytechs.cn/fr/scripts/14832-wme-export-trajet' target='_blank'><u>"+ WMEExpT_Name +"</u></a></b> v"+ WMEExpT_Version +"</div><br>";
  188. content += "<div style='clear:both; padding-top:10px;'></div><div class='CSETcontent' >";
  189. content += "<div class='divl' style='width:240px; text-align:left;'><select id='selectTrajet' style='width:200px;'>";
  190. content +="<option value='0' id='0'>"+lang[1]+"</option>";
  191. content +="</select></div>";
  192. content += "<div class='divr' style='width:20px;'><a href='#' id='exportTrajet'><img style='width:20px;' title='"+ lang[0] +"' src='data:image/png;base64,"+ icon_export +"' /></a></div></div>";
  193. addon.innerHTML = content;
  194. WMEExpTDrives.appendChild(addon);
  195. getId('selectTrajet').onfocus = updateTrajetsList;
  196. getId('selectTrajet').onchange = ExpTrajet;
  197. log('html Ok');
  198. }
  199.  
  200. function updateTrajetsList()
  201. {
  202. var available_Trajets = getElementsByClassName('result session session-available');
  203. if(typeof(available_Trajets) === 'undefined'){
  204. if (debug) { console.error("WME Export Trajet - available_Trajets : NOK"); }
  205. return;
  206. }
  207. var selectTrajet = getId('selectTrajet');
  208. selectTrajet.options.length = 1;
  209.  
  210. for (var i=0;i<available_Trajets.length;i++){
  211. var trajetID= available_Trajets[i]['dataset'].id;
  212. var trajetDetail = available_Trajets[i].childNodes[1].childNodes[0].textContent;
  213. WMEExpT.Trajets.list[trajetID] = trajetDetail.replace(/,/g,'');
  214. var expTrOption = document.createElement('option');
  215. var expTrText = document.createTextNode(WMEExpT.Trajets.list[trajetID]);
  216. expTrOption.setAttribute('value','0');
  217. expTrOption.setAttribute('id', trajetID);
  218. expTrOption.appendChild(expTrText);
  219. selectTrajet.appendChild(expTrOption);
  220. }
  221. log('updateTrajetsList Ok');
  222. }
  223.  
  224. function ExpTrajet() {
  225. var selectTrajet = getId('selectTrajet');
  226. if (selectTrajet.selectedIndex <= 0)
  227. return;
  228. id = selectTrajet.options[selectTrajet.selectedIndex].id;
  229. if (id <= 0)
  230. return;
  231.  
  232. if (!WMEExpT.Trajets.objects.hasOwnProperty(id)) {
  233. var url = "https://www.waze.com/row-Descartes-live/app/Archive/Session?id="+id;
  234. RequestObject = window.ActiveXObject
  235. // ? new ActiveXObject("Microsoft.XMLHTTP")
  236. ? new ActiveXObject("Msxml2.XMLHTTP")
  237. : new XMLHttpRequest();
  238. RequestObject.onreadystatechange = function()
  239. {
  240. if(RequestObject.readyState == 4) {
  241. resultRequest={};
  242. resultRequest = JSON.parse(RequestObject.responseText);
  243. WMEExpT.Trajets.objects[id] = resultRequest.archiveSessions.objects[0];
  244. log('New data download link ok: '+ WMEExpT.Trajets.list[id]+'; id= '+ id);
  245. generateFile();
  246. }
  247. };
  248. RequestObject.open("GET", url,false);
  249. RequestObject.send(null);
  250. }else {
  251. log('data download link ok: '+ WMEExpT.Trajets.list[id]+'; id= '+ id);
  252. log('WMEExpT.Trajets.objects[id].gpx',WMEExpT.Trajets.objects[id].gpx);
  253. getId('exportTrajet').setAttribute('download', WMEExpT.Trajets.list[id]+ '.gpx');
  254. getId('exportTrajet').href='data:Application/octet-stream,' + encodeURIComponent(WMEExpT.Trajets.objects[id].gpx);
  255. }
  256.  
  257. }
  258.  
  259. function generateFile(){
  260.  
  261. var entete = '<?xml version="1.0" encoding="UTF-8"?>\n<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" creator="seb-d59" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">\n';
  262. entete += '<trk>\n';
  263. var contenu = document.createElement('contenu');
  264. contenu.id='Détail_'+id;
  265. contenu.innerHTML = WMEExpT.Trajets.objects[id].data;
  266. log('contenu',contenu);
  267. var roadName = contenu.getElementsByTagName("MYNS:NAME");
  268. log(roadName[0].textContent +' vers '+ roadName[roadName.length-1].textContent);
  269.  
  270. var nameIti = '<name>'+ roadName[0].textContent +' vers '+ roadName[roadName.length-1].textContent +'</name>\n<trkseg>\n';
  271. var child = contenu.childNodes[2].childNodes;
  272. //log('child',child);
  273. //************************************************//
  274. // Sens de déplacement: //
  275. // si direction="1" => node A -> B //
  276. // si direction="2" => node B -> A //
  277. //************************************************//
  278.  
  279. //************************************************//
  280. // Format du Fichier:
  281. //
  282. // <gpx .......>
  283. // <trk>
  284. // <name>Test Traces</name>
  285. // <trkseg>
  286. // <trkpt lat="..." lon="...">
  287. // </trkpt>
  288. // .....
  289. // <trkpt lat="..." lon="...">
  290. // </trkpt>
  291. // </trkseg>
  292. // </trk>
  293. // </gpx>
  294. //
  295. //***********************************************//
  296. var traitementlonlat=[];
  297. for (var i=3; i<child.length; i=i+2){
  298. traitementlonlat.push(child[i].childNodes[1].childNodes[3].childNodes[1].childNodes[1].textContent);
  299. }
  300. //log('traitementlonlat',traitementlonlat);
  301. var lonlat=[];
  302. for (i=0; i < traitementlonlat.length; i++){
  303. //log('traitementlonlat['+i+'] = ' + traitementlonlat[i]);
  304. if (traitementlonlat[i] !== undefined) traitementlonlat[i] = traitementlonlat[i].split(" ");
  305. }
  306. //log('traitementlonlat après split',traitementlonlat);
  307. for (i=0; i < traitementlonlat.length; i++){
  308. for (j=0; j < traitementlonlat[i].length; j++){
  309. if ((traitementlonlat[i][j] != "\n") & (traitementlonlat[i][j] != "")) lonlat.push(traitementlonlat[i][j].split(","));
  310. }
  311. }
  312. var lonlatText = "";
  313. log('lonlat',lonlat);
  314. for (i=0; i<lonlat.length;i++){
  315. lonlatText += '<trkpt lon="' + lonlat[i][0] +'" lat="'+ lonlat[i][1] +'"></trkpt>\n';
  316. }
  317. var end = '</trkseg>\n</trk>\n</gpx>';
  318.  
  319. WMEExpT.Trajets.objects[id].gpx = entete + nameIti + lonlatText + end;
  320. log('WMEExpT.Trajets.objects[id].gpx',WMEExpT.Trajets.objects[id].gpx);
  321. getId('exportTrajet').setAttribute('download', WMEExpT.Trajets.list[id]+ '.gpx');
  322. getId('exportTrajet').href='data:Application/octet-stream,' + encodeURIComponent(WMEExpT.Trajets.objects[id].gpx);
  323. }
  324.  
  325. /* begin running the code! */
  326. WMEExpT_bootstrap ();
  327.  
  328.  

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址