Skip navigation

OK2RKB | ENG · GER · RUS · FRA · POL · HUN · SPA | Main · Pos · Neg · IE+ · IE- · Prn · Pda · CSSoff

OK2PPK » Texty » Programy » Loc | ---

Loc

offline program

Loc - výpočet vzdálenosti lokátorů

v1.2 (2013/12), v2.1 (2022/8), konzolová aplikace Win32Api

autor OK2PPK

Program Loc vypočítá vzdálenost a azimut mezi dvěma lokátory. Pracuje ve třech režimech. V prvním se mu zadají dva lokátory (v rozmezí AA00AA až RR99XX, může být použito malé i velké písmo) a program vypíše jejich souřadnice, azimuty mezi oběma lokátory, jejich vzdálenost, vzdálenost zaokrouhlenou dle doporučení (VHF Manager Handbook Edition 6.12, bod 5.3.9) pro vyhodnocování VKV závodů a azimuty zaokoruhlené na celá čísla.

Do druhého režimu se program přepne použitím příkazu silent a opět zadáním dvou lokátoru. Program provádí vnitřně stejný výpočet jako v prvním režimu, ale vypíše pouze vzdálenost zaokrouhlenou dle doporučení pro vyhodnocování VKV závodů. V případě chyby program vypíše pouze nulu.

Ve třetím režimu se programu zadá výchozí lokátor, jméno souboru se vstupními daty a jméno souboru, do kterého se má uložit výsledek. Program čte lokátory ze vstupního souboru, provádí výpočet vzdálenosti a azimutu proti výchozímu lokátoru, a výsledky zapisuje do souboru. Vstupní soubor musí být textový, na každém jeho řádku musí být přesně a pouze jeden lokátor, pro který se má výpočet provést. Celkový počet řádků - tj. najednou zpracovatelných lokátorů - není omezen, ale při větším rozsahu dat může zpracování trvat dlouho - program má sice zabudované vyrovnávací paměti pro zrychlení práce se soubory, ale vlastní výpočty byly optimalizovány na přesnost na úkor rychlosti. Výstupní soubor je opět textový, každý řádek obsahuje výsledky výpočtu pro jeden lokátor načtený ze vstupního souboru, lokátory jsou ve stejném pořadí jako byly ve vstupním souboru, jeden výstupní řádek je ve tvaru výchozí lokátor, středník, lokátor načtený ze souboru, středník, zaokrouhlená vzdálenost, středník, zaokrouhlený azimut z výchozího do načteného lokátoru.

Pro výpočty ortodromy jsou použity běžné funkce ze standardní matematické knihovny pro C a čísla s plovoucí řádovou čárkou s přesností "double". Protože se pracuje s goniometrickými a cyklometrickými funkcemi, může to způsobit odchylky vypočítaných a očekávaných výsledků - v blízkosti limitních hodnot dochází, díky zaokrouhlování způsobenému konečným počtem číslic, ke vzniku chyb - např. azimut lokátorů na stejné rovnoběžce nebo na stejném poledníku by měl být celistvým násobkem 90°, ale výpočtem vychází odchylka od očekávaného údaje běžně i na druhém desetinném místě. Podobně výpočty vzdáleností a azimutů v oblasti zemských pólů, kde je rozměr lokátorů ve směru rovnoběžky velmi malý, mohou být zatíženy značnou chybou. Proto byl pro výpočet použit tzv. Vincentyho algoritmus, který je optimalizovaný pro numerické výpočty na strojích s omezenou přesností čísel. V oblasti střední Evropy, kde má nejmenší čtverec - ve VKV závodech používaném systému lokátorů - rozměr cca 5x6km, toto nemá velký význam, a uvádím to spíše pro ty, koho by zajímal důvod, proč nejsou výpočty zcela přesné.

Vzdálenost je zaokrouhlena dle doporučení pro vyhodnocování VKV závodů, tj. oříznutím na celé číslo a přičtením jedničky, pro výpočet je dle doporučení použita převodní konstanta 111,2km/stupeň (tj. poloměr Země 6371,3km). Pro spojení ve vlastním lokátoru se vzdálenost zaokrouhluje na 1km a azimut ztrácí smysl. Souřadnice lokátorů se počítají v jejich středech.

