Добрый вечер!
Будете смеяться, но не знаю как его посчитать. :) :) :)
Вид для печати
А можно сделать, чтоб ввел свой локатор сразу и все?
Lat1, Lon1 - координаты оператора
Lat2, lon2 - координаты корреспондента
Код:Public Function Bearing(lat1 As Single, lon1 As Single, lat2 As Single, lon2 As Single) As Single
Dim alatrad As Single, alonrad As Single
Dim blatrad As Single, blonrad As Single
Dim sinlata As Single, sinlatb As Single, coslata As Single, coslatb As Single
Dim coslongalongb As Single, DistRad As Single
alatrad = PI * lat1 / 180#
alonrad = PI * lon1 / 180#
blatrad = PI * lat2 / 180#
blonrad = PI * lon2 / 180#
sinlata = Sin(alatrad)
sinlatb = Sin(blatrad)
coslata = Cos(alatrad)
coslatb = Cos(blatrad)
coslongalongb = Cos(alonrad - blonrad)
DistRad = ArcCos(sinlata * sinlatb + coslata * coslatb * coslongalongb)
' from http://www.best.com/~williams/avform.htm#Crs
If Sin(blonrad - alonrad) < 0 Then
Bearing = (180# / PI) * ArcCos((sinlatb - sinlata * Cos(DistRad)) / (Sin(DistRad) * coslata))
Else
Bearing = (180# / PI) * (2 * PI - ArcCos((sinlatb - sinlata * Cos(DistRad)) / (Sin(DistRad) * coslata)))
End If
Bearing = 360 - Bearing
If alonrad - blonrad = 0 Then Bearing = 0
End Function
Локатор - это те-же географические координаты, но в несколько в иной записи и с пониженной точностью. Подробнее можно посмотреть здесь: http://en.wikipedia.org/wiki/Maidenhead_Locator_System
или здесь: http://www.qsl.net/ei7gl/locsqr.htm
а здесь: http://www.amsat.org/amsat/toys/gridconv.html - пример конвертации градусов-минут-секунд в квадраты локатора и обратно.
Локатор корреспондента в программе отображается, правда точность зависит от координат взятых из базы данных. Как вычислить локатор по координатам знаю, обратно - нет.
Роман есть формулы определения координат по локатору
Цитата:
Public Function LatFromGrid(Grid As String) As Single
'by VU2PTT - 20020816
Dim Latitude As Single, GLoc2 As String, GLoc4 As String, GLoc6 As String
Dim TempLat As Single, MoveToCenterOfSquare As Single
Dim Locator As String
Locator = UCase(Trim(Grid)) ' convert to Upper case
If Len(Locator) < 4 Then Exit Function
GLoc2 = Mid$(Locator, 2, 1)
GLoc4 = Mid$(Locator, 4, 1)
' get Lat. from 2nd & 4th char
LatFromGrid = (Asc(GLoc2) - 65) * 10 + val(GLoc4) * 1
If Len(Locator) >= 6 Then
GLoc6 = Mid$(Locator, 6, 1)
MoveToCenterOfSquare = 0.5 / 24 'offset for centre of square
Else
GLoc6 = "M"
End If
TempLat = ((Asc(GLoc6) - 65) / 24) + MoveToCenterOfSquare
LatFromGrid = (LatFromGrid + TempLat) - 90
End Function
Public Function LongFromGrid(Grid As String) As Single
'by VU2PTT - 20020816
Dim Longitude As Single, GLoc1 As String, GLoc3 As String, GLoc5 As String
Dim TempLong As Single, MoveToCenterOfSquare As Single
Dim Locator As String
Locator = UCase(Trim(Grid)) ' convert to Upper case
If Len(Locator) < 4 Then Exit Function
GLoc1 = Left$(Locator, 1)
GLoc3 = Mid$(Locator, 3, 1)
'get long. from 1st & 3rd chars
LongFromGrid = (Asc(GLoc1) - 65) * 20 + val(GLoc3) * 2
If Len(Locator) >= 5 Then
GLoc5 = Mid$(Locator, 5, 1)
MoveToCenterOfSquare = 0.5 / 24 ' go to centre of the square
Else
GLoc5 = "M" ' offset to centre of grid for 4 character Locator"
End If
TempLong = (((Asc(GLoc5) - 65)) / 12) + MoveToCenterOfSquare
LongFromGrid = (LongFromGrid + TempLong) - 180
End Function
Игорь, спасибо ещё раз! Буду перегонять на Delphi. Я там сообщение на мыло отправил.
Вот я об этом и говорю: в базах данных - некие усредненные координаты. Предположим: для Хабаровского края этом могут быть координаты некоего "геометрического центра", или координаты центра административного. В том и другом случае - к моим координатам они имеют весьма отдаленное отношение. И если для приблизительной оценки расстояния до корреспондента, координат "из базы" вполне достаточно, То привязка корреспондента к "усредненному локатору" - бессмысленна.
Добавлено через 1 минуту
Да, Роман, почта от Вас пришла. Сегодня заезжаю в свой шек - буду пробовать.
Вышла новая версия программы - 2.2.4.
http://radiosoft.info/?Produkty:Locman_2009
- Улучшен поиск в колбуках позывного содержащего в конце
дробные значения.
- Увеличена скорость импорта данных из ADIF-файла.
- Улучшено чтение данных с GPS-навигатора.
- Добавлена возможность копирования в буфер обмена Windows
данных полученных с GPS-навигатора.
Написал новый плагин "Pile-up".
Данный плагин предназначен для добавления в список pile-up позывных корреспондентов ожидающих QSO (своей очереди).
Версия 2.2.5
- Исправлены небольшие ошибки.
- Добавлена поддержка нового формата QSL-карточек (*.qslx).