stránky radioamatérské stanice
OK2PPK » Texty » Programy » Loc | ---
offline program
v1.2 (2013/12), v2.2 (2024/12), 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.
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.
V prosinci 2024 jsem po více jak ročním bezproblémovém používání programu ve verzi 2.1 přešel na novou verzi 2.2, do které jsem přidal možnost přepočtu bodů podle podmínek závodu CQ Budapest a související nový typ exportu logu i se sloupcem druhu provozu do textového souboru.
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 expcqbp [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|ptscqbp 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 expcqbp ... export údajů o spojení z CQ Budapest 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 ptscqbp ... body dle CQ Budapest (1km = 1bod, vlastní loc = 5bodů, násobiče SSB = x2, CW = 3x, 70cm = x2, 23cm = x3, MW = x4) 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 recount ptscqbp 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 expcqbp vstup.edi loc exploc vstup.edi
loc12.exe - program v1.2 (52kB), loc12.txt - popis v1.2 (2kB), loc12.zip - program+popis v1.2 (26kB)
loc21.exe - program v2.1(.2) (117kB), loc21.txt - popis v2.1(.2) (28kB), loc21.zip - program+popis v2.1(.2) (61kB)
loc22.exe - program v2.2(.1) (121kB), loc22.txt - popis v2.2(.1) (31kB), loc22.zip - program+popis v2.2(.1) (63kB)
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. 5.2.2025 aktualizováno na v2.1.2 (opravena chyba, kdy v módu recount byl místo parametru loc10y používán i pro přijaté lokátory parametr myloc10y).
v2.2 2024/12 - v módu recount doplněn parametr ptscqbp umožňující provést přepočet bodů dle podmínek CQ Budapest VHF/UHF/SHF activity contestu (vlastní loc za 5 bodů, násobení počtu bodů za spojení u SSB a cross mode CW/SSB a SSB/CW 2x, u CW 3x, násobení počtu bodů za spojení na pásmu 70cm 2x, na 23cm 3x a na vyšších pásmech 4x). Přidán mód expcqbp, ve kterém se narozdíl od módu expstd do textových souborů exportuje i sloupec s druhem provozu. 5.2.2025 aktualizováno na v2.2.1 (opravena chyba, kdy v módu recount byl místo parametru loc10y používán i pro přijaté lokátory parametr myloc10y).