Afstand berekenen met qth-locator

Voor als het echt nergens anders thuis hoort.
Bericht
Auteur
Gebruikersavatar
vk2gwk
Berichten: 1235
Lid geworden op: 25 sep 2005, 08:41
Locatie: One Mile Beach NSW
Contacteer:

#16 Bericht door vk2gwk »

Daar waren die correcties voor. Die heb ik eruit gehaald, helemaal geen correcties meer want de vakken tellen altijd omhoog staat elders in de tekst.
Daar was ik inmiddels ook achter gekomen. De correcties introduceren alleen maar een fout "op het andere halfrond".


Ik heb het inmiddels bijna klaar en zal het straks posten.

Ik check het via http://www.chris.org/cgi-bin/finddis?QF67BF
zenden is zilver.... luisteren is goud!
Kijk ook eens op mijn website of naar mijn andere hobby op Flickr

Gebruikersavatar
vk2gwk
Berichten: 1235
Lid geworden op: 25 sep 2005, 08:41
Locatie: One Mile Beach NSW
Contacteer:

#17 Bericht door vk2gwk »

Dit is het dan geworden:
<?php
//**************************************************************************************************************
// function to calculate distance between two Maidenhead locator points
// started by PA0WV in C and PA3TON - some corrections and refinements by VK2WGK
// Version 0.2 - 12008-02-18
// Published under the terms of the GNU license
//*************************************************************************************************************

// define constants.
define( K , 111.2); // correction constant in the Maidenhead formula
define( R , M_PI/180); // factor for conversion of degrees in radians
define( BR , '<br />'); // avoids retyping a break in quotes every time (handy while debugging)
define( E , ' E ' ); // define the lon. and lat. indicators for easy formatting
define( W , ' W ' );
define( N , ' N ' );
define( S , ' S ' );

// input the local and remote qth locator (normally retrieved from _$POST or $_GET )
$qth_loc = 'QF67BF'; // this can also be defined as a constant when it is the home QTH locator.
$qth_rem = 'JO32hl';


// ********************************************* MAIN UNIT *****************************************************
// check if entered strings are of the proper format and length.
trim($qth_loc); trim($qth_rem); // trim any spaces and other unwanted chars away.
$qth_loc = strtoupper($qth_loc); $qth_rem = strtoupper($qth_rem); // convert both inputs to uppercase
if ( chk_error($qth_loc) ) { echo 'The local locator you entered contains errors or is too short. Please try again'; exit; }
if ( chk_error($qth_rem) ) { echo 'The remote locator you entered contains errors or is too short. Please try again'; exit; }
if ( strlen ($qth_loc) < 6 ) { $qth_loc= str_pad($qth_loc,6,'L');} // if string too short pad with L (middle of the square)
if ( strlen ($qth_rem) < 6 ) { $qth_rem= str_pad($qth_rem,6,'L');} // if string too short pad with L (middle of the square)

// format the strings for display and add the hemisphere indicator
$loclat_str = sprintf("%01.4f", get_latitude($qth_loc));
if ( $loclat_str < 0 ) { $loclat_str = abs($loclat_str) . S; } else { $loclat_str = $loclat_str . N; }
$remlat_str = sprintf("%01.4f", get_latitude($qth_rem));
if ( $remlat_str < 0 ) { $remlat_str = abs($remlat_str) . S; } else { $remlat_str = $remlat_str . N; }
$loclon_str = sprintf("%01.4f", get_longitude($qth_loc));
if ( $loclon_str < 0 ) { $loclon_str = abs($loclon_str) . W; } else { $loclon_str = $loclon_str . E; }
$remlon_str = sprintf("%01.4f", get_longitude($qth_rem));
if ( $remlon_str < 0 ) { $remlon_str = abs($remlon_str) . W; } else { $remlon_str = $remlon_str . E; }

// display the results
echo '----------------------------------------------------------------------------<br />';
echo 'The distance between: ' . $qth_loc . ' and ' . $qth_rem . ' is: '
. sprintf("%01.1f", distance($qth_loc, $qth_rem)) . ' km.' . BR;
echo 'The position of ' . $qth_loc . ' is latitude: ' . $loclat_str
. ' - longitude: ' . $loclon_str . BR;
echo 'The position of ' . $qth_rem . ' is latitude: ' . $remlat_str
. ' - longitude: ' . $remlon_str . BR;
echo '-----------------------------------------------------------------------------<br />';

//*************************** Function section *****************************************************************
// main function for calculating the distance
function distance ($qth_loc, $qth_rem ) {

// get the paramaters for the distance calculation - both retrieved in degrees, decimal.
$lat_loc = get_latitude ($qth_loc);
$lat_rem = get_latitude ($qth_rem);
$lon_loc = get_longitude ($qth_loc);
$lon_rem = get_longitude ($qth_rem);

// actual calculation. The longitude and latitude are converted into radians by multiplying with the constant R
$distance= K *(1/R) * acos ( (sin(R*$lat_loc) * sin(R*$lat_rem)) + ( cos(R*$lat_loc) * cos(R*$lat_rem)) * cos( (R*$lon_loc) - (R*$lon_rem)) );
// ready to go back
return $distance;
} // end of function distance_calculator


// check for errors in the locator string
function chk_error ($loc_str) {
if ( strlen ($loc_str) < 4 ) { return TRUE; }
if ( (ord($loc_str[0]) < ord('A') ) || (ord($loc_str[1]) < ord('A')) ) { return TRUE; }
if ( ($loc_str[2] < 0 ) || ( $loc_str[3] < 0 ) ) { return TRUE; }
if ( (ord($loc_str[4]) < ord('A')) || (ord($loc_str[5]) < ord('A')) ) { return TRUE; }
if ( (ord($loc_str[0]) > ord('R') ) || (ord($loc_str[1]) > ord('R')) ) { return TRUE; }
if ( ($loc_str[2] > 9) || ($loc_str[3] > 9 ) ) { return TRUE; }
if ( (ord($loc_str[4]) > ord('X')) || (ord($loc_str[5]) > ord('X')) ) { return TRUE; }
} //end of function chk_errors

// convert the locator information into a longitude
function get_longitude ( $loc_str) {
$c=-180+((ord($loc_str[0])-ord("A"))*20);
$c+=($loc_str[2]*2);
$c+=(ord($loc_str[4])-ord("A"))/12;
$longitude=$c;
return $longitude;
}// end of function get_longitude

// convert the locator information into a latitude
function get_latitude ( $loc_str ) {
$c=-90 +((ord($loc_str[1])-ord("A"))*10);
$c += $loc_str[3];
$c+=(ord($loc_str[5])-ord("A"))/24;
$latitude=$c;
return $latitude;
} // end of function get_latitude

?>
Enkele kleine verschillen met andere calculatie-sites maar dat zal een kwestie van afronding zijn.

Deze module accepteert 4 en 6 cijferige locators in hoofd- en kleine letters. Een "korte" locator wordt aangevuld met ll aan het eind om in het midden van het vak uit te komen.

Mijn verontschuldigingen voor het engelse commentaar, maar dat ben ik nu eenmaal zo gewend.
zenden is zilver.... luisteren is goud!
Kijk ook eens op mijn website of naar mijn andere hobby op Flickr

DELETED

#18 Bericht door DELETED »

DELETED
Laatst gewijzigd door DELETED op 06 mei 2008, 14:13, 1 keer totaal gewijzigd.

DELETED

#19 Bericht door DELETED »

DELETED
Laatst gewijzigd door DELETED op 06 mei 2008, 14:13, 1 keer totaal gewijzigd.

Gebruikersavatar
vk2gwk
Berichten: 1235
Lid geworden op: 25 sep 2005, 08:41
Locatie: One Mile Beach NSW
Contacteer:

#20 Bericht door vk2gwk »

Overigens lijkt me een bearing programma nuttiger, dat de stations weten als ze de qra locator van de ander horen welke kant hun beam opgezet moet worden.
Mee eens, hoewel afstand ook wel leuk is om te weten.

Als je me een formule geeft om de bearing uit te rekenen kan ik die omzetten in PHP - ik ben niet zo wiskundig aangelegd dat ik dat zelf kan uitvogelen, maar een formule programmeren is meer in mijn straatje.

De source staat inmiddels ook op mijn website in de pagina "junkbox".
zenden is zilver.... luisteren is goud!
Kijk ook eens op mijn website of naar mijn andere hobby op Flickr

DELETED

#21 Bericht door DELETED »

DELETED
Laatst gewijzigd door DELETED op 06 mei 2008, 14:12, 2 keer totaal gewijzigd.

Gebruikersavatar
Ton_O_E
Berichten: 1773
Lid geworden op: 20 sep 2007, 19:59
Locatie: Oldenzaal
Contacteer:

#22 Bericht door Ton_O_E »

Als je in het php script de "if $c<0 regel" overal weghaalt, klopt ie exeact!!
Ik zal hem binnen kort even wat opleuken, en van commentaar voorzien.
en als functie schrijven. Een mooie toevoeging zou inderdaad de rotor hoek kunnen zijn.

Gebruikersavatar
vk2gwk
Berichten: 1235
Lid geworden op: 25 sep 2005, 08:41
Locatie: One Mile Beach NSW
Contacteer:

#23 Bericht door vk2gwk »

@PA3TON: Ik dacht dat ik het al aardig "opgeleukt" had (error correctie, trimming, padding, output formatting enz.) Ook zijn de belangrijkste dingen in functies gestopt.

@PA0WV - als jullie wakker zijn slapen wij :) Dus die "midden correctie" moet ik er nog in stoppen. De source (trouwens dezelfde tekst als hier op het forum is gepost) kun je downloaden door rechts te klikken op de link en dan "Save Target As" te kiezen - of hoe dat dan ook op z'n hollands mag heten...

PHP is een "server side script language". Het runt dus op de server en genereert daar HTML pagina's. Met bijv een "form" kun je informatie naar de server sturen, dat door het PHP gedeelte van de pagina laten bewerken (bijv. een berekening, data base query) en dan het resultaat als een HTML pagina terug sturen naar de gebruiker. Dit in tegenstelling tot JAVA wat in de HTML pagina ingebakken meekomt en op de computer van de gebruiker loopt.
zenden is zilver.... luisteren is goud!
Kijk ook eens op mijn website of naar mijn andere hobby op Flickr

DELETED

#24 Bericht door DELETED »

DELETED
Laatst gewijzigd door DELETED op 06 mei 2008, 14:37, 1 keer totaal gewijzigd.

Gebruikersavatar
vk2gwk
Berichten: 1235
Lid geworden op: 25 sep 2005, 08:41
Locatie: One Mile Beach NSW
Contacteer:

#25 Bericht door vk2gwk »

Nachtbrakers "are burning the midnight oil".... maar ik ga meestal vroeg slapen en er vroeg weer uit. (Ze zei Sonja dat vroeger ... "gezond weer op" ) :)

Er zaten nog wat onvolkomenheden in:
de nu beschikbare versie (versie 0.3) heeft een beam richtings berekening en de mid square correctie zit er nu in. Ben wel benieuwd of de echte wiskundigen het met mijn rekenmethode eens zijn (heb ik ergens op het internet opgedoken en vanuit JAVA in PHP vertaald)

Verder was de error checking niet goed: je moet eerst de locator opvullen naar 6 posities en dan pas checken of alle zes posities goed zijn en niet andersom - zoals ik eerst deed. DOM, dom, dom.

Ik zal straks nog even een formpje maken en dat op mijn website runnen.

Aanvulling 05:00 UTC: Inmiddels heb ik eenaparte Maidenhead paginaop mijn website met pop up window voor het resultaat. De bearing berekening lijkt redelijk te kloppen, maar ik stel commentaar op prijs.
zenden is zilver.... luisteren is goud!
Kijk ook eens op mijn website of naar mijn andere hobby op Flickr

Gebruikersavatar
Ton_O_E
Berichten: 1773
Lid geworden op: 20 sep 2007, 19:59
Locatie: Oldenzaal
Contacteer:

#26 Bericht door Ton_O_E »

@PA3TON: Ik dacht dat ik het al aardig "opgeleukt" had (error correctie, trimming, padding, output formatting enz.) Ook zijn de belangrijkste dingen in functies gestopt.
Klopt, hier heb ik niks meer aan toetevoegen.
Iedereen bedankt voor de hulp, en het meedenken.
een mooie toevoeging voor een logboek. en met de lpt_sturing op mijn site(www.tonteupen.nl) zou je ook nog de antenne automatich er heen kunnen laten draaien!

DELETED

#27 Bericht door DELETED »

DELETED
Laatst gewijzigd door DELETED op 06 mei 2008, 14:35, 1 keer totaal gewijzigd.

Gebruikersavatar
Ton_O_E
Berichten: 1773
Lid geworden op: 20 sep 2007, 19:59
Locatie: Oldenzaal
Contacteer:

#28 Bericht door Ton_O_E »

Nee, dat was een quote van vk2gwk, maar niet helemaal goed ge-quote

PA3GMM
Berichten: 16
Lid geworden op: 11 jan 2008, 17:55

#29 Bericht door PA3GMM »

PA0WV schreef:
Rest me PA0GMM te danken voor zijn tip over de bolcosinusregel in het vademecum en de uitleg daar van de structuur van de qth locator.

73
Wim
PAoWV
Geen dank, maar ik ben maar een PA3, geen PA0 en dus niet de beroemde PA0GMM. :D
Er zijn er wel waar ik liever niet voor word aangezien, maar in dit geval vind ik het niet zo erg, hi.
73 Wim, PA3GMM

DELETED

#30 Bericht door DELETED »

DELETED
Laatst gewijzigd door DELETED op 06 mei 2008, 14:34, 1 keer totaal gewijzigd.

Plaats reactie