Reversewigo solver ✓🐵 - solve reverse wherigo automatically on cache page. Solver code originated from Rick Rickhardson's reverse-wherigo source (public domain). Also, creates show source button for mystery cacahes.
Pada tanggal
// ==UserScript== // @name Reversewigo solver ✓🐵 // @namespace http://tampermonkey.net/ // @version 0.04 // @description Reversewigo solver ✓🐵 - solve reverse wherigo automatically on cache page. Solver code originated from Rick Rickhardson's reverse-wherigo source (public domain). Also, creates show source button for mystery cacahes. // @author [email protected] // @include https://www.geocaching.com/geocache/* // ==/UserScript== async function dd2dm(lat, lon) { var lat = lat; var lon = lon; var latResult, lonResult, dmsResult; lat = parseFloat(lat); lon = parseFloat(lon); latResult = await lat_dd2dm(lat); lonResult = await lon_dd2dm(lon); // Joining both variables and separate them with a space. dmsResult = latResult + ' ' + lonResult; // Return the resultant string return { result: dmsResult, lat: latResult, lon: lonResult }; } async function lat_dd2dm(val) { var valDeg, valMin, result; val = Number(val); result = (val >= 0)? 'N' : 'S'; result += " "; val = Math.abs(val); valDeg = Math.floor(val); if( valDeg < 10 ) { result += "0" + valDeg; } else { result += valDeg; } result += "\xB0"; result += " "; valMin = ((val - valDeg) * 60).toFixed(3); if( valMin < 10) { result += "0" + valMin; } else { result += valMin; } return result; } async function lon_dd2dm(val) { var valDeg, valMin, result; val = Number(val); result = (val >= 0)? 'E' : 'W'; result += " "; val = Math.abs(val); valDeg = Math.floor(val); if( valDeg < 10 ) { result += "00" + valDeg; } else if( valDeg < 100) { result += "0" + valDeg; } else { result += valDeg; } result += "\xB0"; result += " "; valMin = ((val - valDeg) * 60).toFixed(3); if( valMin < 10) { result += "0" + valMin; } else { result += valMin; } return result; } async function code2LatLon(varA, varB, varC) { let latSign, lonSign, lonValue, latValue; // if ((varA % 1000 - varA % 100) / 100 == 1) { latSign = 1; lonSign = 1; } else if ((varA % 1000 - varA % 100) / 100 == 2) { latSign = -1; lonSign = 1; } else if ((varA % 1000 - varA % 100) / 100 == 3) { latSign = 1; lonSign = -1; } else if ((varA % 1000 - varA % 100) / 100 == 4) { latSign = -1; lonSign = -1; } if ( ((varC % 100000 - varC % 10000) / 10000 + (varC % 100 - varC % 10) / 10) % 2 === 0) { // A4 B2 B5 C3 A6 C2 A1 latValue = Number(((varA % 10000 - varA % 1000) / 1000 * 10 + (varB % 100 - varB % 10) / 10 + (varB % 100000 - varB % 10000) / 10000 * 0.1 + (varC % 1000 - varC % 100) / 100 * 0.01 + (varA % 1000000 - varA % 100000) / 100000 * 0.001 + (varC % 100 - varC % 10) / 10 * 1.0E-4 + varA % 10 * 1.0E-5)); } else if ( ((varC % 100000 - varC % 10000) / 10000 + (varC % 100 - varC % 10) / 10) % 2 !== 0) { // B6 A1 A4 C6 C3 C2 A6 latValue = Number(((varB % 1000000 - varB % 100000) / 100000 * 10 + varA % 10 + (varA % 10000 - varA % 1000) / 1000 * 0.1 + (varC % 1000000 - varC % 100000) / 100000 * 0.01 + (varC % 1000 - varC % 100) / 100 * 0.001 + (varC % 100 - varC % 10) / 10 * 1.0E-4 + (varA % 1000000 - varA % 100000) / 100000 * 1.0E-5)) } if ( ((varC % 100000 - varC % 10000) / 10000 + (varC % 100 - varC % 10) / 10) % 2 === 0 ) { // A5 C6 C1 B3 B6 A2 lonValue = Number(((varA % 100000 - varA % 10000) / 10000 * 100 + (varC % 1000000 - varC % 100000) / 100000 * 10 + varC % 10 + (varB % 1000 - varB % 100) / 100 * 0.1 + (varB % 1000000 - varB % 100000) / 100000 * 0.01 + (varA % 100 - varA % 10) / 10 * 0.001 + (varC % 100000 - varC % 10000) / 10000 * 1.0E-4 + varB % 10 * 1.0E-5)); } else if ( ((varC % 100000 - varC % 10000) / 10000 + (varC % 100 - varC % 10) / 10) % 2 !== 0 ) { // B2 C1 A2 A5 B3 B1 ?? lonValue = Number(((varB % 100 - varB % 10) / 10 * 100 + varC % 10 * 10 + (varA % 100 - varA % 10) / 10 + (varA % 100000 - varA % 10000) / 10000 * 0.1 + (varB % 1000 - varB % 100) / 100 * 0.01 + varB % 10 * 0.001 + (varC % 100000 - varC % 10000) / 10000 * 1.0E-4 + (varB % 100000 - varB % 10000) / 10000 * 1.0E-5)); } latValue = latSign * latValue; lonValue = lonSign * lonValue; return { lat: latValue, lon: lonValue } } function fix(v, left, right) { return (v < 0 ? '-' : ' ') + Math.abs(v).toFixed(right).padStart(left + right + 1, '0'); } function createShowSourceButton() { let mybutton = document.createElement("button"); mybutton.innerHTML = "Source"; let noteref = document.getElementsByClassName("Note Disclaimer")[0] noteref.appendChild(mybutton); mybutton.addEventListener("click", function() { var desc1 = document.getElementById("ctl00_ContentBody_ShortDescription").innerHTML; var desc2 = document.getElementById("ctl00_ContentBody_LongDescription").innerHTML; alert( desc1 + desc2 ) }); } (async function() { 'use strict'; let from, result; let cacheType = document.getElementsByClassName("cacheImage")[0].title; if( cacheType == "Mystery Cache") { createShowSourceButton(); } if( cacheType == "Wherigo Cache" ) { let re = /[0-9]{6}/g; let codes = document.getElementsByClassName("UserSuppliedContent")[1].innerText.match( re ); if( codes !== null && (codes.length == 3 || codes.length == 6 || codes.length == 9) ) { let ddlatlon = await code2LatLon( codes[0], codes[1], codes[2] ); let dmlatlon = await dd2dm( ddlatlon.lat, ddlatlon.lon); from = codes[0] + " " + codes[1] + " " + codes[2] + " => "; result = fix(ddlatlon.lat, 2, 6) + " " + fix(ddlatlon.lon, 3, 6) + " = " + dmlatlon.lat + " " + dmlatlon.lon; console.log( from + result ); document.getElementsByClassName("Note Disclaimer")[0].innerHTML = "<strong> Reversewigo final coordinates = " + result + " </strong>"; } else { result = "Error: Three reverse wherigo codes not found"; console.log( result ); document.getElementsByClassName("Note Disclaimer")[0].innerHTML = "<strong> Reversewigo final coordinates = " + result + " </strong>"; } } })();