|
阅读:1995回复:7
坐标(经纬)的转换?
请问如何将坐标(x、y)转换成坐标的经纬度啊
|
|
|
1楼#
发布于:2004-11-22 11:18
<P>谢谢!支持</P>
|
|
|
2楼#
发布于:2004-11-12 21:09
XY->BL
<P>坐标换算是GIS项目中常遇到的问题,我在一个GIS项目中也遇到这样的问题。下面是我算法的代码应该可以解决你的问题。</P>
<P>'已知X,Y坐标,获得经纬度(单位为度分秒,117.352154表示117度35分21.54秒) Public Function XY2BL(XX As Double, YY As Double, BBDMS As Double, LLDMS As Double) As Double Dim X As Double, Y As Double Dim BBf As Double Dim L0 As Double '椭球常量 Dim A As Double, B As Double, C As Double, D As Double Dim E As Double, EE As Double '计算的辅助参数 Dim K1 As Double, K2 As Double, K3 As Double, K4 As Double, K5 As Double Dim H2 As Double Dim SinB As Double, SinB2 As Double, CosB As Double, CosB2 As Double Dim T As Double, T2 As Double, T4 As Double Dim N As Double, N2 As Double, N4 As Double</P> <P>L0 = Val(Left(CStr(XX), 2)) * 3 '3度带中央子午线 A = 6378245: B = 6356863.01277305 K1 = 111134.8611: K2 = 32005.7799: K3 = 133.9238: K4 = 0.6976: K5 = 0.0039 C = A * A / B: D = B * B / A E = Sqr(A * A - B * B) / A EE = Sqr(A * A - B * B) / B X = YY: Y = XX: Y = Y - 39500000 BBf = X / K1 '单位为度 BBf = BBf * PI / 180 Do While Abs(BBf - BBDMS) > 0.00000001 BBDMS = BBf SinB = Sin(BBDMS): SinB2 = SinB * SinB: CosB = Cos(BBDMS) BBf = (X + (K2 * SinB + K3 * SinB * SinB2 + K4 * SinB2 * SinB2 * SinB + K5 * SinB2 * SinB2 * SinB2 * SinB) * CosB) / K1 BBf = BBf * PI / 180 Loop H2 = EE * EE * CosB * CosB N = Y * Sqr(1 + H2) / C: N2 = N * N: N4 = N2 * N2 T = Tan(BBf): T2 = T * T: T4 = T2 * T2 BBf = BBf * 180 / PI BBDMS = BBf - (1 + H2) * T * (90 * N2 - 7.5 * (5 + 3 * T2 + H2 - 9 * H2 * T2) * N4 + 0.25 * (61 + 90 * T2 + 45 * T4) * N2 * N4) / PI LLDMS = (180 * N - 30 * (1 + 2 * T2 + H2) * N * N2 + 1.5 * (5 + 28 * T2 + 24 * T4) * N * N4) / (PI * CosB) LLDMS = L0 + LLDMS LLDMS = Rad2Dms(LLDMS * PI / 180) BBDMS = Rad2Dms(BBDMS * PI / 180) End Function</P> <P>'弧度到度分秒(125.5423表示125度54分23秒) Public Function Rad2Dms(Rad As Double) As Double Dim Degree As Double, Miniute As Double, Second As Double Dim Sign As Integer '符号 If Rad = 0 Then Rad2Dms = 0 Return End If If Rad < 0 Then Sign = -1 Else Sign = 1 End If '获得度分秒 Rad = Abs(Rad) Rad = Rad * 180 / PI Degree = Fix(Rad) Miniute = Fix((Rad - Degree) * 60) Second = Rad * 3600 - Degree * 3600 - Miniute * 60 Rad2Dms = Sign * (Degree + Miniute / 100 + Second / 10000) End Function</P> |
|
|
3楼#
发布于:2004-11-12 13:28
薛伟编的MAPOBJECTS-地理信息系统程序设计中有这方面的内容,建议参考
|
|
|
4楼#
发布于:2004-11-06 16:50
你的图层必须是经纬度坐标的,也就是地理坐标系统,,如果是投影坐标系统出现的是距离为单位的
|
|
|
|
5楼#
发布于:2004-11-05 20:57
<img src="images/post/smile/dvbbs/em01.gif" />
|
|
|
|
6楼#
发布于:2004-11-04 20:54
<P>Private Sub Map1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim Loc As New MapObjects2.Point</P><P> Set Loc = Map1.ToMapPoint(x, y)</P><P> '在状态栏中显示 StatusBar1.Panels(2).Text = "经度:" ; loc.x StatusBar1.Panels(3).Text = "纬度:" ; loc.y End Sub</P> |
|
|
|
7楼#
发布于:2004-11-04 20:39
<P>各位大侠,版主啊,急啊?帮帮忙啊 </P>
|
|