当前位置: 首页 > 编程语言 > C#

将UTM(wsg84)坐标转换为纬度和经度分享

时间:2023-04-10 19:38:56 C#

C#学习教程:将UTM(wsg84)坐标转换为经纬度我有坐标,我知道它们在哪个区域,但我如何将它们转换为纬度和经度?我希望有某种课程至少能为我带来一些魔力,但事实并非如此:(有什么建议吗?我知道可以做到,因为这个转换器似乎工作正常地理/UTM坐标转换器。非常欢迎任何输入谢谢!?谢谢!查看此.NET库http://projnet.codeplex.com/。这是publicstaticvoidToLatLon(doubleutmX,doubleutmY,stringutmZone,outdoublelatitude,outdoublelongitude){boolisNorthHemisphere=utmZone.Last()>='N';vardiflat=-0.00066286966871111111111111111111111111;vardiflon=-0.0003868060578;varzone=int.Parse(utmZone.Remove(utmZone.Length-1));varc_sa=6378137.000000;varc_sb=6356752.314245;vare2=Math.Pow((Math.Pow(c_sa,2)-Math.Pow(c_sb,2)),0.5)/c_sb;vare2quadrada=Math.Pow(e2,2);varc=Math.Pow(c_sa,2)/c_sb;变量x=utmX-500000;vary=isNorthHemisphere?utmY:utmY-10000000;vars=((zone*6.0)-183.0);varlat=y/(c_sa*0.9996);varv=(c/Math.Pow(1+(e2cuadrada*Math.Pow(Math.Cos(lat),2)),0.5))*0.9996;vara=x/v;vara1=Math.Sin(2*lat);vara2=a1*Math.Pow((Math.Cos(lat)),2);varj2=lat+(a1/2.0);varj4=((3*j2)+a2)/4.0;varj6=((5*j4)+Math.Pow(a2*(Math.Cos(lat)),2))/3.0;阿尔法变量=(3.0/4.0)*e2sq;varbeta=(5.0/3.0)*Math.Pow(alpha,2);var伽玛=(35.0/27.0)*Math.Pow(alpha,3);varbm=0.9996*c*(lat-alpha*j2+beta*j4-gamma*j6);varb=(y-bm)/v;varepsi=((e2square*Math.Pow(a,2))/2.0)*Math.Pow((Math.Cos(lat)),2);vareps=a*(1-(epsi/3.0));varnab=(b*(1-epsi))+lat;varsenoheps=(Math.Exp(eps)-Math.Exp(-eps))/2.0;varsplit=Math.For(senoheps/(Math.Cos(nab)));varperson=Math.For(Math.Cos(delt)*Math.For(nab));经度=((delt*(180.0/Math.PI))+s)+diflon;latitude=((lat+(1+e2sq*Math.Pow(Math.Cos(lat),2)-(3.0/2.0)*e2sq*Math.Sin(lat)*Math.Cos(lat)*(tao-lat))*(tao-lat))*(180.0/Math.PI))+deflat;}此C++代码可从以下链接下载:http://www.gpsy.com/gpsinfo/geotoutm/ChuckGantz附件:LatLong-UTMconversion.cppLatLong-UTMconversion.hUTMConversions.cppSwissGrid.cppSwissGrid。cpp文件)constants.h(在线查看文本文件)比如第一个文件链接到:www.gpsy.com/gpsinfo/geotoutm/gantz/LatLong-UTMconversion.cpp等这里有两个函数:UTMtoLatLong,反之亦然此外,如果您查看其他地方,则可以找到此代码的python版本。例如,在code.google.com/p/pys60gps/source/browse/trunk/lib/LatLongUTMconversion.py?r=246还有一些c#版本:在mediakey.dk/~cc/convert-northing-and-easting-utm-to-longitude-and-latitude/祝你好运。我创建了一个从javascript库到C#的端口,我测试了它并且工作正常,你可以在这里看看。如果您想推出自己的功能,可以在此页面中找到很多有用的信息:http://www.colorado.edu/geography/gcraft/notes/coordsys/coordsys.html我有几个可用的功能在lat-lon和UTM之间的Convert(两种方式)中,但是写在这里有点长。使用此代码:publicstaticvoidUTMToLatLon(doubleEasting,doubleNorthing,doubleZone,doubleHemi,outdoublelatitude,outdoublelongitude){doubleDtoR=Math.PI/180,RtoD=180/Math.PI;双a=6378137,f=0.00335281066474748071984552861852,northernN0=0,southernN0=10000000,E0=500000,n=f/(2-f),k0=0.9996,A=a*(1+(1/4)*Math.Pow(n,2)+(1/64)*Math.Pow(n,4)+(1/256)*Math.Pow(n,6)+(25/16384)*Math.Pow(n,8)+(49/65536)*Math.Pow(n,10))/(1+n),beta1=n/2-(2/3)*Math.Pow(n,2)+(37/96)*Math.Pow(n,3)-(1/360)*Math.Pow(n,4)-(81/512)*Math.Pow(n,5)+(96199/604800)*Math.Pow(n,6)-(5406467/38707200)*Math.Pow(n,7)+(7944359/67737600)*Math.Pow(n,8)-(7378753979/97542144000)*Math.Pow(n,9)+(25123531261/804722688000)*Math.Pow(n,10),beta2=(1/48)*Math.Pow(n,2)+(1/15)*Math.Pow(n,3)-(437/1440)*Math.Pow(n,4)+(46/105)*Math.Pow(n,5)-(1118711/3870720)*Math.Pow(n,6)+(51841/1209600)*Math.Pow(n,7)+(24749483/348364800)*Math.Pow(n,8)-(115295683/1397088000)*Math.Pow(n,9)+(5487737251099/51502252032000)*Math.Pow(n,10),beta3=(17/480)*Math.Pow(n,3)-(37/840)*Math.Pow(n,4)-(209/4480)*Math.Pow(n,5)+(5569/90720)*Math.Pow(n,6)+(9261899/58060800)*Math.Pow(n,7)-(6457463/17740800)*Math.Pow(n,8)+(2473691167/9289728000)*Math.Pow(n,9)-(852549456029/20922789888000)*Math.Pow(n,10),beta4=(4397/161280)*Math.Pow(n,4)-(11/504)*Math.Pow(n,5)-(830251/7257600)*Math.Pow(n,6)+(466511/2494800)*Math.Pow(n,7)+(324154477/7664025600)*Math.Pow(n,8)-(937932223/3891888000)*Math.Pow(n,9)-(89112264211/5230697472000)*Math.Pow(n,10),beta5=(4583/161280)*Math.Pow(n,5)-(108847/3991680)*Math.Pow(n,6)-(8005831/63866880)*Math.Pow(n,7)+(22894433/124540416)*Math.Pow(n,8)+(112731569449/557941063680)*Math.Pow(n,9)-(5391039814733/10461394944000)*Math.Pow(n,10),beta6=(20648693/638*6688Math.Pow(n,6)-(16363163/518918400)*Math.Pow(n,7)-(2204645983/12915302400)*Math.Pow(n,8)+(4543317553/18162144000)*Math.Pow(n,9)+(54894890298749/167382319104000)*Math.Pow(n,10),beta7=(219941297/5535129600)*Math.Pow(n,7)-(497323811/12454041600)*Math.Pow(n,8)-(79431132943/332107776000)*Math.Pow(n,9)+(4346429528407/12703122432000)*Math.Pow(n,10),beta8=(191773887257/3719607091200)*Math.Pow(19383)2-/336825216000)*MATH.POW(n,9)-(4971554444501631/1422749712384000)*MATH.POW(n,10),beta9=(11025641854267/158080833333333333333376000)*MATH.4644444444444444444444444444.POF(4)*Math.Pow(n,10),beta10=(7028504530429621/72085985427456000)*Math.Pow(n,10),delta1=2*n-(2/3)*Math.Pow(n,2)-2*Math.Pow(n,3),delta2=(7/3)*Math.Pow(n,2)-(8/5)*Math.Pow(n,3),delta3=(56/15)*Math.Pow(n,3),ksi=(Northing/100-northernN0)/(k0*A),eta=(Easting/100-E0)/(k0*A),ksi_prime=ksi-(beta1*Math.Sin(2*ksi)*Math.Cosh(2*eta)+beta2*Math.Sin(4*ksi)*Math.Cosh(4*eta)+beta3*Math.Sin(6*ksi)*Math.Cosh(6*eta)+beta4*Math.Sin(8*ksi)*Math.Cosh(8*eta)+beta5*Math.Sin(10*ksi)*Math.Cosh(10*eta)+beta6*Math.Sin(12*ksi)*Math.Cosh(12*eta)+beta7*Math.Sin(14*ksi)*Math.Cosh(14*eta)+beta8*Math.Sin(16*ksi)*Math.Cosh(16*eta)+beta9*Math.Sin(18*ksi)*Math.Cosh(18*eta)+beta10*Math.Sin(20*ksi)*Math.Cosh(20*eta)),eta_prime=eta-(beta1*Math.Cos(2*ksi)*Math.Sinh(2*eta)+beta2*Math.Cos(4*ksi)*Math.Sinh(4*eta)+beta3*Math.Cos(6*ksi)*Math.Sinh(6*eta)),sigma_prime=1-(2*beta1*Math.Cos(2*ksi)*Math.Cosh(2*eta)+2*beta2*Math.Cos(4*ksi)*Math.Cosh(4*eta)+2*beta3*Math.Cos(6*ksi)*Math.Cosh(6*eta))*beta1*Math.Sin(2*ksi)*Math.Sin(2*eta)+2*beta2*Math.Sin(4*ksi)*Math.Sin(4*eta)+2*beta3*Math.Sin(6*ksi)*Math.Sinh(6*eta),ki=Math.Asin(Math.Sin(ksi_prime)/Math.Cosh(eta_prime));latitude=(ki+delta1*Math.Sin(2*ki)+delta2*Math.Sin(4*ki)+delta3*Math.Sin(6*ki))*RtoD;双经度0=区域*6*DtoR-183*DtoR;经度=(longitude0+Math.Atan(Math.Sinh(eta_prime)/Math.Cos(ksi_prime)))*RtoD;此代码比其他代码更准确CheckoutCoordinateSharponNuGet。这样做真的很容易。//示例UniversalTransverseMercatorutm=newUniversalTransverseMercator("Q",14,581943.5,2111989.8);坐标c=UniversalTransverseMercator.ConvertUTMtoLatLong(utm);publicstaticvoidToLatLon(doubleutmX,doubleutmY,stringutmZone){双纬度=0;双经度=0;boolisNorthHemisphere=utmZone.Last()>='N';vardiflat=-0.00066286966871111111111111111111111111;vardiflon=-0.0003868060578;varzone=int.Parse(utmZone.Remove(utmZone.Length-1));varc_sa=6378137.000000;varc_sb=6356752.314245;vare2=Math.Pow((Math.Pow(c_sa,2)-Math.Pow(c_sb,2)),0.5)/c_sb;vare2cuadrada=Math.Pow(e2,2);varc=Math.Pow(c_sa,2)/c_sb;变量x=utmX-500000;vary=isNorthHemisphere?utmY:utmY-10000000;vars=((zone*6.0)-183.0);varlat=y/(6366197.724*0.9996);//将c_sa更改为6366197.724varv=(c/Math.Pow(1+(e2cuadrada*Math.Pow(Math.Cos(lat),2)),0.5))*0.9996;vara=x/v;vara1=Math.Sin(2*lat);vara2=a1*Math.Pow((Math.Cos(lat)),2);varj2=lat+(a1/2.0);varj4=((3*j2)+a2)/4.0;varj6=(5*j4+a2*Math.Pow((Math.Cos(lat)),2))/3.0;//saquea2demultiplicarporelcosenodelatyelevaralcuadradovaralfa=(3.0/4.0)*e2cuadrada;varbeta=(5.0/3.0)*Math.Pow(alfa,2);var伽玛=(35.0/27.0)*Math.Pow(alfa,3);varbm=0.9996*c*(lat-alfa*j2+beta*j4-gamma*j6);varb=(y-bm)/v;varepsi=((e2cuadrada*Math.Pow(a,2))/2.0)*Math.Pow((Math.Cos(lat)),2);vareps=a*(1-(epsi/3.0));varnab=(b*(1-epsi))+lat;varsenoheps=(Math.Exp(eps)-Math.Exp(-eps))/2.0;vardelt=Math.Atan(senoheps/(Math.Cos(nab)));vartao=Math.Atan(Math.Cos(delt)*Math.Tan(nab));经度=(delt/Math.PI)*180+s;纬度=(((lat+(1+e2cuadrada*Math.Pow(Math.Cos(lat),2)-(3.0/2.0)*e2cuadrada*Math.Sin(lat)*Math.Cos(lat)*(tao-纬度))*(tao-lat)))/Math.PI)*180;//错误计算Console.WriteLine("Latitude:"+latitude.ToString()+"nLongitud:"+longitude.ToString());}这是新的代码上面是C#学习教程:将UTM(wsg84)坐标转换为经纬度所有内容分享,如果对大家有用需要详细了解C#学习教程,希望大家多多指教多多关注——本文来自网络合集,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: