From 75f68cc07ad4498b272bd635699746d489fd692c Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Sat, 23 Mar 2013 15:41:31 +0000 Subject: [PATCH] Display Az and Dist when "hisGrid" is known and valid. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@3075 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- lib/azdist.f90 | 107 ++++++++++++++++++++++++++++++++++++++++++++++++ lib/geodist.f90 | 96 +++++++++++++++++++++++++++++++++++++++++++ mainwindow.cpp | 15 +++++++ mainwindow.h | 4 ++ mainwindow.ui | 27 +++++++++--- 5 files changed, 244 insertions(+), 5 deletions(-) create mode 100644 lib/azdist.f90 create mode 100644 lib/geodist.f90 diff --git a/lib/azdist.f90 b/lib/azdist.f90 new file mode 100644 index 000000000..528801f47 --- /dev/null +++ b/lib/azdist.f90 @@ -0,0 +1,107 @@ +subroutine azdist(MyGrid,HisGrid,utch,nAz,nEl,nDmiles,nDkm,nHotAz,nHotABetter) + + character*6 MyGrid,HisGrid,mygrid0,hisgrid0 + real*8 utch,utch0 + logical HotABetter,IamEast + real eltab(22),daztab(22) + data eltab/18.,15.,13.,11.,9.,8.,7.,6.,5.3,4.7,4.,3.3,2.7, & + 2.,1.5,1.,0.8,0.6,0.4,0.2,0.0,0.0/ + data daztab/21.,18.,16.,15.,14.,13.,12.,11.,10.7,10.3,10., & + 10.,10.,10.,10.,10.,10.,9.,9.,9.,8.,8./ + data mygrid0/" "/,hisgrid0/" "/,utch0/-999.d0/ + save + + if(MyGrid.eq.HisGrid) then + naz=0 + nel=0 + ndmiles=0 + ndkm=0 + nhotaz=0 + nhotabetter=1 + go to 999 + endif + + if(mygrid.eq.mygrid0 .and. hisgrid.eq.hisgrid0 .and. & + abs(utch-utch0).lt.0.1666667d0) go to 900 + utch0=utch + mygrid0=mygrid + hisgrid0=hisgrid + utchours=utch + + if(MyGrid(5:5).eq.' ') MyGrid(5:5)='m' + if(MyGrid(6:6).eq.' ') MyGrid(6:6)='m' + if(HisGrid(5:5).eq.' ') HisGrid(5:5)='m' + if(HisGrid(6:6).eq.' ') HisGrid(6:6)='m' + + if(MyGrid.eq.HisGrid) then + Az=0. + Dmiles=0. + Dkm=0.0 + El=0. + HotA=0. + HotB=0. + HotABetter=.true. + go to 900 + endif + + call grid2deg(MyGrid,dlong1,dlat1) + call grid2deg(HisGrid,dlong2,dlat2) + call geodist(dlat1,dlong1,dlat2,dlong2,Az,Baz,Dkm) + + ndkm=Dkm/100 + j=ndkm-4 + if(j.lt.1) j=1 + if(j.gt.21)j=21 + if(Dkm.lt.500.0) then + El=18.0 + else + u=(Dkm-100.0*ndkm)/100.0 + El=(1.0-u)*eltab(j) + u*eltab(j+1) + endif + + daz=daztab(j) + u * (daztab(j+1)-daztab(j)) + Dmiles=Dkm/1.609344 + + tmid=mod(UTChours-0.5*(dlong1+dlong2)/15.0+48.0,24.0) + IamEast=.false. + if(dlong1.lt.dlong2) IamEast=.true. + if(dlong1.eq.dlong2 .and. dlat1.gt.dlat2) IamEast=.false. + azEast=baz + if(IamEast) azEast=az + if((azEast.ge.45.0 .and. azEast.lt.135.0) .or. & + (azEast.ge.225.0 .and. azEast.lt.315.0)) then +! The path will be taken as "east-west". + HotABetter=.true. + if(abs(tmid-6.0).lt.6.0) HotABetter=.false. + if((dlat1+dlat2)/2.0 .lt. 0.0) HotABetter=.not.HotABetter + else +! The path will be taken as "north-south". + HotABetter=.false. + if(abs(tmid-12.0).lt.6.0) HotABetter=.true. + endif + if(IamEast) then + HotA = Az - daz + HotB = Az + daz + else + HotA = Az + daz + HotB = Az - daz + endif + if(HotA.lt.0.0) HotA=HotA+360.0 + if(HotA.gt.360.0) HotA=HotA-360.0 + if(HotB.lt.0.0) HotB=HotB+360.0 + if(HotB.gt.360.0) HotB=HotB-360.0 + +900 continue + naz=nint(Az) + nel=nint(el) + nDmiles=nint(Dmiles) + nDkm=nint(Dkm) + nHotAz=nint(HotB) + nHotABetter=0 + if(HotABetter) then + nHotAz=nint(HotA) + nHotABetter=1 + endif + +999 return +end subroutine azdist diff --git a/lib/geodist.f90 b/lib/geodist.f90 new file mode 100644 index 000000000..2ca755354 --- /dev/null +++ b/lib/geodist.f90 @@ -0,0 +1,96 @@ +subroutine geodist(Eplat,Eplon,Stlat,Stlon,Az,Baz,Dist) + implicit none + real eplat, eplon, stlat, stlon, az, baz, dist + +! JHT: In actual fact, I use the first two arguments for "My Location", +! the second two for "His location"; West longitude is positive. + +! Taken directly from: +! Thomas, P.D., 1970, Spheroidal geodesics, reference systems, +! & local geometry, U.S. Naval Oceanographi!Office SP-138, +! 165 pp. +! assumes North Latitude and East Longitude are positive + +! EpLat, EpLon = End point Lat/Long +! Stlat, Stlon = Start point lat/long +! Az, BAz = direct & reverse azimuith +! Dist = Dist (km); Deg = central angle, discarded + + real BOA, F, P1R, P2R, L1R, L2R, DLR, T1R, T2R, TM, & + DTM, STM, CTM, SDTM,CDTM, KL, KK, SDLMR, L, & + CD, DL, SD, T, U, V, D, X, E, Y, A, FF64, TDLPM, & + HAPBR, HAMBR, A1M2, A2M1 + + real AL,BL,D2R,Pi2 + + data AL/6378206.4/ ! Clarke 1866 ellipsoid + data BL/6356583.8/ +! real pi /3.14159265359/ + data D2R/0.01745329251994/ ! degrees to radians conversion factor + data Pi2/6.28318530718/ + + BOA = BL/AL + F = 1.0 - BOA +! Convert st/end pts to radians + P1R = Eplat * D2R + P2R = Stlat * D2R + L1R = Eplon * D2R + L2R = StLon * D2R + DLR = L2R - L1R ! DLR = Delta Long in Rads + T1R = ATan(BOA * Tan(P1R)) + T2R = ATan(BOA * Tan(P2R)) + TM = (T1R + T2R) / 2.0 + DTM = (T2R - T1R) / 2.0 + STM = Sin(TM) + CTM = Cos(TM) + SDTM = Sin(DTM) + CDTM = Cos(DTM) + KL = STM * CDTM + KK = SDTM * CTM + SDLMR = Sin(DLR/2.0) + L = SDTM * SDTM + SDLMR * SDLMR * (CDTM * CDTM - STM * STM) + CD = 1.0 - 2.0 * L + DL = ACos(CD) + SD = Sin(DL) + T = DL/SD + U = 2.0 * KL * KL / (1.0 - L) + V = 2.0 * KK * KK / L + D = 4.0 * T * T + X = U + V + E = -2.0 * CD + Y = U - V + A = -D * E + FF64 = F * F / 64.0 + Dist = AL*SD*(T -(F/4.0)*(T*X-Y)+FF64*(X*(A+(T-(A+E) & + /2.0)*X)+Y*(-2.0*D+E*Y)+D*X*Y))/1000.0 + TDLPM = Tan((DLR+(-((E*(4.0-X)+2.0*Y)*((F/2.0)*T+FF64* & + (32.0*T+(A-20.0*T)*X-2.0*(D+2.0)*Y))/4.0)*Tan(DLR)))/2.0) + HAPBR = ATan2(SDTM,(CTM*TDLPM)) + HAMBR = Atan2(CDTM,(STM*TDLPM)) + A1M2 = Pi2 + HAMBR - HAPBR + A2M1 = Pi2 - HAMBR - HAPBR + +1 If ((A1M2 .ge. 0.0) .AND. (A1M2 .lt. Pi2)) GOTO 5 + If (A1M2 .lt. Pi2) GOTO 4 + A1M2 = A1M2 - Pi2 + GOTO 1 +4 A1M2 = A1M2 + Pi2 + GOTO 1 + +! All of this gens the proper az, baz (forward and back azimuth) + +5 If ((A2M1 .ge. 0.0) .AND. (A2M1 .lt. Pi2)) GOTO 9 + If (A2M1 .lt. Pi2) GOTO 8 + A2M1 = A2M1 - Pi2 + GOTO 5 +8 A2M1 = A2M1 + Pi2 + GOTO 5 + +9 Az = A1M2 / D2R + BAZ = A2M1 / D2R + +!Fix the mirrored coords here. + + az = 360.0 - az + baz = 360.0 - baz +end subroutine geodist diff --git a/mainwindow.cpp b/mainwindow.cpp index a51b7212c..44ca00da0 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -133,6 +133,7 @@ MainWindow::MainWindow(QWidget *parent) : decodeBusy(false); ui->xThermo->setFillBrush(Qt::green); + ui->labAzDist->setStyleSheet("border: 0px;"); #ifdef WIN32 while(true) { @@ -1702,6 +1703,19 @@ void MainWindow::on_dxGridEntry_textChanged(const QString &t) //dxGrid changed if(n==6) m_hisGrid=t.mid(0,2).toUpper() + t.mid(2,2) + t.mid(4,2).toLower(); ui->dxGridEntry->setText(m_hisGrid); + if(gridOK(m_hisGrid)) { + qint64 nsec = QDateTime::currentMSecsSinceEpoch() % 86400; + double utch=nsec/3600.0; + int nAz,nEl,nDmiles,nDkm,nHotAz,nHotABetter; + + azdist_(m_myGrid.toAscii().data(),m_hisGrid.toAscii().data(),&utch, + &nAz,&nEl,&nDmiles,&nDkm,&nHotAz,&nHotABetter,6,6); + QString t; + t.sprintf("Az: %d %d km",nAz,nDkm); + ui->labAzDist->setText(t); + } else { + ui->labAzDist->setText(""); + } } void MainWindow::on_genStdMsgsPushButton_clicked() //genStdMsgs button @@ -1891,6 +1905,7 @@ void MainWindow::on_actionErase_wsjtx_log_adi_triggered() void MainWindow::showMacros(const QPoint &pos) { + if(m_macro.length()<10) return; QPoint globalPos = ui->tx5->mapToGlobal(pos); QMenu popupMenu; QAction* popup1 = new QAction(m_macro[0],ui->tx5); diff --git a/mainwindow.h b/mainwindow.h index 073f4110c..8e1fd293b 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -268,6 +268,10 @@ void genjt9_(char* msg, int* ichk, char* msgsent, int itone[], int* itext, int len1, int len2); bool stdmsg_(const char* msg); + +void azdist_(char* MyGrid, char* HisGrid, double* utch, int* nAz, int* nEl, + int* nDmiles, int* nDkm, int* nHotAz, int* nHotABetter, + int len1, int len2); } #endif // MAINWINDOW_H diff --git a/mainwindow.ui b/mainwindow.ui index c7baffaf1..cdffe032b 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -7,7 +7,7 @@ 0 0 643 - 536 + 527 @@ -321,7 +321,7 @@ p, li { white-space: pre-wrap; } 290 - 115 + 135 @@ -355,7 +355,7 @@ p, li { white-space: pre-wrap; } 8 14 128 - 87 + 113 @@ -456,6 +456,22 @@ p, li { white-space: pre-wrap; } + + + + + 0 + 20 + + + + + + + Qt::AlignCenter + + + @@ -478,7 +494,7 @@ p, li { white-space: pre-wrap; } 150 - 60 + 52 @@ -499,7 +515,8 @@ p, li { white-space: pre-wrap; } 0 - 01:23:45 + 2013 Mar 23 + 01:23:45 Qt::AlignCenter