Syntaxe v1.2:
  LOC loc1 loc2 ... vypočítá vzdálenost, azimut a souřadnice
  
  LOC silent loc1 loc2 ... vypočítá zaokrouhlenou vzdálenost

  LOC loc1 soubor1 soubor2 ... vypočítá vzdálenost a azimut loc1 proti
                               loc načteným ze souboru1 a výsledek uloží
                               do souboru2

    silent - je vypsána pouze zaokrouhlená vzdálenost nebo nula při chybě
    loc1 - výchozí lokátor (AA00AA až RR99XX)
    loc2 - protější lokátor (AA00AA až RR99XX)
    v lokátorech mohou být kombinovány znaky velké i malé abecedy
    soubor1 - vstupní soubor
    soubor2 - výstupní soubor

  Příklad použití: loc jn89gf jn88jx

V roce 2022 jsem především kvůli deníkům z Moon contestu potřeboval doplnit funkcionality v programu LOC a současně i v jednom pomocném programu na export dat z EDI souborů. Používal jsem pod DosBoxem log Atalanta Locator v12.29, který sice uměl zapsat log z Moon contestu, ale počítal chybně body. Data jsem pak musel za pomoci programu LOC přepočítat, což znamenalo nenulové množství ruční práce navíc, nebo při méně spojeních jsem log zapisoval přímo ručně v textovém editoru a body dopočítal pomocí LOC. Program jsem musel kvůli přechodu na jiné vývojové prostředí stejně přepsat, a tak nakonec obdobně jako u programu Prekod jsem ho napsal úplně celý znovu a podstatně jsem rozšířil jeho možnosti. Současně jsem do něj integroval i exportní funkce ze souborů EDI, abych nemusel při zpracování logů používat ještě pomocný exportní program, kterých bych jinak stejně musel ještě upravit. Vznikla tedy nová verze LOC v2.0, která byla sice kompletně funkční a poprvé jsem ji použil na přepočítání logu z Moon contestu z 3.8.2022, ale při dalších testech jsem v ní našel chybu v načítání poznámek ze souborů EDI, která mi předtím unikla, takže po ještě nějakých dalších drobných úpravách je první finální verze LOC v2.1.

Program LOC ve verzi 2.1 byl doplněn o schopnost pracovat kromě s 6 znakovými lokátory i se 4 znakovými, 8 znakovými a 10 znakovými a u 10 znakových s oběma variantami, tj. jak s uspořádáním čtverců 24x24 tak i 25x25. Navíc umí pracovat i se starým systémem QRA čtverců.

Kromě původních režimů s jednorázovým výpočtem a s výpočtem nad více daty načtenými ze souboru byl přidán interaktivní režim, kdy je možné při jednom spuštění zadávat postupně další vstupní data na základě výzvy programu. Tento režim je možný jen u převodů mezi souřadnicemi a lokátory a v módu výpočtu vzdáleností a azimutů.

K původnímu módu výpočtu vzdálenosti (nyní mód dist) byly přidány další. V módu gcs2loc se převádí zadané zeměpisné souřadnice na lokátor. V módu loc2gcs se pro zadaný lokátor určí souřadnice rohů i středu a pro ně se spočítají odpovídající lokátory. V módu recount je možné nechat přepočítat body v souboru EDI jak podle kilometrů, tak podle pásem velkých čtverců. Módy expstd, expmoon a exploc umožňují vyexportovat některé údaje ze souboru EDI do textového souboru do jiného tvaru.

Oproti LOC v1.2 byly rozšířeny možnosti výpočtu vzdáleností a azimutů. Je možné použít jak algoritmus z LOC v1.2, tak i starší, který jsem používal v DOSovské verzi V1.0. Byly rozšířeny možnosti volby zaokrouhlování vzdáleností i azimutů.

V módu dist byla přidána možnost načítat lokátory i ze souboru EDI a přímo se soubory EDI lze pracovat i v módu loc2gcs. Podrobnější informace k použití programu najdete v plném textu nápovědy. Upozorňuji, že plná nápověda je dost dlouhá a při výpisu na konzoli se nemusí do ní celá vejít. Buď si ji pak musíte přesměrovat do souboru, nebo použít volbu helpfile pro uložení do souboru nebo si celý text stáhnout z odkazu níže.

V době, kdy sem novou verzi programu LOC dávám (srpen 2022), je to hodně horká novinka, která neprošla dlouhodobým používáním. Sice jsem při jejím vývoji dělal velké množství testů, ale byl to jen omezený soubor dat. Nevylučuji tedy, že v programu mohou být chyby, o kterých zatím nevím. Doporučuji tedy program používat opatrně a především s ním nikdy nepracovat přímo na originálech dat, ale na kopiích a nejlépe v samostatném adresáři, kde nebude hrozit, že si něco přepíšete nebo smažete.

