Reversewigo solver ✓🐵 - solve reverse wherigo automatically on cache page. Solver code originated from Rick Rickhardson's reverse-wherigo source (public domain).
La data de
// ==UserScript==
// @name Reversewigo solver ✓🐵
// @namespace http://tampermonkey.net/
// @version 0.01
// @description Reversewigo solver ✓🐵 - solve reverse wherigo automatically on cache page. Solver code originated from Rick Rickhardson's reverse-wherigo source (public domain).
// @author mrummuka
// @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');
}
(async function() {
'use strict';
let re = /[0-9]{6}/g;
let codes = document.getElementsByClassName("UserSuppliedContent")[1].innerText.match( re );
let ddlatlon = await code2LatLon( codes[0], codes[1], codes[2] );
let dmlatlon = await dd2dm( ddlatlon.lat, ddlatlon.lon);
let from = codes[0] + " " + codes[1] + " " + codes[2] + " => "
let 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>"
})();