Jump to content

Transformācija LKS-92 uz WGS84 (UMT aka GPS koordinātes)


zeds
 Share

Recommended Posts

Sveiki!

 

Vēlējos veikt koordināšu transformāciju no LKS-92 izrādījās,ka tas nav tik vienkārši kā liekas.

 

1. Cik saprotu Latvijā pastāv divi kartogrāfijas standarta LKS-92 varianti (FN=0 FN=-6000000 .lai ko tas arī nenozīmētu. Man pagaidām tā ir tukša skaņa). Kuru variantu izmanto JS Latvia karte ?

 

2. Varbūt kāds labs cilvēks varētu uzrakstīt formulu ar visām konstantēm kā pārrēķināt abus LKS-92 variantus uz standarta GPS koordināšu sistēmu WGS84 un otrādi. Es domāju augot GPS popularitātei šāda problēma forumā un ne tikai uzpeldēs arvien biežāk, tā ka šo labdari daudzi pieminēs ar labiem vārdiem, jo nez vai visiem būs pa spēkam iedziļināties kartogrāfijas problēmās.

 

3. ja nu formulas nav varbūt kādam ir laba literatūra par šo jautājumu. Citādi vārdi elipsoidālās koordinātes utt man pagaidām ir tukša skaņa. Pat nevaru formulās konstantes ielikt jo nesaprotu kas tās ir. Negribas , bet nāksies mācīties.

 

P.S. kalkulatorus un karšu programmatūru lūdzu neieteikt, vajag formulu lai varu pats rēķināt.

P.P.S. piedodiet ja ļoti vienkāršs jautājums, nezinu kur lai sameklē . google neko daudz man neatgrieza

Labots - zeds
Link to comment
Share on other sites

Reku pieejams kalkulators ar visu sourci javaskriptā (tur arī vari apskatīties forumlas): http://www.dmap.co.uk/ll2tm.htm

LKS-92 var iestādīt izvēloties GridArea = UTM (International), Central Meridian = Enter, 24, E.

 

WGS84 vien ir tie paši grādi/minūtes/sekundes tik uzrakstīts decimāldaļā. Tb divos skaiļos - garuma grādi un platuma grādi.

Link to comment
Share on other sites

man ir kkas formātā:

24.02168;56.55469 , ar komentāru Garums;Platums. Nezinu kas tas ir bet UTM tas nav, pavisam droši.

 

Nu un kā lai es to iebakstu kalkulatorā ? kas pie velna ir easting un northing, nemaz nerunājos kas ir 24 un E.

Labots - zeds
Link to comment
Share on other sites

Tā.

Man pašam JS Latvija nav, tāpēc tagad es pat nezinu kādas koordinātes man ir iedotas. Koordinātes ir ņemtas , kā man apgalvoja no JS Latvija kurai savukārt ir uzlikts izmantot JKS-92 koordinātu sistēmu. No tā es izdarīju secinājumu ka tās ir JKS-92. No otras puses uzliekot šo punktu uz kartes pēc WGS84 (ie Google Maps ) , man šis punkts rīgas vietā sanaak kaut kur starp Jelgavu un iecavu, tātad WGS84 tas arī nav.

 

Piedodiet protams , bet vai es neuzrakstīju pietiekami skaidri ka man vajag formulu nevis kalkulatoru ?

Link to comment
Share on other sites

JS rāda gan LKS, gan WGS, vajag tikai paņemt īstās.

 

LKS ir formātā XXXXXX.XXX un YYYYYY.YYY,

 

WGS ir formātā D.M.S, D.M.S., kur D-grādi, M-minūtes, S-sekundes.

 

GPS parasti var ievadīt WGS, ja vien tas nav kāds magelāns, kuram var barot iekšā uzreiz LKS koordinātas.

 

Nu piedod, neuzmanīgi lasīju par to formulu, to gan nezinu, bet zinu, ka jāvada iekšā lērums parametru, tādus kā elipsoīds, josla, koordinātas, u.t.t., citiem vārdiem, tā gluži uz kalkulatora vis nesarēķināsi.

P.S. Par pāris aliem var sarunāt, ka ieskenēšu mācību grāmatas lapas, kas attiecas uz šo tēmu.

Labots - Vilx
Link to comment
Share on other sites

_dunduks_

Easting un Northing ir grādu attiecība no Griničas meridiāna un ekvatora.

24.xxxxx nozīmē ka tas tik grādus ir uz austrumien no Griničas. Saukts arī par "Garumu". Austrumus vēl apzīmē ar "+" zīmi. Ja ir mīnus zīme "-24.XXXXX" - tas nozīmē, ka tas ir uz rietumiem no Griničas.