Syntaxe (zkrácená verze) v2.1:
  LOC
  LOC ?|h|hlp|help
  LOC helpfile
  
  LOC gcs2loc
  LOC gcs2loc latitude longitude
  LOC gcs2loc filein.txt [fileout.txt]
  
  LOC loc2gcs
  LOC loc2gcs loc
  LOC loc2gcs filein.txt [fileout.txt]
  LOC loc2gcs filein.edi [fileout.txt]
  
  LOC dist [options1] [loc1]
  LOC dist [options1] loc1 loc2
  LOC dist [options1] loc1 filein.txt [fileout.txt]
  LOC dist [options1] [loc1] filein.edi [fileout.txt]
  
  LOC recount [options2] filein.edi [fileout.edi]
  
  LOC expstd filein.edi [fileout.txt]
  
  LOC expmoon [oth description] filein.edi [fileout.txt]
  
  LOC exploc filein.edi [fileout.txt]

  Options1:

    kmalg1|kmalg2
    noroundkm|roundkm|rounddkm|roundm|roundiaru|roundoth
    norounddeg|rounddeg|roundddeg
    myloc10y
    loc10y
    oldfrm

  Options2:

    ptskm|ptsloc|ptsmulloc|ptsmulownloc
    kmalg1|kmalg2
    roundkm|roundiaru|roundoth
    myloc10y
    loc10y

  Default options:

    ptskm kmalg2 roundiaru rounddeg

  Formát dat:

    latitude: 0-90deg (decimal, xx.xxxxxxxxxxN|S)
    longitude: 0-180deg (decimal, xxx.xxxxxxxxxE|W)
    loc: RR99, RR99XX, RR99XX99, RR99XX99XX, RR99XX99YY*, ZZNNx(QRA)

  Zadávání voleb a parametrů:

    Před jednopísmennými jmény voleb lze uvést znak pomlčka nebo lomítko a před
    víceznakovými jmény voleb lze kromě pomlčky a lomítka použít i dvě pomlčky.

    Pokud je potřeba zadat parametr, který se shoduje s některým jménem volby,
    ale nemá být jako volba vyhodnocován, tak se na jeho začátek umístí znak
    rovnítko.

  Popis hlavních voleb:

    bez parametru  ... vypsat krátkou nápovědu
    ?|-?|h|-h|help ... vypsat nápovědu
    helpfile       ... nápovědu uložit do textového souboru "loc21.txt"

    gcs2loc        ... převod souřadnic na lokátor
    loc2gcs        ... převod lokátoru na souřadnice nebo jiný tvar lokátoru
    dist           ... výpočet vzdálenosti mezi lokátory
    recount        ... přepočet bodů v souboru EDI
    expstd         ... export standardních údajů o spojení ze souboru EDI
    expmoon        ... export údajů o spojení z Moon contestu ze souboru EDI
    exploc         ... export lokátorů ze souboru EDI

  Popis ostatních voleb:

    ptskm        ... 1bod = 1km
    ptsloc       ... body dle sousedních pásem velkých lokátoru, bez násobiče
    ptsmulloc    ... jako ptsloc, násobič je počet velkých lokátorů
    ptsmulownloc ... jako ptsmulloc, násobič je i vlastní čtverec
    kmalg1       ... výpočet vzdálenosti standardním postupem
    kmalg2       ... výpočet vzdálenosti postupem pro omezené rozlišení čísel
    noroundkm    ... vzdálenost nezaokrouhlovat
    roundkm      ... zaokrouhlit na kilometry (na sudo)
    rounddkm     ... zaokrouhlit na desetiny kilometru (na sudo)
    roundm       ... zaokrouhlit na metry (na sudo)
    roundiaru    ... zaokrouhlit dle IARU pro výpočet bodů z VHF závodů
    roundoth     ... zaokrouhlit jiným postupem
    norounddeg   ... nezaokrouhlovat azimut
    rounddeg     ... zaokrouhlit azimut na stupně (na sudo)
    roundddeg    ... zaokrouhlit azimut na desetiny stupně (na sudo)
    myloc10y     ... vlastní lokátor je ve tvaru RR99XX99YY
    loc10y       ... lokátor je ve tvaru RR99XX99YY
    oldfrm       ... data vypsat ve formátu jako LOC v1.2

    oth description ... u modecode=0 místo textu OTH použít text z description

  Popis parametrů:

    latitude     ... zeměpisná šírka
    longitude    ... zeměpisná délka
    loc          ... lokátor nebo QRA čtverec
    loc1         ... vlastní lokátor nebo QRA čtverec
    loc2         ... lokátor nebo QRA čtverec protistanice
    filein.txt   ... jméno vstupního textového souboru
    filein.edi   ... jméno vstupního souboru pro načtení dat ve formátu EDI
    fileout.txt  ... jméno výstupního textového souboru
    fileout.edi  ... jméno výstupního souboru pro uložení dat ve formátu EDI
    
  Režimy práce:
  
    interaktivní režim       ... jen v módech gcs2loc, loc2gcs a dist
    jednorázový režim        ... jen v módech gcs2loc, loc2gcs a dist
    režim zpracování souboru ... ve všech módech    
  
  Příklady použití:

    loc ?
    loc helpfile
    loc gcs2loc
    loc gcs2loc 49.232108N 16.690335E
    loc gcs2loc 5s 6w
    loc gcs2loc vstup.txt
    loc loc2gcs
    loc loc2gcs IJ65b
    loc loc2gcs JN89
    loc loc2gcs JN89BB
    loc loc2gcs JN89BB03
    loc loc2gcs JN89BB03UH
    loc loc2gcs JN89BB03UH*
    loc loc2gcs vstup.txt
    loc dist
    loc -dist
    loc dist noroundkm norounddeg
    loc dist -noroundkm -norounddeg
    loc dist oldfrm
    loc dist JN89FH
    loc dist oldfrm JN89FH
    loc dist kmalg1 rounddkm roundddeg JN89FH JO60DE
    loc --dist roundm roundddeg JN89FH JO60DE
    loc --dist -roundm --roundddeg JN89FH JO60DE
    loc -dist --roundm -roundddeg JN89FH JO60DE
    loc /dist /roundm /roundddeg JN89FH JO60DE
    loc dist JN89FH22 IJ65c
    loc dist -oldfrm JN89FH22 IJ65c
    loc dist JN89FH vstup.txt
    loc dist vstup.edi
    loc dist oldfrm vstup.edi
    loc dist JO70KA vstup.edi
    loc dist vstup.edi vystup.txt
    loc dist =roundoth
    loc recount vstup.edi
    loc recount vstup.edi vystup.edi
    loc recount roundoth vstup.edi
    loc recount ptsmulloc vstup.edi
    loc expstd vstup.edi
    loc expstd vstup.edi vystup1.txt
    loc expmoon vstup.edi
    loc expmoon oth C4FM vstup.edi
    loc expmoon -oth C4FM vstup.edi
    loc expmoon /oth C4FM vstup.edi
    loc exploc vstup.edi
Stažení:

loc12.exe - program v1.2 (52kB), loc12.txt - popis v1.2 (2kB)

loc21.exe - program v2.1 (117kB), loc21.txt - popis v2.1 (28kB)

Změny:

v1.0 2004/9 - verze pro DOS

v1.1 2013/12 - první verze pro WIN, konzolová aplikace pro Win32 API, oproti původní verzi pro DOS nakonec použit jiný algoritmus výpočtu - tzv. Vincentyho, změněn způsob výpočtu souřadnic z původně optimalizovaného na rychlost na jiný optimalizovaný na co nejmenší ztrátu přesnosti v důsledku zaohrouhlování.

v1.2 2013/12 - ve výpočtech změněny zbylé konstanty typu integer na double a některé výpočty s více konstantami, které byly kvůli testům zatím podrobně rozepsány, byly optimalizovány sloučením konstant dohromady.

v2.0 2022/8 - přechod na kompilaci pomocí MinGW32, program od základu přepsán, přidána možnost pracovat s lokátory s 8 znaky, s 10 znaky (obě varianty 24x24 i 25x25 čtverců) i s původními čtverci QRA. Přidán převod ze souřadnic na lokátor a z lokátoru na souřadnice rohů a jejich lokátory. Výpočet vzdálenosti rozšířen o volbu dvou postupů výpočtu a více možností zaokrouhlování a o schopnost přímo pracovat s lokátory v souboru EDI. Přidána možnost přepočítat soubor EDI jak podle vzdáleností, tak i podle pásem velkých čtverců a výsledky uložit přímo do souboru EDI. Přidána možnost exportovat data ze soubor EDI do jiného tvaru v textovém souboru a možnost vyexportovat ze souboru EDI jen seznam lokátorů. U převodů souřadnic a lokátorů a u výpočtu vzdálenosti byl přidán interaktivní režim.

v2.1 2022/8 - opravena chyba v načítání řádků ze sekce [Remarks] souboru EDI, do výstupních souborů přidána varování na případné nesrovnalosti zjištěné při načítání dat ze souborů EDI. 29.8.2022 aktualizováno na v2.1.1 (označení pro web zůstalo v2.1) - lépe ošetřeny souřadnice 180E, 90S a 90N.

Nahoru