Skip to content

Instantly share code, notes, and snippets.

@tekk
Created October 18, 2016 20:44
Show Gist options
  • Save tekk/65ab3397a9d06d05c98068847ffa0b8a to your computer and use it in GitHub Desktop.
Save tekk/65ab3397a9d06d05c98068847ffa0b8a to your computer and use it in GitHub Desktop.
Vypocet vzdialenosti a azimutu medzi dvoma lokatormi - JavaScript
<div id="lokator">
<span lang="sk"><form lpformnum="1">
<p align="center">Tvoj lokátor
<input maxlength="6" name="lokators" value="JN98NT" size="7" style="text-align: center; border: 1px solid #aaa;">
<span style="margin-left:1em;">Lokátor protistanice</span>
<input maxlength="6" name="lokatort" value="JN98CD" size="7" style="text-align: center; border: 1px solid #aaa;"><span lang="sk">
<input onclick="vypocet(this.form);" type="button" value="Výpočítaj" style="margin-left:1em;">
<span style="margin-left:2em; font-weight: bold;">Vzdialenosť
<input name="vzdalenost" value="" size="5" style="text-align: center; border: 1px solid #aaa; font-weight:bold;">
km</span>
<span style="margin-left:1em; font-weight: bold;">Azimut
<input name="azimut" value="" size="4" style="text-align: center; border: 1px solid #aaa; font-weight:bold;">&nbsp;&deg;</span>
</span></p></form></span>
</div>
<script>
function isChar (znak) { if (znak<"A" || znak>"Z") { return false; } return true; }
function isNum (znak) { if (znak<"0" || znak>"9") { return false; } return true; }
function TestLokatoru (lokator) {
lokator = lokator.toUpperCase();
if (lokator.length != 6) {
alert ("Ka?d? lok?tor m? ?es? znakov. Pros?m opravte chybu!");
return false;
}
var L0 = lokator.charAt(0);
var L1 = lokator.charAt(1);
var L2 = lokator.charAt(2);
var L3 = lokator.charAt(3);
var L4 = lokator.charAt(4);
var L5 = lokator.charAt(5);
if (!isChar(L0) || !isChar(L1) ||
!isNum (L2) || !isNum (L2) ||
!isChar(L4) || !isChar(L5) ) {
alert ("Lok?tor je je nespr?vne zadan?!");
return false;
}
}
function PrevedNaZnaky (t) {
var i=0;
var csstr="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (i=0; i<csstr.length; i++) { if (t==csstr.charAt(i)) {return i+65;} }
var csstr="0123456789";
for (i=0; i<csstr.length; i++) { if (t==csstr.charAt(i)) {return i+48;} }
alert ("Tak?to znak nem??e obsahova? WW-lok?tor: "+t);
return 0;
}
function zdelka (lokator) {
var L0 = PrevedNaZnaky(lokator.charAt(0));
var L2 = PrevedNaZnaky(lokator.charAt(2));
var L4 = PrevedNaZnaky(lokator.charAt(4));
var LQ = ((L0-74)*20+(L2-48)*2+(L4-65)/12.0)/180*Math.PI;
return LQ;
}
function zsirka (lokator) {
var L1 = PrevedNaZnaky(lokator.charAt(1));
var L3 = PrevedNaZnaky(lokator.charAt(3));
var L5 = PrevedNaZnaky(lokator.charAt(5));
var FQ = ((L1-74)*10+(L3-48)+(L5-65)/24.0)/180*Math.PI;
return FQ;
}
function vypocet (form) {
var TLQ = 0;
var TFQ = 0;
var SLQ = 0;
var SFQ = 0;
var smer= 0;
var ss = 0;
var x1 = 0;
var x2 = 0;
form.lokators.value = form.lokators.value.toUpperCase();
if (TestLokatoru (form.lokators.value)) {
form.lokators.focus();
return false;
}
form.lokatort.value = form.lokatort.value.toUpperCase();
if (TestLokatoru (form.lokatort.value)) {
form.lokators.focus();
return false;
}
SLQ = zdelka (form.lokators.value);
SFQ = zsirka (form.lokators.value);
TLQ = zdelka (form.lokatort.value);
TFQ = zsirka (form.lokatort.value);
with (Math) {
ss = (SLQ-TLQ);
x1 = cos(SFQ) * tan(TFQ);
x2 = sin(SFQ) * cos(ss);
if (x1>x2) smer=180-(atan(sin(ss)/(x1-x2))+PI)*180/PI;
if (x1<x2) smer=180-(atan(sin(ss)/(x1-x2)))*180/PI;
while (smer>=360) { smer-=360;}
while (smer<0) { smer+=360;}
smer = round(smer);
form.azimut.value = smer;
ss = acos(cos(ss) * cos(SFQ) * cos(TFQ) + sin(SFQ) * sin(TFQ));
form.vzdalenost.value = 6378*sqrt(1+(1-2.*cos(ss)));
form.vzdalenost.value = round(form.vzdalenost.value);
}
return true;
}
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment