|
阅读:1561回复:4
坐标转换的问题,请指教
最近用AE开发GIS项目,要把WGS84下的坐标转换成北京54的,用IPOINT接口下的PROJECT属性下的例子可以实现转换,但是转换出来的应该是屏幕坐标(数值很大),怎么样再转换成经纬读坐标呢?或者说我用的方法本来就是错误的?谢谢各位请指教!!!我用的是C#(VS03)进行的开发。
|
|
|
1楼#
发布于:2006-08-10 15:25
<P>//从地理坐标系(经纬度)转换到北京54坐标系<BR> public static void ConvertJWDToBeijing (ref double jd,ref double wd)<BR> {<BR> //其中x,y为上经纬坐标,由用户自己输入;<BR> double m,n;//m,n分别代表全国54坐标</P>
<P> double g=0.00669342162297;<BR> double x0 = 3458144.04,y0 = -146121.96,h = 1.000140682,f = 0.013930556;<BR> double ll,X,t,N,a=6378245.00,W,p=206265,z,l,b=6356863.01877,c=6399689.90178,k;</P> <P> double x = wd;<BR> double y = jd;<BR> double DH = 41.0;</P> <P> double L = 123.0;//(DH - 0.5) * 3.;</P> <P> ll = x*PI/180;<BR> k = x*3600;<BR> l = (y - L)*PI/180;<BR> z = Math.Sqrt((0.00673852541468))*Math.Cos(ll);<BR> W = Math.Sqrt(1-g*Math.Pow(Math.Sin(ll),2));<BR> N = a/W;<BR> t = Math.Tan(ll);<BR> double mm1 =(Math.Pow(Math.Cos(ll),2)*(5-Math.Pow(t,2)+9*Math.Pow(z,2)+4*Math.Pow(z,4))*Math.Pow(l,2))/24;<BR> double mm2 =(Math.Pow(Math.Cos(ll),4)*(61-58*Math.Pow(t,2)+Math.Pow(t,4))*Math.Pow(l,4))/720;<BR> //克拉索夫斯基椭球的子午线弧长公式;<BR> X = 111134.861*x-(32005.7799*Math.Sin(ll)+133.9238*Math.Pow(Math.Sin(ll),3)<BR> +0.6973*Math.Pow(Math.Sin(ll),5)+0.0039*Math.Pow(Math.Sin(ll),7))*Math.Cos(ll);<BR> m = X + Math.Pow(Math.Cos(ll),2)*t*N*Math.Pow(l,2)*(0.5 + mm1 + mm2);</P> <P> n = Math.Cos(ll)*N*l*(1 + (Math.Pow(Math.Cos(ll),2)*(1-Math.Pow(t,2)+Math.Pow(z,2))*Math.Pow(l,2))/6<BR> + (Math.Pow(Math.Cos(ll),4)*(5-18*Math.Pow(t,2)+Math.Pow(t,4)+14*Math.Pow(z,2)-58*Math.Pow(z,2)*Math.Pow(t,2))*Math.Pow(l,5))/120);</P> <P> jd = m;<BR> wd = n + 21000000 + 500000;<BR> }</P> |
|
|
|
2楼#
发布于:2006-08-10 15:34
<P>忘记告诉你:PI,是类的全局变量</P>
<P>Pi=3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679</P> <P>看你自己要多精确了.. </P> |
|
|
|
3楼#
发布于:2006-08-11 14:43
<P>哇,谢谢!!!谢谢!!!把代码都给我了,谢谢你啊!</P>
|
|
|
4楼#
发布于:2006-08-14 10:31
...客气了<img src="images/post/smile/dvbbs/em08.gif" />
|
|
|