Ero sivun ”Maidenhead-lokaattorijärjestelmä” versioiden välillä

Radioamatööriwikistä
Siirry navigaatioon Siirry hakuun
(portattu tiedot osittain päällekkäisestä artikkelista)
p (Oh6va siirsi sivun Maidenhead uudelle nimelle Maidenhead-lokaattorijärjestelmä: varsinainen nimi)
(ei mitään eroa)

Versio 11. kesäkuuta 2021 kello 01.18

Maidenhead-lokaattorijärjestelmä on maailmanlaajuinen ruutukoordinaatisto, joka kuvaa paikkaa halutulla tarkkuusasteella. Esimerkiksi lokaattori 'KP22UF' muistuttaa muodoltaan neliötä ja kattaa suurimman osan Jyväskylän keskustaa.

Radioamatöörit käyttävät Maidenhead-ruudukkoa etenkin kilpailutoiminnassa kertomaan, kuinka kaukana toisistaan asemat ovat. HF-taajuuksilla käytetään neljän merkin tarkkuutta (esim. 'KP30'), VHF:llä yleensä kuutta merkkiä ('KP30CR'). Suomi on lähes kokonaan kahden merkin tarkkuudella lausuttavassa kentässä 'KP'.

Esitystapa tuo kompaktissa muodossa radioamatöörikäytössä riittävää tarkkuutta radioasemien sijaintitietoihin ja käyttötarpeesta riippuen sitä esitetään vaihtelevalla merkkimäärällä antaen paikan vähemmän tai enemmän tarkasti. Kompaktiudesta on hyötyä erityisesti merkkinopeudeltaan hitaassa viestinnässä, esimerkiksi sähkötyksessä.

Maidenhead-ruudukon määrittely

Maidenhead-ruudukko on määritelty WGS84:n kuvaamalle globaalille koordinatistolle ja se vuorottelee pituusastetta ja leveysastetta koodaavia merkkejä pareittain ("PiLePiLePiLe..."). Näille merkkipareille on seuraavat nimitykset:

  • Kenttä (field)
  • Ruutu (square)
  • Aliruutu (sub-square, tai VHF-touhuissa vain "locator")
  • Laajennettu lokaattori (extended locator)
 Merkkejä   leveysasteen koko       Pituusasteen koko
    4           1°        111  km          2°            ruutu
    6       2.5' / 2'30"  4.6  km     5.0' / 5'00"       aliruutu, "lokaattori"
    8      0.25' / 0'15"  462   m     0.5' / 0'30"       laajennettu
   10        0.625"        19.3 m         1.25"
   12        0.063"         1.9 m         0.125"

IARU Region 1 on määritellyt brittien RSGB:n esityksestä kahdeksanmerkkisen "laajennetun lokaattorin" (ns. "extended locator", esim. KP30CR56), mutta siitä eteenpäin ei ole virallisia määrityksiä.

Pituusasteen (itä-länsi) lineaarinen pituus suhtautuu leveysasteen annettuun pituuteen kertoimella .

Pituus- ja leveysasteet on myös asetettu alkamaan niin, että kaikki luvut ovat positiivisia. Leveysaste koodataan nollakohtana etelänavalta (-90°) alkavana kaarena pohjoisnavalle asti (+90°). Pituusasteilla nollana on 180 astetta läntistä pituutta ja maksimina (360°) 180 astetta itäistä pituutta, joten nollameridiaani saa arvon 180 astetta ja geodeettien tapaan pituus laskee positiivisena suuntana itään.

Koordinaattien koodaaminen

Koodausta voi ajatella matemaattisessa mielessä lukuarvona nollan ja ykkösen (jälkimmäistä koskaan saavuttamatta) välillä siten että tekstiesityksestä on jätetty alusta "0." pois ja ollaan koodaamassa luvun "desimaaleja", joskin niin että koodauksen kantaluku vaihtelee:

  • Ensimmäinen pari koodaa kantaluvulla 18 ja merkkeinä kirjaimet A-R.
  • Toinen pari koodaa kantaluvulla 10 ja numeroilla (0-9).
  • Kolmas pari koodaa kantaluvulla 24 kirjaimilla A-X.

Tämän pidemmälle Maidenhead-ruudukkoa ei ole määritelty, mutta ilmeisiä tapoja jatkaa on

  • Neljäs pari koodaa numeroita ja on siis 10
  • Viidettä paria ei ole määritelty missään ja niinpä siitä on ainakin kaksi erilaista versiota: kantaluvut 24 ja 20.
  • Kuudettakaan paria ei ole määritelty missään, mutta siinä vuorossa olisi numerot kantaluvulla 10.
  • jne... (Viestikallion työkalussa esityksen "lisätarkkuutta" luodaan vuorottelemalla toista ja kolmatta paria)

Koordinaattien koodausalgoritmi

Koordinaatin muuntaminen Maidenhead-merkeiksi tapahtuu seuraavin askelin:

1. Skaalataan koordinaatti välille 0..1 (oletetaan lähtökoordinaattien muoto koodatun aluksi asteiksi ja desimaaleiksi)

  • pituus = (pituus + 90)/180
  • leveys = (leveys + 180)/360

2. Koodataan ensimmäinen kantaluku

  • # Kerrotaan koordinaatit esitysaskeleen kantaluvuilla saaden askeleen kokonaisosa
  • pituus = pituus * 18.0
  • leveys = leveys * 18.0
  • MH = chr(ord("A")+TRUNCATE(pituus))
  • MH = chr(ord("A")+TRUNCATE(leveys))
  • # Poistetaan kokonaisosa koordinaateista..
  • pituus = pituus - TRUNCATE(pituus)
  • leveys = leveys - TRUNCATE(leveys)

3. Koodataan toinen kantaluku

  • # Kerrotaan koordinaatit esitysaskeleen kantaluvuilla saaden askeleen kokonaisosa
  • pituus = pituus * 10.0
  • leveys = leveys * 10.0
  • MH .= chr(ord("0")+TRUNCATE(pituus))
  • MH .= chr(ord("0")+TRUNCATE(leveys))
  • # Poistetaan kokonaisosa koordinaateista..
  • pituus = pituus - TRUNCATE(pituus)
  • leveys = leveys - TRUNCATE(leveys)

4. Koodataan kolmas kantaluku

  • # Kerrotaan koordinaatit esitysaskeleen kantaluvuilla saaden askeleen kokonaisosa
  • pituus = pituus * 24.0
  • leveys = leveys * 24.0
  • MH .= chr(ord("A")+TRUNCATE(pituus))
  • MH .= chr(ord("A")+TRUNCATE(leveys))
  • # Poistetaan kokonaisosa koordinaateista..
  • pituus = pituus - TRUNCATE(pituus)
  • leveys = leveys - TRUNCATE(leveys)

5. Mahdollisesti toistetaan kohtia 3 ja 4 kunnes riittävä esityspituus on saatu

6. Palautetaan tuloksena MH-muuttujaan kertynyt merkkijono

Yllä ".=" on PERL-ohjelmointikielen tapa kertoa, että kohdemerkkijonomuuttujan perään lisätään lausekkeen oikealla puolella muodostettu merkki tai merkkijono. Kaiken muun pitäisi olla kaikille ohjelmoijille tuttua.

Koordinaattien parsinta-algoritmi

Yllä esitetylle koodaamiselle käänteinen toimenpide, joka on helppo tehdä vaikkapa näin:

1. Syöte tulee merkkijonomuuttujassa MH, kaikki kirjaimet isoja (KP30CR, ei kp30cr).
2. Asetetaan keruumuuttujat:

  • pituus = 0
  • leveys = 0

3. Asetetaan kertoimet:

  • kerroin = 1.0

4. Parsitaan ensimmäinen merkkipari:

  • kantaluku = 18.0
  • kerroin = kerroin / kantaluku
  • pituusmerkki = substr(MH, 1, 1) # Ensimmäinen merkki
  • leveysmerkki = substr(MH, 2, 1) # Toinen merkki
  • MH = substr(MH, 3) # Kolmannesta merkistä alkaen kaikki loput
  • pituus = pituus + (ord(pituusmerkki)-ord("A")) * kerroin
  • leveys = leveys + (ord(leveysmerkki)-ord("A")) * kerroin

5. Parsitaan toinen merkkipari:

  • Jos MH on tyhjä, mene kohtaan 8.
  • kantaluku = 10.0
  • kerroin = kerroin / kantaluku
  • pituusmerkki = substr(MH, 1, 1) # Ensimmäinen merkki
  • leveysmerkki = substr(MH, 2, 1) # Toinen merkki
  • MH = substr(MH, 3) # Kolmannesta merkistä alkaen kaikki loput
  • pituus = pituus + (ord(pituusmerkki)-ord("0")) * kerroin
  • leveys = leveys + (ord(leveysmerkki)-ord("0")) * kerroin

6. Parsitaan kolmas merkkipari:

  • Jos MH on tyhjä, mene kohtaan 8.
  • kantaluku = 24.0
  • kerroin = kerroin / kantaluku
  • pituusmerkki = substr(MH, 1, 1) # Ensimmäinen merkki
  • leveysmerkki = substr(MH, 2, 1) # Toinen merkki
  • MH = substr(MH, 3) # Kolmannesta merkistä alkaen kaikki loput
  • pituus = pituus + (ord(pituusmerkki)-ord("A")) * kerroin
  • leveys = leveys + (ord(leveysmerkki)-ord("A")) * kerroin

7. Palataan kohtaan 5.
8. MH merkkijono on käsitelty
8.1. Siirretään koordinaatit ruudun keskikohtaan

  • pituus = pituus + kerroin / 2
  • leveys = leveys + kerroin / 2

8.2. Skaalataan tulokset:

  • pituus = 180.0 * pituus - 90.0
  • leveys = 360.0 * leveys - 180.0

9. Palautetaan tuloksena: pituus, leveys (asteina)

Toisenlaisilla skaalauskertoimilla tuloksena on radiaaneja (trigonometrisiin laskuihin) (Vihje: π/2, π ja 2π)

Lähteet

Osa tekstistä on muokattu Viestikallion koordinaattityökalujen yhden lähdemodulin kommenteista.

Aiheesta muualla

Esimerkkejä muunnoskoodeista ja muusta: