25
Февраль
2011
Расстояние между двумя городами
Расстояние между двумя городами
На форме — кнопка.
Подключаемые компоненты — DAO 3.6
Нужна База данных Access в той же папке, что и программа. «Координаты.mdb» с таблицей Координаты:
Город Долгота_Градусов Долгота_Минут Долгота_Секунд Широта_Градусов Широта_Минут Широта_Секунд
Киев 30 30 0 50 27 0
Йокогама 139 38 0 35 26 0
Москва 37 37 0 55 45 0
Города должны находиться в одном четвертьшарии (например, в южном и восточном или северном и западном).
Private Sub Command1_Click() Const Radius = 6371 Dim Gorod1 As String Dim Gorod2 As String Dim DB As Database Dim rsGoroda As Recordset Dim ShirotaAGrad As Double Dim ShirotaAMin As Double Dim ShirotaASec As Double Dim ShirotaARad As Double Dim ShirotaBGrad As Double Dim ShirotaBMin As Double Dim ShirotaBSec As Double Dim ShirotaBRad As Double Dim DolgotaAGrad As Double Dim DolgotaAMin As Double Dim DolgotaASec As Double Dim DolgotaARad As Double Dim DolgotaBGrad As Double Dim DolgotaBMin As Double Dim DolgotaBSec As Double Dim DolgotaBRad As Double Dim CosD As Double Gorod1 = "Йокогама" Gorod2 = "Киев" Set DB = DBEngine.OpenDatabase(App.Path & "\Координаты.mdb") Set rsGoroda = DB.OpenRecordset("Select * From [Координаты] Where [Город]=" & """" & Gorod1 & """") DolgotaAGrad = rsGoroda.Fields("Долгота_Градусов") DolgotaAMin = rsGoroda.Fields("Долгота_Минут") DolgotaASec = rsGoroda.Fields("Долгота_Секунд") ShirotaAGrad = rsGoroda.Fields("Широта_Градусов") ShirotaAMin = rsGoroda.Fields("Широта_Минут") ShirotaASec = rsGoroda.Fields("Широта_Секунд") Set rsGoroda = DB.OpenRecordset("Select * From [Координаты] Where [Город]=" & """" & Gorod2 & """") DolgotaBGrad = rsGoroda.Fields("Долгота_Градусов") DolgotaBMin = rsGoroda.Fields("Долгота_Минут") DolgotaBSec = rsGoroda.Fields("Долгота_Секунд") ShirotaBGrad = rsGoroda.Fields("Широта_Градусов") ShirotaBMin = rsGoroda.Fields("Широта_Минут") ShirotaBSec = rsGoroda.Fields("Широта_Секунд") rsGoroda.Close Set rsGoroda = Nothing DB.Close Set DB = Nothing ShirotaARad = GMS_To_Rad(ShirotaAGrad, ShirotaAMin, ShirotaASec) ShirotaBRad = GMS_To_Rad(ShirotaBGrad, ShirotaBMin, ShirotaBSec) DolgotaARad = GMS_To_Rad(DolgotaAGrad, DolgotaAMin, DolgotaASec) DolgotaBRad = GMS_To_Rad(DolgotaBGrad, DolgotaBMin, DolgotaBSec) CosD = Sin(ShirotaARad) * Sin(ShirotaBRad) + Cos(ShirotaARad) * Cos(ShirotaBRad) * Cos(DolgotaARad - DolgotaBRad) MsgBox Atn(Sqr(1 - CosD ^ 2) / CosD) * Radius End Sub Function GMS_To_Rad(G As Double, M As Double, S As Double) As Double Const pi = 3.14 GMS_To_Rad = (pi / 180) * (G + M / 60 + S / 3600) End Function