REM SkyBaby Planetarium program version 1.05 (C) R. T. Russell, 21-Jul-2020 REM Adapted from the SkyBaby/SkySprog programs published by Richard Weston. REM Revised to use Orbital Constants for the J2000 Epoch (noon 01-Jan-2000) Version$ = "v1.05" SYS "SDL_SetWindowTitle", @hwnd%, "SkyBaby " + Version$, @memhdc% REM Explanatory text from web.onetel.com/~richardweston/Planetarium.html: REM "This program was originally written for the Model B BBC Microcomputer REM by a Cambridge mathematician, who wrote it in his retirement from REM scratch using standard astronomy texts. He wishes to remain anonymous REM and does not wish to take any further part in its development. He REM generously gives it to us to make of what we will. Many thanks to him! HIMEM = PAGE + 4000000 ON ERROR PROCcleanup : IF ERR=17 CHAIN @lib$+"../examples/tools/touchide" ELSE MODE 3 : REPORT : END ON CLOSE PROCcleanup : QUIT REM Default Settings: City% = 911 : REM London Planet% = 4 : REM Jupiter Star% = 238 : REM Polaris Other% = 31 : REM Andromeda Type% = 3 : REM Planet CustomPlaces% = 0 CustomOthers% = 0 UTCTime% = FALSE RealTime% = TRUE CentreObject% = FALSE SortByCountry% = TRUE IniFile$ = @usr$ + "skybaby.ini" REM!WC Constants: ES_NUMBER = 8192 SS_CENTER = 1 WS_GROUP = &20000 REM Install libraries: INSTALL @lib$ + "dlglib" INSTALL @lib$ + "datelib" INSTALL @lib$ + "fnusing" INSTALL @lib$ + "sortlib" INSTALL @lib$ + "utf8lib" Sort%% = FN_sortinit(0,0) REM Set window size and UTF-8 character set (e.g. for planet symbols): WinW% = 720 : WinH% = 576 VDU 23,22,WinW%;WinH%;8,8,16,8 REM Set colour palette: PROC_setdialogpalette REM Set fonts: FormFont$ = """" + @lib$ + "DejaVuSans"", 14" ViewFont$ = """" + @lib$ + "DejaVuSans"", 23" OSCLI "FONT " + FormFont$ PRINT "Setting up..." REM Adjust caret shape and size according to font: VDU 23,0,10,0,0;0;0; : REM Set start line VDU 23,0,11,@vdu%!220,0;0;0; : REM Set end line VDU 23,0,18,2,0;0;0; : REM Set caret width REM Read settings and count number of custom places and objects: F% = OPENIN(IniFile$) IF F% THEN INPUT #F%, City%, Planet%, Star%, Other%, Type% INPUT #F%, SortByCountry%, UTCTime%, RealTime%, CentreObject% WHILE NOT EOF#F% type& = BGET#F% : INPUT #F%, name$, ang1, ang2 IF type& = 1 CustomPlaces% += 1 IF type& = 2 CustomOthers% += 1 ENDWHILE CLOSE #F% ENDIF REM Set up bit-reversed addressing for four different grid pitches (45°, 15°, 5°, 1°): NARCS = 180 DIM BR&(NARCS-1) BR&() = 0,45,90,135, 15,30,60,75,105,120,150,165, \ \ 5,10,20,25,35,40,50,55,65,70,80,85,95,100,110,115,125,130,140,145,155,160,170,175 FOR I% = 36 TO NARCS-1 : BR&(I%) = ((I% - 36) DIV 4) * 5 + ((I% - 36) MOD 4) + 1 : NEXT REM Create horizon and grid lines for Sky View: NSEGS = 16 DIM AltGrid(2,NSEGS*NARCS-1), AzmGrid(2,NSEGS*NARCS-1) FOR I% = 0 TO NSEGS-1 a = SIN(2 * PI * I% / NSEGS) : b = COS(2 * PI * I% / NSEGS) FOR J% = 0 TO NARCS-1 K% = J% * NSEGS AzmGrid(0,K%+I%) = a * SINRADBR&(J%) AzmGrid(1,K%+I%) = a * COSRADBR&(J%) AzmGrid(2,K%+I%) = b AltGrid(0,K%+I%) = a * SINRADBR&(J%) AltGrid(1,K%+I%) = b * SINRADBR&(J%) AltGrid(2,K%+I%) = COSRADBR&(J%) NEXT NEXT I% REM Create VDU strings for each star magnitude: DIM Mag$(8) Mag$() = FNplot(153,6,6), \ Magnitude -1 53 pixels set \ FNplot(153,6,6), \ Magnitude 0 53 pixels set \ FNplot(0,6,0) + FNplot(201,0,8), \ Magnitude 1 39 pixels set \ FNplot(0,6,0) + FNplot(201,0,8), \ Magnitude 2 39 pixels set \ FNplot(153,4,4), \ Magnitude 3 17 pixels set \ FNplot(153,4,4), \ Magnitude 4 17 pixels set \ FNplot(0,2,2) + FNplot(97,4,4), \ Magnitude 5 9 pixels set \ FNplot(0,2,2) + FNplot(97,4,4), \ Magnitude 6 9 pixels set \ FNplot(97,2,2) REM Magnitude 7 or fainter 4 pixels set REM Read astronomical symbols (0 = sun, 1-8 = planets, 9 = moon): DIM Symbol$(9) FOR I% = 0 TO 9 : READ utf16$ : Symbol$(I%) = FNutf8$(EVAL(utf16$)) : NEXT REM Read superscript characters (0-9) DIM Super$(9) FOR I% = 0 TO 9 : READ utf16$ : Super$(I%) = FNutf8$(EVAL(utf16$)) : NEXT REM Read Greek alphabet: DIM Greek$(24) FOR I% = 1 TO 24 : READ Greek$(I%) : NEXT REM Read planetary data: DIM Empty$(0), Planet$(8), Planet(8,6), Rate(8,6) FOR J% = 0 TO 8 : READ Planet$(J%) : FOR I% = 1 TO 6 : READ Planet(J%,I%) : NEXT : NEXT FOR J% = 0 TO 8 : FOR I% = 1 TO 6 : READ Rate(J%,I%) : NEXT : NEXT FOR J% = 0 TO 8 : FOR I% = 3 TO 6 : Rate(J%,I%) /= 3600 : NEXT : NEXT REM Read constellation names and genitive forms: NCONSTELLATIONS = 88 DIM Con$(NCONSTELLATIONS), Gen$(NCONSTELLATIONS) FOR J% = 1 TO NCONSTELLATIONS : READ Con$(J%) : NEXT FOR J% = 1 TO NCONSTELLATIONS : READ Gen$(J%) : NEXT REM Read constellation shapes: NLINES = 764 DIM Con%(2*NLINES) FOR J% = 1 TO 2*NLINES : READ Con%(J%) : NEXT REM Check presence of star data file: F% = OPENIN(@dir$ + "skybaby.dat") IF F% = 0 ERROR 100, "Cannot open star data file skybaby.dat" N% = EXT#F% DIV 20 REM Read star data from program and file: NSTARS = 335 : REM Named stars NMESS = 110 : REM Messier objects ntot% = NSTARS + NMESS + N% + CustomOthers% DIM Star$(ntot%), Con&(ntot%), Mag(ntot%), Col&(ntot%), RA(ntot%), Dec(ntot%) DIM Vdu$(ntot%), XYZ(2, ntot%) FOR J% = 1 TO NSTARS : READ Star$(J%), Con&(J%), Mag(J%), RA(J%), Dec(J%), Col&(J%) : NEXT FOR J% = NSTARS + 1 TO NSTARS + N% b0& = BGET#F% : b1& = BGET#F% : b2& = BGET#F% : b3& = BGET#F% : Col&(J%) = BGET#F% INPUT#F%, RA(J%), Dec(J%), Mag(J%) IF b0& > 250 THEN Star$(J%) = MID$("BDCDCP",b0&-250,2) + FNusing("+## ",(b1& EOR &80) - &80) + STR$(b2&+256*b3&) ELSE IF b1&=0 Star$(J%) = STR$(b0&) ELSE Star$(J%) = Greek$(b1&) : IF b2& Star$(J%) += Super$(b2&) Star$(J%) += " " + Gen$(b3&) : Con&(J%) = b3& ENDIF NEXT : CLOSE #F% REM Read Messier objects: DIM Other$(NMESS + CustomOthers%), Other%(NMESS + CustomOthers%) FOR I% = 1 TO NMESS READ Star$(J%), Con&(J%), Mag(J%), RA(J%), Dec(J%) Other$(I%) = Star$(J%) : Other%(I%) = J% J% += 1 NEXT REM Read custom user objects: F% = OPENIN(IniFile$) IF F% THEN PTR#F% = 45 WHILE NOT EOF#F% AND I% <= DIM(Other$(),1) type& = BGET#F% : INPUT #F%, name$, ang1, ang2 IF type& = 2 THEN Star$(J%) = name$ : RA(J%) = ang1 : Dec(J%) = ang2 Other$(I%) = Star$(J%) : Other%(I%) = J% I% += 1 : J% += 1 ENDIF ENDWHILE CLOSE #F% ENDIF REM Set stars' and Messier objects' VDU strings and calculate xyz coordinates: FOR J% = 1 TO ntot% IF Col&(J%) THEN Vdu$(J%) = FNgcol(Col&(J%)) IF Mag(J%) > 7 Vdu$(J%) += Mag$(8) ELSE Vdu$(J%) += Mag$(INT(Mag(J%) + 0.5) + 1) ELSE Vdu$(J%) = FNgcol(3) + FNplot(0, -8, 8) + FNutf8$(128) ENDIF XYZ(0,J%) = COSRAD(Dec(J%)) * SINRAD(RA(J%)) : REM x XYZ(1,J%) = -COSRAD(Dec(J%)) * COSRAD(RA(J%)) : REM y XYZ(2,J%) = SINRAD(Dec(J%)) : REM z NEXT REM Read country names: NCOUNTRIES = 135 DIM Country$(NCOUNTRIES) FOR J% = 1 TO NCOUNTRIES : READ Country$(J%) : NEXT REM Read city data: NCITIES = 992 ntot% = NCITIES + CustomPlaces% DIM City$(ntot%), Country&(ntot%), Lat(ntot%), Lon(ntot%) FOR J% = 1 TO NCITIES READ City$, Country&(J%), Lat(J%), Lon(J%) City$(J%) = City$ + ", " + Country$(Country&(J%)) NEXT REM Read custom user places: F% = OPENIN(IniFile$) IF F% THEN PTR#F% = 45 WHILE NOT EOF#F% AND J% <= DIM(City$(),1) type& = BGET#F% : INPUT #F%, name$, ang1, ang2 IF type& = 1 THEN City$(J%) = name$ : Country&(J%) = &FF Lat(J%) = ang1 : Lon(J%) = ang2 J% += 1 ENDIF ENDWHILE CLOSE #F% ENDIF REM Sort cities (unless custom place just added): IF City% THEN IF SortByCountry% THEN C% = DIM(City$(),1) : CALL Sort%%, Country&(1), City$(1), Lat(1), Lon(1) ELSE C% = DIM(City$(),1) : CALL Sort%%, City$(1), Country&(1), Lat(1), Lon(1) ENDIF ENDIF REM. Set up main form template: Form% = FN_newdialog("", 1, 1) PROC_checkbox(Form%,"Centre selected object",&505,159,183,86,10,-CentreObject%) PROC_static(Form%,"City:",&203,12,14,20,8,0) PROC_combobox(Form%,City$(City%),&303,34,14,136,100,WS_VSCROLL) IDsort% = FN_setproc(PROCsortmode()) PROC_checkbox(Form%,"Sort by country",IDsort%,178,15,64,10,-SortByCountry%) PROC_static(Form%,"Latitude:",&201,12,32,30,8,0) PROC_textbox(Form%,MID$(FNdms(Lat(City%),"NS"),2),&301,44,32,53,10,0) PROC_static(Form%,"Longitude:",&202,103,32,34,8,0) PROC_textbox(Form%,FNdms(Lon(City%),"EW"),&302,141,32,57,10,0) PROC_button(Form%,"Add",3,214,32,24,10,WS_DISABLED) PROC_button(Form%,"Edit",5,214,32,24,10,WS_VISIBLE) PROC_groupbox(Form%,"Where",&101,6,2,238,48,0) PROC_setcomboboxarray(Form%,&303,City$(),DIM(City$(),1)) PROC_setcomboboxselect(Form%,&303,City%) PROC_groupbox(Form%,"When",&102,6,51,238,29,0) PROC_static(Form%,"Date:",&204,12,63,20,8,0) PROC_textbox(Form%,LEFT$(TIME$,4) + " " + MID$(TIME$,5,11),&304,34,63,63,10,0) PROC_static(Form%,"Time:",&205,103,63,20,8,0) PROC_textbox(Form%,MID$(TIME$,17),&305,125,63,34,10,0) PROC_checkbox(Form%,"UTC",&503,166,64,28,10,-UTCTime%) PROC_checkbox(Form%,"Real time",&504,197,64,44,10,-RealTime%) PROC_combobox(Form%,"",&306,13,94,66,75,WS_VSCROLL) PROC_groupbox(Form%,"What",&103,6,82,238,48,0) PROC_setcomboboxarray(Form%,&306,Planet$(),DIM(Planet$(),1)) PROC_radiobutton(Form%,"Sun",&401,86,95,26,10, -(Type% == 1) + WS_GROUP) PROC_radiobutton(Form%,"Moon",&402,113,95,32,10, -(Type% == 2)) PROC_radiobutton(Form%,"Planet",&403,145,95,34,10,-(Type% == 3)) PROC_radiobutton(Form%,"Star",&404,180,95,28,10, -(Type% == 4)) PROC_radiobutton(Form%,"Other",&405,208,95,34,10, -(Type% == 5)) PROC_static(Form%,"Right Ascension:",&206,12,112,56,8,0) PROC_textbox(Form%,"",&307,68,112,26,10,0) PROC_static(Form%,"hh:mm",&207,98,112,25,8,0) PROC_static(Form%,"Declination:",&208,125,112,40,8,0) PROC_textbox(Form%,"",&308,166,112,28,10,0) PROC_static(Form%,"deg",&209,198,112,12,8,0) PROC_button(Form%,"Add",4,214,112,24,10,WS_DISABLED) PROC_button(Form%,"Edit",6,214,112,24,10,WS_VISIBLE) PROC_groupbox(Form%,"Info",&104,6,132,238,41,0) PROC_static(Form%,"",&20A,12,140,110,8,0) PROC_static(Form%,"",&20B,125,140,112,8,0) PROC_static(Form%,"",&20C,12,151,110,8,0) PROC_static(Form%,"",&20D,125,151,112,8,0) PROC_static(Form%,"",&20E,12,162,110,8,0) PROC_static(Form%,"",&20F,125,162,112,8,0) PROC_button(Form%,"Compass View",FN_setproc(PROCcompass()),6,180,60,14,0) PROC_button(Form%,"Sky View",FN_setproc(PROCskyview()),90,180,60,14,0) REM If custom place just added make it the current selection: IF City% = 0 THEN City% = DIM(City$(),1) PROCsortmode(Form%, 0) PROC_setdlgitemtext(Form%, &301, MID$(FNdms(Lat(City%),"NS"),2)) PROC_setdlgitemtext(Form%, &302, FNdms(Lon(City%),"EW")) PROC_setdlgitemtext(Form%, &303, City$(City%)) ENDIF IniLoaded% = TRUE PROC_registerdlgcallback(Form%, FNcallback()) REPEAT C% = FN_showdialog(Form%, 0, @vdu%!212 * 2) UNTIL C% >= 3 AND C% <= 6 CASE C% OF WHEN 3: REM Add custom place type& = 1 name$ = FN_getdlgitemtext(Form%,&303) ang1 = FNbase60(FN_getdlgitemtext(Form%, &301)) ang2 = FNbase60(FN_getdlgitemtext(Form%, &302)) City% = 0 WHEN 4: REM Add custom object type& = 2 name$ = FN_getdlgitemtext(Form%,&306) ang1 = FNbase60(FN_getdlgitemtext(Form%, &307)) * 15 : REM Convert to degrees ang2 = FNbase60(FN_getdlgitemtext(Form%, &308)) Other% = DIM(Other$(),1) + 1 WHEN 5: REM Edit custom place Lat(City%) = FNbase60(FN_getdlgitemtext(Form%, &301)) Lon(City%) = FNbase60(FN_getdlgitemtext(Form%, &302)) WHEN 6: REM Edit custom object RA(Other%(Other%)) = FNbase60(FN_getdlgitemtext(Form%, &307)) * 15 Dec(Other%(Other%)) = FNbase60(FN_getdlgitemtext(Form%, &308)) ENDCASE REM Save updated custom places and objects to INI file: F% = OPENUP(IniFile$) IF F% = 0 F% = OPENOUT(IniFile$) IF F% THEN WHILE EXT#F% < 45 BPUT#F%,0 : ENDWHILE PTR#F% = 45 IF CustomPlaces% THEN FOR J% = NCITIES + 1 TO NCITIES + CustomPlaces% BPUT#F%,1 : PRINT #F%, City$(J%), Lat(J%), Lon(J%) NEXT ENDIF IF CustomOthers% THEN FOR J% = NMESS + 1 TO NMESS + CustomOthers% BPUT#F%,2 : PRINT #F%, Other$(J%), RA(Other%(J%)), Dec(Other%(J%)) NEXT ENDIF IF C% = 3 OR C% = 4 THEN BPUT#F%,type& : PRINT #F%, name$, ang1, ang2 ENDIF CLOSE #F% ENDIF PROC_closedialog(Form%) PROCcleanup RUN REM Set cities sort mode: DEF PROCsortmode(D%,K%) LOCAL C%, c&() : DIM c&(DIM(City$(),1)) : c&(City%) = &D IF FN_isdlgitemchecked(D%, IDsort%) THEN C% = DIM(City$(),1) : CALL Sort%%, Country&(1), City$(1), Lat(1), Lon(1), c&(1) ELSE C% = DIM(City$(),1) : CALL Sort%%, City$(1), Country&(1), Lat(1), Lon(1), c&(1) ENDIF City% = LEN$^c&(0) PROC_setcomboboxselect(D%,&303,City%) ENDPROC REM Update once per second: DEF FNcallback(D%,K%) IF K% <> TRUE THEN = FALSE IF NOT INKEY(-10) WAIT 10 PRIVATE oldtime$ IF TIME$ = oldtime$ THEN = FALSE oldtime$ = TIME$ LOCAL EPS, DDD, LAT, LST, ALT, AZM PROCupdate(D%, EPS, DDD, LAT, LST, ALT, AZM) PROC_refreshdialogex(D%, 1, 0) = FALSE REM!Eject REM Compass View display DEF PROCcompass(dlg%, I%) LOCAL C%, H%, K%, comma%, click%, oldtime$, delta, tmp$ LOCAL EPS, DDD, LAT, LST, ALT, AZM, LAM, BET, DIS, PHA, AGM, RAH, DEC ON MOUSE LOCAL click% = &100 + (@lparam% >> 16)DIV58*16 + ((@lparam% AND &3FF - 12)DIV58) : RETURN ON CLOSE LOCAL click% = 27 : RETURN VDU 24,0;0;2*(WinW%-1);2*(WinH%-1);5 COLOR 1, 255, 0, 0 COLOR 2, 0, 128, 0 COLOR 3, 255, 64, 0 COLOR 4, 0, 0, 255 OSCLI "FONT " + ViewFont$ ORIGIN WinW%,WinH% : H% = WinH% : C% = @vdu%!220 *REFRESH OFF *ESC OFF ON ERROR LOCAL IF ERR=17 click% = 27 ELSE RESTORE LOCAL : ERROR ERR,REPORT$ REPEAT oldtime$ = TIME$ PROCupdate(dlg%, EPS, DDD, LAT, LST, ALT, AZM) GCOL 128+7 CLG VDU 23,23,4| : GCOL 9 CIRCLE 0, H% * 0.6, H% * 0.2 MOVE -WIDTH("↑") DIV 2, H% * 0.7 + C% : PRINT "↑"; MOVE -WIDTH("+1d") DIV 2, H% * 0.6 : PRINT "+1d"; CIRCLE 0, -H% * 0.6, H% * 0.2 MOVE -WIDTH("↓") DIV 2, -H% * 0.7 + C% : PRINT "↓"; MOVE -WIDTH("‒1d") DIV 2, -H% * 0.6 + C% * 2: PRINT "‒1d"; CIRCLE -H% * 0.6, 0, H% * 0.2 MOVE -H% * 0.6 - WIDTH("←") DIV 2, -C% DIV 2 : PRINT "←"; MOVE -H% * 0.6 - WIDTH("‒1h") DIV 2, C% * 2: PRINT "‒1h"; CIRCLE H% * 0.6, 0, H% * 0.2 MOVE H% * 0.6 - WIDTH("→") DIV 2, -C% DIV 2 : PRINT "→"; MOVE H% * 0.6 - WIDTH("+1h") DIV 2, C% * 2: PRINT "+1h"; GCOL 1 : LINE H% * 0.4, 0, H% * 0.4, -H% * 0.8 PLOT 165, H% * 0.4, H% * 0.8 : DRAW H% * 0.4, 0 GCOL 4 : CIRCLE -H% * 0.4, 0, H% * 0.8 VDU 23,23,2| : GCOL 1 LINE H% * 1.2, 0, H% * 1.05, 0 LINE H% * 0.95, 0, H% * 0.4, 0 MOVE H% - WIDTH("H") DIV 2, C% : PRINT "H"; MOVE H% * 0.3, H% * 0.8 : PRINT "Z"; tmp$ = "Alt " +FNusingu("+##.#", ALT) + "°" MOVE H% * 1.2 - WIDTH(tmp$) + 4, H% - C% * 2 : PRINT tmp$; tmp$ = "dec " + FN_getdlgitemtext(dlg%, &308) + "°" MOVE H% * 1.2 - WIDTH(tmp$) + 4, -H% + C% * 4 - 4 : PRINT tmp$; GCOL 4 LINE H% * 0.4, 0, H% * 0.25, 0 LINE H% * 0.15, 0, -H% * 0.94, 0 LINE -H% * 1.06, 0, -H% * 1.2, 0 MOVE -H% - WIDTH("W") DIV 2, C% : PRINT "W"; MOVE H% * 0.2 - WIDTH("E") DIV 2, C% : PRINT "E"; LINE -H% * 0.4, -H% * 0.8, -H% * 0.4, -H% * 0.65 LINE -H% * 0.4, -H% * 0.54, -H% * 0.4, H% * 0.55 LINE -H% * 0.4, H% * 0.65, -H% * 0.4, H% * 0.8 MOVE -H% * 0.4 - WIDTH("N") DIV 2, H% * 0.6 + C% : PRINT "N"; MOVE -H% * 0.4 - WIDTH("S") DIV 2, -H% * 0.6 + C% : PRINT "S"; tmp$ = "Az " +FNusingu("+###.#", AZM) + "°" MOVE -H% * 1.2, H% - C% * 2 : PRINT tmp$; tmp$ = "RA " + FN_getdlgitemtext(dlg%, &307) MOVE -H% * 1.2, -H% + C% * 4 - 4 : PRINT tmp$; GCOL 0 tmp$ = FN_getdlgitemtext(dlg%, &305) MOVE H% * 1.2 - WIDTH(tmp$), H% - 4 : PRINT tmp$; tmp$ = FN_getdlgitemtext(dlg%, &306) MOVE -H% * 1.2, H% - 4 : PRINT tmp$; tmp$ = FN_getdlgitemtext(dlg%, &304) MOVE H% * 1.2 - WIDTH(tmp$), - H% + C% * 2 + 4 : PRINT tmp$; tmp$ = FN_getdlgitemtext(dlg%, &303) comma% = INSTR(tmp$, ",") : IF comma% tmp$ = LEFT$(tmp$, comma%-1) MOVE -H% * 1.2, - H% + C% * 2 + 4 : PRINT tmp$; VDU 23,23,4| MOVE H% * 0.4, 0 : PLOT 5, H% * 0.4 + H% * 0.8 * COSRAD(ALT), H% * 0.8 * SINRAD(ALT) MOVE -H% * 0.4, 0 : PLOT 5, -H% * 0.4 + H% * 0.8 * SINRAD(AZM), H% * 0.8 * COSRAD(AZM) FOR I% = 0 TO 9 IF I% = 0 GCOL 3 ELSE GCOL 2 IF I% = 9 THEN PROCmoon(DDD, LAM, BET, AGM) ELSE PROCplanet(I%, DDD, LAM, BET, DIS, PHA) ENDIF PROCcelestial(LAM, BET, EPS, RAH, DEC) PROCterrestrial(LAT, LST, RAH, DEC, AZM, ALT) MOVE H% * 0.4 + H% * 0.73 * COSRAD(ALT) - WIDTH(Symbol$(I%)) / 2, H% * 0.73 * SINRAD(ALT) + C% PRINT Symbol$(I%) ; MOVE -H% * 0.4 + H% * 0.73 * SINRAD(AZM) - WIDTH(Symbol$(I%)) / 2, H% * 0.73 * COSRAD(AZM) + C% PRINT Symbol$(I%); NEXT *ESC ON *REFRESH *ESC OFF REPEAT *ESC ON K% = 0 : SWAP K%, click% IF K% = 0 K% = INKEY(10) *ESC OFF delta = 0 CASE K% OF WHEN &88,&142,&143,&152,&153: delta = -1/24 WHEN &89,&148,&149,&158,&159: delta = +1/24 WHEN &8A,&175,&176,&185,&186: delta = -1 WHEN &8B,&115,&116,&125,&126: delta = +1 ENDCASE IF delta <> 0 THEN PROC_checkdlgitem(dlg%, &504, 0) PROCsetdatetime(dlg%, FNgetdatetime(dlg%) + delta) ENDIF UNTIL oldtime$ <> TIME$ OR K% <> -1 UNTIL K% = 27 OSCLI "FONT " + FormFont$ VDU 23,0,10,0,0;0;0; : REM Set start line VDU 23,0,11,@vdu%!220,0;0;0; : REM Set end line VDU 23,0,18,2,0;0;0; : REM Set caret width VDU 23,23,1| : REM Restore line width ORIGIN 0,0 GCOL 128+7 CLG RESTORE ERROR *ESC ON ENDPROC REM!Eject REM Sky View display DEF PROCskyview(dlg%, I%) LOCAL C%, H%, K%, M%, W%, X%, Y%, click%, cursor%, near%, mx%, my%, mb%, oldtime$, tmp$ LOCAL EPS, DDD, LAT, LST, ALT, AZM, LAM, BET, DIS, PHA, AGM, RAH, DEC, delta, f, x, y LOCAL xyz(), grid(), pxyz(), prah(), pdec(), ppha(), rot(), tmp(), tmp$(), oldx%, oldy% PRIVATE flag%, pan, tilt, zoom : IF zoom = 0 zoom = 1000 DIM xyz(2,DIM(XYZ(),2)), grid(2,DIM(AzmGrid(),2)), tmp$(2) DIM pxyz(2,9), prah(9), pdec(9), ppha(9), rot(2,2), tmp(2,2) *SYS 4 ON SYS LOCAL click% = &8000 + @wparam% : RETURN ON CLOSE LOCAL click% = 27 : RETURN ON MOUSE LOCAL mx% = @lparam% : my% = WinH% - (mx% >> 15) : mx% = ((mx% << 16) >> 15) - WinW% : \ \ click% = &100 - (my% < - WinH% * 7 / 8) * ((mx% + WinW%) DIV (WinW% >> 2) + 1) : RETURN OSCLI "FONT " + ViewFont$ VDU 24,0;0;2*(WinW%-1);2*(WinH%-1);5,23,23,1| ORIGIN WinW%,WinH% : C% = @vdu%!220 COLOR 1, &FF, &00, &00 COLOR 2, &00, &FF, &00 COLOR 3, &FF, &FF, &00 COLOR 4, &7F, &7F, &FF COLOR 5, &7F, &7F, &7F : REM AND mask cursor% = 3 : MOUSE ON cursor% IF FN_isdlgitemchecked(dlg%, &505) THEN PROCupdate(dlg%, EPS, DDD, LAT, LST, ALT, AZM) pan = AZM tilt = ALT zoom = 1000 ENDIF IF flag% = 0 flag% = %10001111 *REFRESH OFF *ESC OFF ON ERROR LOCAL IF ERR=17 click% = 27 ELSE RESTORE LOCAL : ERROR ERR,REPORT$ REPEAT oldtime$ = TIME$ PROCupdate(dlg%, EPS, DDD, LAT, LST, ALT, AZM) REM Clear screen: GCOL 128 : CLG REM Rotate around x-axis by camera/telescope tilt (zero towards horizon): rot() = 1, 0, 0, 0, COSRAD(tilt), SINRAD(tilt), 0, -SINRAD(tilt), COSRAD(tilt) REM Rotate around z-axis by camera/telescope pan (zero towards North): tmp() = COSRAD(pan), -SINRAD(pan), 0, SINRAD(pan), COSRAD(pan), 0, 0, 0, 1 rot() = rot() . tmp() REM Show horizon and grid: IF flag% AND 1 THEN GCOL 4 f = zoom * ABSCOSRADtilt CASE TRUE OF WHEN f <= 1000: I% = 4 * NSEGS : X% = 45 WHEN f <= 3000: I% = 12 * NSEGS : X% = 15 WHEN f <= 9000: I% = 36 * NSEGS : X% = 5 WHEN f <= 20000: I% = DIM(grid(),2) + 1 : X% = 2 OTHERWISE I% = DIM(grid(),2) + 1 : X% = 1 ENDCASE grid() = rot() . AzmGrid() PROCdrawgrid(grid(), zoom, I%, 5) CASE TRUE OF WHEN zoom <= 1000: I% = 4 * NSEGS : Y% = 45 WHEN zoom <= 3000: I% = 12 * NSEGS : Y% = 15 WHEN zoom <= 9000: I% = 36 * NSEGS : Y% = 5 WHEN zoom <= 20000: I% = DIM(grid(),2) + 1 : Y% = 2 OTHERWISE I% = DIM(grid(),2) + 1 : Y% = 1 ENDCASE grid() = rot() . AltGrid() PROCdrawgrid(grid(), zoom, I%, 165) REM Write altitude grid labels: x = INT(pan / X%) * X% y = INT(tilt / Y% - 0.5) * Y% FOR I% = 0 TO 2 IF ABS(y) > 90 y -= 180 * SGN(y) tmp(0,I%) = COSRAD(y) * SINRAD(x + X%/2) tmp(1,I%) = COSRAD(y) * COSRAD(x + X%/2) tmp(2,I%) = SINRAD(y) tmp$(I%) = FNminus(y) : y += Y% NEXT tmp() = rot() . tmp() f = zoom / &8000 FOR I% = 0 TO 2 y = tmp(1,I%) IF y > f THEN MOVE INT(tmp(0,I%) * zoom / y + 0.5) - WIDTH(tmp$(I%)) DIV 2, \ \ INT(tmp(2,I%) * zoom / y + 0.5) + C% : PRINT tmp$(I%); ENDIF NEXT REM Write azimuth grid labels: x = INT(pan / X% - 0.5) * X% y = INT(tilt / Y%) * Y% FOR I% = 0 TO 2 IF ABS(x) > 180 x -= 360 * SGN(x) tmp(0,I%) = COSRAD(y + Y%/2) * SINRAD(x) tmp(1,I%) = COSRAD(y + Y%/2) * COSRAD(x) tmp(2,I%) = SINRAD(y + Y%/2) tmp$(I%) = FNminus(x) : x += X% NEXT tmp() = rot() . tmp() f = zoom / &8000 FOR I% = 0 TO 2 y = tmp(1,I%) IF y > f THEN MOVE INT(tmp(0,I%) * zoom / y + 0.5) - WIDTH(tmp$(I%)) DIV 2, \ \ INT(tmp(2,I%) * zoom / y + 0.5) + C% : PRINT tmp$(I%); ENDIF NEXT REM Write compass point names: FOR I% = 1 TO 8 K% = (I% - 1) * (NSEGS / 8) + 2 * NSEGS y = grid(1,K%) IF y > zoom / &8000 THEN tmp$ = MID$(" N NEE SES SWW NW", I%*2, 2) IF RIGHT$(tmp$) = " " tmp$ = LEFT$(tmp$) MOVE grid(0,K%) * zoom / y - WIDTH(tmp$) / 2, grid(2,K%) * zoom / y + C% : PRINT tmp$; ENDIF NEXT ENDIF REM Rotete around x-axis by observer's co-latitude: tmp() = 1, 0, 0, 0, SINRAD(LAT), COSRAD(LAT), 0, -COSRAD(LAT), SINRAD(LAT) rot() = rot() . tmp() REM Rotate around z-axis by observer's sidereal time: tmp() = COSRAD(LST*15), SINRAD(LST*15), 0, -SINRAD(LST*15), COSRAD(LST*15), 0, 0, 0, 1 rot() = rot() . tmp() REM Apply composite rotation matrix to celestial sphere: *ESC ON xyz() = rot() . XYZ() *ESC OFF REM Plot the constellation lines: IF flag% AND 2 THEN GCOL 1 PROCdrawlines(Con%(), xyz(), zoom) ENDIF near% = 0 M% = 1024 : REM Detection radius 32 pixels IF flag% AND 4 THEN REM Find the planets, sun and moon coordinates: FOR I% = 0 TO 9 IF I% = 9 THEN PROCmoon(DDD, LAM, BET, AGM) ELSE PROCplanet(I%, DDD, LAM, BET, DIS, PHA) ppha(I%) = PHA ENDIF PROCcelestial(LAM, BET, EPS, RAH, DEC) pxyz(0,I%) = COSRAD(DEC) * SINRAD(RAH*15) : REM x pxyz(1,I%) = -COSRAD(DEC) * COSRAD(RAH*15) : REM y pxyz(2,I%) = SINRAD(DEC) : REM z prah(I%) = RAH : pdec(I%) = DEC NEXT pxyz() = rot() . pxyz() REM Plot the planet, sun and moon symbols: f = zoom / &8000 FOR I% = 0 TO 9 IF I% = 0 GCOL 3 ELSE GCOL 2 y = pxyz(1,I%) IF y > f THEN X% = INT(pxyz(0,I%) * zoom / y + 0.5) Y% = INT(pxyz(2,I%) * zoom / y + 0.5) MOVE X% - WIDTH(Symbol$(I%)) DIV 2, Y% + C% : PRINT Symbol$(I%); K% = (X% - mx%)^2 + (Y% - my%)^2 IF K% < M% IF Y% > 2*C% - WinH% M% = K% : near% = NOT I% ENDIF NEXT ENDIF REM Set UDC for Messier objects and others: IF flag% AND 8 VDU 23,128,&24,&10,&89,&22,&44,&91,&08,&24 ELSE VDU 23,128| REM Set star palette: COLOR 1, &E0, &C0, &FF : REM blue COLOR 2, &E0, &FF, &FF : REM cyan COLOR 3, &FF, &FF, &FF : REM white COLOR 4, &FF, &FF, &E0 : REM yellow COLOR 5, &FF, &E0, &E0 : REM red REM Plot the stars: *ESC ON W% = WinW% : H% = WinH% GCOL 15 FOR I% = 1 TO DIM(xyz(),2) y = xyz(1,I%) IF y > f THEN Y% = INT(xyz(2,I%) * zoom / y + 0.5) IF Y% < H% IF Y% >= -H% THEN X% = INT(xyz(0,I%) * zoom / y + 0.5) IF X% < W% IF X% >= -W% THEN MOVE X%,Y% : PRINT Vdu$(I%); K% = (X% - mx%)^2 + (Y% - my%)^2 IF K% < M% IF Y% > 2*C% - WinH% IF flag% AND 8 OR Col&(I%) M% = K% : near% = I% ENDIF ENDIF ENDIF NEXT *ESC OFF REM Reset palette: COLOR 1, &FF, &00, &00 COLOR 2, &00, &FF, &00 COLOR 3, &FF, &FF, &00 COLOR 4, &7F, &7F, &FF COLOR 5, &7F, &7F, &7F : REM AND mask REM Mask top and bottom strips to reduce intensity: GCOL 2,5 RECTANGLE FILL -WinW%, WinH%, WinW%*2, -C%*2 RECTANGLE FILL -WinW%, -WinH%, WinW%*2, C%*2 REM Report object near mouse pointer (if any) or general info & buttons: GCOL 7 CASE TRUE OF WHEN near% < 0: MOVE -WinW% + 4, WinH% CASE near% OF WHEN -1: PRINT "Sun (Sol)"; tmp$ = "Mag ‒26.7" WHEN -10: PRINT "The Moon"; tmp$ = "Age " + FNusingu("##", AGM) + " day(s)" OTHERWISE: PRINT Planet$(NOTnear%) tmp$ = "Phase " + FNusingu("###", ppha(NOT near%)*100) + "%" ENDCASE MOVE WinW% - WIDTH(tmp$)- 4, WinH% : PRINT tmp$; MOVE -WinW% + 4, -WinH% + 2*C% PROCterrestrial(LAT, LST, prah(NOT near%), pdec(NOT near%), AZM, ALT) PRINT "Az " FNusingu("+###.#", AZM) "° Alt " FNusingu("+##.#", ALT) "°"; MOVE 4, -WinH% + 2*C% PRINT " RA " FNhm(prah(NOT near%)) " dec " +FNusingu("+##.#", pdec(NOT near%)) "°"; WHEN near% > 0: MOVE -WinW% + 4, WinH% : PRINT Star$(near%); IF near% <= NSTARS PRINT ", " Con$(Con&(near%)); tmp$ = "Mag " + FNusingu("##.#", Mag(near%)) MOVE WinW% - WIDTH(tmp$)- 4, WinH% : PRINT tmp$; PROCterrestrial(LAT, LST, RA(near%)/15, Dec(near%), AZM, ALT) MOVE -WinW% + 4, -WinH% + 2*C% PRINT "Az " FNusingu("+###.#", AZM) "° Alt " FNusingu("+##.#", ALT) "°"; MOVE 4, -WinH% + 2*C% PRINT "RA " FNhm(RA(near%)/15) " dec " +FNusingu("+##.#", Dec(near%)) "°"; OTHERWISE: tmp$ = FN_getdlgitemtext(dlg%, &304) MOVE -WinW% + 4, WinH% - 4 : PRINT tmp$; tmp$ = FN_getdlgitemtext(dlg%, &305) MOVE WinW% - WIDTH(tmp$) - 4, WinH% - 4 : PRINT tmp$; MOVE -WinW% + 4, -WinH% + 2*C% PRINT "Grid" + FNonoff(flag% AND 1); PRINT "Con" + FNonoff(flag% AND 2); PRINT "Pln" + FNonoff(flag% AND 4); PRINT "Oth" + FNonoff(flag% AND 8); MOVE 0, -WinH% + 2*C% : PRINT " ‒1d ‒1h +1h +1d"; ENDCASE *ESC ON *REFRESH *ESC OFF REPEAT REM Poll the mouse and drag: MOUSE X%,Y%,M% IF M% IF mb% IF ABS(oldx%-X%)<100 IF ABS(oldy%-Y%)<100 THEN pan += (oldx% - X%) * 100 / zoom tilt += (oldy% - Y%) * 100 / zoom IF ABS(X%-mx%)>10 OR ABS(Y%-my%)>10 IF click%<&4000 THEN click% = 0 ENDIF IF M% = 0 IF X% <> oldx% OR Y% <> oldy% THEN mx% = X% : my% = Y% ENDIF oldx% = X% : oldy% = Y% : mb% = M% REM Control the mouse cursor: IF (cursor% = 0) EOR (my% < 2*C% - WinH%) cursor% EOR= 3 : MOUSE ON cursor% REM Handle keyboard and mouse click events: *ESC ON K% = 0 : IF mb% = 0 OR click% > &4000 SWAP K%, click% IF K% = 0 K% = INKEY(10 AND mb%=0) *ESC OFF delta = 0 CASE K% OF WHEN 156,&105: delta = -1 WHEN 130,&106: delta = -1/24 WHEN 131,&107: delta = +1/24 WHEN 135,&108: delta = +1 WHEN 132,141: zoom *= 1.1 WHEN 133,140: zoom /= 1.1 WHEN 136: pan -= 1 WHEN 137: pan += 1 WHEN 138: tilt -= 1 WHEN 139: tilt += 1 WHEN &101: flag% EOR= 1 WHEN &102: flag% EOR= 2 WHEN &103: flag% EOR= 4 WHEN &104: flag% EOR= 8 WHEN &100: IF near% THEN FOR I% = &401 TO &405 PROC_checkdlgitem(dlg%, I%, 0) NEXT CASE TRUE OF WHEN near% = -1: PROC_checkdlgitem(dlg%, &401, 1) : REM Sun WHEN near% = -10: PROC_checkdlgitem(dlg%, &402, 1) : REM Moon WHEN near% < 0: PROC_checkdlgitem(dlg%, &403, 1) : REM Planet PROC_setcomboboxarray(dlg%, &306, Planet$(), DIM(Planet$(),1)) Planet% = NOT near% PROC_setcomboboxselect(dlg%, &306, Planet%) PROC_setdlgitemtext(dlg%, &306, Planet$(Planet%)) WHEN near% > 0 AND Col&(near%) <> 0: PROC_checkdlgitem(dlg%, &404, 1) : REM Star IF near% > NSTARS THEN PROC_setcomboboxarray(dlg%, &306, Star$(), DIM(Star$(),1)) ELSE PROC_setcomboboxarray(dlg%, &306, Star$(), NSTARS) ENDIF Star% = near% PROC_setcomboboxselect(dlg%, &306, Star%) PROC_setdlgitemtext(dlg%, &306, Star$(Star%)) WHEN near% > 0: PROC_checkdlgitem(dlg%, &405, 1) : REM Other PROC_setcomboboxarray(dlg%, &306, Other$(), DIM(Other$(),1)) FOR I% = 1 TO DIM(Other%(),1) IF Other%(I%) = near% THEN Other% = I% PROC_setcomboboxselect(dlg%, &306, Other%) PROC_setdlgitemtext(dlg%, &306, Other$(Other%)) EXIT FOR ENDIF NEXT ENDCASE ENDIF OTHERWISE: IF K% > &4000 THEN zoom += K% - &8000 ENDIF ENDCASE IF delta <> 0 THEN PROC_checkdlgitem(dlg%, &504, 0) PROCsetdatetime(dlg%, FNgetdatetime(dlg%) + delta) ENDIF IF tilt > 90 tilt = 90 ELSE IF tilt < -90 tilt = -90 IF pan > 180 pan -= 360 ELSE IF pan < -180 pan += 360 IF zoom < 1000 zoom = 1000 IF zoom > 30000 zoom = 30000 UNTIL oldtime$ <> TIME$ OR K% <> -1 OR mb% UNTIL K% = 27 OSCLI "FONT " + FormFont$ VDU 23,0,10,0,0;0;0; : REM Set start line VDU 23,0,11,@vdu%!220,0;0;0; : REM Set end line VDU 23,0,18,2,0;0;0; : REM Set caret width VDU 23,23,1| : REM Restore line width ORIGIN 0,0 GCOL 128+7 CLG MOUSE ON 0 *SYS 0 RESTORE ERROR *ESC ON PROC_refreshdialog(dlg%) ENDPROC DEF PROCdrawgrid(grid(), zoom, N%, P%) LOCAL F%, I%, J%, K%, X%, Y%, y FOR I% = 0 TO N% - 1 STEP NSEGS F% = FALSE FOR J% = 0 TO NSEGS K% = I% + J% MOD NSEGS y = grid(1,K%) IF y > zoom / &8000 THEN X% = INT(grid(0,K%) * zoom / y + 0.5) Y% = INT(grid(2,K%) * zoom / y + 0.5) IF P% = 5 THEN IF F% DRAW X%, Y% ELSE MOVE X%, Y% : F% = TRUE ELSE PROCcurve(X%, Y%, F%) : F% = TRUE ENDIF ELSE F% = FALSE ENDIF NEXT NEXT I% ENDPROC DEF PROCdrawlines(con%(), xyz(), zoom) LOCAL F%, I%, J%, X%, Y%, y FOR J% = 1 TO DIM(con%(),1) I% = con%(J%) IF I% <> con%(J%-1) THEN IF J% AND 1 F% = FALSE y = xyz(1,I%) IF y > zoom / &8000 THEN X% = INT(xyz(0,I%) * zoom / y + 0.5) Y% = INT(xyz(2,I%) * zoom / y + 0.5) IF F% DRAW X%, Y% ELSE MOVE X%, Y% : F% = TRUE ENDIF ENDIF NEXT ENDPROC REM Draw an arc between two points (arc centre assumed to have x = 0): DEF PROCcurve(X%, Y%, F%) LOCAL Z%, a, b, r, s, x, y PRIVATE V%, W% REPEAT IF F% = 0 EXIT REPEAT IF V% < -WinW% IF X% < -WinW% EXIT REPEAT IF V% >= WinW% IF X% >= WinW% EXIT REPEAT IF W% < -WinH% IF Y% < -WinH% EXIT REPEAT IF W% >= WinH% IF Y% >= WinH% EXIT REPEAT IF Y% = W% LINE X%,Y%,V%,W% : EXIT REPEAT s = (V% - X%) / (Y% - W%) x = (X% + V%) / 2 y = (Y% + W%) / 2 Z% = INT(y - x * s + 0.5) a = FNatan2(Y% - Z%, X%) b = FNatan2(W% - Z%, V%) IF a < b a += 2*PI IF ABSZ% > &7FFF THEN IF a - b > PI SWAP a, b : a += 2*PI r = SQR(X%^2 + (Y%-Z%)^2) FOR s = b TO a + 0.00001 STEP (a - b) / 8 x = INT(r * COSs + 0.5) y = INT(r * SINs + 0.5) + Z% IF s = b MOVE x, y ELSE LINE x, y, V%, W% V% = x : W% = y NEXT EXIT REPEAT ENDIF MOVE 0, Z% IF a - b > PI THEN MOVE X%, Y% PLOT 165, V%, W% ELSE MOVE V%, W% PLOT 165, X%, Y% ENDIF UNTIL TRUE V% = X% : W% = Y% ENDPROC REM!Eject REM Update data DEF PROCupdate(D%, RETURN EPS, RETURN DDD, RETURN LAT, RETURN LST, RETURN ALT, RETURN AZM) LOCAL change%, index%, UTC, LON, GHA, AGM, DIS, LAM, BET, RAH, DEC, PHA LOCAL AGM1, DIS1, LAM1, BET1, RAH1, DEC1, PHA1, trs$, cul$, rah$, dec$, now$ PRIVATE type%, olddate$, oldtime$ ON ERROR LOCAL RESTORE LOCAL : ERROR ERR,REPORT$ REM Update real time: IF FN_isdlgitemchecked(D%, &504) THEN IF FN_isdlgitemchecked(D%, &503) now$ = FNutctime$ ELSE now$ = TIME$ PROC_setdlgitemtext(D%, &304, LEFT$(now$,4) + " " + MID$(now$,5,11)) PROC_setdlgitemtext(D%, &305, MID$(now$,17)) ENDIF REM Check for time changed (auto or manual): now$ = FN_getdlgitemtext(D%, &304) IF now$ <> olddate$ olddate$ = now$ : IF type% <= 3 THEN change% = TRUE now$ = FN_getdlgitemtext(D%, &305) IF now$ <> oldtime$ oldtime$ = now$ : IF type% <= 3 THEN change% = TRUE REM Update city information: index% = FN_getcomboboxselect(D%,&303) IF index% IF index% <> City% THEN City% = index% PROC_setdlgitemtext(D%, &301, MID$(FNdms(Lat(City%),"NS"),2)) PROC_setdlgitemtext(D%, &302, FNdms(Lon(City%),"EW")) PROC_setdlgitemtext(D%, &303, City$(City%)) ENDIF REM Get observer's parameters (Where and When): LAT = FNbase60(FN_getdlgitemtext(D%, &301)) : REM Latitude (degrees) LON = FNbase60(FN_getdlgitemtext(D%, &302)) : REM Longitude (degrees), East +ve REM Days from noon 1st Jan 2000: IF FN_isdlgitemchecked(D%, &503) UTC = 0 ELSE UTC = FNutcoffset DDD = FNgetdatetime(D%) + UTC EPS = RAD(23.43928 - 0.013*DDD/36525) : REM Obliquity of the ecliptic (radians) GHA = 280.461 + 360.9856474*DDD + 0.0003875*(DDD/36525)^2 GHA = GHA - 360*INT(GHA/360) : REM Greenwich Hour Angle LST = (GHA + LON)/15 : REM Local Sidereal Time, hours PROCplanet(0, DDD, LAM, BET, DIS, PHA): REM Save earth coordinates, return sun coordinates REM Get object information (What): CASE TRUE OF WHEN FN_isdlgitemchecked(D%, &401) : REM sun IF type% <> 1 THEN type% = 1 change% = TRUE PROC_setcomboboxarray(D%,&306,Empty$(),0) PROC_setdlgitemtext(D%, &306, "Sun (Sol)") ENDIF PROCcelestial(LAM, BET, EPS, RAH, DEC) PROC_setdlgitemtext(D%, &20A, "Distance: " + FNusing("#.##", DIS) + " AU") PROC_setdlgitemtext(D%, &20B, "Magnitude: ‒26.7") PROCplanet(0, DDD + 1, LAM1, BET1, DIS1, PHA1) PROCcelestial(LAM1, BET1, EPS, RAH1, DEC1) PROCtransit(-0.833, DDD, LAT, LST, RAH, DEC, RAH1-RAH, DEC1-DEC, UTC, trs$, cul$) WHEN FN_isdlgitemchecked(D%, &402) : REM moon IF type% <> 2 THEN type% = 2 change% = TRUE PROC_setcomboboxarray(D%,&306,Empty$(),0) PROC_setdlgitemtext(D%, &306, "The Moon") ENDIF PROCmoon(DDD, LAM, BET, AGM) PROCcelestial(LAM, BET, EPS, RAH, DEC) PROC_setdlgitemtext(D%, &20A, "Distance: 0.0025 AU") PROC_setdlgitemtext(D%, &20B, "Age of moon: " + FNusingu("##", AGM) + " day(s)") PROCmoon(DDD + 1, LAM1, BET1, AGM1) PROCcelestial(LAM1, BET1, EPS, RAH1, DEC1) PROCtransit(-0.833, DDD, LAT, LST, RAH, DEC, RAH1-RAH, DEC1-DEC, UTC, trs$, cul$) WHEN FN_isdlgitemchecked(D%, &403) : REM planet IF type% <> 3 THEN type% = 3 change% = TRUE PROC_setcomboboxarray(D%,&306,Planet$(),DIM(Planet$(),1)) PROC_setcomboboxselect(D%,&306,Planet%) PROC_setdlgitemtext(D%, &306, Planet$(Planet%)) ENDIF index% = FN_getcomboboxselect(D%,&306) IF index% <> Planet% Planet% = index% : change% = TRUE PROCplanet(Planet%, DDD, LAM, BET, DIS, PHA) PROCcelestial(LAM, BET, EPS, RAH, DEC) PROC_setdlgitemtext(D%, &20A, "Distance: " + FNusing("##.#", DIS) + " AU") PROC_setdlgitemtext(D%, &20B, "Phase: " + FNusingu("###", PHA*100) + "%") PROCtransit(0.0, DDD, LAT, LST, RAH, DEC, 0, 0, UTC, trs$, cul$) WHEN FN_isdlgitemchecked(D%, &404) : REM star IF type% <> 4 THEN type% = 4 change% = TRUE PROC_setcomboboxarray(D%,&306,Star$(),NSTARS) PROC_setcomboboxselect(D%,&306,Star%) PROC_setdlgitemtext(D%, &306, Star$(Star%)) ENDIF index% = FN_getcomboboxselect(D%,&306) IF index% <> Star% Star% = index% : change% = TRUE PROC_setdlgitemtext(D%, &20A, "Constellation: " + Con$(Con&(Star%))) PROC_setdlgitemtext(D%, &20B, "Magnitude: " + FNusing("##.#", Mag(Star%))) RAH = RA(Star%) / 15 : DEC = Dec(Star%) PROCtransit(0.0, DDD, LAT, LST, RAH, DEC, 0, 0, UTC, trs$, cul$) WHEN FN_isdlgitemchecked(D%, &405) : REM other (e.g. Messier object) IF type% <> 5 THEN type% = 5 change% = TRUE PROC_setcomboboxarray(D%,&306,Other$(),DIM(Other$(),1)) PROC_setcomboboxselect(D%,&306,Other%) PROC_setdlgitemtext(D%, &306, Other$(Other%)) ENDIF index% = FN_getcomboboxselect(D%,&306) IF index% <> Other% Other% = index% : change% = TRUE PROC_setdlgitemtext(D%, &20A, "Constellation: " + Con$(Con&(Other%(Other%)))) PROC_setdlgitemtext(D%, &20B, "Magnitude: " + FNusing("##.#", Mag(Other%(Other%)))) RAH = RA(Other%(Other%)) / 15 : DEC = Dec(Other%(Other%)) PROCtransit(0.0, DDD, LAT, LST, RAH, DEC, 0, 0, UTC, trs$, cul$) ENDCASE IF change% THEN change% = FALSE Type% = type% PROC_setdlgitemtext(D%, &307, FNhm(RAH)) PROC_setdlgitemtext(D%, &308, FNusingu("+##.#", DEC)) ENDIF rah$ = FN_getdlgitemtext(D%, &307) dec$ = FN_getdlgitemtext(D%, &308) IF rah$ = FNhm(RAH) IF dec$ = FNusingu("+##.#", DEC) THEN PROC_setdlgitemtext(D%, &20E, trs$) PROC_setdlgitemtext(D%, &20F, cul$) ELSE RAH = FNbase60(rah$) DEC = FNbase60(dec$) PROC_setdlgitemtext(D%, &20E, "") PROC_setdlgitemtext(D%, &20F, "") ENDIF PROCterrestrial(LAT, LST, RAH, DEC, AZM, ALT) PROC_setdlgitemtext(D%, &20C, "Azimuth: " + FNusingu("+###.#", AZM) + " degrees") PROC_setdlgitemtext(D%, &20D, "Altitude: " + FNusingu("+##.#", ALT) + " degrees") REM Check for manual place entry: IF FN_getdlgitemtext(D%,&303) <> City$(City%) THEN PROC_enabledlgitem(D%,3,TRUE) PROC_showdlgitem(D%,3,TRUE) PROC_showdlgitem(D%,5,FALSE) ELSE IF City% > NCITIES THEN; PROC_enabledlgitem(D%,5,ABS(Lat(City%) - FNbase60(FN_getdlgitemtext(D%,&301))) > 1E-4 OR \ \ ABS(Lon(City%) - FNbase60(FN_getdlgitemtext(D%,&302))) > 1E-4) PROC_showdlgitem(D%,5,TRUE) PROC_showdlgitem(D%,3,FALSE) ELSE PROC_enabledlgitem(D%,3,FALSE) PROC_showdlgitem(D%,3,TRUE) PROC_showdlgitem(D%,5,FALSE) ENDIF REM Check for manual object entry: IF type% = 5 IF FN_getdlgitemtext(D%,&306) <> Other$(Other%) THEN PROC_enabledlgitem(D%,4,TRUE) PROC_showdlgitem(D%,4,TRUE) PROC_showdlgitem(D%,6,FALSE) ELSE IF type% = 5 IF Other% > NMESS THEN; index% = Other%(Other%) PROC_enabledlgitem(D%,6,ABS(Dec(index%) - FNbase60(FN_getdlgitemtext(D%,&308))) > 1E-4 OR \ \ ABS( RA(index%) - FNbase60(FN_getdlgitemtext(D%,&307))*15) > 1E-4) PROC_showdlgitem(D%,6,TRUE) PROC_showdlgitem(D%,4,FALSE) ELSE PROC_enabledlgitem(D%,4,FALSE) PROC_showdlgitem(D%,4,TRUE) PROC_showdlgitem(D%,6,FALSE) ENDIF ENDPROC REM!Eject REM Convert Ecliptic celestial coordinates to Equatorial: REM LAM: λ (Ecliptic Longitude), radians REM BET: β (Ecliptic Latitude), radians REM EPS: ε (Obliquity of the Ecliptic), radians REM RAH: Right Ascension (Equatorial Longitude), hours REM DEC: Declination (Equatorial Latitude), degrees DEF PROCcelestial(LAM, BET, EPS, RETURN RAH, RETURN DEC) LOCAL CEE, SEE, CD, SD, XX, YY, A, D, X CEE = COS(EPS) : SEE = SIN(EPS) CD = COS(BET) : SD = SIN(BET) : X = SIN(LAM)*CD YY = COS(LAM)*CD : XX = X*CEE-SD*SEE : D = ASN(SD*CEE+X*SEE) : A = FNatan2(XX,YY) RAH = DEG(A) / 15 : RAH -= 24 * INT(RAH/24) : DEC = DEG(D) ENDPROC REM Convert celestial to terrestrial coordinates: REM LAT: Observer's latitude, degrees REM LST: Local Sidereal Time, hours REM RAH: Right Ascension (Equatorial Longitude), hours REM DEC: Declination (Equatorial Latitude), degrees REM AZM: Azimuth, degrees REM ALT: Altitude, degrees DEF PROCterrestrial(LAT, LST, RAH, DEC, RETURN AZM, RETURN ALT) LOCAL SLAT, CLAT, H, CD, SD, X, YY, XX SLAT = SINRAD(LAT) : CLAT = COSRAD(LAT) : CD = COSRAD(DEC) : SD = SINRAD(DEC) H = RAD(15*(LST-RAH)) : X = -COS(H)*CD : YY = -SIN(H)*CD : XX = SD*CLAT+X*SLAT ALT = DEGASN(SD*SLAT-X*CLAT) : AZM = DEG(FNatan2(YY,XX)) ENDPROC REM Calculate next rise time, set time and culmination time + altitude: REM DDD: Current date/time, days since noon 1st Jan 2000 epoch REM LAT: Observer's latitude, degrees REM LST: Local Sidereal Time, hours REM RAH: Right Ascension (Equatorial Longitude), hours REM DEC: Declination (Equatorial Latitude), degrees REM RAHD: Change in RAH in next 24 hours REM DECD: Change in DEC in next 24 hours REM UTC: Offset to convert local time to UTC, days DEF PROCtransit(h, DDD, LAT, LST, RAH, DEC, RAHD, DECD, UTC, RETURN trs$, RETURN cul$) LOCAL CAL, CLHA, R, TC, TR, TS, TT, set$ TR = -1E-6 : TS = -1E-6 : CAL = 90-ABS(LAT-DEC) TC = (RAH - LST) / (1 - (RAHD - 0.06571) / 24) cul$ = "Culminates " + FNhm((DDD - UTC + 0.5)*24 + TC) : IF TC >= 24 IF RAHD <> 0 cul$ += "*" cul$ += ", altitude " + FNusingu("###", CAL) + "°" IF CAL < 0 : trs$ = "Never rises" : ENDPROC TR = TC : TS = TC : REM initial estimates REPEAT TT = TR : R = TT/24 : TC = RAH - LST + R * (RAHD - 0.06571) CLHA = (SINRAD(h) - SINRAD(LAT) * SINRAD(DEC + R * DECD)) / (COSRAD(LAT) * COSRAD(DEC + R * DECD)) IF ABS(CLHA) > 1.0 THEN EXIT REPEAT TR = TC - DEGACS(CLHA) / 15.04107 : WHILE TR < 0 OR TR < (TT - 12) TR += 24 : ENDWHILE UNTIL ABS(TR - TT) < 0.01 REPEAT TT = TS : R = TT/24 : TC = RAH - LST + R * (RAHD - 0.06571) CLHA = (SINRAD(h) - SINRAD(LAT) * SINRAD(DEC + R * DECD)) / (COSRAD(LAT) * COSRAD(DEC + R * DECD)) IF ABS(CLHA) > 1.0 THEN EXIT REPEAT TS = TC + DEGACS(CLHA) / 15.04107 : WHILE TS < 0 OR TS < (TT - 12) TS += 24 : ENDWHILE UNTIL ABS(TS - TT) < 0.01 IF TR < 0 OR TS < 0 trs$ = "Never sets" : ENDPROC trs$ = "Rises " + FNhm((DDD - UTC + 0.5)*24 + TR) : IF TR >= 24 IF RAHD <> 0 trs$ += "*" set$ = "Sets " + FNhm((DDD - UTC + 0.5)*24 + TS) : IF TS >= 24 IF RAHD <> 0 set$ += "*" IF TS > TR trs$ += ", " + set$ ELSE IF TS < TR trs$ = set$ + ", " + trs$ ENDPROC REM Find moon's celestial parameters: REM DDD: Current date/time, days since noon 1st Jan 2000 epoch REM LAM: λ (Ecliptic Longitude), radians REM BET: β (Ecliptic Latitude), radians REM AGM: Age of moon in days DEF PROCmoon(DDD, RETURN LAM, RETURN BET, RETURN AGM) LOCAL R, S, T, U, V, W, X, Y : DDD += 36525 R = RAD(232.2+26.13*DDD) : S = RAD(22.5+26.4587*DDD) : T = RAD(358.5+.9856*DDD) U = RAD(341.5+24.3815*DDD) : V = RAD(296.1+13.065*DDD) : W = RAD(314.6-11.31651*DDD) X = RAD(11.2+13.22935*DDD) : Y = RAD(0.7*SIN(U)+6.3*SIN(V)-1.3*SIN(W)) LAM = Y + RAD(270.4+13.1764*DDD+.2*SIN(R)-.1*SIN(S)-.2*SIN(T)) : BET = RAD(5.2*SIN(X+Y)) AGM = DDD - 36525 - 5.097661 : AGM -= 29.530588861 * INT(AGM / 29.530588861) ENDPROC REM Find planet's celestial parameters: REM See https://stjarnhimlen.se/comp/tutorial.html REM P%: Planet index (0 = earth, return sun's coordinates) REM DDD: Current date/time, days since noon 1st Jan 2000 epoch REM LAM: λ (Ecliptic Longitude), radians REM BET: β (Ecliptic Latitude), radians REM R: Distance from earth to planet, astronomical units REM PHA: Phase 0.0 to 1.0 DEF PROCplanet(P%, DDD, RETURN LAM, RETURN BET, RETURN R, RETURN PHA) LOCAL a, e, i, N, w, L, M, E, E1, x, y, r, v, xp, yp, zp, Xp, Yp, Zp, Cy, FV PRIVATE Xe, Ye, Ze, Re : Cy = DDD / 36525 a = Planet(P%,1) + Rate(P%,1) * Cy : e = Planet(P%,2) + Rate(P%,2) * Cy i = RAD(Planet(P%,3) + Rate(P%,3) * Cy) : N = RAD(Planet(P%,4) + Rate(P%,4) * Cy) w = RAD(Planet(P%,5) + Rate(P%,5) * Cy) : L = RAD(Planet(P%,6) + Rate(P%,6) * Cy) M = L - w : w -= N : M -= 2*PI * INT(M/(2*PI)) : REM Mean anomaly (radians) E = M + e * SIN(M) * (1 + e * COS(M)) REPEAT E1 = E : E -= (E - e * SIN(E) - M) / (1 - e * COS(E)) : UNTIL ABS(E1-E) < 1E-6 x = a * (COS(E) - e) : y = a * SQR(1 - e*e) * SIN(E) r = SQR(x*x + y*y) : v = FNatan2(y, x) Xp = r * ( COS(N) * COS(v+w) - SIN(N) * SIN(v+w) * COS(i) ) Yp = r * ( SIN(N) * COS(v+w) + COS(N) * SIN(v+w) * COS(i) ) Zp = r * SIN(v+w) * SIN(i) IF P%=0 Xe=Xp : Ye=Yp : Ze=Zp : Xp=0 : Yp=0 : Zp=0 : REM Return sun's coordinates xp = Xp-Xe : yp = Yp-Ye : zp = Zp-Ze : R = SQR(xp*xp+yp*yp+zp*zp) : IF P%=0 Re = R LAM = FNatan2(yp,xp) : BET = ASN(zp/R) FV = ACS((r*r + R*R - Re*Re) / (2 * r * R)) : PHA = (1 + COS(FV)) / 2 ENDPROC REM Set displayed date/time from number of days since the J2000 epoch: DEF PROCsetdatetime(D%, day) LOCAL mjd, tim mjd = day + FN_mjd(1,1,2000) + 0.5 tim = 24 * (mjd - INT(mjd)) PROC_setdlgitemtext(D%, &304, FN_date$(mjd, "ddd. dd MMM yyyy")) PROC_setdlgitemtext(D%, &305, FNhms(tim)) ENDPROC REM Get displayed date/time as number of days since the J2000 epoch: DEF FNgetdatetime(D%) LOCAL mjd, tim tim = FNbase60(FN_getdlgitemtext(D%, &305)) : REM Time (hours) mjd = FN_readdate(FN_getdlgitemtext(D%, &304), "dmy", 0) : REM Date (Modified Julian Day) IF mjd < 0 THEN = 0 : REM Invalid date = mjd - FN_mjd(1,1,2000) + tim/24 - 0.5 REM Convert hours to 'hh:mm': DEF FNhm(hour) LOCAL H%,M% hour -= 24 * INT(hour/24) hour += 0.5/60 H% = hour : M% = (hour - H%) * 60 = RIGHT$("0"+STR$H%,2) + ":" + RIGHT$("0"+STR$M%,2) REM Convert hours to 'hh:mm:ss': DEF FNhms(hour) LOCAL H%,M%,S% hour += 0.5/60/60 H% = hour : M% = (hour - H%) * 60 : S% = (hour - H% - M%/60) * 3600 = RIGHT$("0"+STR$H%,2) + ":" + RIGHT$("0"+STR$M%,2) + ":" + RIGHT$("0"+STR$S%,2) REM Convert degrees to 'ddd° mm' ss"': DEF FNdms(dgr, s$) LOCAL D%,M%,S% IF dgr < 0 dgr = -dgr : s$ = MID$(s$,2) ELSE s$ = LEFT$(s$,1) dgr += 0.5/60/60 D% = dgr : M% = (dgr - D%) * 60 : S% = (dgr - D% - M%/60) * 3600 = RIGHT$("00"+STR$D%,3) + "° " + RIGHT$("0"+STR$M%,2) + "' " + RIGHT$("0"+STR$S%,2) + """ " + s$ REM Return offset between local time and UTC in days: DEF FNutcoffset LOCAL loc%, utc%, dst%, tm%%, time_t{} : DIM time_t{t%%} SYS "time", time_t{} TO utc% SYS "localtime", time_t{} TO tm%% : dst% = tm%%!32 SYS "gmtime", time_t{} TO tm%% : tm%%!32 = dst% SYS "mktime", tm%% TO loc% = (loc% - utc%)/86400 REM Return UTC in TIME$ format: DEF FNutctime$ LOCAL tm%%, s%%, t$, time_t{} : DIM time_t{t%%} SYS "time", time_t{} SYS "gmtime", time_t{} TO tm%% SYS "asctime", tm%% TO s%% : t$ = $$s%% IF MID$(t$,9,1) = " " MID$(t$,9,1) = "0" = LEFT$(t$,3) + "." + MID$(t$,9,3) + MID$(t$,5,4) + MID$(t$,21,4) + "," + MID$(t$,12,8) DEF FNatan2(y,x) : ON ERROR LOCAL = SGN(y)*PI/2 IF x>0 THEN = ATN(y/x) ELSE IF y>0 THEN = ATN(y/x)+PI ELSE = ATN(y/x)-PI DEF FNminus(n) : LOCAL f$ : f$ = STR$(n) DEF FNusingu(f$, n) : f$ = FNusing(f$, n) n = INSTR(f$, "-") : IF n f$ = LEFT$(f$,n-1) + "‒" + MID$(f$,n+1) = f$ DEF FNutf8$(utf16%) : IF utf16% < &80 THEN = CHR$(utf16%) IF utf16% < &800 THEN = CHR$(&C0 + (utf16% >> 6 AND &3F)) + CHR$(&80 + (utf16% AND &3F)) = CHR$(&E0 + (utf16% >> 12)) + CHR$(&80 + (utf16% >> 6 AND &3F)) + CHR$(&80 + (utf16% AND &3F)) DEF FNonoff(F%) IF F% THEN = FNutf8$(&2611) ELSE = FNutf8$(&2610) DEF FNgcol(C%) = CHR$18 + CHR$0 + CHR$C% DEF FNplot(C%,X%,Y%) = CHR$25 + CHR$C% + CHR$(X%) + CHR$(X%>>8) + CHR$(Y%) + CHR$(Y%>>8) REM Decode angle or time expressed as "DD MM SS" or "HH:MM:SS" with optional delimiters/units DEF FNbase60(a$) LOCAL I%, a, s REPEAT I% = INSTR(a$, "‒") IF I% a$ = LEFT$(a$, I%-1) + "-" + MID$(a$, I%+LEN"‒") UNTIL I% = 0 s = 1 REPEAT WHILE ASCa$=&20 OR ASCa$=&2F OR ASCa$=&3A a$ = MID$(a$,2) : ENDWHILE IF ASCa$>=&30 AND ASCa$<=&39 OR ASCa$=&2B OR ASCa$=&2D OR ASCa$=&2E THEN a += VAL(a$) / s s *= 60 WHILE ASCa$>=&30 AND ASCa$<=&39 OR ASCa$=&2B OR ASCa$=&2D OR ASCa$=&2E a$ = MID$(a$,2) : ENDWHILE ELSE EXIT REPEAT ENDIF a$ = FN_umid(a$,2,99) UNTIL a$="" OR INSTR("NSEWnsew", LEFT$(a$,1)) IF INSTR("SWsw", LEFT$(a$,1)) a = -a = a DEF PROCcleanup LOCAL F% *REFRESH ON IniLoaded% += 0 IF IniLoaded% = 0 ENDPROC SortByCountry% = FN_isdlgitemchecked(Form%,IDsort%) UTCTime% = FN_isdlgitemchecked(Form%,&503) RealTime% = FN_isdlgitemchecked(Form%,&504) CentreObject% = FN_isdlgitemchecked(Form%,&505) F% = OPENUP(IniFile$) IF F% = 0 F% = OPENOUT(IniFile$) IF F% = 0 ENDPROC PRINT #F%, City%, Planet%, Star%, Other%, Type% PRINT #F%, SortByCountry%, UTCTime%, RealTime%, CentreObject% CLOSE #F% ENDPROC DEF DATA tables REM UTF-16 hex codes for astronomical symbols: REM Sun Mercury Venus Mars Jupiter Saturn Uranus Neptune Pluto Moon DATA &2609, &263F, &2640, &2642, &2643, &2644, &26E2, &2646, &2647, &263D REM UTF-16 hex codes for superscripts (0-9): DATA &2070, &00B9, &00B2, &00B3, &2074, &2075, &2076, &2077, &2078, &2079 REM Greek alphabet: DATA Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu DATA Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega REM Planetary Mean Orbital Elements for J2000 Epoch: noon January 1 2000 REM from http://www.met.reading.ac.uk/~ross/Astronomy/Planets.html REM identical figures at https://nssdc.gsfc.nasa.gov/planetary/factsheet/ REM Planet, a (AU), e, i (deg), N (deg), w (deg), L (deg) DATA Earth, 1.00000011, 0.01671022, 0.00005, -11.26064, 102.94719, 100.46435 DATA Mercury, 0.38709893, 0.20563069, 7.00487, 48.33167, 77.45645, 252.25084 DATA Venus, 0.72333199, 0.00677323, 3.39471, 76.68069, 131.53298, 181.97973 DATA Mars, 1.52366231, 0.09341233, 1.85061, 49.57854, 336.04084, 355.45332 DATA Jupiter, 5.20336301, 0.04839266, 1.30530, 100.55615, 14.75385, 34.40438 DATA Saturn, 9.53707032, 0.05415060, 2.48446, 113.71504, 92.43194, 49.94432 DATA Uranus, 19.19126393, 0.04716771, 0.76986, 74.22988, 170.96424, 313.23218 DATA Neptune, 30.06896348, 0.00858587, 1.76917, 131.72169, 44.97135, 304.88003 DATA Pluto, 39.48168677, 0.24880766, 17.14175, 110.30347, 224.06676, 238.92881 REM Planetary Centennial Rates for J2000 Epoch: noon January 1 2000 REM from http://www.met.reading.ac.uk/~ross/Astronomy/Planets.html REM a/Cy (AU), e/Cy, i/Cy (sec), N/Cy (sec), w/Cy (sec), L/Cy (sec) DATA -0.00000005, -0.00003804, -46.94, -18228.25, 1198.28, 129597740.63 : REM Earth DATA 0.00000066, 0.00002527, -23.51, -446.30, 573.57, 538101628.29 : REM Mercury DATA 0.00000092, -0.00004938, -2.86, -996.89, -108.80, 210664136.06 : REM Venus DATA -0.00007221, 0.00011902, -25.47, -1020.19, 1560.78, 68905103.78 : REM Mars DATA 0.00060737, -0.00012880, -4.15, 1217.17, 839.93, 10925078.35 : REM Jupiter DATA -0.00301530, -0.00036762, 6.11, -1591.05, -1948.89, 4401052.95 : REM Saturn DATA 0.00152025, -0.00019150, -2.09, -1681.40, 1312.56, 1542547.79 : REM Uranus DATA -0.00125196, 0.00002510, -3.64, -151.25, -844.43, 786449.21 : REM Neptune DATA -0.00076912, 0.00006465, 11.07, -37.33, -132.25, 522747.90 : REM Pluto REM Constellation names and their genitive forms (88) REM from http://www.ianridpath.com/constellations1.htm DATA Andromeda,Antlia,Apus,Aquarius,Aquila,Ara,Aries,Auriga DATA Boötes,Caelum,Camelopardalis,Cancer,Canes Venatici,Canis Major,Canis Minor,Capricornus DATA Carina,Cassiopeia,Centaurus,Cepheus,Cetus,Chamaeleon,Circinus,Columba DATA Coma Berenices,Corona Australis,Corona Borealis,Corvus,Crater,Crux,Cygnus,Delphinus DATA Dorado,Draco,Equuleus,Eridanus,Fornax,Gemini,Grus,Hercules DATA Horologium,Hydra,Hydrus,Indus,Lacerta,Leo,Leo Minor,Lepus DATA Libra,Lupus,Lynx,Lyra,Mensa,Microscopium,Monoceros,Musca DATA Norma,Octans,Ophiuchus,Orion,Pavo,Pegasus,Perseus,Phoenix DATA Pictor,Pisces,Piscis Austrinus,Puppis,Pyxis,Reticulum,Sagitta,Sagittarius DATA Scorpius,Sculptor,Scutum,Serpens,Sextans,Taurus,Telescopium,Triangulum DATA Triangulum Australe,Tucana,Ursa Major,Ursa Minor,Vela,Virgo,Volans,Vulpecula DATA Andromedae,Antliae,Apodis,Aquarii,Aquilae,Arae,Arietis,Aurigae DATA Boötis,Caeli,Camelopardalis,Cancri,Canum Venaticorum,Canis Majoris,Canis Minoris,Capricorni DATA Carinae,Cassiopeiae,Centauri,Cephei,Ceti,Chamaeleontis,Circini,Columbae DATA Comae Berenices,Coronae Australis,Coronae Borealis,Corvi,Crateris,Crucis,Cygni,Delphini DATA Doradus,Draconis,Equulei,Eridani,Fornacis,Geminorum,Gruis,Herculis DATA Horologii,Hydrae,Hydri,Indi,Lacertae,Leonis,Leonis Minoris,Leporis DATA Librae,Lupi,Lyncis,Lyrae,Mensae,Microscopii,Monocerotis,Muscae DATA Normae,Octantis,Ophiuchi,Orionis,Pavonis,Pegasi,Persei,Phoenicis DATA Pictoris,Piscium,Piscis Austrini,Puppis,Pyxidis,Reticuli,Sagittae,Sagittarii DATA Scorpii,Sculptoris,Scuti,Serpentis,Sextantis,Tauri,Telescopii,Trianguli DATA Trianguli Australis,Tucanae,Ursae Majoris,Ursae Minoris,Velorum,Virginis,Volantis,Vulpeculae REM Constellation shape lines (764) REM from http://mkweb.bcgsc.ca/constellations/constellation.shapes.iau.txt DATA 47,493,400,482,400,8883,482,493,482,209,491,493,491,540,493,209,540,593 DATA 550,591,550,654,591,209,654,224,209,904,8686,8883,8879,8893,8883,8893,3918,4244 DATA 4244,4411,5548,6072,6072,6149,6072,6203,6149,6203,7168,229,7183,7222,229,7222,229,7355 DATA 7222,7355,7222,7423,7355,296,7355,7540,7423,7676,296,57,57,55,7540,7676,14,7943 DATA 7943,265,265,264,265,8355,264,65,264,262,264,8472,65,8625,262,8490,8472,8490 DATA 8490,8529,8607,8625,8607,283,8625,8755,283,8779,8755,8779,8779,8812,6266,6319,6266,6525 DATA 6319,6329,6329,6534,6487,6488,6487,6534,6488,6525,6534,6751,202,280,280,152,152,94 DATA 153,151,153,129,38,261,38,100,151,100,100,194,129,182,2302,194,194,182 DATA 217,70,5416,323,5416,5486,70,5510,70,5555,70,161,323,5486,323,276,5510,276 DATA 276,223,161,5751,223,5751,212,2642,212,281,2642,2787,281,2803,281,2857,2781,2803 DATA 2781,216,2787,8,2803,216,8,320,2857,320,320,60,146,245,109,112,1699,1755 DATA 1755,1756,1756,1898,1314,1426,1421,1426,1421,1794,1794,1852,1818,1852,1852,2430,2430,2734 DATA 7713,115,7713,8026,115,7892,7892,7933,7933,8152,8026,222,8152,222,222,118,99,203 DATA 3303,3390,3303,84,84,78,54,78,203,4179,78,4192,4179,4339,4192,4280,4280,4339 DATA 4280,4350,4339,4459,4350,4396,4396,4486,4459,4472,4472,4486,101,273,273,587,587,258 DATA 258,275,4520,4743,4570,4759,4743,4858,4759,4858,4858,4929,4927,5127,4929,5226,4929,5323 DATA 5127,5184,5184,5284,5226,5323,5226,150,5284,5286,5284,196,5286,5323,5323,5340,5339,5340 DATA 5339,5375,5339,5520,150,256,5375,5450,196,5450,5520,5649,7810,7911,7911,20,20,24 DATA 20,8257,24,8621,24,132,8257,8429,8400,8429,8400,8503,8503,8621,8621,132,406,121 DATA 406,653,121,817,653,717,717,89,817,89,89,208,208,1075,1015,164,1015,1108 DATA 1075,164,164,195,1108,1184,1184,195,3495,4314,4314,4371,4314,4706,4371,4792,4706,4792 DATA 5541,5740,5541,5773,297,75,76,75,76,3644,75,6,1986,232,232,319,319,2329 DATA 319,2343,2329,2476,2476,2513,4852,5082,120,5082,227,5842,227,46,46,5910,5910,5947 DATA 5947,6003,6003,6026,6950,7228,7215,200,7228,7244,200,7244,37,4477,37,4512,4477,4535 DATA 4512,4532,4512,4535,4532,4596,4535,4642,4642,4690,159,204,5,142,16,4751,4751,144 DATA 4751,174,144,29,29,174,7309,7396,15,7581,7396,135,7396,7717,135,266,7581,266 DATA 7717,117,266,117,266,32,117,7981,32,8065,7981,8065,23,257,257,285,257,7884 DATA 285,7904,7884,7904,1599,1719,1719,1919,1719,2152,1919,2152,2152,2242,2152,2325,2242,2325 DATA 143,4898,4898,303,303,125,125,6039,6039,80,80,22,22,6920,252,6573,252,130 DATA 6573,147,147,130,147,58,6920,6927,6920,58,58,7552,8047,8073,8073,171,2,868 DATA 868,1018,1018,1085,1085,1090,1090,1185,1106,1113,1106,86,1113,1205,86,248,1185,1288 DATA 1205,1283,1283,1365,1288,1383,248,1412,1365,1442,1383,1461,1412,1432,1432,328,1442,1478 DATA 1461,1607,1478,1503,328,91,1503,1709,91,1718,1607,90,90,302,1709,302,1718,1772 DATA 1772,114,912,1133,1133,116,2357,246,246,300,300,189,2559,189,30,192,189,2899 DATA 64,2965,2747,2899,192,318,2899,3020,2899,3048,2965,318,318,3099,3020,3099,3048,3085 DATA 3099,3174,3099,241,21,8350,8350,8421,40,8488,40,304,8421,8488,8488,304,304,8603 DATA 8603,8671,5972,6075,6075,6139,6139,6207,6142,113,6142,173,113,6199,173,6250,173,250 DATA 6207,6257,6250,6257,6250,6357,6257,6445,6357,270,6357,6445,250,270,270,6638,6445,6706 DATA 6605,6706,6638,6714,6714,6785,1074,1098,1074,1105,1098,1219,1105,1159,1159,1587,1196,1219 DATA 1564,1587,3584,205,3584,77,205,3625,3625,3659,77,3659,77,3712,3712,3824,3824,312 DATA 45,312,45,330,330,4138,4138,4234,4234,4372,4372,4578,4578,4677,4677,5119,5119,5377 DATA 5377,5602,428,893,428,1474,893,1474,7828,7877,7828,8089,7877,7939,7939,8307,8089,8307 DATA 3942,4119,4119,4230,4119,4240,4230,243,4240,243,8420,8433,8420,8511,8456,8504,8456,8511 DATA 8471,8474,8471,8517,8474,8504,8504,8517,8504,8563,8511,8563,3887,59,3887,249,59,4022 DATA 4022,249,4022,4120,249,7,4120,253,4120,27,4120,110,7,27,27,332,332,110 DATA 332,119,110,4529,110,119,4516,4529,1900,1947,1900,225,1947,1950,1947,1999,1947,73 DATA 225,73,225,2211,73,2226,2211,2262,2226,2310,2262,2378,2310,2378,5606,97,5606,335 DATA 5606,334,335,334,334,5855,5855,5873,5547,5719,5644,5764,5719,5753,5719,6004,5753,5777 DATA 5764,5840,5774,5941,5774,6004,5777,5840,5840,6004,5941,6004,2458,2767,2767,3017,3017,53 DATA 53,3741,3741,3773,3773,3847,3847,3861,315,7052,7052,279,7052,7132,279,288,7132,288 DATA 1876,1922,1876,2182,2182,2481,7899,7918,7899,8100,7918,7991,7991,8084,8084,8100,2447,2572 DATA 2515,2599,2515,2713,2572,2916,2599,2669,2599,2713,2713,2916,2916,3372,3160,3372,4647,4789 DATA 4789,4908,4886,4908,4886,5024,4908,4952,4952,5024,6017,6034,6017,6121,6034,6160,6121,6160 DATA 5425,8200,5425,8561,8200,8561,325,324,325,184,324,6173,6129,6151,6151,6162,6162,6189 DATA 6173,6214,6189,6214,184,6333,6214,6333,6214,260,6333,251,260,6479,260,6579,260,104 DATA 6479,6517,251,104,6579,6709,104,6644,6644,6709,6709,6871,6871,63,290,1795,290,1803 DATA 290,92,1795,1820,1803,1817,1817,1850,1820,1829,1829,1885,1885,1921,255,2031,2031,207 DATA 92,207,92,191,207,42,191,93,42,43,43,267,43,93,2273,2358,2273,2382 DATA 93,2347,2347,2420,2358,2420,2382,2420,6600,6753,6753,6858,6753,7102,6858,7070,6981,7631 DATA 7070,7631,7102,7631,7560,7631,7631,231,7631,7870,231,8129,7870,8129,47,26,47,272 DATA 26,185,131,95,8256,8366,8366,8595,95,157,8389,188,157,185,188,272,8595,263 DATA 263,272,272,185,804,1095,1095,1221,210,1145,210,1201,1145,1201,1145,1221,1201,211 DATA 1207,28,28,213,28,1485,1221,213,1221,211,211,1399,1399,1485,1399,1536,81,1469 DATA 1469,197,1485,197,1524,1586,1536,1565,1565,1586,358,67,358,641,67,641,641,321 DATA 641,742,321,752,742,752,2247,2268,2268,2757,8247,8266,8247,8367,8266,8367,8367,8508 DATA 8367,8559,8508,8622,8559,137,8622,8646,8646,137,548,615,548,8989,615,797,669,677 DATA 669,699,677,699,677,48,48,310,797,50,310,50,8773,8830,8773,8835,8830,8901 DATA 8835,8887,8887,8901,8887,8989,99,2664,2664,2975,2975,3115,3115,3139,3115,3184,3139,87 DATA 3184,3221,3221,87,87,311,221,311,221,3610,3610,3638,3638,3684,1444,1510,1444,1597 DATA 1510,1615,1597,1615,602,8933,8784,8855,8784,8933,158,134,134,122,122,4,122,44 DATA 4,162,44,69,69,230,230,176,176,322,322,6305,6305,6411,6411,269,178,278 DATA 178,6598,278,141,269,6631,6598,6631,6930,6972,6930,7018,6972,7059,7018,7059,5863,313 DATA 5863,5926,5903,5926,5903,148,313,5950,5926,5990,148,5990,5939,5950,5939,6068,4055,4126 DATA 4126,4259,4256,4259,277,7508,7462,7508,7508,7601,41,168,41,166,240,167,6835,166 DATA 168,166,168,167,168,7037,166,74,167,7037,7037,226,7037,74,226,7221,7142,7206 DATA 7142,13,74,7221,7206,13,13,7320,1309,1317,1309,1378,1317,1502,1317,1514,1502,244 DATA 244,274,244,19,274,10,10,129,19,305,6788,6898,6898,6906,5741,5835,5741,83 DATA 5835,5955,5955,83,215,921,215,962,921,962,409,455,409,8992,455,8769,8436,8473 DATA 8436,8769,8473,8992,218,3910,218,4037,293,35,35,3927,3910,4037,3910,123,3927,4037 DATA 4037,198,295,294,294,4469,198,123,198,233,123,190,4469,291,61,62,62,291 DATA 291,233,233,190,190,31,31,214,214,33,238,326,172,234,172,5961,234,6161 DATA 5961,6161,5961,6355,6355,326,221,3390,3390,3599,3390,54,3599,3646,3646,287,54,186 DATA 287,3937,186,4085,3937,4167,4085,4356,4167,4356,4645,329,4645,4731,329,327,4731,327 DATA 327,242,242,206,242,5063,242,156,206,317,5063,284,156,5355,156,289,5355,5587 DATA 289,5564,2938,3003,2938,3406,3003,3406,3406,3522,3406,3776,3522,3776,68,7562 REM Named stars (335) REM from https://github.com/mirandadam/iau-starnames/blob/master/catalog_data/IAU-CSN.csv REM Name, Constellation, Magnitude, RA, Dec, Col DATA Acamar,36,2.88,44.565311,-40.304672,2 DATA Achernar,36,0.45,24.428523,-57.236753,1 DATA Achird,18,3.46,12.276213,57.815187,3 DATA Acrab,73,2.56,241.359300,-19.805453,1 DATA Acrux,30,1.33,186.649563,-63.099093,1 DATA Acubens,12,4.26,134.621761,11.857700,2 DATA Adhafera,46,3.43,154.172567,23.417312,2 DATA Adhara,14,1.50,104.656453,-28.972086,1 DATA Adhil,1,4.87,20.585080,45.528778,4 DATA Ain,78,3.53,67.154163,19.180435,4 DATA Ainalrami,72,4.86,283.542404,-22.744840,5 DATA Aladfar,52,4.43,288.439531,39.145970,1 DATA Albaldah,72,2.88,287.440971,-21.023615,2 DATA Albali,4,3.78,311.918969,-9.495775,2 DATA Albireo,31,3.37,292.680351,27.959692,4 DATA Alchiba,28,4.02,182.103402,-24.728875,2 DATA Alcor,83,3.99,201.306403,54.987954,2 DATA Alcyone,78,2.85,56.871152,24.105136,1 DATA Aldebaran,78,0.87,68.980163,16.509302,5 DATA Alderamin,20,2.45,319.644885,62.585574,2 DATA Aldhanab,39,3.00,328.482192,-37.364855,1 DATA Aldhibah,34,3.17,257.196650,65.714684,1 DATA Aldulfin,32,4.03,308.303216,11.303261,1 DATA Alfirk,20,3.23,322.164987,70.560715,1 DATA Algedi,16,3.58,304.513566,-12.544852,4 DATA Algenib,62,2.83,3.308963,15.183594,1 DATA Algieba,46,2.61,154.993144,19.841489,4 DATA Algol,63,2.09,47.042215,40.955648,1 DATA Algorab,28,2.94,187.466063,-16.515431,1 DATA Alhena,38,1.93,99.427960,16.399280,2 DATA Alioth,83,1.76,193.507290,55.959823,1 DATA Aljanah,31,2.48,311.552843,33.970257,4 DATA Alkaid,83,1.85,206.885157,49.313267,1 DATA Alkalurops,9,4.31,231.122618,37.377169,2 DATA Alkaphrah,83,4.16,135.906365,47.156525,2 DATA Alkarab,62,4.42,351.344931,23.404100,3 DATA Alkes,29,4.08,164.943604,-18.298783,4 DATA Almaaz,8,3.03,75.492219,43.823307,3 DATA Almach,1,2.10,30.974804,42.329725,5 DATA Alnair,39,1.73,332.058270,-46.960974,1 DATA Alnasl,72,2.98,271.452025,-30.424100,4 DATA Alnilam,60,1.69,84.053389,-1.201919,1 DATA Alnitak,60,1.74,85.189694,-1.942574,1 DATA Alniyat,73,2.90,245.297149,-25.592792,2 DATA Alphard,42,1.99,141.896847,-8.658602,5 DATA Alphecca,27,2.22,233.671950,26.714693,1 DATA Alpheratz,1,2.07,2.096916,29.090431,1 DATA Alpherg,66,3.83,22.870873,15.345823,4 DATA Alrakis,34,5.55,256.333807,54.470078,3 DATA Alrescha,66,3.82,30.511772,2.763735,2 DATA Alruba,34,5.75,265.996568,53.801715,2 DATA Alsafi,34,4.67,293.089960,69.661176,3 DATA Alsciaukat,51,4.25,125.708792,43.188131,5 DATA Alsephina,85,1.99,131.175944,-54.708819,2 DATA Alshain,5,3.71,298.828304,6.406763,4 DATA Alshat,16,4.77,305.165898,-12.759079,1 DATA Altair,5,0.76,297.695827,8.868321,2 DATA Altais,34,3.07,288.138750,67.661541,4 DATA Alterf,46,4.32,142.930115,22.967970,5 DATA Aludra,14,2.45,111.023760,-29.303106,1 DATA Alula Australis,83,4.41,169.545423,31.529161,3 DATA Alula Borealis,83,3.49,169.619737,33.094305,5 DATA Alya,76,4.62,284.054949,4.203602,2 DATA Alzirr,38,3.35,101.322351,12.895592,3 DATA Ancha,4,4.17,334.208485,-7.783291,4 DATA Angetenar,36,4.76,42.759674,-21.004018,4 DATA Ankaa,64,2.40,6.570939,-42.306084,4 DATA Anser,88,4.44,292.176375,24.664903,5 DATA Antares,73,1.06,247.351915,-26.432003,5 DATA Arcturus,9,-0.05,213.915300,19.182409,5 DATA Arkab Posterior,72,4.27,290.804740,-44.799779,2 DATA Arkab Prior,72,3.96,290.659551,-44.458959,1 DATA Arneb,48,2.58,83.182567,-17.822289,2 DATA Ascella,72,2.60,285.653043,-29.880063,2 DATA Asellus Australis,12,3.94,131.171248,18.154309,4 DATA Asellus Borealis,12,4.66,130.821442,21.468501,2 DATA Ashlesha,42,3.49,131.693794,6.418809,3 DATA Aspidiske,17,2.21,139.272529,-59.275232,2 DATA Asterope,78,5.76,56.476987,24.554512,1 DATA Athebyne,34,2.73,245.997858,61.514214,4 DATA Atik,63,3.84,56.079720,32.288240,2 DATA Atlas,78,3.62,57.290597,24.053415,1 DATA Atria,81,1.91,252.166229,-69.027712,5 DATA Avior,17,1.86,125.628480,-59.509484,5 DATA Azelfafage,31,4.69,325.523602,51.189623,1 DATA Azha,36,3.89,44.106873,-8.898145,4 DATA Azmidi,68,3.45,117.323563,-24.859786,5 DATA Barnard's Star,59,9.54,269.454023,4.668288,1 DATA Baten Kaitos,21,3.74,27.865137,-10.335044,4 DATA Beemim,36,3.97,66.009239,-34.016848,5 DATA Beid,36,4.04,62.966415,-6.837580,2 DATA Bellatrix,60,1.64,81.282764,6.349703,1 DATA Betelgeuse,60,0.45,88.792939,7.407064,5 DATA Bharani,7,3.61,42.495972,27.260507,1 DATA Biham,62,3.52,332.549939,6.197863,2 DATA Botein,7,4.35,47.907356,19.726674,4 DATA Brachium,49,3.25,226.017567,-25.281961,5 DATA Bunda,4,4.80,324.437956,-7.854202,2 DATA Canopus,17,-0.62,95.987958,-52.695661,2 DATA Capella,8,0.08,79.172328,45.997991,4 DATA Caph,18,2.28,2.294522,59.149781,2 DATA Castor,38,1.98,113.649428,31.888276,2 DATA Castula,18,4.62,14.166271,59.181055,4 DATA Cebalrai,59,2.76,265.868136,4.567300,4 DATA Celaeno,78,5.45,56.200893,24.289468,1 DATA Cervantes,6,5.15,266.036255,-51.834051,3 DATA Chalawan,83,5.03,164.866553,40.430256,3 DATA Chamukuy,78,3.73,67.165586,15.870882,2 DATA Chara,13,4.24,188.435603,41.357479,3 DATA Chertan,46,3.33,168.560019,15.429571,1 DATA Copernicus,12,5.95,133.149212,28.330820,4 DATA Cor Caroli,13,2.89,194.006943,38.318376,1 DATA Cujam,40,4.57,246.353979,14.033274,2 DATA Cursa,36,2.78,76.962440,-5.086446,2 DATA Dabih,16,3.05,305.252803,-14.781405,3 DATA Dalim,37,3.86,48.018864,-28.987620,3 DATA Deneb,31,1.25,310.357980,45.280339,2 DATA Deneb Algedi,16,2.85,326.760184,-16.127287,2 DATA Denebola,46,2.14,177.264910,14.572058,2 DATA Diadem,25,4.85,197.497029,17.529447,3 DATA Diphda,21,2.04,10.897379,-17.986606,4 DATA Dschubba,73,2.29,240.083359,-22.621710,1 DATA Dubhe,83,1.81,165.931965,61.751035,4 DATA Dziban,34,4.57,265.484814,72.148847,3 DATA Edasich,34,3.29,231.232396,58.966063,4 DATA Electra,78,3.72,56.218904,24.113336,1 DATA Elgafar,86,4.84,217.050575,-2.227957,3 DATA Elkurud,24,5.00,91.881801,-37.252920,1 DATA Elnath,78,1.65,81.572971,28.607452,1 DATA Eltanin,34,2.24,269.151541,51.488896,5 DATA Enif,62,2.38,326.046484,9.875009,5 DATA Errai,20,3.21,354.836655,77.632313,4 DATA Fafnir,34,4.82,276.496406,65.563480,4 DATA Fang,73,2.89,239.712972,-26.114108,1 DATA Fawaris,31,2.90,296.243658,45.130810,1 DATA Felis,42,4.94,148.717528,-19.009336,5 DATA Fomalhaut,67,1.17,344.412693,-29.622237,2 DATA Fulu,18,3.69,9.242851,53.896908,1 DATA Fumalsamakah,66,4.48,345.969225,3.820045,1 DATA Furud,14,3.02,95.078300,-30.063367,1 DATA Fuyue,73,3.19,267.464503,-37.043305,4 DATA Gacrux,30,1.59,187.791498,-57.113213,5 DATA Giausar,34,3.82,172.850920,69.331075,5 DATA Gienah,28,2.58,183.951543,-17.541929,1 DATA Ginan,30,3.59,185.340039,-60.401147,5 DATA Gomeisa,15,2.89,111.787674,8.289316,1 DATA Grumium,34,3.73,268.382207,56.872646,4 DATA Gudja,76,4.09,237.184903,18.141564,5 DATA Guniibuu,59,5.07,258.837875,-26.598892,4 DATA Hadar,19,0.61,210.955856,-60.373035,1 DATA Haedus,8,3.18,76.628722,41.234476,1 DATA Hamal,7,2.01,31.793357,23.462418,4 DATA Hassaleh,8,2.69,74.248421,33.166100,5 DATA Hatysa,60,2.80,83.858258,-05.909901,1 DATA Helvetios,62,5.49,344.366583,20.768831,3 DATA Heze,86,3.38,203.673300,-0.595820,2 DATA Homam,62,3.41,340.365503,10.831363,1 DATA Iklil,73,3.87,239.221151,-29.214073,1 DATA Imai,30,2.75,183.786320,-58.748927,1 DATA Intercrus,83,5.41,142.166618,45.601482,4 DATA Izar,9,2.35,221.246763,27.074207,4 DATA Jabbah,73,4.50,242.998894,-19.460708,2 DATA Jishui,38,4.89,114.791387,34.584346,3 DATA Kaffaljidhma,21,3.56,40.825163,3.235816,2 DATA Kang,86,4.18,213.223939,-10.273704,5 DATA Kaus Australis,72,1.79,276.042993,-34.384616,1 DATA Kaus Borealis,72,2.82,276.992668,-25.421701,4 DATA Kaus Media,72,2.72,275.248508,-29.828104,5 DATA Keid,36,4.43,63.817999,-7.652872,4 DATA Khambalia,86,4.52,214.777468,-13.371096,2 DATA Kitalpha,35,3.92,318.955949,5.247865,3 DATA Kochab,84,2.07,222.676357,74.155504,5 DATA Kornephoros,40,2.78,247.554998,21.489611,4 DATA Kraz,28,2.65,188.596810,-23.396759,4 DATA Kurhah,20,4.26,330.947724,64.627971,2 DATA Larawag,73,2.29,252.540878,-34.293232,4 DATA La Superba,13,5.42,191.282615,45.440257,5 DATA Lesath,73,2.70,262.690979,-37.295813,1 DATA Libertas,5,4.71,298.562008,8.461453,4 DATA Lilii Borea,7,4.52,41.977256,29.247115,4 DATA Maasym,40,4.41,262.684626,26.110645,5 DATA Mahasim,8,2.65,89.930292,37.212585,1 DATA Maia,78,3.87,56.456695,24.367751,1 DATA Marfik,59,3.82,247.728453,1.983888,2 DATA Markab,62,2.49,346.190223,15.205267,1 DATA Markeb,85,2.47,140.528407,-55.010667,1 DATA Marsic,40,5.00,242.018857,17.046980,4 DATA Matar,62,2.93,340.750579,30.221244,4 DATA Mebsuta,38,3.06,100.983026,25.131127,5 DATA Megrez,83,3.32,183.856503,57.032615,2 DATA Meissa,60,3.39,83.784486,9.934156,1 DATA Mekbuda,38,4.01,106.027215,20.570295,3 DATA Meleph,12,6.29,130.112544,19.544809,2 DATA Menkalinan,8,1.90,89.882179,44.947433,2 DATA Menkar,21,2.54,45.569885,4.089737,5 DATA Menkent,19,2.06,211.670617,-36.369958,4 DATA Menkib,63,3.98,59.741253,35.791032,2 DATA Merak,83,2.34,165.460319,56.382426,1 DATA Merga,9,5.76,222.327791,46.116206,3 DATA Meridiana,26,4.11,287.368087,-37.904473,2 DATA Merope,78,4.14,56.581552,23.948348,1 DATA Mesarthim,7,4.75,28.382560,19.293852,1 DATA Miaplacidus,17,1.67,138.299906,-69.717208,2 DATA Mimosa,30,1.25,191.930263,-59.688764,1 DATA Minchir,42,4.45,129.689323,3.341436,5 DATA Minelauva,86,3.39,193.900869,3.397470,5 DATA Mintaka,60,2.25,83.001667,-0.299095,1 DATA Mira,21,6.47,34.836617,-2.977640,5 DATA Mirach,1,2.07,17.433013,35.620557,5 DATA Miram,63,3.77,42.674207,55.895497,5 DATA Mirfak,63,1.79,51.080709,49.861179,3 DATA Mirzam,14,1.98,95.674939,-17.955919,1 DATA Misam,63,3.79,47.374048,44.857541,4 DATA Mizar,83,2.23,200.981429,54.925362,2 DATA Mothallah,80,3.42,28.270450,29.578826,3 DATA Muliphein,14,4.11,105.939554,-15.633286,1 DATA Muphrid,9,2.68,208.671161,18.397717,3 DATA Muscida,83,3.35,127.566128,60.718170,4 DATA Musica,32,5.48,314.608058,10.839286,4 DATA Nahn,12,5.70,137.339722,22.045446,4 DATA Naos,68,2.21,120.896031,-40.003148,1 DATA Nashira,16,3.69,325.022735,-16.662308,2 DATA Nekkar,9,3.49,225.486510,40.390567,4 DATA Nembus,1,3.59,24.498154,48.628214,5 DATA Nihal,48,2.83,82.061346,-20.759441,4 DATA Nunki,72,2.05,283.816360,-26.296724,1 DATA Nusakan,27,3.90,231.957211,29.105699,2 DATA Ogma,40,8.16,247.623409,38.347311,2 DATA Okab,5,2.99,286.352533,13.863477,2 DATA Paikauhale,73,2.82,248.970637,-28.216017,1 DATA Peacock,61,1.94,306.411904,-56.735090,1 DATA Phact,24,2.65,84.912254,-34.074110,1 DATA Phecda,83,2.41,178.457679,53.694758,2 DATA Pherkad,84,3.00,230.182150,71.834017,2 DATA Piautos,12,5.92,125.133901,24.022311,1 DATA Pipirima,73,3.56,253.083939,-38.017535,1 DATA Pleione,78,5.05,57.296738,24.136710,1 DATA Polaris,84,2.13,37.954561,89.264109,3 DATA Polaris Australis,58,5.45,317.195164,-88.956499,2 DATA Polis,72,3.84,273.440870,-21.058832,2 DATA Pollux,38,1.16,116.328958,28.026199,4 DATA Porrima,86,3.44,190.415181,-1.449373,2 DATA Praecipua,47,3.79,163.327937,34.214872,4 DATA Prima Hyadum,78,3.65,64.948349,15.627643,4 DATA Procyon,15,0.40,114.825493,5.224993,3 DATA Propus,38,3.32,93.719405,22.506794,5 DATA Proxima Centauri,19,11.01,217.428953,-62.679484,2 DATA Ran,36,3.73,53.232687,-9.458259,4 DATA Rasalas,46,3.88,148.190903,26.006953,5 DATA Rasalgethi,40,3.37,258.661910,14.390333,5 DATA Rasalhague,59,2.08,263.733627,12.560035,2 DATA Rastaban,34,2.79,262.608174,52.301389,4 DATA Regulus,46,1.36,152.092962,11.967209,1 DATA Revati,66,5.21,18.432864,7.575354,2 DATA Rigel,60,0.18,78.634467,-8.201638,1 DATA Rigil Kentaurus,19,-0.01,219.902066,-60.833975,3 DATA Rotanev,32,3.64,309.387235,14.595115,3 DATA Ruchbah,18,2.66,21.453964,60.235284,2 DATA Rukbat,72,3.96,290.971570,-40.615940,1 DATA Sabik,59,2.43,257.594529,-15.724907,2 DATA Saclateni,8,3.69,75.619531,41.075839,5 DATA Sadachbia,4,3.86,335.414064,-1.387334,1 DATA Sadalbari,62,3.51,342.500809,24.601577,4 DATA Sadalmelik,4,2.95,331.445983,-0.319849,4 DATA Sadalsuud,4,2.90,322.889715,-5.571176,4 DATA Sadr,31,2.23,305.557091,40.256679,3 DATA Saiph,60,2.07,86.939120,-9.669605,1 DATA Salm,62,4.58,350.159341,23.740336,2 DATA Sargas,73,1.86,264.329711,-42.997824,3 DATA Sarin,40,3.12,258.757963,24.839204,2 DATA Sceptrum,36,4.02,69.545104,-14.304017,4 DATA Scheat,62,2.44,345.943572,28.082785,5 DATA Schedar,18,2.24,10.126838,56.537331,4 DATA Secunda Hyadum,78,3.78,65.733719,17.542514,4 DATA Segin,18,3.35,28.598857,63.670101,1 DATA Seginus,9,3.04,218.019466,38.308251,2 DATA Sham,71,4.39,295.024133,18.013891,3 DATA Shaula,73,2.08,263.402167,-37.103824,1 DATA Sheliak,52,3.60,282.519978,33.362668,2 DATA Sheratan,7,2.70,28.660046,20.808031,2 DATA Sirius,14,-1.45,101.287155,-16.716116,2 DATA Situla,4,5.04,339.439084,-4.228056,4 DATA Skat,4,3.27,343.662556,-15.820827,2 DATA Spica,86,0.98,201.298247,-11.161319,1 DATA Sualocin,32,3.86,309.909530,15.912073,1 DATA Subra,46,3.52,145.287640,9.892308,3 DATA Suhail,85,2.23,136.998993,-43.432589,5 DATA Sulafat,52,3.25,284.735928,32.689557,1 DATA Syrma,86,4.07,214.003623,-6.000545,3 DATA Tabit,60,3.19,72.460045,6.961275,3 DATA Taiyangshou,83,3.69,176.512559,47.779406,4 DATA Taiyi,34,5.23,193.868951,65.438474,2 DATA Talitha,83,3.12,134.801890,48.041826,2 DATA Tania Australis,83,3.06,155.582250,41.499519,5 DATA Tania Borealis,83,3.45,154.274095,42.914356,2 DATA Tarazed,5,2.72,296.564915,10.613262,5 DATA Tarf,12,3.53,124.128838,9.185544,5 DATA Taygeta,78,4.30,56.302063,24.467270,1 DATA Tegmine,12,5.24,123.053168,17.647801,3 DATA Tejat,38,2.87,95.740112,22.513583,5 DATA Terebellum,72,4.70,298.959838,-26.299534,3 DATA Theemin,36,3.81,68.887660,-30.562341,4 DATA Thuban,34,3.67,211.097291,64.375851,1 DATA Tiaki,39,2.12,340.666876,-46.884576,5 DATA Tianguan,78,2.97,84.411189,21.142544,1 DATA Tianyi,34,5.43,191.893099,66.790305,5 DATA Titawin,1,4.09,24.199342,41.405457,3 DATA Toliman,19,1.35,219.896096,-60.837528,4 DATA Tonatiuh,11,5.80,181.312995,76.905735,4 DATA Torcular,66,4.29,26.348466,9.157737,4 DATA Tureis,68,2.83,121.886037,-24.304324,3 DATA Ukdah,42,3.90,144.964008,-1.142810,5 DATA Unukalhai,76,2.63,236.066976,6.425629,4 DATA Unurgunite,14,3.49,105.429782,-27.934830,5 DATA Vega,52,0.03,279.234735,38.783689,2 DATA Veritate,1,5.22,352.822556,39.236197,4 DATA Vindemiatrix,86,2.85,195.544157,10.959149,4 DATA Wasat,38,3.52,110.030749,21.982316,2 DATA Wazn,24,3.12,87.739968,-35.768310,4 DATA Wezen,14,1.83,107.097850,-26.393200,3 DATA Wurren,64,4.02,17.096173,-55.245758,1 DATA Xamidimura,73,3.00,252.967630,-38.047380,1 DATA Xuange,9,4.18,214.095912,46.088306,2 DATA Yed Posterior,59,3.23,244.580374,-4.692510,4 DATA Yed Prior,59,2.73,243.586411,-3.694323,5 DATA Yildun,84,4.35,263.054126,86.586462,2 DATA Zaniah,86,4.60,184.976476,-0.666793,2 DATA Zaurak,36,2.97,59.507360,-13.508516,5 DATA Zavijava,86,3.59,177.673826,1.764717,3 DATA Zhang,42,4.11,147.869558,-14.846603,4 DATA Zibal,36,4.80,48.958436,-8.819731,2 DATA Zosma,46,2.56,168.527089,20.523718,2 DATA Zubenelgenubi,49,2.75,222.719638,-16.041777,2 DATA Zubenelhakrabi,49,3.91,233.881578,-14.789536,4 DATA Zubeneschamali,49,2.61,229.251724,-9.382914,1 REM Messier Objects (110) REM from http://astropixels.com/messier/messiercat.html REM Name, Constellation, Magnitude, RA, Dec DATA M1,78,8.4,83.625,22.0167 DATA M2,4,6.5,323.375,0.8167 DATA M3,13,6.2,205.550,28.3833 DATA M4,73,5.6,245.900,-26.5333 DATA M5,76,5.6,229.650,2.0833 DATA M6,73,4.2,265.025,-32.2167 DATA M7,73,3.3,268.475,-34.8167 DATA M8,72,6.0,270.950,-24.3833 DATA M9,59,7.7,259.800,-18.5167 DATA M10,59,6.6,254.275,-4.1000 DATA M11,75,6.3,282.775,-6.2667 DATA M12,59,6.7,251.800,-1.9500 DATA M13,40,5.8,250.425,36.4667 DATA M14,59,7.6,264.400,-3.2500 DATA M15,62,6.2,322.500,12.1667 DATA M16,76,6.4,274.700,-13.7833 DATA M17,72,7.0,275.200,-16.1833 DATA M18,72,7.5,274.975,-17.1333 DATA M19,59,6.8,255.650,-26.2667 DATA M20,72,9.0,270.650,-23.0333 DATA M21,72,6.5,271.150,-22.5000 DATA M22,72,5.1,279.100,-23.9000 DATA M23,72,6.9,269.200,-19.0167 DATA M24,72,4.6,274.225,-18.5000 DATA M25,72,6.5,277.900,-19.2500 DATA M26,75,8.0,281.300,-9.4000 DATA M27,88,7.4,299.900,22.7167 DATA M28,72,6.8,276.125,-24.8667 DATA M29,31,7.1,305.975,38.5333 DATA M30,16,7.2,325.100,-23.1833 DATA M31,1,3.4,10.450,41.2667 DATA M32,1,8.1,10.700,40.8667 DATA M33,80,5.7,23.475,30.6500 DATA M34,63,5.5,40.500,42.7833 DATA M35,38,5.3,92.225,24.3333 DATA M36,8,6.3,84.025,34.1333 DATA M37,8,6.2,88.100,32.5500 DATA M38,8,7.4,82.175,35.8333 DATA M39,31,4.6,323.050,48.4333 DATA M40,83,8.4,185.600,58.0833 DATA M41,14,4.6,101.750,-20.7333 DATA M42,60,4.0,83.850,-5.4500 DATA M43,60,9.0,83.900,-5.2667 DATA M44,12,3.7,130.025,19.9833 DATA M45,78,1.6,56.750,24.1167 DATA M46,68,6.0,115.450,-14.8167 DATA M47,68,5.2,114.150,-14.5000 DATA M48,42,5.5,123.450,-5.8000 DATA M49,86,8.4,187.450,8.0000 DATA M50,55,6.3,105.800,-8.3333 DATA M51,13,8.4,202.500,47.1833 DATA M52,18,7.3,351.050,61.5833 DATA M53,25,7.6,198.225,18.1667 DATA M54,72,7.6,283.775,-30.4833 DATA M55,72,6.3,295.000,-30.9667 DATA M56,52,8.3,289.150,30.1833 DATA M57,52,8.8,283.400,33.0333 DATA M58,86,9.7,189.425,11.8167 DATA M59,86,9.6,190.500,11.6500 DATA M60,86,8.8,190.925,11.5500 DATA M61,86,9.7,185.475,4.4667 DATA M62,59,6.5,255.300,-30.1167 DATA M63,13,8.6,198.950,42.0333 DATA M64,25,8.5,194.175,21.6833 DATA M65,46,9.3,169.725,13.0833 DATA M66,46,8.9,170.050,12.9833 DATA M67,12,6.1,132.600,11.8167 DATA M68,42,7.8,189.875,-26.7500 DATA M69,72,7.6,277.850,-32.3500 DATA M70,72,7.9,280.800,-32.3000 DATA M71,71,8.2,298.450,18.7833 DATA M72,4,9.3,313.375,-12.5333 DATA M73,4,9.0,314.750,-12.6333 DATA M74,66,9.4,24.175,15.7833 DATA M75,72,8.5,301.525,-21.9167 DATA M76,63,10.1,25.600,51.5667 DATA M77,21,8.9,40.675,0.0333 DATA M78,60,8.3,86.675,0.0500 DATA M79,48,7.7,81.125,-24.5500 DATA M80,73,7.3,244.250,-22.9833 DATA M81,83,6.9,148.900,69.0667 DATA M82,83,8.4,148.950,69.6833 DATA M83,42,7.6,204.250,-29.8667 DATA M84,86,9.1,186.275,12.8833 DATA M85,25,9.1,186.375,18.2000 DATA M86,86,8.9,186.550,12.9500 DATA M87,86,8.6,187.700,12.4000 DATA M88,25,9.6,188.025,14.4333 DATA M89,86,9.8,188.925,12.5500 DATA M90,86,9.5,189.200,13.1667 DATA M91,25,10.2,188.875,14.5000 DATA M92,40,6.4,259.275,43.1333 DATA M93,68,6.0,116.150,-23.8667 DATA M94,13,8.2,192.725,41.1333 DATA M95,46,9.7,161.000,11.7000 DATA M96,46,9.2,161.700,11.8167 DATA M97,83,9.9,168.700,55.0167 DATA M98,25,10.1,183.475,14.9167 DATA M99,25,9.9,184.725,14.4333 DATA M100,25,9.3,185.750,15.8333 DATA M101,83,7.9,210.800,54.3500 DATA M102,34,9.9,226.625,55.7667 DATA M103,18,7.4,23.300,60.7000 DATA M104,86,8.0,190.000,-11.6167 DATA M105,46,9.3,161.950,12.5833 DATA M106,13,8.4,184.725,47.3167 DATA M107,59,7.9,248.125,-13.0500 DATA M108,83,10.0,167.875,55.6667 DATA M109,83,9.8,179.400,53.3833 DATA M110,1,8.5,10.100,41.6833 REM Countries (135) REM from https://www.worldatlas.com/aatlas/ctycodes.htm DATA Afghanistan,Albania,Algeria,Angola,Argentina,Armenia,Australia,Austria DATA Azerbaijan,Bangladesh,Belarus,Belgium,Benin,Bolivia,Bosnia and Herzegovina,Brazil DATA Bulgaria,Burkina Faso,Burundi,Cambodia,Cameroon,Canada,Central African Republic,Chile DATA China,Colombia,Congo,Costa Rica,Cote d'Ivoire,Croatia,Cuba,Czech Republic DATA DR Congo,Denmark,Djibouti,Dominican Republic,Ecuador,Egypt,El Salvador,Eritrea DATA Estonia,Ethiopia,Finland,France,Gabon,Georgia,Germany,Ghana DATA Greece,Guatemala,Guinea,Guinea-Bissau,Haiti,Honduras,Hungary,India DATA Indonesia,Iran,Iraq,Ireland,Israel,Italy,Jamaica,Japan DATA Kazakhstan,Kenya,Korea,Latvia,Lebanon,Liberia,Libya,Lithuania DATA Macedonia,Madagascar,Malawi,Malaysia,Mali,Mauritania,Mexico,Moldova DATA Mongolia,Morocco,Mozambique,Myanmar,Nepal,Netherlands,New Zealand,Nicaragua DATA Niger,Nigeria,Norway,Pakistan,Panama,Paraguay,Peru,Philippines DATA Poland,Portugal,Qatar,Romania,Russian Federation,Rwanda,Saudi Arabia,Senegal DATA Serbia,Sierra Leone,Singapore,Slovakia,Somalia,South Africa,Spain,Sri Lanka DATA Sudan,Sweden,Switzerland,Syrian Arab Republic,Taiwan,Tajikistan,Tanzania,Thailand DATA Tunisia,Turkey,Turkmenistan,Uganda,Ukraine,United Arab Emirates,United Kingdom,United States DATA Uruguay,Uzbekistan,Venezuela,Viet Nam,Yemen,Zambia,Zimbabwe REM Cities (992) REM filtered from https://github.com/petewarden/dstkdata/blob/master/worldcitiespop.csv DATA Abu Dhabi,126,24.4666667,54.3666667 DATA Dubai,126,25.2522222,55.28 DATA Sharjah,126,25.3622222,55.3911111 DATA Kabul,1,34.5166667,69.1833333 DATA Qandahar,1,31.6077778,65.7052778 DATA Tirana,2,41.3275,19.8188889 DATA Yerevan,6,40.1811111,44.5136111 DATA Luanda,4,-8.8383333,13.2344444 DATA Córdoba,5,-31.4,-64.1833333 DATA Corrientes,5,-27.4666667,-58.8333333 DATA La Plata,5,-34.9313889,-57.9488889 DATA Mar del Plata,5,-38.0,-57.55 DATA Mendoza,5,-32.8833333,-68.8166667 DATA Neuquén,5,-38.95,-68.0666667 DATA Resistencia,5,-27.45,-58.9833333 DATA Rosario,5,-32.9511111,-60.6663889 DATA Salta,5,-24.7833333,-65.4166667 DATA San Juan,5,-31.5375,-68.5363889 DATA Santa Fe,5,-31.6333333,-60.7 DATA Santiago del Estero,5,-27.7833333,-64.2666667 DATA Tucumán,5,-26.8166667,-65.2166667 DATA Vienna,8,48.2,16.3666667 DATA Adelaide,7,-34.933333,138.6 DATA Brisbane,7,-27.5,153.016667 DATA Gold Coast,7,-28,153.433333 DATA Melbourne,7,-37.816667,144.966667 DATA Newcastle,7,-32.916667,151.75 DATA Perth,7,-31.933333,115.833333 DATA Sydney,7,-33.883333,151.216667 DATA Baku,9,40.3952778,49.8822222 DATA Sarajevo,15,43.85,18.3833333 DATA Dhaka,10,23.7230556,90.4086111 DATA Khulna,10,22.8,89.55 DATA Rajshahi,10,24.3666667,88.6 DATA Tungi,10,23.89,90.4058333 DATA Antwerp,12,51.216667,4.416667 DATA Brussels,12,50.833333,4.333333 DATA Bobo Dioulasso,18,11.2,-4.3 DATA Ouagadougou,18,12.3702778,-1.5247222 DATA Plovdiv,17,42.15,24.75 DATA Sofia,17,42.6833333,23.3166667 DATA Bujumbura,19,-3.3761111,29.36 DATA Abomey-Calavi,13,6.45,2.35 DATA Cotonou,13,6.35,2.4333333 DATA Cochabamba,14,-17.3833333,-66.15 DATA La Paz,14,-16.5,-68.15 DATA Ananindeua,16,-1.3666667,-48.3833333 DATA Aracaju,16,-10.9166667,-37.0666667 DATA Bauru,16,-22.3166667,-49.0666667 DATA Belém,16,-1.45,-48.4833333 DATA Belford Roxo,16,-22.7619444,-43.3991667 DATA Belo Horizonte,16,-19.9166667,-43.9333333 DATA Betim,16,-19.9666667,-44.2166667 DATA Brasília,16,-15.7833333,-47.9166667 DATA Campina Grande,16,-7.2166667,-35.8833333 DATA Campinas,16,-22.9,-47.0833333 DATA Campo Grande,16,-20.45,-54.6166667 DATA Campos,16,-21.75,-41.3 DATA Carapicuíba,16,-23.5166667,-46.8333333 DATA Cariacica,16,-20.2666667,-40.4166667 DATA Caxias do Sul,16,-29.1666667,-51.1833333 DATA Contagem,16,-19.9166667,-44.1 DATA Cuiabá,16,-15.5833333,-56.0833333 DATA Curitiba,16,-25.4166667,-49.25 DATA Diadema,16,-23.7,-46.6166667 DATA Duque de Caxias,16,-22.7866667,-43.3083333 DATA Feira de Santana,16,-12.25,-38.95 DATA Florianópolis,16,-27.5833333,-48.5666667 DATA Goiânia,16,-16.6666667,-49.2666667 DATA Guarulhos,16,-23.4666667,-46.5333333 DATA Itaquaquecetuba,16,-23.4833333,-46.35 DATA Jaboatão,16,-8.1166667,-35.0166667 DATA João Pessoa,16,-7.1166667,-34.8666667 DATA Joinville,16,-26.3,-48.8333333 DATA Juiz de Fora,16,-21.7516667,-43.3527778 DATA Londrina,16,-23.3,-51.15 DATA Macapá,16,0.0333333,-51.05 DATA Maceió,16,-9.6666667,-35.7166667 DATA Manaus,16,-3.1133333,-60.0252778 DATA Mauá,16,-23.6666667,-46.45 DATA Montes Claros,16,-16.7166667,-43.8666667 DATA Natal,16,-5.7833333,-35.2166667 DATA Niterói,16,-22.8844444,-43.0944444 DATA Nova Iguaçu,16,-22.7572222,-43.4488889 DATA Olinda,16,-8.0166667,-34.85 DATA Osasco,16,-23.5666667,-46.7833333 DATA Piracicaba,16,-22.7166667,-47.6333333 DATA Porto Alegre,16,-30.0333333,-51.2 DATA Recife,16,-8.05,-34.9 DATA Ribeirão das Neves,16,-19.7833333,-44.1 DATA Ribeirão Prêto,16,-21.1666667,-47.8 DATA Rio de Janeiro,16,-22.9,-43.2333333 DATA Salvador,16,-12.9833333,-38.5166667 DATA Santo André,16,-23.6666667,-46.5166667 DATA Santos,16,-23.95,-46.3333333 DATA São Bernardo do Campo,16,-23.7,-46.55 DATA São Gonçalo,16,-22.8002778,-43.0255556 DATA São João de Meriti,16,-22.8013889,-43.3630556 DATA São José do Rio Prêto,16,-20.8,-49.3833333 DATA São José dos Campos,16,-23.1833333,-45.8833333 DATA São Luís,16,-2.5166667,-44.2666667 DATA São Paulo,16,-23.5333333,-46.6166667 DATA Serra,16,-20.1166667,-40.3 DATA Sorocaba,16,-23.4833333,-47.45 DATA Teresina,16,-5.0833333,-42.8166667 DATA Uberlândia,16,-18.9166667,-48.3 DATA Vila Velha,16,-20.3333333,-40.2833333 DATA Gomel,11,52.4416667,30.9833333 DATA Minsk,11,53.9,27.5666667 DATA Calgary,22,51.083333,-114.083333 DATA Edmonton,22,53.55,-113.5 DATA Hamilton,22,43.25,-79.833333 DATA Kitchener,22,43.45,-80.5 DATA London,22,42.983333,-81.25 DATA Montreal,22,45.5,-73.583333 DATA Ottawa,22,45.416667,-75.7 DATA Québec,22,46.8,-71.25 DATA Toronto,22,43.666667,-79.416667 DATA Vancouver,22,49.25,-123.133333 DATA Winnipeg,22,49.883333,-97.166667 DATA Boma,33,-5.85,13.05 DATA Kananga,33,-5.895833,22.417778 DATA Kinshasa,33,-4.3,15.3 DATA Kisangani,33,.516667,25.2 DATA Likasi,33,-10.981389,26.733333 DATA Lubumbashi,33,-11.666667,27.466667 DATA Mbuji-Mayi,33,-6.15,23.6 DATA Bangui,23,4.3666667,18.5833333 DATA Brazzaville,27,-4.2591667,15.2847222 DATA Zürich,115,47.3666667,8.55 DATA Abidjan,29,5.341111,-4.028056 DATA Bouaké,29,7.683333,-5.033056 DATA Santiago,24,-33.45,-70.6666667 DATA Bamenda,21,5.9333333,10.1666667 DATA Douala,21,4.0502778,9.7 DATA Garoua,21,9.3,13.4 DATA Kousséri,21,12.0783333,15.0308333 DATA Yaoundé,21,3.8666667,11.5166667 DATA Aksu,25,41.1230556,80.2644444 DATA Anqing,25,30.5091667,117.0505556 DATA Anshan,25,41.1236111,122.99 DATA Anshun,25,26.25,105.9333333 DATA Anyang,25,36.0994444,114.3288889 DATA Baoding,25,38.8511111,115.4902778 DATA Baoji,25,34.3536111,107.3752778 DATA Bengbu,25,32.9408333,117.3608333 DATA Benxi,25,41.2886111,123.765 DATA Cangzhou,25,38.3166667,116.8666667 DATA Changchun,25,43.88,125.3227778 DATA Changde,25,29.0322222,111.6780556 DATA Changsha,25,28.1791667,113.1136111 DATA Changzhou,25,31.7833333,119.9666667 DATA Chaoyang,25,41.5702778,120.4586111 DATA Chaozhou,25,23.6661111,116.6402778 DATA Chengde,25,40.7702778,118.1697222 DATA Chengdu,25,30.6666667,104.0666667 DATA Chifeng,25,42.2683333,118.9636111 DATA Chongqing,25,29.5627778,106.5527778 DATA Dalian,25,38.9122222,121.6022222 DATA Dandong,25,40.1291667,124.3947222 DATA Datong,25,40.0416667,113.5972222 DATA Dezhou,25,37.4486111,116.2925 DATA Dongguan,25,23.0488889,113.7447222 DATA Foshan,25,23.0333333,113.1166667 DATA Fushun,25,41.7,123.8833333 DATA Fuxin,25,42.0155556,121.6588889 DATA Fuzhou,25,26.0613889,119.3061111 DATA Guangzhou,25,23.1166667,113.25 DATA Guilin,25,25.2833333,110.2833333 DATA Guiyang,25,26.5833333,106.7166667 DATA Haikou,25,20.0458333,110.3416667 DATA Handan,25,36.5666667,114.5333333 DATA Hangzhou,25,30.2552778,120.1688889 DATA Harbin,25,45.75,126.65 DATA Hefei,25,31.8638889,117.2808333 DATA Hegang,25,47.4,130.3666667 DATA Hengshui,25,37.7322222,115.7011111 DATA Hengyang,25,26.8880556,112.615 DATA Hohhot,25,40.8105556,111.6522222 DATA Huaibei,25,33.9744444,116.7916667 DATA Huainan,25,32.6263889,116.9969444 DATA Huaiyin,25,33.5886111,119.0191667 DATA Jiamusi,25,46.8333333,130.35 DATA Jiangmen,25,22.5833333,113.0833333 DATA Jiaojiang,25,28.6802778,121.4427778 DATA Jiaozuo,25,35.2397222,113.2330556 DATA Jiaxing,25,30.7655556,120.7483333 DATA Jilin,25,43.8508333,126.5602778 DATA Jinan,25,36.6683333,116.9972222 DATA Jincheng,25,35.5022222,112.8327778 DATA Jining,25,35.405,116.5813889 DATA Jixi,25,45.3,130.9666667 DATA Kaifeng,25,34.7441667,114.4186111 DATA Kunming,25,25.0388889,102.7183333 DATA Langfang,25,39.5097222,116.6947222 DATA Lanzhou,25,36.0563889,103.7922222 DATA Liaoyang,25,41.2261111,123.0561111 DATA Liuzhou,25,24.3125,109.3886111 DATA Luancheng,25,37.8791667,114.6516667 DATA Luohe,25,33.5716667,114.0352778 DATA Luoyang,25,34.6836111,112.4536111 DATA Luqiao,25,28.5788889,121.3783333 DATA Maanshan,25,31.7333333,118.4833333 DATA Maoming,25,21.65,110.9 DATA Mudanjiang,25,44.5833333,129.6 DATA Nanchang,25,28.55,115.9333333 DATA Nanjing,25,32.0616667,118.7777778 DATA Nanning,25,22.8166667,108.3166667 DATA Nantong,25,32.0302778,120.8747222 DATA Neijiang,25,29.5836111,105.0591667 DATA Ningbo,25,29.875,121.5419444 DATA Panzhihua,25,26.55,101.7333333 DATA Peking,25,39.9288889,116.3883333 DATA Pingdingshan,25,33.7408333,113.3063889 DATA Pingxiang,25,27.6166667,113.85 DATA Putian,25,25.4394444,119.0102778 DATA Puyang,25,35.7027778,115.0052778 DATA Qingdao,25,36.0986111,120.3719444 DATA Qinhuangdao,25,39.9316667,119.5883333 DATA Qiqihar,25,47.3408333,123.9672222 DATA Qitaihe,25,45.8,130.85 DATA Rongcheng,25,23.5297222,116.3655556 DATA Sanmenxia,25,34.7747222,111.1813889 DATA Shanghai,25,31.005,121.4086111 DATA Shantou,25,23.3666667,116.6666667 DATA Shaoguan,25,24.8,113.5833333 DATA Shaoxing,25,30.0016667,120.5811111 DATA Shaoyang,25,27.0130556,111.2547222 DATA Shashi,25,30.3072222,112.2447222 DATA Shenyang,25,41.7922222,123.4327778 DATA Shenzhen,25,22.5333333,114.1333333 DATA Shihezi,25,44.3,86.0333333 DATA Shiyan,25,32.5666667,110.7833333 DATA Suzhou,25,31.3113889,120.6180556 DATA Taian,25,36.1852778,117.12 DATA Taiyüan,25,37.7269444,112.4708333 DATA Taizhou,25,32.4933333,119.9080556 DATA Tanggu,25,39.0211111,117.6469444 DATA Tangshan,25,37.3325,114.7013889 DATA Tianjin,25,39.1422222,117.1766667 DATA Tieling,25,42.2930556,123.8413889 DATA Ürümqi,25,43.8,87.5833333 DATA Weifang,25,36.71,119.1019444 DATA Wenzhou,25,28.0191667,120.6544444 DATA Wuhan,25,30.5833333,114.2666667 DATA Wuhu,25,31.1666667,118.55 DATA Wuxi,25,31.5772222,120.2938889 DATA Xiamen,25,24.4675,118.0930556 DATA Xiangfan,25,32.0416667,112.145 DATA Xian,25,34.2622222,108.9377778 DATA Xianyang,25,34.3388889,108.7119444 DATA Xingtai,25,37.0630556,114.4941667 DATA Xining,25,36.6166667,101.7666667 DATA Xinpu,25,34.5997222,119.1594444 DATA Xinxiang,25,35.3088889,113.8672222 DATA Xinyang,25,32.0958333,114.1202778 DATA Xuanhua,25,40.6102778,115.0447222 DATA Xuchang,25,34.0166667,113.8166667 DATA Xuzhou,25,34.2669444,117.1916667 DATA Yancheng,25,33.3855556,120.1252778 DATA Yangjiang,25,21.85,111.9666667 DATA Yangzhou,25,32.3972222,119.4358333 DATA Yantai,25,37.5333333,121.4 DATA Yichang,25,30.7144444,111.2847222 DATA Yinchuan,25,38.4680556,106.2730556 DATA Yingkou,25,40.6341667,122.5080556 DATA Yueyang,25,29.1408333,113.1111111 DATA Zhangdian,25,36.7905556,118.0633333 DATA Zhangjiakou,25,40.81,114.8794444 DATA Zhangzhou,25,24.5133333,117.6555556 DATA Zhanjiang,25,21.2,110.3833333 DATA Zhaoqing,25,23.05,112.45 DATA Zhenjiang,25,32.2091667,119.4341667 DATA Zhoukou,25,33.6333333,114.6333333 DATA Zhuhai,25,22.2769444,113.5677778 DATA Zhuzhou,25,27.7,113.1333333 DATA Zigong,25,29.4,104.7833333 DATA Zunyi,25,27.5430556,106.8230556 DATA Barranquilla,26,10.9638889,-74.7963889 DATA Bello,26,6.3388889,-75.5622222 DATA Bogotá,26,4.6,-74.0833333 DATA Bucaramanga,26,7.1297222,-73.1258333 DATA Cali,26,3.4372222,-76.5225 DATA Cartagena,26,10.3997222,-75.5144444 DATA Cúcuta,26,7.8833333,-72.5052778 DATA Ibagué,26,4.4388889,-75.2322222 DATA Manizales,26,5.07,-75.5205556 DATA Medellín,26,6.2913889,-75.5361111 DATA Neiva,26,2.9305556,-75.3302778 DATA Pasto,26,1.2136111,-77.2811111 DATA Pereira,26,4.8133333,-75.6961111 DATA Santa Marta,26,11.2472222,-74.2016667 DATA Soledad,26,10.9172222,-74.7666667 DATA San José,28,9.9333333,-84.0833333 DATA Camagüey,31,21.3808333,-77.9169444 DATA Santiago de Cuba,31,20.0247222,-75.8219444 DATA Brno,32,49.2,16.6333333 DATA Prague,32,50.0833333,14.4666667 DATA Berlin,47,52.5166667,13.4 DATA Bochum,47,51.4833333,7.2166667 DATA Bremen,47,53.0833333,8.8 DATA Cologne,47,50.9333333,6.95 DATA Dortmund,47,51.5166667,7.45 DATA Dresden,47,51.05,13.75 DATA Duisburg,47,51.4333333,6.75 DATA Düsseldorf,47,51.2166667,6.7666667 DATA Essen,47,51.45,7.0166667 DATA Frankfurt,47,50.1166667,8.6833333 DATA Hamburg,47,53.55,10.0 DATA Hanover,47,52.3666667,9.7166667 DATA Leipzig,47,51.3,12.3333333 DATA Munich,47,48.15,11.5833333 DATA Nuremberg,47,49.4477778,11.0683333 DATA Stuttgart,47,48.7666667,9.1833333 DATA Wuppertal,47,51.2666667,7.1833333 DATA Jibuti,35,11.595,43.1480556 DATA Copenhagen,34,55.6666667,12.5833333 DATA Santiago,36,19.45,-70.7 DATA Santo Domingo,36,18.4666667,-69.9 DATA Algiers,3,36.7630556,3.0505556 DATA Constantine,3,36.365,6.6147222 DATA Wahran,3,35.6911111,-0.6416667 DATA Guayaquil,37,-2.1666667,-79.9 DATA Quito,37,-0.2166667,-78.5 DATA Tallinn,41,59.4338889,24.7280556 DATA Alexandria,38,31.1980556,29.9191667 DATA Asyut,38,27.1827778,31.1827778 DATA Cairo,38,30.05,31.25 DATA El Mahalla el Kubra,38,30.9761111,31.1669444 DATA Gizeh,38,30.0086111,31.2122222 DATA Luxor,38,25.6833333,32.65 DATA Port Said,38,31.2666667,32.3 DATA Suez,38,29.9666667,32.55 DATA Tanta,38,30.7911111,30.9980556 DATA Asmara,40,15.3333333,38.9333333 DATA Barcelona,111,41.3833333,2.1833333 DATA Bilbao,111,43.25,-2.9666667 DATA Las Palmas,111,28.1,-15.4166667 DATA Madrid,111,40.4,-3.6833333 DATA Málaga,111,36.7166667,-4.4166667 DATA Murcia,111,37.9833333,-1.1166667 DATA Palma,111,39.5666667,2.65 DATA Sevilla,111,37.3772222,-5.9869444 DATA Valencia,111,39.4666667,-0.3666667 DATA Zaragoza,111,41.6333333,-0.8833333 DATA Addis Ababa,42,9.0333333,38.7 DATA Helsinki,43,60.1755556,24.9341667 DATA Lyon,44,45.75,4.85 DATA Marseille,44,43.3,5.4 DATA Nice,44,43.7,7.25 DATA Paris,44,48.866667,2.333333 DATA Toulouse,44,43.6,1.433333 DATA Libreville,45,0.3833333,9.45 DATA Belfast,127,54.583333,-5.933333 DATA Birmingham,127,52.466667,-1.916667 DATA Bristol,127,51.45,-2.583333 DATA Edinburgh,127,55.95,-3.2 DATA Glasgow,127,55.833333,-4.25 DATA Leeds,127,53.8,-1.583333 DATA Leicester,127,52.633333,-1.133333 DATA Liverpool,127,53.416667,-3 DATA London,127,51.5,-.116667 DATA Manchester,127,53.5,-2.216667 DATA Sheffield,127,53.366667,-1.5 DATA Tbilisi,46,41.725,44.7908333 DATA Accra,48,5.55,-0.2166667 DATA Kumasi,48,6.6833333,-1.6166667 DATA Tamale,48,9.4,-0.8333333 DATA Tema,48,5.6166667,-0.0166667 DATA Conakry,51,9.5091667,-13.7122222 DATA Athens,49,37.9833333,23.7333333 DATA Thessaloníki,49,40.6402778,22.9438889 DATA Guatemala City,50,14.6211111,-90.5269444 DATA Guatemala,50,14.6211111,-90.5269444 DATA Mixco,50,14.6333333,-90.6063889 DATA Villa Nueva,50,14.5269444,-90.5875 DATA Bissau,52,11.85,-15.5833333 DATA San Pedro Sula,54,15.5,-88.0333333 DATA Tegucigalpa,54,14.1,-87.2166667 DATA Zagreb,30,45.8,16.0 DATA Carrefour,53,18.5383333,-72.4122222 DATA Delmas,53,18.5447222,-72.3027778 DATA Port-au-Prince,53,18.5391667,-72.335 DATA Budapest,55,47.5,19.0833333 DATA Ambon,57,-3.7166667,128.2 DATA Balikpapan,57,-1.2833333,116.8333333 DATA Bandar Lampung,57,-5.45,105.2666667 DATA Bandung,57,-6.9127778,107.6205556 DATA Banjarmasin,57,-3.3333333,114.5833333 DATA Bekasi,57,-6.2394444,106.9927778 DATA Bogor,57,-6.5897222,106.7913889 DATA Cimahi,57,-6.8805556,107.5427778 DATA Denpasar,57,-8.65,115.2166667 DATA Depok,57,-6.4,106.8186111 DATA Jakarta,57,-6.1744444,106.8294444 DATA Jambi,57,-1.6,103.6166667 DATA Makasar,57,-5.1463889,119.4386111 DATA Malang,57,-7.9777778,112.6280556 DATA Manado,57,1.4925,124.8383333 DATA Medan,57,3.5833333,98.6666667 DATA Padang,57,-0.95,100.35 DATA Palembang,57,-2.9166667,104.75 DATA Pontianak,57,-0.0333333,109.3333333 DATA Samarinda,57,-0.5,117.15 DATA Semarang,57,-6.9666667,110.4166667 DATA Surabaya,57,-7.2491667,112.7508333 DATA Surakarta,57,-7.5833333,110.8333333 DATA Tangerang,57,-6.1780556,106.63 DATA Yogyakarta,57,-7.8,110.3666667 DATA Dublin,60,53.3330556,-6.2488889 DATA Jerusalem,61,31.78,35.23 DATA Tel Aviv-Yafo,61,32.0677778,34.7647222 DATA Agra,56,27.183333,78.016667 DATA Ahmadabad,56,23.033333,72.616667 DATA Ahmadnagar,56,19.083333,74.733333 DATA Ajmer,56,26.45,74.633333 DATA Akola,56,20.733333,77 DATA Aligarh,56,27.883333,78.083333 DATA Allahabad,56,25.45,81.85 DATA Ambattur,56,13.076667,80.088611 DATA Amravati,56,20.933333,77.75 DATA Amritsar,56,31.633056,74.865556 DATA Asansol,56,23.683333,86.983333 DATA Aurangabad,56,19.883333,75.333333 DATA Bangalore,56,12.983333,77.583333 DATA Bareli,56,28.35,79.416667 DATA Belgaum,56,15.866667,74.5 DATA Bellary,56,15.15,76.933333 DATA Bhagalpur,56,25.25,87 DATA Bhatpara,56,22.871389,88.408889 DATA Bhavnagar,56,21.766667,72.15 DATA Bhilai,56,21.216667,81.433333 DATA Bhiwandi,56,19.3,73.066667 DATA Bhopal,56,23.266667,77.4 DATA Bhubaneswar,56,20.233333,85.833333 DATA Bikaner,56,28.016667,73.3 DATA Bokaro,56,23.783333,85.966667 DATA Bombay,56,18.975,72.825833 DATA Calcutta,56,22.569722,88.369722 DATA Chandigarh,56,30.737222,76.787222 DATA Dehra Dun,56,30.316667,78.033333 DATA Delhi,56,28.666667,77.216667 DATA Dhule,56,20.9,74.783333 DATA Durgapur,56,23.483333,87.316667 DATA Faridabad,56,28.433333,77.316667 DATA Gaya,56,24.783333,85 DATA Ghaziabad,56,28.666667,77.433333 DATA Gorakhpur,56,26.755,83.373889 DATA Gulbarga,56,17.333333,76.833333 DATA Guntur,56,16.3,80.45 DATA Guwahati,56,26.183333,91.733333 DATA Gwalior,56,26.223611,78.179167 DATA Haora,56,22.589167,88.310278 DATA Hubli,56,15.35,75.166667 DATA Hyderabad,56,17.375278,78.474444 DATA Indore,56,22.716667,75.833333 DATA Jabalpur,56,23.166667,79.95 DATA Jaipur,56,26.916667,75.816667 DATA Jalandhar,56,31.325556,75.579167 DATA Jammu,56,32.733333,74.866667 DATA Jamnagar,56,22.466667,70.066667 DATA Jamshedpur,56,22.8,86.183333 DATA Jhansi,56,25.433333,78.583333 DATA Jodhpur,56,26.286667,73.03 DATA Kalyan,56,19.25,73.15 DATA Kamarhati,56,22.671111,88.374722 DATA Kanpur,56,26.466667,80.35 DATA Kochi,56,9.966667,76.233333 DATA Kolhapur,56,16.7,74.216667 DATA Kollam,56,8.880556,76.591667 DATA Korba,56,22.35,82.683333 DATA Kota,56,25.183333,75.833333 DATA Lakhnau,56,26.85,80.916667 DATA Latur,56,18.4,76.583333 DATA Ludhiana,56,30.9,75.85 DATA Madras,56,13.083333,80.283333 DATA Madurai,56,9.933333,78.116667 DATA Maisuru,56,12.307222,76.649722 DATA Malegaon,56,20.55,74.533333 DATA Mangaluru,56,12.863889,74.835278 DATA Mathura,56,27.5,77.683333 DATA Moradabad,56,28.833333,78.783333 DATA Muzaffarnagar,56,29.466667,77.683333 DATA Muzaffarpur,56,26.116667,85.4 DATA Nagpur,56,21.15,79.1 DATA Nanded,56,19.15,77.333333 DATA New Delhi,56,28.6,77.2 DATA Panihati,56,22.694167,88.374444 DATA Patna,56,25.6,85.116667 DATA Pimpri,56,18.616667,73.8 DATA Pune,56,18.533333,73.866667 DATA Raipur,56,21.233333,81.633333 DATA Rajkot,56,22.3,70.783333 DATA Rajpur,56,22.4125,88.418056 DATA Ranchi,56,23.35,85.333333 DATA Saharanpur,56,29.966667,77.55 DATA Selam,56,11.65,78.166667 DATA Shiliguri,56,26.716111,88.423611 DATA Sholapur,56,17.683333,75.916667 DATA Srinagar,56,34.092222,74.802222 DATA Surat,56,20.966667,72.9 DATA Thana,56,19.2,72.966667 DATA Thiruvananthapuram,56,8.506944,76.956944 DATA Tiruchchirappalli,56,10.805,78.685556 DATA Tirunelveli,56,8.733333,77.7 DATA Tiruppur,56,11.1,77.35 DATA Ujjain,56,23.183333,75.766667 DATA Ulhasnagar,56,19.216667,73.15 DATA Vadodara,56,22.3,73.2 DATA Varanasi,56,25.333333,83 DATA Vijayawada,56,16.516667,80.616667 DATA Visakhapatnam,56,17.7,83.3 DATA Warangal,56,18,79.583333 DATA Baghdad,59,33.3386111,44.3938889 DATA Irbil,59,36.19,44.0088889 DATA Kirkuk,59,35.4680556,44.3922222 DATA Abadan,58,30.3525,48.2958333 DATA Ahvaz,58,31.3291667,48.6911111 DATA Arak,58,34.0855556,49.6838889 DATA Ardabil,58,38.2494444,48.3013889 DATA Esfahan,58,32.6597222,51.6713889 DATA Hamadan,58,34.7961111,48.5158333 DATA Karaj,58,35.8288889,51.0058333 DATA Kerman,58,30.2938889,57.0841667 DATA Kermanshah,58,34.3141667,47.065 DATA Khorramshahr,58,30.4391667,48.1791667 DATA Mashhad,58,36.2958333,59.6119444 DATA Orumiyeh,58,37.555,45.1027778 DATA Qazvin,58,36.2622222,50.0169444 DATA Qom,58,34.6452778,50.8808333 DATA Rasht,58,37.2794444,49.5858333 DATA Sanandaj,58,35.3172222,46.9988889 DATA Shiraz,58,29.615,52.5383333 DATA Tabriz,58,38.08,46.2919444 DATA Tehran,58,35.6719444,51.4244444 DATA Yazd,58,31.8972222,54.3675 DATA Zahedan,58,29.4977778,60.8727778 DATA Zanjan,58,36.6644444,48.4855556 DATA Bologna,62,44.4833333,11.3333333 DATA Florence,62,43.7666667,11.25 DATA Genoa,62,44.4166667,8.95 DATA Milan,62,45.4666667,9.2 DATA Naples,62,40.8333333,14.25 DATA Palermo,62,38.1166667,13.3666667 DATA Rome,62,41.9,12.4833333 DATA Turin,62,45.05,7.6666667 DATA Kingston,63,18.0,-76.8 DATA Amagasaki,64,34.7166667,135.4166667 DATA Asahikawa,64,43.7677778,142.3702778 DATA Chiba,64,35.6,140.1166667 DATA Fujisawa,64,35.3419444,139.47 DATA Fukuoka,64,33.5833333,130.4 DATA Fukuyama,64,34.4833333,133.3666667 DATA Funabashi,64,35.6930556,139.9833333 DATA Gifu,64,35.4166667,136.75 DATA Hachioji,64,35.6558333,139.3238889 DATA Hamamatsu,64,34.7,137.7333333 DATA Himeji,64,34.8166667,134.7 DATA Hirakata,64,34.8,135.6333333 DATA Hiroshima,64,34.4,132.45 DATA Ichikawa,64,35.7197222,139.9247222 DATA Iwaki,64,37.05,140.8833333 DATA Kagoshima,64,31.6,130.55 DATA Kanazawa,64,36.5666667,136.65 DATA Kashiwa,64,35.8544444,139.9688889 DATA Kawagoe,64,35.9086111,139.4852778 DATA Kawaguchi,64,35.805,139.7205556 DATA Kawasaki,64,35.5205556,139.7172222 DATA Kitakyushu,64,33.8333333,130.8333333 DATA Kobe,64,34.6833333,135.1666667 DATA Kochi,64,33.55,133.55 DATA Koriyama,64,37.4,140.3833333 DATA Kumamoto,64,32.8,130.7166667 DATA Kurashiki,64,34.5833333,133.7666667 DATA Kyoto,64,35.0,135.75 DATA Machida,64,35.5402778,139.4508333 DATA Matsudo,64,35.7833333,139.9 DATA Matsuyama,64,33.8363889,132.7530556 DATA Nagano,64,36.65,138.1833333 DATA Nagasaki,64,32.755,129.8683333 DATA Nagoya,64,35.1666667,136.9166667 DATA Nara,64,34.6833333,135.8333333 DATA Niigata,64,37.9166667,139.05 DATA Nishinomiya,64,34.7166667,135.3333333 DATA Oita,64,33.2372222,131.6044444 DATA Okayama,64,34.65,133.9166667 DATA Okazaki,64,34.9166667,137.15 DATA Osaka,64,34.6666667,135.5 DATA Sagamihara,64,35.5530556,139.3544444 DATA Sakai,64,34.5833333,135.4666667 DATA Sapporo,64,43.0547222,141.3538889 DATA Sendai,64,38.2547222,140.8847222 DATA Shizuoka,64,34.9666667,138.3833333 DATA Suita,64,34.75,135.5333333 DATA Takamatsu,64,34.3333333,134.05 DATA Takatsuki,64,34.85,135.6166667 DATA Tokorozawa,64,35.7863889,139.4677778 DATA Tokyo,64,35.685,139.7513889 DATA Toyohashi,64,34.7666667,137.3833333 DATA Toyonaka,64,34.7833333,135.4666667 DATA Toyota,64,35.0833333,137.15 DATA Utsunomiya,64,36.55,139.8666667 DATA Wakayama,64,34.0902778,135.09 DATA Yokohama,64,35.45,139.65 DATA Yokosuka,64,35.2836111,139.6672222 DATA Mombasa,66,-4.05,39.6666667 DATA Nairobi,66,-1.2833333,36.8166667 DATA Phnum Pénh,20,11.55,104.9166667 DATA Seoul,67,37.5663889,126.9997222 DATA Almaty,65,43.25,76.95 DATA Astana,65,51.1811111,71.4277778 DATA Shymkent,65,42.3,69.6 DATA Taraz,65,42.9,71.3666667 DATA Bayrut,69,33.8719444,35.5097222 DATA Beirut,69,33.8719444,35.5097222 DATA Colombo,112,6.9319444,79.8477778 DATA Monrovia,70,6.3105556,-10.8047222 DATA Kaunas,72,54.9,23.9 DATA Vilnius,72,54.6833333,25.3166667 DATA Riga,68,56.95,24.1 DATA Benghazi,71,32.1166667,20.0666667 DATA Misratah,71,32.3783333,15.0905556 DATA Tripoli,71,32.8925,13.18 DATA Agadir,82,30.4,-9.6 DATA Casablanca,82,33.5930556,-7.6163889 DATA Fez,82,34.0527778,-4.9827778 DATA Kenitra,82,34.2608333,-6.5794444 DATA Marrakesh,82,31.6333333,-8.0 DATA Rabat,82,34.0252778,-6.8361111 DATA Tangier,82,35.7847222,-5.8127778 DATA Tétouan,82,35.5736111,-5.3752778 DATA Chisinau,80,47.0055556,28.8575 DATA Antananarivo,74,-18.9166667,47.5166667 DATA Skopje,73,42.0,21.4333333 DATA Bamako,77,12.65,-8.0 DATA Mandalay,84,22.0,96.0833333 DATA Mawlamyine,84,16.4913889,97.6255556 DATA Rangoon,84,16.7833333,96.1666667 DATA Ulaanbaatar,81,47.9166667,106.9166667 DATA Nouakchott,78,18.0863889,-15.9752778 DATA Blantyre,75,-15.7833333,35.0 DATA Lilongwe,75,-13.9833333,33.7833333 DATA Acapulco,79,16.85,-99.916667 DATA Aguascalientes,79,21.883333,-102.3 DATA Apodaca,79,25.766667,-100.2 DATA Cancún,79,21.166667,-86.833333 DATA Chihuahua,79,28.633333,-106.083333 DATA Chimalhuacán,79,19.416667,-98.9 DATA Cuautitlán Izcalli,79,19.646944,-99.246667 DATA Cuernavaca,79,18.916667,-99.25 DATA Culiacán,79,24.799444,-107.389722 DATA Durango,79,24.033333,-104.666667 DATA Ecatepec,79,19.601111,-99.0525 DATA Guadalajara,79,20.666667,-103.333333 DATA Guadalupe,79,25.683333,-100.25 DATA Hermosillo,79,29.066667,-110.966667 DATA Irapuato,79,20.683333,-101.35 DATA Ixtapaluca,79,19.316667,-98.883333 DATA Juarez,79,31.733333,-106.483333 DATA León,79,21.116667,-101.666667 DATA López Mateos,79,19.558333,-99.261389 DATA Matamoros,79,25.883333,-97.5 DATA Mazatlán,79,23.216667,-106.416667 DATA Mérida,79,20.966667,-89.616667 DATA Mexicali,79,32.651944,-115.468333 DATA Mexico,79,19.434167,-99.138611 DATA Monterrey,79,25.666667,-100.316667 DATA Morelia,79,19.7,-101.116667 DATA Naucalpan,79,19.479444,-99.238333 DATA Nezahualcóyotl,79,19.413611,-99.033056 DATA Nuevo Laredo,79,27.5,-99.516667 DATA Puebla,79,19.05,-98.2 DATA Querétaro,79,20.6,-100.383333 DATA Reynosa,79,26.083333,-98.283333 DATA Saltillo,79,25.416667,-101 DATA San Luis Potosí,79,22.15,-100.983333 DATA San Nicolás de los Garza,79,25.75,-100.3 DATA Tijuana,79,32.533333,-117.016667 DATA Tlalnepantla,79,19.526944,-99.221667 DATA Tlaquepaque,79,20.65,-103.316667 DATA Toluca,79,19.288333,-99.667222 DATA Tonalá,79,20.616667,-103.233333 DATA Torreón,79,25.55,-103.433333 DATA Tuxtla Gutiérrez,79,16.75,-93.116667 DATA Veracruz,79,19.2,-96.133333 DATA Villahermosa,79,17.983333,-92.916667 DATA Xalapa,79,19.533333,-96.916667 DATA Xico,79,19.266667,-98.933333 DATA Zapopan,79,20.716667,-103.4 DATA Ipoh,76,4.5833333,101.0833333 DATA Johor Bahru,76,1.4666667,103.75 DATA Klang,76,3.0333333,101.45 DATA Kota Kinabalu,76,5.9833333,116.0666667 DATA Kuala Lumpur,76,3.1666667,101.7 DATA Kuantan,76,3.8,103.3333333 DATA Kuching,76,1.55,110.3333333 DATA Petaling Jaya,76,3.0833333,101.65 DATA Sandakan,76,5.8333333,118.1166667 DATA Seremban,76,2.7166667,101.9333333 DATA Shah Alam,76,3.0833333,101.5333333 DATA Beira,83,-19.8436111,34.8388889 DATA Maputo,83,-25.9652778,32.5891667 DATA Matola,83,-25.9622222,32.4588889 DATA Nampula,83,-15.1197222,39.2647222 DATA Niamey,89,13.5166667,2.1166667 DATA Aba,90,5.1166667,7.3666667 DATA Abeokuta,90,7.15,3.35 DATA Akure,90,7.25,5.2 DATA Bénin,90,6.3333333,5.6333333 DATA Calabar,90,4.95,8.3166667 DATA Enugu,90,6.4333333,7.4833333 DATA Ibadan,90,7.3877778,3.8963889 DATA Ife,90,7.4666667,4.5666667 DATA Ilorin,90,8.5,4.55 DATA Iseyin,90,7.9666667,3.6 DATA Jos,90,9.9166667,8.9 DATA Kaduna,90,10.5230556,7.4402778 DATA Kano,90,11.9963889,8.5166667 DATA Katsina,90,12.9977778,7.5994444 DATA Lagos,90,6.4530556,3.3958333 DATA Maiduguri,90,11.845,13.16 DATA Okene,90,7.55,6.2333333 DATA Onitsha,90,6.1666667,6.7833333 DATA Oshogbo,90,7.7666667,4.5666667 DATA Oyo,90,7.85,3.9333333 DATA Port Harcourt,90,4.7891667,6.9986111 DATA Sokoto,90,13.0513889,5.2313889 DATA Warri,90,5.5166667,5.75 DATA Zaria,90,11.0666667,7.7 DATA Managua,88,12.1508333,-86.2683333 DATA Amsterdam,86,52.35,4.9166667 DATA Rotterdam,86,51.9166667,4.5 DATA The Hague,86,52.0833333,4.3 DATA Oslo,91,59.916667,10.75 DATA Kathmandu,85,27.7166667,85.3166667 DATA Auckland,87,-36.866667,174.766667 DATA Christchurch,87,-43.533333,172.633333 DATA Panamá,93,8.9666667,-79.5333333 DATA Arequipa,95,-16.3988889,-71.535 DATA Chiclayo,95,-6.7736111,-79.8416667 DATA Huancayo,95,-12.0666667,-75.2333333 DATA Iquitos,95,-3.7480556,-73.2472222 DATA Lima,95,-12.05,-77.05 DATA Trujillo,95,-8.1166667,-79.0333333 DATA Antipolo,96,14.5863889,121.1752778 DATA Bacolod,96,10.6661111,122.95 DATA Bacoor,96,14.4577778,120.9425 DATA Cagayan de Oro,96,8.4822222,124.6472222 DATA Cebu,96,10.3111111,123.8916667 DATA Dadiangas,96,6.1127778,125.1716667 DATA Dasmariñas,96,14.3294444,120.9366667 DATA Davao,96,7.0730556,125.6127778 DATA Iloilo,96,10.6969444,122.5644444 DATA Manila,96,14.6041667,120.9822222 DATA Zamboanga,96,6.9102778,122.0738889 DATA Bahawalpur,92,29.4,71.6833333 DATA Faisalabad,92,31.4166667,73.0833333 DATA Gujranwala,92,32.15,74.1833333 DATA Hyderabad,92,25.3666667,68.3666667 DATA Karachi,92,24.8666667,67.05 DATA Lahore,92,31.5497222,74.3436111 DATA Larkana,92,27.55,68.2166667 DATA Multan,92,30.1955556,71.4752778 DATA Peshawar,92,34.0083333,71.5727778 DATA Quetta,92,30.2,67.0 DATA Rawalpindi,92,33.6,73.0666667 DATA Sargodha,92,32.0836111,72.6711111 DATA Shekhupura,92,31.7130556,73.9783333 DATA Sialkot,92,32.5,74.5166667 DATA Sukkur,92,27.7,68.8666667 DATA Bydgoszcz,97,53.15,18.0 DATA Cracow,97,50.0833333,19.9166667 DATA Gdansk,97,54.35,18.6666667 DATA Lublin,97,51.25,22.5666667 DATA Poznan,97,52.4166667,16.9666667 DATA Szczecin,97,53.4166667,14.5833333 DATA Warsaw,97,52.25,21.0 DATA Lisbon,98,38.7166667,-9.1333333 DATA Asunción,94,-25.2666667,-57.6666667 DATA Doha,99,25.2866667,51.5333333 DATA Bucharest,100,44.4333333,26.1 DATA Belgrade,105,44.818611,20.468056 DATA Arkhangelsk,101,64.5666667,40.5333333 DATA Astrakhan,101,46.3494444,48.0491667 DATA Barnaul,101,53.3558333,83.7522222 DATA Belgorod,101,50.6133333,36.5872222 DATA Bryansk,101,53.2422222,34.3511111 DATA Cheboksary,101,56.1322222,47.2519444 DATA Chelyabinsk,101,55.1544444,61.4297222 DATA Chkalov,101,51.75,55.3833333 DATA Irkutsk,101,52.2666667,104.3333333 DATA Ivanovo,101,56.9941667,40.9858333 DATA Izhevsk,101,56.85,53.2333333 DATA Kaliningrad,101,54.71,20.5 DATA Kaluga,101,54.5358333,36.2705556 DATA Kazan,101,55.75,49.1333333 DATA Kemerovo,101,55.3333333,86.0833333 DATA Khabarovsk,101,48.5,135.1 DATA Kirov,101,58.5969444,49.6583333 DATA Krasnodar,101,45.0327778,38.9769444 DATA Krasnoyarsk,101,56.0097222,92.7916667 DATA Kurgan,101,55.45,65.3333333 DATA Kursk,101,51.7302778,36.1938889 DATA Lipetsk,101,52.6186111,39.5688889 DATA Magnitogorsk,101,53.4186111,59.0472222 DATA Makhachkala,101,42.9752778,47.5022222 DATA Moscow,101,55.7522222,37.6155556 DATA Nizhniy Novgorod,101,56.3333333,44.0 DATA Nizhniy Tagil,101,57.9194444,59.965 DATA Novokuznetsk,101,53.75,87.1 DATA Novosibirsk,101,55.0411111,82.9344444 DATA Omsk,101,55.0,73.4 DATA Orël,101,52.9658333,36.0802778 DATA Penza,101,53.1958333,45.0 DATA Perm,101,58.0,56.25 DATA Rostov-na-Donu,101,47.2363889,39.7138889 DATA Ryazan,101,54.6197222,39.74 DATA Saint Petersburg,101,59.8944444,30.2641667 DATA Samara,101,53.2,50.15 DATA Saratov,101,51.5666667,46.0333333 DATA Stavropol,101,45.0427778,41.9733333 DATA Tolyatti,101,53.5233333,49.4125 DATA Tomsk,101,56.5,84.9666667 DATA Tula,101,54.2044444,37.6111111 DATA Tver,101,56.8619444,35.8930556 DATA Tyumen,101,57.1522222,65.5272222 DATA Ufa,101,54.775,56.0375 DATA Ulan-Ude,101,51.8333333,107.6166667 DATA Ulyanovsk,101,54.3333333,48.4 DATA Vladivostok,101,43.1333333,131.9 DATA Volgograd,101,48.8047222,44.5858333 DATA Voronezh,101,51.6663889,39.17 DATA Yaroslavl,101,57.6166667,39.8666667 DATA Yekaterinburg,101,56.85,60.6 DATA Kigali,102,-1.9536111,30.0605556 DATA Buraydah,103,26.3316667,43.9716667 DATA Jiddah,103,21.5169444,39.2191667 DATA Mecca,103,21.4266667,39.8261111 DATA Riyadh,103,24.6408333,46.7727778 DATA Tabuk,103,28.3833333,36.5833333 DATA Kassala,113,15.4558333,36.3988889 DATA Khartoum,113,15.5880556,32.5341667 DATA Kusti,113,13.1666667,32.6666667 DATA Umm Durman,113,15.6361111,32.4372222 DATA Wad Madani,113,14.4,33.5333333 DATA Göteborg,114,57.7166667,11.9666667 DATA Stockholm,114,59.3333333,18.05 DATA Singapore,107,1.2930556,103.8558333 DATA Bratislava,108,48.15,17.1166667 DATA Freetown,106,8.49,-13.2341667 DATA Dakar,104,14.6708333,-17.4380556 DATA Hargeysa,109,9.5833333,44.0666667 DATA Mogadishu,109,2.0666667,45.3666667 DATA San Salvador,39,13.7086111,-89.2030556 DATA Aleppo,116,36.2027778,37.1586111 DATA Damascus,116,33.5,36.3 DATA Bangkok,120,13.75,100.516667 DATA Nonthaburi,120,13.833333,100.483333 DATA Samut Prakan,120,13.6,100.6 DATA Dushanbe,118,38.56,68.7738889 DATA Asgabat,123,37.95,58.3833333 DATA Tunis,121,36.8027778,10.1797222 DATA Adana,122,37.0016667,35.3288889 DATA Ankara,122,39.9272222,32.8644444 DATA Antalya,122,36.9125,30.6897222 DATA Bursa,122,40.1916667,29.0611111 DATA Erzurum,122,39.9086111,41.2769444 DATA Eskisehir,122,39.7766667,30.5205556 DATA Gaziantep,122,37.0594444,37.3825 DATA Istanbul,122,41.0186111,28.9647222 DATA Izmir,122,38.4072222,27.1502778 DATA Kahramanmaras,122,37.5875,36.9316667 DATA Kayseri,122,38.7322222,35.4852778 DATA Konya,122,37.8655556,32.4825 DATA Malatya,122,38.3533333,38.3119444 DATA Mersin,122,36.7327778,34.6441667 DATA Samsun,122,41.2866667,36.33 DATA Urfa,122,37.1511111,38.7927778 DATA Van,122,38.4941667,43.38 DATA Chungho,117,24.9944444,121.4727778 DATA Fengshan,117,22.6333333,120.35 DATA Hsinchu,117,24.8047222,120.9713889 DATA Kaohsiung,117,22.6333333,120.3355 DATA Keelung,117,25.1313889,121.7375 DATA Panchiao,117,25.0391667,121.525 DATA Sanchung,117,25.0630556,121.4638889 DATA Taichung,117,24.1433333,120.6813889 DATA Tainan,117,22.9933333,120.2036111 DATA Taipei,117,25.0391667,121.525 DATA Taoyüan,117,24.9869444,121.3055556 DATA Tucheng,117,24.9833333,121.4333333 DATA Arusha,119,-3.3666667,36.6833333 DATA Dar es Salaam,119,-6.8,39.2833333 DATA Mwanza,119,-2.5166667,32.9 DATA Zanzibar,119,-6.1666667,39.1833333 DATA Lvov,125,49.8333333,24.0 DATA Kampala,124,0.3155556,32.5655556 DATA Mesa,128,33.4222222,-111.8219444 DATA Phoenix,128,33.4483333,-112.0733333 DATA Tucson,128,32.2216667,-110.9258333 DATA Anaheim,128,33.8352778,-117.9136111 DATA Fresno,128,36.7477778,-119.7713889 DATA Long Beach,128,33.7669444,-118.1883333 DATA Los Angeles,128,34.0522222,-118.2427778 DATA Oakland,128,37.8044444,-122.2697222 DATA Sacramento,128,38.5816667,-121.4933333 DATA San Diego,128,32.7152778,-117.1563889 DATA San Francisco,128,37.7750000,-122.4183333 DATA San Jose,128,37.3394444,-121.8938889 DATA Santa Ana,128,33.7455556,-117.8669444 DATA Colorado Springs,128,38.8338889,-104.8208333 DATA Denver,128,39.7391667,-104.9841667 DATA Washington,128,38.8950000,-77.0366667 DATA Jacksonville,128,30.3319444,-81.6558333 DATA Miami,128,25.7738889,-80.1938889 DATA Atlanta,128,33.7488889,-84.3880556 DATA Honolulu,128,21.3069444,-157.8583333 DATA Chicago,128,41.8500000,-87.6500000 DATA Indianapolis,128,39.7683333,-86.1580556 DATA Kansas City,128,39.1141667,-94.6272222 DATA Wichita,128,37.6922222,-97.3372222 DATA New Orleans,128,29.9544444,-90.0750000 DATA Baltimore,128,39.2902778,-76.6125000 DATA Boston,128,42.3583333,-71.0602778 DATA Detroit,128,42.3313889,-83.0458333 DATA Minneapolis,128,44.9800000,-93.2636111 DATA Omaha,128,41.2586111,-95.9375000 DATA Las Vegas,128,36.1750000,-115.1363889 DATA Albuquerque,128,35.0844444,-106.6505556 DATA New York,128,40.7141667,-74.0063889 DATA Charlotte,128,35.2269444,-80.8433333 DATA Raleigh,128,35.7719444,-78.6388889 DATA Cleveland,128,41.4994444,-81.6955556 DATA Columbus,128,39.9611111,-82.9988889 DATA Oklahoma City,128,35.4675000,-97.5161111 DATA Tulsa,128,36.1538889,-95.9925000 DATA Portland,128,45.5236111,-122.6750000 DATA Philadelphia,128,39.9522222,-75.1641667 DATA San Juan,128,18.4683333,-66.1061111 DATA Memphis,128,35.1494444,-90.0488889 DATA Nashville,128,36.1658333,-86.7844444 DATA Arlington,128,32.7355556,-97.1077778 DATA Austin,128,30.2669444,-97.7427778 DATA Dallas,128,32.7833333,-96.8000000 DATA El Paso,128,31.7586111,-106.4863889 DATA Fort Worth,128,32.7252778,-97.3205556 DATA Houston,128,29.7630556,-95.3630556 DATA San Antonio,128,29.4238889,-98.4933333 DATA Virginia Beach,128,36.8527778,-75.9783333 DATA Seattle,128,47.6063889,-122.3308333 DATA Milwaukee,128,43.0388889,-87.9063889 DATA Montevideo,129,-34.8580556,-56.1708333 DATA Namangan,130,40.9952778,71.6725 DATA Tashkent,130,41.3166667,69.25 DATA Barcelona,131,10.1333333,-64.7 DATA Barquisimeto,131,10.0738889,-69.3227778 DATA Caracas,131,10.5,-66.9166667 DATA Ciudad Guayana,131,8.3533333,-62.6527778 DATA Maracaibo,131,10.6316667,-71.6405556 DATA Maracay,131,10.2469444,-67.5958333 DATA Maturín,131,9.75,-63.1766667 DATA Petare,131,10.4833333,-66.8166667 DATA Turmero,131,10.2333333,-67.4833333 DATA Valencia,131,10.1805556,-68.0038889 DATA Biên Hòa,132,10.95,106.8166667 DATA Hai Phong,132,20.8561111,106.6822222 DATA Hanoi,132,21.0333333,105.85 DATA Ha Noi,132,21.0333333,105.85 DATA Ho Chi Minh City,132,10.75,106.6666667 DATA Aden,133,12.7794444,45.0366667 DATA Benoni,110,-26.1833333,28.3166667 DATA Bloemfontein,110,-29.1333333,26.2 DATA Boksburg,110,-26.2166667,28.25 DATA Cape Town,110,-33.9166667,18.4166667 DATA Durban,110,-29.85,31.0166667 DATA East London,110,-33.0333333,27.9166667 DATA Johannesburg,110,-26.2,28.0833333 DATA Krugersdorp,110,-26.1,27.7666667 DATA Newcastle,110,-27.75,29.9333333 DATA Pietermaritzburg,110,-29.6166667,30.3833333 DATA Port Elizabeth,110,-33.9666667,25.5833333 DATA Pretoria,110,-25.7069444,28.2294444 DATA Soweto,110,-26.2666667,27.8666667 DATA Tembisa,110,-25.9988889,28.2269444 DATA Vereeniging,110,-26.6666667,27.9333333 DATA Welkom,110,-27.9833333,26.7333333 DATA Kitwe,134,-12.8166667,28.2 DATA Lusaka,134,-15.4166667,28.2833333 DATA Ndola,134,-12.9666667,28.6333333 DATA Bulawayo,135,-20.15,28.5833333 DATA Chitungwiza,135,-17.9938889,31.0480556 DATA Harare,135,-17.8177778,31.0447222