您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Export GPS point of your drives.
当前为
// ==UserScript== // @name WME Export Trajet // @name:fr WME Export Trajet // @version 0.7 // @description Export GPS point of your drives. // @description:fr Export des coordonée GPS de vos trajet. // @include https://www.waze.com/editor/* // @include https://www.waze.com/*/editor/* // @include https://editor-beta.waze.com/* // @exclude https://www.waze.com/user/* // @namespace https://greasyfork.org/fr/scripts/14832-wme-export-trajet // @author seb-d59 // @copyright seb-d59 - 2015 // ==/UserScript== var WMEExpT_Version = 0.7; var WMEExpT_Name = "WME Export Trajet"; var WMEExpT = {}; 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=="; var lang={}; WMEExpT.Trajets = {'list': {},'objects':{}}; var resultRequest={}; var debug=true; // ********************* // ** HELPER FUNCTION ** // ********************* function log(msg, obj) { if (obj === undefined) console.log(WMEExpT_Name + " v" + WMEExpT_Version + " - " + msg); else if (debug) console.debug(WMEExpT_Name + " v" + WMEExpT_Version + " - " + msg + " " ,obj); } function getId(node) { return document.getElementById(node); } function getElementsByClassName(classname, node) { node || (node = document.getElementsByTagName("body")[0]); for (var a = [], re = new RegExp("\\b" + classname + "\\b"), els = node.getElementsByTagName("*"), i = 0, j = els.length;i < j;i++) { re.test(els[i].className) && a.push(els[i]); } return a; } function getFunctionWithArgs(func, args) { return ( function () { var json_args = JSON.stringify(args); return function() { var args = JSON.parse(json_args); func.apply(this, args); }; } )(); } // ************* // ** INIT ** // ************* function WMEExpT_bootstrap() { if (typeof unsafeWindow === "undefined") { unsafeWindow = ( function () { var dummyElem = document.createElement('p'); dummyElem.setAttribute('onclick', 'return window;'); return dummyElem.onclick(); }) (); } /* begin running the code! */ log("starting"); WMEExpT_init(); } function WMEExpT_init(){ // Waze object needed /* WMEExpTWaze = unsafeWindow.Waze; if(typeof(WMEExpTWaze) === 'undefined'){ if (debug) { console.error("WME Export Trajet - WMEExpTWaze : NOK"); } window.setTimeout(WMEExpT_init, 500); return; } WMEExpTMap = WMEExpTWaze.map; if(typeof(WMEExpTMap) === 'undefined'){ if (debug) { console.error("WME Export Trajet - WMEExpTmap : NOK"); } window.setTimeout(WMEExpT_init, 500); return; } WMEExpTModel = WMEExpTWaze.model; if(typeof(WMEExpTModel) === 'undefined'){ if (debug) { console.error("WME Export Trajet - WMEExpTModel DOM : NOK"); } window.setTimeout(WMEExpT_init, 500); return; } // OpenLayers WMEExpTOpenLayers = unsafeWindow.OpenLayers; if(typeof(WMEExpTOpenLayers) === 'undefined'){ if (debug) { console.error("WME Export Trajet - OpenLayers : NOK"); } window.setTimeout(WMEExpT_init, 500); return; } */ // Traductions WMEExpTI18n = unsafeWindow.I18n.locale; if(typeof(WMEExpTI18n) === 'undefined'){ if (debug) { console.error("WME Export Trajet - WMEExpTI18n : NOK"); } setTimeout(WMEExpT_init, 500); return; } // Waze GUI needed WMEExpT_userInfo = getId("user-info"); if(typeof(WMEExpT_userInfo) === 'undefined'){ if (debug) { console.error("WME Export Trajet - WMEExpT_userInfo : NOK"); } setTimeout(WMEExpT_init, 500); return; } WMEExpT_navTabs = getElementsByClassName("nav-tabs", WMEExpT_userInfo)[0]; if(typeof(WMEExpT_navTabs) === 'undefined'){ if (debug) { console.error("WME Export Trajet - WMEExpT_navTabs : NOK"); } setTimeout(WMEExpT_init, 500); return; } WMEExpT_tabContent = getElementsByClassName("tab-content", WMEExpT_userInfo)[0]; if(typeof(WMEExpT_tabContent) === 'undefined'){ if (debug) { console.error("WME Export Trajet - WMEExpT_tabContent : NOK"); } setTimeout(WMEExpT_init, 500); return; } WMEExpTDrives = getId("sidepanel-drives"); if(typeof(WMEExpTDrives) === 'undefined'){ if (debug) { console.error("WME Export Trajet - WMEExpTDrives : NOK"); } setTimeout(WMEExpT_Main, 1000); return; } /* if (typeof(localStorage.WMEExportTrajets) !== "undefined") { localStorage.removeItem("WMEExportTrajets"); } if (typeof(sessionStorage.WMEExportTrajets) !== "undefined") { sessionStorage.removeItem("WMEExportTrajets"); } */ //====================================================== // Translation if (WMEExpTI18n == "fr") { lang = new Array("Export","Selectionnez le trajet"); } else { lang = new Array("Export","Select the Drive"); } log("init ok"); // Then running WMEExpT_css(); } // ************* // ** HTML ** // ************* function WMEExpT_css() { var Scss = document.createElement("style"); Scss.type = "text/css"; var css =".CSETcontent {width:260px; margin-left:10px; box-shadow: 0 4px 10px #aaa;}"; css +=".divl {float:left; text-align:center;}"; css +=".divr {float:right; text-align:center;}"; css +="#export {width:35px; height:22px;}"; Scss.innerHTML = css; document.body.appendChild(Scss); log('CSS Ok'); WMEExpT_html(); } function WMEExpT_html() { var addon= document.createElement('div', "ExpT-cotent"); var content = "<div style='float:left; margin-left:5px;'><b><a href='https://greasyfork.org/fr/scripts/14832-wme-export-trajet' target='_blank'><u>"+ WMEExpT_Name +"</u></a></b> v"+ WMEExpT_Version +"</div><br>"; content += "<div style='clear:both; padding-top:10px;'></div><div class='CSETcontent' >"; content += "<div class='divl' style='width:240px; text-align:left;'><select id='selectTrajet' style='width:200px;'>"; content +="<option value='0' id='0'>"+lang[1]+"</option>"; content +="</select></div>"; 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>"; addon.innerHTML = content; WMEExpTDrives.appendChild(addon); getId('selectTrajet').onfocus = updateTrajetsList; getId('selectTrajet').onchange = ExpTrajet; log('html Ok'); } function updateTrajetsList() { var available_Trajets = getElementsByClassName('result session session-available'); if(typeof(available_Trajets) === 'undefined'){ if (debug) { console.error("WME Export Trajet - available_Trajets : NOK"); } return; } var selectTrajet = getId('selectTrajet'); selectTrajet.options.length = 1; for (var i=0;i<available_Trajets.length;i++){ var trajetID= available_Trajets[i]['dataset'].id; var trajetDetail = available_Trajets[i].childNodes[1].childNodes[0].textContent; WMEExpT.Trajets.list[trajetID] = trajetDetail.replace(/,/g,''); var expTrOption = document.createElement('option'); var expTrText = document.createTextNode(WMEExpT.Trajets.list[trajetID]); expTrOption.setAttribute('value','0'); expTrOption.setAttribute('id', trajetID); expTrOption.appendChild(expTrText); selectTrajet.appendChild(expTrOption); } log('updateTrajetsList Ok'); } function ExpTrajet() { var selectTrajet = getId('selectTrajet'); if (selectTrajet.selectedIndex <= 0) return; id = selectTrajet.options[selectTrajet.selectedIndex].id; if (id <= 0) return; if (!WMEExpT.Trajets.objects.hasOwnProperty(id)) { var url = "https://www.waze.com/row-Descartes-live/app/Archive/Session?id="+id; RequestObject = window.ActiveXObject // ? new ActiveXObject("Microsoft.XMLHTTP") ? new ActiveXObject("Msxml2.XMLHTTP") : new XMLHttpRequest(); RequestObject.onreadystatechange = function() { if(RequestObject.readyState == 4) { resultRequest={}; resultRequest = JSON.parse(RequestObject.responseText); WMEExpT.Trajets.objects[id] = resultRequest.archiveSessions.objects[0]; log('New data download link ok: '+ WMEExpT.Trajets.list[id]+'; id= '+ id); generateFile(); } }; RequestObject.open("GET", url,false); RequestObject.send(null); }else { log('data download link ok: '+ WMEExpT.Trajets.list[id]+'; id= '+ id); log('WMEExpT.Trajets.objects[id].gpx',WMEExpT.Trajets.objects[id].gpx); getId('exportTrajet').setAttribute('download', WMEExpT.Trajets.list[id]+ '.gpx'); getId('exportTrajet').href='data:Application/octet-stream,' + encodeURIComponent(WMEExpT.Trajets.objects[id].gpx); } } function generateFile(){ 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'; entete += '<trk>\n'; var contenu = document.createElement('contenu'); contenu.id='Détail_'+id; contenu.innerHTML = WMEExpT.Trajets.objects[id].data; log('contenu',contenu); var roadName = contenu.getElementsByTagName("MYNS:NAME"); log(roadName[0].textContent +' vers '+ roadName[roadName.length-1].textContent); var nameIti = '<name>'+ roadName[0].textContent +' vers '+ roadName[roadName.length-1].textContent +'</name>\n<trkseg>\n'; var child = contenu.childNodes[2].childNodes; //log('child',child); //************************************************// // Sens de déplacement: // // si direction="1" => node A -> B // // si direction="2" => node B -> A // //************************************************// //************************************************// // Format du Fichier: // // <gpx .......> // <trk> // <name>Test Traces</name> // <trkseg> // <trkpt lat="..." lon="..."> // </trkpt> // ..... // <trkpt lat="..." lon="..."> // </trkpt> // </trkseg> // </trk> // </gpx> // //***********************************************// var traitementlonlat=[]; for (var i=3; i<child.length; i=i+2){ traitementlonlat.push(child[i].childNodes[1].childNodes[3].childNodes[1].childNodes[1].textContent); } //log('traitementlonlat',traitementlonlat); var lonlat=[]; for (i=0; i < traitementlonlat.length; i++){ //log('traitementlonlat['+i+'] = ' + traitementlonlat[i]); if (traitementlonlat[i] !== undefined) traitementlonlat[i] = traitementlonlat[i].split(" "); } //log('traitementlonlat après split',traitementlonlat); for (i=0; i < traitementlonlat.length; i++){ for (j=0; j < traitementlonlat[i].length; j++){ if ((traitementlonlat[i][j] != "\n") & (traitementlonlat[i][j] != "")) lonlat.push(traitementlonlat[i][j].split(",")); } } var lonlatText = ""; log('lonlat',lonlat); for (i=0; i<lonlat.length;i++){ lonlatText += '<trkpt lon="' + lonlat[i][0] +'" lat="'+ lonlat[i][1] +'"></trkpt>\n'; } var end = '</trkseg>\n</trk>\n</gpx>'; WMEExpT.Trajets.objects[id].gpx = entete + nameIti + lonlatText + end; log('WMEExpT.Trajets.objects[id].gpx',WMEExpT.Trajets.objects[id].gpx); getId('exportTrajet').setAttribute('download', WMEExpT.Trajets.list[id]+ '.gpx'); getId('exportTrajet').href='data:Application/octet-stream,' + encodeURIComponent(WMEExpT.Trajets.objects[id].gpx); } /* begin running the code! */ WMEExpT_bootstrap ();