Sådan konverteres UTM-koordinater til bredde- og længdegradsværdier via Excel VBA

Med UTM-konverter kan du nemt konvertere UTM-koordinater til Latitude- og Longitude-værdier. En UTM-koordinat (Universal Transverse Mercator) består af et zonenummer, en østlig, en nordlig og en halvkugle (N / S).

Hent nu

Hvis du vil begynde at bruge softwaren så hurtigt som muligt, kan du:

Download softwaren nu

Ellers kan du læse indholdet nedenfor, hvis du vil gøre det selv.

Lad os forberede GUI

Som vist på billedet, skal du lade de øverste 4 rækker i Excel-arket være til Kortdatum, Zone og Halvkugle. Disse 3 værdier vil blive brugt til alle rækker i Excel-arket. I række 5, startende fra kolonne A, skal du tilføje disse som overskrifter.

  1. DLS_KEY
  2. RM
  3. ØSTLIGE
  4. NORD
  5. BREDDEGRAD
  6. LÆNGDE

Værdi på kolonner A til kolonne D indtastes, og output, dvs. bredde og længdegrad vises i kolonner E og FForbered GUI

Lad os gøre det funktionelt

Kopier scriptet til et nyt modul, og fastgør makroen til knappen på arket. Sørg for, at din maskine har Internet Explorer. Uden IE fungerer dette script ikke.

Lad os teste det

Når du kører makroen, kan du nemt spore status fra statuslinjen i din Excel-applikation. Da vi manuelt har induceret en pause mellem hver konvertering, tager makroen tid til at konvertere alle dine UTM-koordinater til Lat- og Long-værdier. Når alle poster behandles, kan du se en pop op-meddelelse på skærmen. Hvis makroen ikke er i stand til at gemme data på ark, kan det skyldes korruption i din Excel-fil. Ret korrupt Excel-fil og kør scriptet igen.Spor status fra statuslinjen i din Excel-applikation

En pop op-meddelelse på skærmen

script:

Sub UTM_Converter()
    
' Place all your declarations here
    Dim i As Long
    Dim browobject As Object
    Dim obj1 As Object
    Dim obj2 As Object
    
    Set browobject = CreateObject("InternetExplorer.Application")
    
    browobject.Visible = False
    
'Process each row in the excle till the macro meets the last used row
    For r = 6 To 9
        
' Navigate to the URL to process data
        browobject.navigate "http://www.rcn.montana.edu/resources/converter.aspx"
        
' Inform Users about the status
        Application.StatusBar = "Macro is converting data. Please wait... Now at Row : " & r & " /// Total Rows : " & Sheets("UTM to LAT LON").Range("C" & Rows.Count).End(xlUp).Row
        
' As this is dynamic, we have to wait for the browobject to process input and generate output
        Do While browobject.Busy
            Application.Wait DateAdd("s", 1, Now)
        Loop
        Application.Wait (Now() + TimeValue("00:00:02"))
        
'Lets populate the form
        browobject.document.getElementById("mapDatum").Value = "1"
        browobject.document.getElementById("utmZone").Value = "14"
        browobject.document.getElementById("utmHemi").Value = "N"
'utmEasting
        browobject.document.getElementById("utmEasting").Value = Sheets("UTM to LAT LON").Range("C" & r).Value
'utmNorthing
        browobject.document.getElementById("utmNorthing").Value = Sheets("UTM to LAT LON").Range("D" & r).Value
        
        Set obj2 = browobject.document.getElementsByTagName("input")
        v_length = 0
        While v_length < obj2.Length
            If obj2(v_length).Value = "Convert Standard UTM" Then
                GoTo comehere
            End If
            v_length = v_length + 1
        Wend
        
        comehere:
        obj2(v_length).Click
' Wait while browobject loading...
        Do While browobject.Busy
            Application.Wait DateAdd("s", 1, Now)
        Loop
        Application.Wait (Now() + TimeValue("00:00:02"))
        
'Show converted data on the sheet
        Sheets("UTM to LAT LON").Range("F" & r).Value = browobject.document.getElementById("decimalLongitude").Value
        Sheets("UTM to LAT LON").Range("E" & r).Value = browobject.document.getElementById("decimalLatitude").Value
        
    Next r
        
' Show browobject
    browobject.Visible = False
    browobject.Quit
        
' Clean up
    Set browobject = Nothing
    Set obj1 = Nothing
    Set obj2 = Nothing
        
    Application.StatusBar = ""
'Inform User that entire process was completed
    MsgBox "Converted !", vbInformation, "UTM to LAT LON converter v1.0"
End Sub

Forfatter Introduktion:

Nick Vipond er en datagendannelsesekspert i DataNumen, Inc., som er verdens førende inden for datagendannelsesteknologier, herunder reparere doc-fil og Outlook Outlook-softwareprodukter. For mere information besøg www.datanumen.com

Kommentarer er lukket.