56.xxxxxx nozīmē 56 grādus uz ziemeļiem no ekvatora. Saukts arī par platumu. -56.xxxxxx nozīmē uz dievidiem no ekvatora.

 

JS latvijai 24E nozīmē, ka tas ir kartes vertikālā ass līnija (24 grādi uz austrumiem) no kuras tālāk tiek veidota lodes (zemes) palknes projekcija, jo kā zināms lodes (zemes) viersmu nevar nekļūdīgi attēlot plaknē - vai nu platības vai arī krasta līnija būs izkropļota salīdzinot ar dabā esošo.

 

Gan maps.google.com gan JS izmanto WGS-84 koordināšu sistēmu. Iespējams, ka kādu ciparu neesi uzrakstījis pareizi.

 

ceru, ka nekļūdos.

Labots - _dunduks_
Link to comment
Share on other sites

tehniķis

Vispār jau WGS84(UTM) koordinātes ir attēlojamas 3 formātos:

DECIMAL,

DDD MM.MMM ,

DDD MM SS.SSS

 

Ar LKS92 ir tas pats. Vienu brīdi arī bija vajadzīga formula LKS92->WGS84 un otrādi, bet neatradu(nebija tik svarīgi), izmantoju kaut kādu CoordTrans progzi

 

P.S.

LKS92 izmanto Valsts Zemes Dienests mērniecības plānos

Link to comment
Share on other sites

Ir jauna izdevuma grāmata- "Ģeodēzija", ir pāris gadus veca "Mūsdienu topogrāfiskās kartes", ir lērums vecu, kas jāmeklē bibliotēkā. Pirmās divas ir manā īpašumā. Prom nedodu, bet ieskenēt kaut ko varu.

Link to comment
Share on other sites

JS Latvija3 izmanto LKS-92 ar

Transversālo Merkatora projekciju (TM-1993)

Ass meridiānu 24

Mēroga koificientu 0,9996

Kordinātu atskaites punktiem

no ass meridiāna 5000000m

no ekvatora 0 m

Elipsoīdu GRS 1980

Link to comment
Share on other sites

aigs: skan lieliski, ja es vēl saprastu kas ir viss zemāk minētais.

Es jau saprotu , ka laikam esmu vienīgais :shock: kursh šeit nezina slaveno elipsoīdu GRS 1980...

 

Vilx: paldies , pecentīšos nopirkt grāmatu, negribas Tevi apgrūtināt. Bet ja nesanāks tad gan palūgšu nokopēt.

Labots - zeds
Link to comment
Share on other sites

Nu jā. Nevaru teikt, ka man būtu ļoti liela izpratne par šiem jautājumiem. Darbā iznāk saskarties ar dažādām kordinātu sistēmām, bet pāreja no vienas uz otru notiek ar programmu nevis formulu palīdzību.

Link to comment
Share on other sites

aig9, kā domā, kā tad programma zina, kas un kā jāpārvērš? Vai tik ne pēc formulas 8)

 

Programmu lietojam tāpēc, ka ļoti reti vajag pārvērst tikai vienu koordinātu pāri, parasti jau veselu čupu, un tad ar rociņām ir dikti ilgi.

 

Par tām grāmatām- pat nezinu, kur tās varētu meklēt iepirkšanai, pārāk jau nu specifiska literatūra un metiens mazs, parasti tiek izdalīta ieinteresētajām pusēm, pasniedzējiem, katedras darbiniekiem. Bet varu katedrā apjautāties, vai nav kaut kur nopērkamas.

Link to comment
Share on other sites

vilx, es jau to saprotu. Gribēju tikai teikt, ka es šīs formulas nezinu, jo programmas tās zina manā vietā.

Link to comment
Share on other sites

  • 2 months later...
tehniķis

Šājā failā c++ kods kurā var transformēt koordinātes no LatLon uz Transverse Mercator projekciju un otrādi.

No turienes var izlobīt formulu, pašam gan, īsināt, nav vēlme.

 

Adaptēju kodu uz pascal, un izveidoju mazu tūli, kurš liekas, ka strādā.

Link to comment
Share on other sites

  • 3 weeks later...

Es lietoju bibliotēku proj.4 (http://proj.maptools.org/). Ir gan wraperi dažādām valodām, gan arī komandrinas tūlis. Projekciju definēšanai izmanto parametru rindu, kuru dažādām projekcijām var dabūt (lai pašam nav jādomā) piemēram šeit http://spatialreference.org/ref/epsg/.

 

Var, protams, pats formulu sakodēt, pēc formulas apraksta, kuru var šur tur atrast (piemēram, http://www.remotesensing.org/geotiff/proj_..._mercator.html) vai gatava koda gabaliem (piemēram, http://www2.viamichelin.com/apijs/js/map/T...Referential.js).

 

ivars

Link to comment
Share on other sites

  • 1 year later...
  • 1 year later...

Meklējot pa tēmu komentus arī es atļaušos iemest linku uz citu Koordināšu kalkulatoru

Noderīgs resurss.

Ir transformācija starp LKS-92 un UTM un WGS84 visos virzienos. Google karte gan nav diez ko preciza koordināšu nolasīšanai, bet pats kalkulators pilda savas funkcijas ekscelenti. Var arī savas koordinātes atlikt uz kartes.

Link to comment
Share on other sites

  • 3 months later...

Jāsaka, ka uzdarbošos par kapraci, paceļot 4 mēnešus vecu topicu. Autoram ļoti iespējams vairs tas nepalīdzēs, bet varbūt noderēs kādam citam, kas nejauši iebridīs šajā forumā, meklējot atbildes.

 

Izmantojot modzo minēto koordinātu kalkulatoru, noportēju tā kodu no JavaScript uz C# (.NET). Ja kādam vajadzīgs, tad kodu var lejupielādēt: http://knagis.miga.lv/blog/post/2010/08/27/LKS92-koordinatu-sistema.aspx

Link to comment
Share on other sites

  • 7 years later...
function LKSToLatLon($x, $y) {
		// Ellipsoid model constants (actual values here are for WGS84) 
		$UTMScaleFactor = 0.9996;
		$sm_a = 6378137.0;
		$sm_b = 6356752.314140;
		$sm_EccSquared = 6.69437999013e-03;

		$x -= 500000.0;
		// Pirmā atšķirība no WGS84 - Kilometriņš šurpu, kilometriņš turpu.
		$y -= -6000000.0;
		$x /= $UTMScaleFactor;
		$y /= $UTMScaleFactor;

		// Otrā atšķirība no WGS84 - Centrālais meridiāns ir citur.
		$lambda0 = deg2rad(24);

		// Precalculate n (Eq. 10.18) 
		$n = ($sm_a - $sm_b) / ($sm_a + $sm_b);

		// Precalculate alpha_ (Eq. 10.22) 
		// (Same as alpha in Eq. 10.17) 
		$alpha_ = (($sm_a + $sm_b) / 2.0)
		* (1 + (pow($n, 2.0) / 4) + (pow($n, 4.0) / 64));

		// Precalculate y_ (Eq. 10.23)
		$y_ = $y / $alpha_;

		// Precalculate beta_ (Eq. 10.22) 
		$beta_ = (3.0 * $n / 2.0) + (-27.0 * pow($n, 3.0) / 32.0)
		+ (269.0 * pow($n, 5.0) / 512.0);

		// Precalculate gamma_ (Eq. 10.22) 
		$gamma_ = (21.0 * pow($n, 2.0) / 16.0)
		+ (-55.0 * pow($n, 4.0) / 32.0);

		// Precalculate delta_ (Eq. 10.22) 
		$delta_ = (151.0 * pow($n, 3.0) / 96.0)
		+ (-417.0 * pow($n, 5.0) / 128.0);

		// Precalculate epsilon_ (Eq. 10.22) 
		$epsilon_ = (1097.0 * pow($n, 4.0) / 512.0);

		// Now calculate the sum of the series (Eq. 10.21) 
		$phif = $y_ + ($beta_ * sin(2.0 * $y_))
		+ ($gamma_ * sin(4.0 * $y_))
		+ ($delta_ * sin(6.0 * $y_))
		+ ($epsilon_ * sin(8.0 * $y_));


		//  Precalculate ep2 
		$ep2 = (pow($sm_a, 2.0) - pow($sm_b, 2.0))
		/ pow($sm_b, 2.0);

		// Precalculate cos (phif) 
		$cf = cos($phif);

		// Precalculate nuf2 
		$nuf2 = $ep2 * pow($cf, 2.0);

		// Precalculate Nf and initialize Nfpow 
		$Nf = pow($sm_a, 2.0) / ($sm_b * sqrt(1 + $nuf2));
		$Nfpow = $Nf;

		// Precalculate tf 
		$tf = tan($phif);
		$tf2 = $tf * $tf;
		$tf4 = $tf2 * $tf2;

		// Precalculate fractional coefficients for x**n in the equations below to simplify the expressions for latitude and longitude.
		$x1frac = 1.0 / ($Nfpow * $cf);

		$Nfpow *= $Nf;   // now equals Nf**2) 
		$x2frac = $tf / (2.0 * $Nfpow);

		$Nfpow *= $Nf;   // now equals Nf**3) 
		$x3frac = 1.0 / (6.0 * $Nfpow * $cf);

		$Nfpow *= $Nf;   // now equals Nf**4) 
		$x4frac = $tf / (24.0 * $Nfpow);

		$Nfpow *= $Nf;   // now equals Nf**5) 
		$x5frac = 1.0 / (120.0 * $Nfpow * $cf);

		$Nfpow *= $Nf;   // now equals Nf**6) 
		$x6frac = $tf / (720.0 * $Nfpow);

		$Nfpow *= $Nf;   // now equals Nf**7) 
		$x7frac = 1.0 / (5040.0 * $Nfpow * $cf);

		$Nfpow *= $Nf;   // now equals Nf**8)
		$x8frac = $tf / (40320.0 * $Nfpow);

		// Precalculate polynomial coefficients for x**n. -- x**1 does not have a polynomial coefficient.
		$x2poly = -1.0 - $nuf2;

		$x3poly = -1.0 - 2 * $tf2 - $nuf2;

		$x4poly = 5.0 + 3.0 * $tf2 + 6.0 * $nuf2 - 6.0 * $tf2 * $nuf2
		- 3.0 * ($nuf2 * $nuf2) - 9.0 * $tf2 * ($nuf2 * $nuf2);

		$x5poly = 5.0 + 28.0 * $tf2 + 24.0 * $tf4 + 6.0 * $nuf2 + 8.0 * $tf2 * $nuf2;

		$x6poly = -61.0 - 90.0 * $tf2 - 45.0 * $tf4 - 107.0 * $nuf2
		+ 162.0 * $tf2 * $nuf2;

		$x7poly = -61.0 - 662.0 * $tf2 - 1320.0 * $tf4 - 720.0 * ($tf4 * $tf2);

		$x8poly = 1385.0 + 3633.0 * $tf2 + 4095.0 * $tf4 + 1575 * ($tf4 * $tf2);

		// Calculate latitude
		$lat = $phif + $x2frac * $x2poly * ($x * $x)
		+ $x4frac * $x4poly * pow($x, 4.0)
		+ $x6frac * $x6poly * pow($x, 6.0)
		+ $x8frac * $x8poly * pow($x, 8.0);

		// Calculate longitude
		$lon = $lambda0 + $x1frac * $x
		+ $x3frac * $x3poly * pow($x, 3.0)
		+ $x5frac * $x5poly * pow($x, 5.0)
		+ $x7frac * $x7poly * pow($x, 7.0);

		return Array(rad2deg($lat), rad2deg($lon));
	} 

Te neliela php funkcija, kura varētu kādam kādreiz palīdzēt. ;)

Link to comment
Share on other sites

  • 10 months later...
HarijsK

M1raz risinājums tikai uz Javascript pārrakstīts. (p.s. paldies, noderēja)

 

function deg2rad(angle){
  return (angle / 180) * Math.PI;
  }

function rad2deg(radians) {
  return radians * (180 / Math.PI);
}

function LKSToLatLon(x, y) {
    // Ellipsoid model constants (actual values here are for WGS84)
    UTMScaleFactor = 0.9996;
    var sm_a = 6378137.0;
    var sm_b = 6356752.314140;
    var sm_EccSquared = 6.69437999013e-03;

    x -= 500000.0;
    // Pirmā atšķirība no WGS84 - Kilometriņš šurpu, kilometriņš turpu.
    y -= -6000000.0;
    x /= UTMScaleFactor;
    y /= UTMScaleFactor;

    // Otrā atšķirība no WGS84 - Centrālais meridiāns ir citur.
    var lambda0 = deg2rad(24);

    // Precalculate n (Eq. 10.18)
    var n = (sm_a - sm_b) / (sm_a + sm_b);

    // Precalculate alpha_ (Eq. 10.22)
    // (Same as alpha in Eq. 10.17)
    var alpha_ = ((sm_a + sm_b) / 2.0) * (1 + (Math.pow(n, 2.0) / 4) + (Math.pow(n, 4.0) / 64));

    // Precalculate y_ (Eq. 10.23)
    var y_ = y / alpha_;

    // Precalculate beta_ (Eq. 10.22)
    var beta_ = (3.0 * n / 2.0) + (-27.0 * Math.pow(n, 3.0) / 32.0) + (269.0 * Math.pow(n, 5.0) / 512.0);

    // Precalculate gamma_ (Eq. 10.22)
    var gamma_ = (21.0 * Math.pow(n, 2.0) / 16.0) + (-55.0 * Math.pow(n, 4.0) / 32.0);

    // Precalculate delta_ (Eq. 10.22)
    var delta_ = (151.0 * Math.pow(n, 3.0) / 96.0) + (-417.0 * Math.pow(n, 5.0) / 128.0);

    // Precalculate epsilon_ (Eq. 10.22)
    var epsilon_ = (1097.0 * Math.pow(n, 4.0) / 512.0);

    // Now calculate the sum of the series (Eq. 10.21)
    var phif = y_ + (beta_ * Math.sin(2.0 * y_)) + (gamma_ * Math.sin(4.0 * y_)) + (delta_ * Math.sin(6.0 * y_)) + (epsilon_ * Math.sin(8.0 * y_));

    //  Precalculate ep2
    var ep2 = (Math.pow(sm_a, 2.0) - Math.pow(sm_b, 2.0)) / Math.pow(sm_b, 2.0);

    // Precalculate cos (phif)
    var cf = Math.cos(phif);

    // Precalculate nuf2
    var nuf2 = ep2 * Math.pow(cf, 2.0);

    // Precalculate Nf and initialize Nfpow
    var Nf = Math.pow(sm_a, 2.0) / (sm_b * Math.sqrt(1 + nuf2));
    var Nfpow = Nf;

    // Precalculate tf
    var tf = Math.tan(phif);
    var tf2 = tf * tf;
    var tf4 = tf2 * tf2;

    // Precalculate fractional coefficients for x**n in the equations below to simplify the expressions for latitude and longitude.
    var x1frac = 1.0 / (Nfpow * cf);

    Nfpow *= Nf;   // now equals Nf**2)
    var x2frac = tf / (2.0 * Nfpow);

    Nfpow *= Nf;   // now equals Nf**3)
    var x3frac = 1.0 / (6.0 * Nfpow * cf);

    Nfpow *= Nf;   // now equals Nf**4)
    var x4frac = tf / (24.0 * Nfpow);

    Nfpow *= Nf;   // now equals Nf**5)
    var x5frac = 1.0 / (120.0 * Nfpow * cf);

    Nfpow *= Nf;   // now equals Nf**6)
    var x6frac = tf / (720.0 * Nfpow);

    Nfpow *= Nf;   // now equals Nf**7)
    var x7frac = 1.0 / (5040.0 * Nfpow * cf);

    Nfpow *= Nf;   // now equals Nf**8)
    var x8frac = tf / (40320.0 * Nfpow);

    // Precalculate polynomial coefficients for x**n. -- x**1 does not have a polynomial coefficient.
    var x2poly = -1.0 - nuf2;

    var x3poly = -1.0 - 2 * tf2 - nuf2;

    var x4poly = 5.0 + 3.0 * tf2 + 6.0 * nuf2 - 6.0 * tf2 * nuf2 - 3.0 * (nuf2 * nuf2) - 9.0 * tf2 * (nuf2 * nuf2);

    var x5poly = 5.0 + 28.0 * tf2 + 24.0 * tf4 + 6.0 * nuf2 + 8.0 * tf2 * nuf2;

    var x6poly = -61.0 - 90.0 * tf2 - 45.0 * tf4 - 107.0 * nuf2 + 162.0 * tf2 * nuf2;

    var x7poly = -61.0 - 662.0 * tf2 - 1320.0 * tf4 - 720.0 * (tf4 * tf2);

    var x8poly = 1385.0 + 3633.0 * tf2 + 4095.0 * tf4 + 1575 * (tf4 * tf2);

    // Calculate latitude
    var lat = phif + x2frac * x2poly * (x * x) + x4frac * x4poly * Math.pow(x, 4.0) + x6frac * x6poly * Math.pow(x, 6.0) + x8frac * x8poly * Math.pow(x, 8.0);

    // Calculate longitude
    var lon = lambda0 + x1frac * x + x3frac * x3poly * Math.pow(x, 3.0) + x5frac * x5poly * Math.pow(x, 5.0) + x7frac * x7poly * Math.pow(x, 7.0);

    return [rad2deg(lat), rad2deg(lon)];
  }

 

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...