用VBA 进行经纬度转梅登黑德网格 的函数 Latitude and longitude to Madenhead grid

文章介绍了一个VBA函数,该函数能将输入的经纬度(度、分、秒格式)转换为梅登黑德网格编码,便于在业余无线电通信中精确描述地理位置。用户只需在Excel的两个单元格输入经度和纬度,调用函数即可得到网格编码。
摘要由CSDN通过智能技术生成
   梅登黑德网格,也被称为“梅登黑德定位系统”,是业余无线电业务中常用的全球地理坐标描述方法。梅登黑德网格将地球表面的二维位置编码字母和数字,便于在电文中传输。扩展的网格增加编码的字段,以提升位置描述的精度。
   下面的代码能将经纬度转换成梅登黑德网格,使用极其方便,在A1单元格以度,分,秒的格式输入经度,在A2单元格中以度,分,秒的格式输入纬度,在任一单元格中输入 =LatitudeToGrid(A1,A2) 就可以得到梅登黑德网格了。与用Excel 内置函数一样方便。
Public Function LatitudeToGrid(Longitude As String, Latitude As String) As String
    ' Longitude: 经度,东为正,西为负。 度、分、秒用“,” 分隔。
    ' Latitude:纬度,北为正,南为负。度、分、秒用“,” 分隔。
    ' bh4bin
    ' 2023/1/29
    Dim A As Single, B As Single, C As Single
    Dim D As Single, E As Single, F As Single
    Dim X As Single, Y As Single
    Dim Grid As String, Tmp As String
    Dim InputAyy() As String
    If Trim(Longitude) = "" Or Trim(Latitude) = "" Then Exit Function
    InputAyy = Split(Trim(Longitude), ",")
    A = InputAyy(LBound(InputAyy))
    B = InputAyy(LBound(InputAyy) + 1)
    C = InputAyy(UBound(InputAyy))
    X = A + B / 60 + C / 3600 + 1 / 1000000
    
    InputAyy = Split(Trim(Latitude), ",")
    D = InputAyy(LBound(InputAyy))
    E = InputAyy(LBound(InputAyy) + 1)
    F = InputAyy(UBound(InputAyy))
    Y = D + E / 60 + F / 3600 + 1 / 1000000
    
    If X >= -180 And X < 180 And Y >= -90 And Y <= 90 Then
        A = X / 20 + 9: B = Int(A): Grid = Chr$(B + 65)
        C = Y / 10 + 9: D = Int(C): Grid = Grid + Chr$(D + 65)
        A = (A - B) * 10: B = Int(A): Grid = Grid + Chr$(B + 48)
        C = (C - D) * 10: D = Int(C): Grid = Grid + Chr$(D + 48)
        B = Int((A - B) * 24): Grid = Grid + Chr$(B + 97)
        D = Int((C - D) * 24): Grid = Grid + Chr$(D + 97)
        LatitudeAndLongitudeToMadenheadGrid = Grid
    Else
        Tmp = MsgBox(prompt:="数据有误,请检查!!!", Buttons:=vbExclamation, Title:="警告")
        Exit Function
    End If
End Function

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值