transformarea între diferite sisteme de coordonate manual
Aplicațiile care oferă servicii legate de poziționare, sunt acum pe creasta de popularitate, dar computerul poate determina locația unui punct din lumea reală? Există mai multe modalități de a răspunde la această întrebare, dar toate implică utilizarea uneia dintre mai multe sisteme de coordonate geografice existente. În acest articol, arhitect de sistem Salkosuo Sami (Sami Salkosuo) oferă Java ™ -Code care convertește coordonate între două sisteme populare: sistemul de bine-cunoscut de longitudine și latitudine și Universal Transverse Mercator (UTM).
Salkosuo ei înșiși. Arhitect Software, IBM
Atunci când o organizație decide să pună în aplicare o aplicație care utilizează un sistem de coordonate geografic, de obicei, scris de o astfel de cerere devine sarcina de dezvoltator. Construirea aplicațiilor folosind coordonatele geografice, implică o mulțime de probleme mari și mici, iar una dintre aceste probleme este relativ simplu de a converti coordonatele de la un sistem la altul. Acest articol conține un cod care realizează conversia și poate salva multe ore de lucru.
Două sisteme de coordonate diferite
Înainte de scufundare în codul prezentate în acest articol, trebuie să discute sistemele de coordonate pentru a susține că acest cod este: un sistem bine cunoscut de latitudine și longitudine și UTM (Universal Transverse Mercator - UTM). De asemenea, trebuie să atingi pe sistemul militar de coordonate (sistem militar de referință Grid - MGRS), care se bazează pe UTM.
Latitudine și longitudine
Un sistem de latitudinea și longitudinea, probabil cea mai cunoscută metodă de determinare a coordonatelor geografice. Aceasta locatie este reprezentată de două numere. Latitude - este unghiul din centrul pământului la unele paralele pe suprafața pământului. Longitudine - este unghiul din centrul pământului la un anumit meridian de pe suprafața pământului. Latitudine și longitudine pot fi exprimate în grade zecimale (DD) sau în grade, minute și secunde (DMS); în acest ultim caz sunt numerele în acest format - 49 ° 30'00 "S 12 ° 30'00" E. Acest format este utilizat în mod obișnuit GPS-navigator.
Pământul este împărțit ecuator (0 ° latitudine), în emisfera nordică și sudică, iar meridianul zero (0 ° longitudine), liniei imaginare de la nord la polul sud care prohoditcherez oraș Greenwich în Marea Britanie și planeta împarte emisfera estică și vestică. Gama de latitudini din emisfera nordică de la 0 la 90 de grade, iar în emisfera sudică - de la 0 până la -90 de grade. Raza de acțiune din emisfera estică de la 0 la 180 de grade, și emisfera vestică de la 0 la -180 de grade.
De exemplu, punctul cu coordonatele 61.44, 25.40 (format DD) sau 61 ° 26'24''N, 25 ° 23'60''E (în format DMS), se află în sudul Finlandei. Un punct cu coordonate -47.04, -73.48 (DD) sau 47 ° 02'24 '' S, 73 ° 28'48''W (DMS) este în sudul Chile. Figura 1 prezintă imaginea Pământului cu care se suprapun linii paralele și meridiane:
Figura 1. Teren cu liniile prezentate de latitudine și longitudine
Informații suplimentare pot fi găsite în secțiunea Resurse.
transversal Mercator
UTM sistem de coordonate - o metodă care utilizează o grilă pentru a determina coordonatele. Sistemul UTM împarte pământul în 60 de zone, fiecare dintre acestea se bazează pe Transverse Mercator. O proiecție hartă în cartografie - un mod de a introduce un plan bidimensional pe o suprafață neuniformă, ca un card obișnuit. Figura 2 prezintă o proiecție Mercator transversal:
Figura 2. Transversal Mercator
Zonele longitudine UTM sunt numerotate între 1 și 60; toate, dar două zone, care vor fi descrise mai târziu, au o lățime de 6 ° de la est la vest. Zona longitudinea acoperă complet suprafața Pământului între latitudinile de 80 și 84 ° S ° N.
Există, de asemenea, o lățime de 20 de zone de câte 8 ° în înălțime; aceste zone sunt numerotate de la C la X, literele I și O omise. Zonele A, B, Y și Z sunt în afara sistemului, ele acoperă Arctica și Antarctica. Figura 3 prezintă banda UTM pentru Europa. Această figură prezintă două neconvențional zone longitudine: Zona 32V se extinde pentru a acoperi întreaga Sud Norvegia și zona 31V redusă pentru a acoperi numai fâșia de apă.
Figura 3. Zonele UTM din Europa
Coordonatele în UTM sunt prezentate în formatul longitudine zona de zonă latitudine Easting În direcția nord. în care Easting - o distanță de proiecție de longitudine centrală zona meridian, nord declinare - o distanță de proiecție de ecuator. Valorile declinări de est și nord sunt în metri. De exemplu, latitudinea / longitudinea coordonatele 61.44, 25.40 în UTM reprezentat ca 35 V 414668 6812844; latitudine / longitudine -47.04, -73.48 corespund coordonatelor 4789269 18 615471 G în UTM.
A se vedea Resurse pentru mai multe informații cu privire la UTM și Transverse Mercator.
Sistemul de coordonate militare
MGRS sistem de coordonate - standardul folosit de trupele NATO. MGRS și UTM bazate pe defalca fiecare zonă în pătrate de 100x100 km. Aceste piețe sunt identificate prin cod de două litere, prima literă - poziția est-vest, în zona de longitudine, iar a doua literă - poziția nord-sud.
De exemplu, în UTM coordonate de 35 V 414668 6812844 echivalent coordonate MGRS 35VMJ1466812844. Precizia coordonatelor în MGRS date cu o precizie de un metru și reprezentat printr-un simbol de 15, 10 în cazul în care ultimele valori de simboluri reprezintă declinația de Est și de Nord în grila de spus. In MGRS coordonate pot fi reprezentate prin 15 simboluri, ca și în exemplul anterior, sau un 13, 11, 9 sau 7 simboluri; astfel, valorile prezentate vor avea, respectiv, cu o precizie de 1, 10, 100, 1000 sau 10000 de metri.
Acest articol nu înțelege în detaliu MGRS, dar codul descărcat include conversie între latitudine / longitudine și MGRS. În informațiile suplimentare, a se vedea Resurse.
transformare de coordonate
grade zecimale în grade / minute / secunde și
Este extrem de simplu de a converti coordonatele din formatul DD în DMS. Formula pentru această conversie:
În acest exemplu, gg - este partea fracționară a calculului. Locație negativă înseamnă latitudine în emisfera sudică (S), și o longitudine negativă - în emisfera vestică (W). De exemplu, să presupunem că aveți coordonatele în formatul ZZ - 61.44, 25.40. Ele pot fi transformate după cum urmează:
Astfel, formatul DMS avem următoarele coordonate - 61 ° 26'24''N 25 ° 24'00''E.
Formula pentru tranziția de la DMS la DD:
Amintiți-vă că locația sa în emisfera (S) din sud, au o latitudine negativă, și locuri din emisfera vestică (W) au o longitudine negativă.
Acum efectua coordonate DMS transformare 47 ° 02'24 '' S, 73 ° 28'48''W în format DD:
Astfel, coordonatele în DD sunt -47.04, -73.48.
Conversia latitudine / longitudine pentru a UTM și înapoi
Formula pentru transformarea UTM nu sunt prezentate aici, dar codul sursă din secțiunea următoare scoate în evidență această problemă un pic, dar în secțiunea Resurse oferă linkuri către informații suplimentare.
Transformarea coordonatelor în cod Java
Această secțiune conține biblioteca de clasă de cod sursă care realizează conversia de coordonate între grade zecimale și UTM. Această clasă este numit Java-com.ibm.util.CoordinateConversion și am vrut să creeze o clasă separată cu metode pentru a converti. Această clasă include clase interioare care realizează efectiv conversia, dacă este necesar, aceste clase pot fi scoase din clasa CoordinateConversion folosind refactoring pentru a crea un pachet de bibliotecă sau de a adăuga clase de la un pachet existent. Conversia realizată prin această clasă au o precizie de 1 metru.
În codul sursă CoordinateConversion aproximativ 750 de rânduri, astfel încât în acest articol, acesta nu este pe deplin reprezentat. Metodele semnificative sunt descrise în următoarele secțiuni, și codul complet este disponibil sub Descărcări.
clasa CoordinateConversion
CoordinateConversion - este clasa principală a obiectelor care sunt create atunci când aveți nevoie pentru a efectua transformarea de coordonate. Listarea 1 prezintă metodele publice substanțiale coroborate cu clasele private, interne incluse în clasa CoordinateConversion:
Listarea 1. CoordinateConversion
detalii Următoarea secțiune conversia între longitudine / latitudine și UTM.
Conversia latitudine / longitudine pentru a UTM
Coordonatele sunt convertite în latitudine / longitudine folosind metoda UTM String latLon2UTM (latitudine dublă, dublu longitudine). Implementarea acestei metode creează o instanță a clasei interioare LatLon2UTM c = new LatLon2UTM (); UTM coordonează și returnează un șir de 15 caractere, cu o precizie de 1 metru. Metodele clasei de implementare LatLon2UTM este prezentată în Listing 2:
Listarea 2. convertLatLonToUTM public String (dublă latitudine, longitudine dublă)
Această metodă realizează transformarea, provocând diferite metode de obținere a zonei de latitudine și longitudine, calcularea declinația est și nord etc. Datele de intrare sunt verificate pentru a valida metoda (). dacă expresia (latitudine <-90.0 || latitude> 90.0 || longitudine <-180.0 || longitude>= 180,0) este setată la true, atunci IllegalArgumentException resetare excepție.
3. listare protejate setVariables nule (dublă latitudine, longitudine) dublu
getLongZone () metoda în Exemplul 4 și clasa LatZones. disponibil în codul sursă. utilizate pentru a identifica zona de longitudine și latitudine zonei. zona de longitudine calculată prin parametrul longitudine. și zona de latitudine este de obicei prezentată ca fiind constante, folosind o matrice din clasa LatZones.
Listarea 4. protejate String getLongZone (double longitudine)
getNorthing () metoda din Exemplul 5 și getEasting () metoda din exemplul 6, valorile nord și declinare est calculată. Ambele metode folosesc variabilele setate în setVariables metodei () din figura 3.
Listarea 5. protejată getNorthing dublă (dublă latitudine)
Listarea 6. protejate dublu getEasting ()
Listarea 7 prezintă câteva exemple ale rezultatelor programului de lucru, inclusiv coordonatele în formatul latitudine / longitudine și coordonează UTM corespunzătoare:
Listarea 7. test de conversie de la valorile de latitudine / longitudine în UTM
Conversia de la UTM la latitudinea / longitudinea
Transformarea coordonatelor în format UTM la latitudinea / longitudinea se realizează oarecum mai ușor decât procesul invers. În articolul „Universal rețelele“ în secțiunea Resurse) prezintă formulele de transformare. Listarea 8 Metoda cod convertUTMToLatLong () este afișat. Aceasta metoda returneaza o matrice de valori duble, în care primul element (cu indexul array [0]), - o latitudine, un al doilea element (cu indexul array [1]) - această longitudine. Deoarece parametrul șir cuprinde coordonatele UTM la distanță de 1 metru și coordonatele în latitudine / longitudine va avea aceeași precizie.
Listarea 8. publice dublu [] convertUTMToLatLong (String UTM)
convertUTMToLatLong () metoda divide coordonatele UTM în parametrul șir de intrare, care au formatul 34 G 683 473 și 4942631. utilizează getHemisphere () metoda pentru determinarea emisferei, unde fanta cu coordonatele specificate. Definiți o emisferă: latitudinea A. C. D. E. F. G. H. J. K. L și M sunt în emisfera sudică, iar zonele rămase sunt situate în emisfera nordică.
setVariables () metoda. prezentat în listarea 9 seturi variabilele necesare pentru calcularea și latitudinea calculată apoi imediat. Longitudine calculată folosind zona longitudine.
Listarea 9. setVariables void protejate ()
setVariables () metoda utilizează valorile declinației de Est și de Nord pentru a seta variabilele necesare. Aceste variabile aparțin ambelor clase sunt stabilite în metoda și convertUTMToLatLong (UTM String) din figura 8.
alte metode
Codul sursă conține, de asemenea, alte metode și clase publice și private. De exemplu, sunt incluse metode și clase de coordonate de conversie între latitudine / longitudine și MGRS cu metode ajutatoare care efectueaza grade de conversie la radiani și invers, și diverse operații matematice, cum ar fi POW, SIN, COS, și TAN.
concluzie
Acest articol oferă unele teorii asupra lumii sistemul de coordonate cu Java-clasa pentru a efectua conversia coordonatelor de la un sistem la altul. Deși sunt discutate în detaliu coordonatele aici nu toate formula pentru a converti, acestea sunt disponibile în resurse. De obicei, informații teoretice nu este necesară în procesul de dezvoltare de zi cu zi, cu excepția cazului în cazuri rare, atunci când nu există nici o altă cale, recent am devenit convins că am avut de a îndeplini sarcina de conversie a coordonatelor.
Mi-a luat pentru a converti între latitudine și Lon, UTM și MGRS, așa că am efectuat cercetarea de bază și a pus în aplicare aceste schimbări în Java clasa. Pentru mine, dezvoltarea a luat câteva ore și sper că și alții vor fi, de asemenea, posibilitatea de a salva câteva ore pentru alte sarcini și consideră că este util să se folosească clasa CoordinateConversion în activitatea lor.