fix distVincenty() to using var instead of let again

This commit is contained in:
unknown 2021-01-14 14:50:48 +01:00
parent f45cea959d
commit 9e05dd1aba
2 changed files with 27 additions and 26 deletions

View File

@ -6,9 +6,14 @@
* @authors Timo Volkmann, Frank Herkommer. * @authors Timo Volkmann, Frank Herkommer.
*/ */
//list of all horizontal accuracies sent in by the Ublox
let allAccSerial = []
//list of all coordinates sent in by the Ublox
let allSerialCoords = []
//Defines the chart and its properties //Defines the chart and its properties
let ctx = document.getElementById('accChart').getContext('2d'); let ctx1 = document.getElementById('accChart').getContext('2d');
let accChart = new Chart(ctx, { let accChart = new Chart(ctx1, {
type: 'line', type: 'line',
data: { data: {
labels: [], labels: [],
@ -140,26 +145,26 @@ function distVincenty(coord1, coord2) {
const lat1 = coord1[1] const lat1 = coord1[1]
const lon2 = coord2[0] const lon2 = coord2[0]
const lat2 = coord2[1] const lat2 = coord2[1]
const a = 6378137, b = 6356752.314245, f = 1/298.257223563; // WGS-84 ellipsoid params var a = 6378137, b = 6356752.314245, f = 1/298.257223563; // WGS-84 ellipsoid params
let L = (lon2-lon1).toRad() var L = (lon2-lon1).toRad()
let U1 = Math.atan((1-f) * Math.tan(lat1.toRad())); var U1 = Math.atan((1-f) * Math.tan(lat1.toRad()));
let U2 = Math.atan((1-f) * Math.tan(lat2.toRad())); var U2 = Math.atan((1-f) * Math.tan(lat2.toRad()));
let sinU1 = Math.sin(U1), cosU1 = Math.cos(U1); var sinU1 = Math.sin(U1), cosU1 = Math.cos(U1);
let sinU2 = Math.sin(U2), cosU2 = Math.cos(U2); var sinU2 = Math.sin(U2), cosU2 = Math.cos(U2);
let lambda = L, lambdaP, iterLimit = 100; var lambda = L, lambdaP, iterLimit = 100;
do { do {
let sinLambda = Math.sin(lambda), cosLambda = Math.cos(lambda); var sinLambda = Math.sin(lambda), cosLambda = Math.cos(lambda);
let sinSigma = Math.sqrt((cosU2*sinLambda) * (cosU2*sinLambda) + var sinSigma = Math.sqrt((cosU2*sinLambda) * (cosU2*sinLambda) +
(cosU1*sinU2-sinU1*cosU2*cosLambda) * (cosU1*sinU2-sinU1*cosU2*cosLambda)); (cosU1*sinU2-sinU1*cosU2*cosLambda) * (cosU1*sinU2-sinU1*cosU2*cosLambda));
if (sinSigma===0) return 0; // co-incident points if (sinSigma===0) return 0; // co-incident points
let cosSigma = sinU1*sinU2 + cosU1*cosU2*cosLambda; var cosSigma = sinU1*sinU2 + cosU1*cosU2*cosLambda;
let sigma = Math.atan2(sinSigma, cosSigma); var sigma = Math.atan2(sinSigma, cosSigma);
let sinAlpha = cosU1 * cosU2 * sinLambda / sinSigma; var sinAlpha = cosU1 * cosU2 * sinLambda / sinSigma;
let cosSqAlpha = 1 - sinAlpha*sinAlpha; var cosSqAlpha = 1 - sinAlpha*sinAlpha;
let cos2SigmaM = cosSigma - 2*sinU1*sinU2/cosSqAlpha; var cos2SigmaM = cosSigma - 2*sinU1*sinU2/cosSqAlpha;
if (isNaN(cos2SigmaM)) cos2SigmaM = 0; // equatorial line: cosSqAlpha=0 (§6) if (isNaN(cos2SigmaM)) cos2SigmaM = 0; // equatorial line: cosSqAlpha=0 (§6)
let C = f/16*cosSqAlpha*(4+f*(4-3*cosSqAlpha)); var C = f/16*cosSqAlpha*(4+f*(4-3*cosSqAlpha));
lambdaP = lambda; lambdaP = lambda;
lambda = L + (1-C) * f * sinAlpha * lambda = L + (1-C) * f * sinAlpha *
(sigma + C*sinSigma*(cos2SigmaM+C*cosSigma*(-1+2*cos2SigmaM*cos2SigmaM))); (sigma + C*sinSigma*(cos2SigmaM+C*cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)));
@ -167,12 +172,12 @@ function distVincenty(coord1, coord2) {
if (iterLimit===0) return NaN // formula failed to converge if (iterLimit===0) return NaN // formula failed to converge
let uSq = cosSqAlpha * (a*a - b*b) / (b*b); var uSq = cosSqAlpha * (a*a - b*b) / (b*b);
let A = 1 + uSq/16384*(4096+uSq*(-768+uSq*(320-175*uSq))); var A = 1 + uSq/16384*(4096+uSq*(-768+uSq*(320-175*uSq)));
let B = uSq/1024 * (256+uSq*(-128+uSq*(74-47*uSq))); var B = uSq/1024 * (256+uSq*(-128+uSq*(74-47*uSq)));
let deltaSigma = B*sinSigma*(cos2SigmaM+B/4*(cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)- var deltaSigma = B*sinSigma*(cos2SigmaM+B/4*(cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)-
B/6*cos2SigmaM*(-3+4*sinSigma*sinSigma)*(-3+4*cos2SigmaM*cos2SigmaM))); B/6*cos2SigmaM*(-3+4*sinSigma*sinSigma)*(-3+4*cos2SigmaM*cos2SigmaM)));
let s = b*A*(sigma-deltaSigma); var s = b*A*(sigma-deltaSigma);
s = s.toFixed(3); // round to 1mm precision s = s.toFixed(3); // round to 1mm precision
return s; return s;

View File

@ -5,10 +5,6 @@
*/ */
let indexes let indexes
//list of all horizontal accuracies sent in by the Ublox
let allAccSerial = []
//list of all coordinates sent in by the Ublox
let allSerialCoords = []
function composeTimestamp(servertime){ function composeTimestamp(servertime){
let composed; let composed;