File indexing completed on 2024-03-24 15:23:38

0001 // SPDX-License-Identifier: LGPL-2.1-or-later
0002 //
0003 // SPDX-FileCopyrightText: 2006-2007 Torsten Rahn <tackat@kde.org>
0004 // SPDX-FileCopyrightText: 2007 Inge Wallin <ingwa@kde.org>
0005 // SPDX-FileCopyrightText: 2013 Mohammed Nafees <nafees.technocool@gmail.com>
0006 //
0007 
0008 
0009 #include <QFile>
0010 #include <QDebug>
0011 #include <QCoreApplication>
0012 #include <QFileInfo>
0013 #include <QDataStream>
0014 
0015 #include <cmath>
0016 #include <iostream>
0017 
0018 #define ENABLEGUI
0019 
0020 // Set up Color Table Per B-V Color indices from some Reference Stars
0021 QVector<double> colorTable( 0 );
0022 
0023 void exportToDat()
0024 {
0025     QFile file("stars.dat");
0026     file.open(QIODevice::WriteOnly);
0027     QDataStream out(&file);
0028 
0029     // Write a header with a "magic number" and a version
0030     out << (quint32)0x73746172;
0031     out << (qint32)004;
0032 
0033     out.setVersion(QDataStream::Qt_4_3);
0034 
0035     QFile data("catalog.dat");
0036     if ( data.open( QFile::ReadOnly ) ) {
0037         QTextStream stream(&data);
0038         QString line;
0039         do {
0040             line = stream.readLine();
0041 
0042             QString idString = line.mid(0,4);
0043             int idValue = idString.toInt();
0044 
0045             QString recString = line.mid( 75, 6 );
0046 
0047             double raHH = recString.mid( 0, 2 ).toDouble();
0048             double raMM = recString.mid( 2, 2 ).toDouble();
0049             double raSS = recString.mid( 4, 2 ).toDouble();
0050 
0051             double raValue = 15 * ( raHH + raMM / 60.0 + raSS / 3600.0 ) / 180.0 * M_PI;
0052 
0053             QString decString = line.mid( 83, 7 );
0054 
0055             double deSign = decString.startsWith(QLatin1Char('-')) ? -1.0 : 1.0;
0056             double deHH = decString.mid( 1, 2 ).toDouble();
0057             double deMM = decString.mid( 3, 2 ).toDouble();
0058             double deSS = decString.mid( 5, 2 ).toDouble();
0059 
0060             double deValue = deSign * ( deHH + deMM / 60.0 + deSS / 3600.0 ) / 180.0 * M_PI;
0061 
0062             QString magString = line.mid( 102, 5 );
0063             double magValue = magString.toDouble();
0064 
0065             QString bvString = line.mid( 108, 6);
0066             int     colorIdx = 2; // Default White
0067 
0068             // Find Index of Table Entry with Closest B-V value (Smallest Difference)
0069             if (bvString != QLatin1String("      ")) {
0070                 double bvValue = bvString.toDouble();
0071                 double bvMinDifference = fabs(colorTable.at(0)-bvValue);
0072                 for (int i = 1; i < colorTable.size(); ++i) {
0073                     double bvDifference = fabs(colorTable.at(i)-bvValue);
0074                     if (bvDifference < bvMinDifference) {
0075                         colorIdx = i;
0076                         bvMinDifference = bvDifference;
0077                     }
0078                 }
0079             }
0080 
0081 
0082 //            qDebug() << "Rec:" << recString << "Dec.:" << decString << "Mag.:" << magString;
0083             if ( !line.isNull() && magValue < 6.0 ) {
0084             if (raValue != 0 && deValue != 0) { // Filter out Novae and DSOs
0085             if (idValue != 5958) { // Filter out special cases, like novae ( T CrB, ... )
0086             qDebug() << "ID:" << idValue << "RA:" << raValue << "DE:" << deValue << "mag:" << magValue << "B-V:" << bvString << "idx:" << colorIdx;
0087             out << idValue;
0088             out << raValue;
0089             out << deValue;
0090             out << magValue;
0091             out << colorIdx;
0092             }
0093         }
0094             }
0095         } while ( !line.isNull() );
0096     }
0097     file.flush();
0098 }
0099 
0100 void exportToKml()
0101 {
0102     QFile file("kmlsky.kml");
0103     file.open(QIODevice::WriteOnly);
0104     QTextStream out(&file);
0105 
0106     out << "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n"
0107         << "<kml xmlns=\"http://www.opengis.net/kml/2.2\" hint=\"target=sky\"> \n"
0108         << "<Document> \n"
0109         << "   <Style id=\"mag-1 blue\"> \n"
0110         << "       <IconStyle> \n"
0111         << "           <Icon> \n"
0112         << "               <href>data/star_0_blue.png</href> \n"
0113         << "           </Icon> \n"
0114         << "       </IconStyle> \n"
0115         << "   </Style> \n"
0116         << "   <Style id=\"mag0 blue\"> \n"
0117         << "       <IconStyle> \n"
0118         << "           <Icon> \n"
0119         << "               <href>data/star_1_blue.png</href> \n"
0120         << "           </Icon> \n"
0121         << "       </IconStyle> \n"
0122         << "   </Style> \n"
0123         << "   <Style id=\"mag1 blue\"> \n"
0124         << "       <IconStyle> \n"
0125         << "           <Icon> \n"
0126         << "               <href>data/star_2_blue.png</href> \n"
0127         << "           </Icon> \n"
0128         << "       </IconStyle> \n"
0129         << "   </Style> \n"
0130         << "   <Style id=\"mag2 blue\"> \n"
0131         << "       <IconStyle> \n"
0132         << "           <Icon> \n"
0133         << "               <href>data/star_3_blue.png</href> \n"
0134         << "           </Icon> \n"
0135         << "       </IconStyle> \n"
0136         << "   </Style> \n"
0137         << "   <Style id=\"mag3 blue\"> \n"
0138         << "       <IconStyle> \n"
0139         << "           <Icon> \n"
0140         << "               <href>data/star_4_blue.png</href> \n"
0141         << "           </Icon> \n"
0142         << "       </IconStyle> \n"
0143         << "   </Style> \n"
0144         << "   <Style id=\"mag4 blue\"> \n"
0145         << "       <IconStyle> \n"
0146         << "           <Icon> \n"
0147         << "               <href>data/star_5_blue.png</href> \n"
0148         << "           </Icon> \n"
0149         << "       </IconStyle> \n"
0150         << "   </Style> \n"
0151         << "   <Style id=\"mag5 blue\"> \n"
0152         << "       <IconStyle> \n"
0153         << "           <Icon> \n"
0154         << "               <href>data/star_6_blue.png</href> \n"
0155         << "           </Icon> \n"
0156         << "       </IconStyle> \n"
0157         << "   </Style> \n"
0158         << "   <Style id=\"mag6 blue\"> \n"
0159         << "       <IconStyle> \n"
0160         << "           <Icon> \n"
0161         << "               <href>data/star_7_blue.png</href> \n"
0162         << "           </Icon> \n"
0163         << "       </IconStyle> \n"
0164         << "   </Style> \n"
0165         << "   <Style id=\"mag7 blue\"> \n"
0166         << "       <IconStyle> \n"
0167         << "           <Icon> \n"
0168         << "               <href>data/star_8_blue.png</href> \n"
0169         << "           </Icon> \n"
0170         << "       </IconStyle> \n"
0171         << "   </Style> \n"
0172         << "   <Style id=\"mag-1 bluewhite\"> \n"
0173         << "       <IconStyle> \n"
0174         << "           <Icon> \n"
0175         << "               <href>data/star_0_bluewhite.png</href> \n"
0176         << "           </Icon> \n"
0177         << "       </IconStyle> \n"
0178         << "   </Style> \n"
0179         << "   <Style id=\"mag0 bluewhite\"> \n"
0180         << "       <IconStyle> \n"
0181         << "           <Icon> \n"
0182         << "               <href>data/star_1_bluewhite.png</href> \n"
0183         << "           </Icon> \n"
0184         << "       </IconStyle> \n"
0185         << "   </Style> \n"
0186         << "   <Style id=\"mag1 bluewhite\"> \n"
0187         << "       <IconStyle> \n"
0188         << "           <Icon> \n"
0189         << "               <href>data/star_2_bluewhite.png</href> \n"
0190         << "           </Icon> \n"
0191         << "       </IconStyle> \n"
0192         << "   </Style> \n"
0193         << "   <Style id=\"mag2 bluewhite\"> \n"
0194         << "       <IconStyle> \n"
0195         << "           <Icon> \n"
0196         << "               <href>data/star_3_bluewhite.png</href> \n"
0197         << "           </Icon> \n"
0198         << "       </IconStyle> \n"
0199         << "   </Style> \n"
0200         << "   <Style id=\"mag3 bluewhite\"> \n"
0201         << "       <IconStyle> \n"
0202         << "           <Icon> \n"
0203         << "               <href>data/star_4_bluewhite.png</href> \n"
0204         << "           </Icon> \n"
0205         << "       </IconStyle> \n"
0206         << "   </Style> \n"
0207         << "   <Style id=\"mag4 bluewhite\"> \n"
0208         << "       <IconStyle> \n"
0209         << "           <Icon> \n"
0210         << "               <href>data/star_5_bluewhite.png</href> \n"
0211         << "           </Icon> \n"
0212         << "       </IconStyle> \n"
0213         << "   </Style> \n"
0214         << "   <Style id=\"mag5 bluewhite\"> \n"
0215         << "       <IconStyle> \n"
0216         << "           <Icon> \n"
0217         << "               <href>data/star_6_bluewhite.png</href> \n"
0218         << "           </Icon> \n"
0219         << "       </IconStyle> \n"
0220         << "   </Style> \n"
0221         << "   <Style id=\"mag6 bluewhite\"> \n"
0222         << "       <IconStyle> \n"
0223         << "           <Icon> \n"
0224         << "               <href>data/star_7_bluewhite.png</href> \n"
0225         << "           </Icon> \n"
0226         << "       </IconStyle> \n"
0227         << "   </Style> \n"
0228         << "   <Style id=\"mag7 bluewhite\"> \n"
0229         << "       <IconStyle> \n"
0230         << "           <Icon> \n"
0231         << "               <href>data/star_8_bluewhite.png</href> \n"
0232         << "           </Icon> \n"
0233         << "       </IconStyle> \n"
0234         << "   </Style> \n"
0235         << "   <Style id=\"mag-1 white\"> \n"
0236         << "       <IconStyle> \n"
0237         << "           <Icon> \n"
0238         << "               <href>data/star_0_white.png</href> \n"
0239         << "           </Icon> \n"
0240         << "       </IconStyle> \n"
0241         << "   </Style> \n"
0242         << "   <Style id=\"mag0 white\"> \n"
0243         << "       <IconStyle> \n"
0244         << "           <Icon> \n"
0245         << "               <href>data/star_1_white.png</href> \n"
0246         << "           </Icon> \n"
0247         << "       </IconStyle> \n"
0248         << "   </Style> \n"
0249         << "   <Style id=\"mag1 white\"> \n"
0250         << "       <IconStyle> \n"
0251         << "           <Icon> \n"
0252         << "               <href>data/star_2_white.png</href> \n"
0253         << "           </Icon> \n"
0254         << "       </IconStyle> \n"
0255         << "   </Style> \n"
0256         << "   <Style id=\"mag2 white\"> \n"
0257         << "       <IconStyle> \n"
0258         << "           <Icon> \n"
0259         << "               <href>data/star_3_white.png</href> \n"
0260         << "           </Icon> \n"
0261         << "       </IconStyle> \n"
0262         << "   </Style> \n"
0263         << "   <Style id=\"mag3 white\"> \n"
0264         << "       <IconStyle> \n"
0265         << "           <Icon> \n"
0266         << "               <href>data/star_4_white.png</href> \n"
0267         << "           </Icon> \n"
0268         << "       </IconStyle> \n"
0269         << "   </Style> \n"
0270         << "   <Style id=\"mag4 white\"> \n"
0271         << "       <IconStyle> \n"
0272         << "           <Icon> \n"
0273         << "               <href>data/star_5_white.png</href> \n"
0274         << "           </Icon> \n"
0275         << "       </IconStyle> \n"
0276         << "   </Style> \n"
0277         << "   <Style id=\"mag5 white\"> \n"
0278         << "       <IconStyle> \n"
0279         << "           <Icon> \n"
0280         << "               <href>data/star_6_white.png</href> \n"
0281         << "           </Icon> \n"
0282         << "       </IconStyle> \n"
0283         << "   </Style> \n"
0284         << "   <Style id=\"mag6 white\"> \n"
0285         << "       <IconStyle> \n"
0286         << "           <Icon> \n"
0287         << "               <href>data/star_7_white.png</href> \n"
0288         << "           </Icon> \n"
0289         << "       </IconStyle> \n"
0290         << "   </Style> \n"
0291         << "   <Style id=\"mag7 white\"> \n"
0292         << "       <IconStyle> \n"
0293         << "           <Icon> \n"
0294         << "               <href>data/star_8_white.png</href> \n"
0295         << "           </Icon> \n"
0296         << "       </IconStyle> \n"
0297         << "   </Style> \n"
0298         << "   <Style id=\"mag-1 yellow\"> \n"
0299         << "       <IconStyle> \n"
0300         << "           <Icon> \n"
0301         << "               <href>data/star_0_yellow.png</href> \n"
0302         << "           </Icon> \n"
0303         << "       </IconStyle> \n"
0304         << "   </Style> \n"
0305         << "   <Style id=\"mag0 yellow\"> \n"
0306         << "       <IconStyle> \n"
0307         << "           <Icon> \n"
0308         << "               <href>data/star_1_yellow.png</href> \n"
0309         << "           </Icon> \n"
0310         << "       </IconStyle> \n"
0311         << "   </Style> \n"
0312         << "   <Style id=\"mag1 yellow\"> \n"
0313         << "       <IconStyle> \n"
0314         << "           <Icon> \n"
0315         << "               <href>data/star_2_yellow.png</href> \n"
0316         << "           </Icon> \n"
0317         << "       </IconStyle> \n"
0318         << "   </Style> \n"
0319         << "   <Style id=\"mag2 yellow\"> \n"
0320         << "       <IconStyle> \n"
0321         << "           <Icon> \n"
0322         << "               <href>data/star_3_yellow.png</href> \n"
0323         << "           </Icon> \n"
0324         << "       </IconStyle> \n"
0325         << "   </Style> \n"
0326         << "   <Style id=\"mag3 yellow\"> \n"
0327         << "       <IconStyle> \n"
0328         << "           <Icon> \n"
0329         << "               <href>data/star_4_yellow.png</href> \n"
0330         << "           </Icon> \n"
0331         << "       </IconStyle> \n"
0332         << "   </Style> \n"
0333         << "   <Style id=\"mag4 yellow\"> \n"
0334         << "       <IconStyle> \n"
0335         << "           <Icon> \n"
0336         << "               <href>data/star_5_yellow.png</href> \n"
0337         << "           </Icon> \n"
0338         << "       </IconStyle> \n"
0339         << "   </Style> \n"
0340         << "   <Style id=\"mag5 yellow\"> \n"
0341         << "       <IconStyle> \n"
0342         << "           <Icon> \n"
0343         << "               <href>data/star_6_yellow.png</href> \n"
0344         << "           </Icon> \n"
0345         << "       </IconStyle> \n"
0346         << "   </Style> \n"
0347         << "   <Style id=\"mag6 yellow\"> \n"
0348         << "       <IconStyle> \n"
0349         << "           <Icon> \n"
0350         << "               <href>data/star_7_yellow.png</href> \n"
0351         << "           </Icon> \n"
0352         << "       </IconStyle> \n"
0353         << "   </Style> \n"
0354         << "   <Style id=\"mag7 yellow\"> \n"
0355         << "       <IconStyle> \n"
0356         << "           <Icon> \n"
0357         << "               <href>data/star_8_yellow.png</href> \n"
0358         << "           </Icon> \n"
0359         << "       </IconStyle> \n"
0360         << "   </Style> \n"
0361         << "   <Style id=\"mag-1 orange\"> \n"
0362         << "       <IconStyle> \n"
0363         << "           <Icon> \n"
0364         << "               <href>data/star_0_orange.png</href> \n"
0365         << "           </Icon> \n"
0366         << "       </IconStyle> \n"
0367         << "   </Style> \n"
0368         << "   <Style id=\"mag0 orange\"> \n"
0369         << "       <IconStyle> \n"
0370         << "           <Icon> \n"
0371         << "               <href>data/star_1_orange.png</href> \n"
0372         << "           </Icon> \n"
0373         << "       </IconStyle> \n"
0374         << "   </Style> \n"
0375         << "   <Style id=\"mag1 orange\"> \n"
0376         << "       <IconStyle> \n"
0377         << "           <Icon> \n"
0378         << "               <href>data/star_2_orange.png</href> \n"
0379         << "           </Icon> \n"
0380         << "       </IconStyle> \n"
0381         << "   </Style> \n"
0382         << "   <Style id=\"mag2 orange\"> \n"
0383         << "       <IconStyle> \n"
0384         << "           <Icon> \n"
0385         << "               <href>data/star_3_orange.png</href> \n"
0386         << "           </Icon> \n"
0387         << "       </IconStyle> \n"
0388         << "   </Style> \n"
0389         << "   <Style id=\"mag3 orange\"> \n"
0390         << "       <IconStyle> \n"
0391         << "           <Icon> \n"
0392         << "               <href>data/star_4_orange.png</href> \n"
0393         << "           </Icon> \n"
0394         << "       </IconStyle> \n"
0395         << "   </Style> \n"
0396         << "   <Style id=\"mag4 orange\"> \n"
0397         << "       <IconStyle> \n"
0398         << "           <Icon> \n"
0399         << "               <href>data/star_5_orange.png</href> \n"
0400         << "           </Icon> \n"
0401         << "       </IconStyle> \n"
0402         << "   </Style> \n"
0403         << "   <Style id=\"mag5 orange\"> \n"
0404         << "       <IconStyle> \n"
0405         << "           <Icon> \n"
0406         << "               <href>data/star_6_orange.png</href> \n"
0407         << "           </Icon> \n"
0408         << "       </IconStyle> \n"
0409         << "   </Style> \n"
0410         << "   <Style id=\"mag6 orange\"> \n"
0411         << "       <IconStyle> \n"
0412         << "           <Icon> \n"
0413         << "               <href>data/star_7_orange.png</href> \n"
0414         << "           </Icon> \n"
0415         << "       </IconStyle> \n"
0416         << "   </Style> \n"
0417         << "   <Style id=\"mag7 orange\"> \n"
0418         << "       <IconStyle> \n"
0419         << "           <Icon> \n"
0420         << "               <href>data/star_8_orange.png</href> \n"
0421         << "           </Icon> \n"
0422         << "       </IconStyle> \n"
0423         << "   </Style> \n"
0424         << "   <Style id=\"mag-1 red\"> \n"
0425         << "       <IconStyle> \n"
0426         << "           <Icon> \n"
0427         << "               <href>data/star_0_red.png</href> \n"
0428         << "           </Icon> \n"
0429         << "       </IconStyle> \n"
0430         << "   </Style> \n"
0431         << "   <Style id=\"mag0 red\"> \n"
0432         << "       <IconStyle> \n"
0433         << "           <Icon> \n"
0434         << "               <href>data/star_1_red.png</href> \n"
0435         << "           </Icon> \n"
0436         << "       </IconStyle> \n"
0437         << "   </Style> \n"
0438         << "   <Style id=\"mag1 red\"> \n"
0439         << "       <IconStyle> \n"
0440         << "           <Icon> \n"
0441         << "               <href>data/star_2_red.png</href> \n"
0442         << "           </Icon> \n"
0443         << "       </IconStyle> \n"
0444         << "   </Style> \n"
0445         << "   <Style id=\"mag2 red\"> \n"
0446         << "       <IconStyle> \n"
0447         << "           <Icon> \n"
0448         << "               <href>data/star_3_red.png</href> \n"
0449         << "           </Icon> \n"
0450         << "       </IconStyle> \n"
0451         << "   </Style> \n"
0452         << "   <Style id=\"mag3 red\"> \n"
0453         << "       <IconStyle> \n"
0454         << "           <Icon> \n"
0455         << "               <href>data/star_4_red.png</href> \n"
0456         << "           </Icon> \n"
0457         << "       </IconStyle> \n"
0458         << "   </Style> \n"
0459         << "   <Style id=\"mag4 red\"> \n"
0460         << "       <IconStyle> \n"
0461         << "           <Icon> \n"
0462         << "               <href>data/star_5_red.png</href> \n"
0463         << "           </Icon> \n"
0464         << "       </IconStyle> \n"
0465         << "   </Style> \n"
0466         << "   <Style id=\"mag5 red\"> \n"
0467         << "       <IconStyle> \n"
0468         << "           <Icon> \n"
0469         << "               <href>data/star_6_red.png</href> \n"
0470         << "           </Icon> \n"
0471         << "       </IconStyle> \n"
0472         << "   </Style> \n"
0473         << "   <Style id=\"mag6 red\"> \n"
0474         << "       <IconStyle> \n"
0475         << "           <Icon> \n"
0476         << "               <href>data/star_7_red.png</href> \n"
0477         << "           </Icon> \n"
0478         << "       </IconStyle> \n"
0479         << "   </Style> \n"
0480         << "   <Style id=\"mag7 red\"> \n"
0481         << "       <IconStyle> \n"
0482         << "           <Icon> \n"
0483         << "               <href>data/star_8_red.png</href> \n"
0484         << "           </Icon> \n"
0485         << "       </IconStyle> \n"
0486         << "   </Style> \n"
0487         << "   <Style id=\"mag-1 garnetred\"> \n"
0488         << "       <IconStyle> \n"
0489         << "           <Icon> \n"
0490         << "               <href>data/star_0_garnetred.png</href> \n"
0491         << "           </Icon> \n"
0492         << "       </IconStyle> \n"
0493         << "   </Style> \n"
0494         << "   <Style id=\"mag0 garnetred\"> \n"
0495         << "       <IconStyle> \n"
0496         << "           <Icon> \n"
0497         << "               <href>data/star_1_garnetred.png</href> \n"
0498         << "           </Icon> \n"
0499         << "       </IconStyle> \n"
0500         << "   </Style> \n"
0501         << "   <Style id=\"mag1 garnetred\"> \n"
0502         << "       <IconStyle> \n"
0503         << "           <Icon> \n"
0504         << "               <href>data/star_2_garnetred.png</href> \n"
0505         << "           </Icon> \n"
0506         << "       </IconStyle> \n"
0507         << "   </Style> \n"
0508         << "   <Style id=\"mag2 garnetred\"> \n"
0509         << "       <IconStyle> \n"
0510         << "           <Icon> \n"
0511         << "               <href>data/star_3_garnetred.png</href> \n"
0512         << "           </Icon> \n"
0513         << "       </IconStyle> \n"
0514         << "   </Style> \n"
0515         << "   <Style id=\"mag3 garnetred\"> \n"
0516         << "       <IconStyle> \n"
0517         << "           <Icon> \n"
0518         << "               <href>data/star_4_garnetred.png</href> \n"
0519         << "           </Icon> \n"
0520         << "       </IconStyle> \n"
0521         << "   </Style> \n"
0522         << "   <Style id=\"mag4 garnetred\"> \n"
0523         << "       <IconStyle> \n"
0524         << "           <Icon> \n"
0525         << "               <href>data/star_5_garnetred.png</href> \n"
0526         << "           </Icon> \n"
0527         << "       </IconStyle> \n"
0528         << "   </Style> \n"
0529         << "   <Style id=\"mag5 garnetred\"> \n"
0530         << "       <IconStyle> \n"
0531         << "           <Icon> \n"
0532         << "               <href>data/star_6_garnetred.png</href> \n"
0533         << "           </Icon> \n"
0534         << "       </IconStyle> \n"
0535         << "   </Style> \n"
0536         << "   <Style id=\"mag6 garnetred\"> \n"
0537         << "       <IconStyle> \n"
0538         << "           <Icon> \n"
0539         << "               <href>data/star_7_garnetred.png</href> \n"
0540         << "           </Icon> \n"
0541         << "       </IconStyle> \n"
0542         << "   </Style> \n"
0543         << "   <Style id=\"mag7 garnetred\"> \n"
0544         << "       <IconStyle> \n"
0545         << "           <Icon> \n"
0546         << "               <href>data/star_8_garnetred.png</href> \n"
0547         << "           </Icon> \n"
0548         << "       </IconStyle> \n"
0549         << "   </Style> \n";
0550 
0551     QFile data("catalog.dat");
0552     if ( data.open( QFile::ReadOnly ) ) {
0553         QTextStream stream(&data);
0554         QString line;
0555         do {
0556             line = stream.readLine();
0557 
0558             QString recString = line.mid( 75, 6 );
0559             double raHH = recString.mid( 0, 2 ).toDouble();
0560             double raMM = recString.mid( 2, 2 ).toDouble();
0561             double raSS = recString.mid( 4, 2 ).toDouble();
0562 
0563             qreal longitude = ( raHH + raMM / 60.0 + raSS / 3600.0 ) * 15.0 - 180.0;
0564 
0565             QString decString = line.mid( 83, 7 );
0566             double deSign = decString.startsWith(QLatin1Char('-')) ? -1.0 : 1.0;
0567             double deHH = decString.mid( 1, 2 ).toDouble();
0568             double deMM = decString.mid( 3, 2 ).toDouble();
0569             double deSS = decString.mid( 5, 2 ).toDouble();
0570 
0571             double deValue = deSign * ( deHH + deMM / 60.0 + deSS / 3600.0 );
0572 
0573             qreal latitude = deValue;
0574 
0575             QString magString = line.mid( 102, 5 );
0576             double magValue = magString.toDouble();
0577 
0578             QString bvString = line.mid( 108, 6);
0579             int     colorIdx = 2; // Default White
0580 
0581             // Find Index of Table Entry with Closest B-V value (Smallest Difference)
0582             if (bvString != QLatin1String("      ")) {
0583                 double bvValue = bvString.toDouble();
0584                 double bvMinDifference = fabs(colorTable.at(0)-bvValue);
0585                 for (int i = 1; i < colorTable.size(); ++i) {
0586                     double bvDifference = fabs(colorTable.at(i)-bvValue);
0587                     if (bvDifference < bvMinDifference) {
0588                         colorIdx = i;
0589                         bvMinDifference = bvDifference;
0590                     }
0591                 }
0592             }
0593 
0594             QString styleId;
0595             if ( magValue < -1 ) {
0596                 styleId = "mag-1";
0597             }
0598             else if ( magValue < 0 && magValue > -1 ) {
0599                 styleId = "mag0";
0600             }
0601             else if ( magValue < 1 && magValue > 0 ) {
0602                 styleId = "mag1";
0603             }
0604             else if ( magValue < 2 && magValue > 1 ) {
0605                 styleId = "mag2";
0606             }
0607             else if ( magValue < 3 && magValue > 2 ) {
0608                 styleId = "mag3";
0609             }
0610             else if ( magValue < 4 && magValue > 3 ) {
0611                 styleId = "mag4";
0612             }
0613             else if ( magValue < 5 && magValue > 4 ) {
0614                 styleId = "mag5";
0615             }
0616             else if ( magValue < 6 && magValue > 5 ) {
0617                 styleId = "mag6";
0618             }
0619             else {
0620                 styleId = "mag7";
0621             }
0622 
0623             if ( colorIdx == 0 ) {
0624                 styleId += QLatin1String(" blue");
0625             } else if ( colorIdx == 1 ) {
0626                 styleId += QLatin1String(" bluewhite");
0627             } else if ( colorIdx == 3 ) {
0628                 styleId += QLatin1String(" yellow");
0629             } else if ( colorIdx == 4 ) {
0630                 styleId += QLatin1String(" orange");
0631             } else if ( colorIdx == 5 ) {
0632                 styleId += QLatin1String(" red");
0633             } else if ( colorIdx == 6 ) {
0634                 styleId += QLatin1String(" garnetred");
0635             } else {
0636                 // white and no color ID
0637                 styleId += QLatin1String(" white");
0638             }
0639 
0640             out << "   <Placemark> \n";
0641 
0642             QString name = line.mid( 7, 3 );
0643             if (name == QLatin1String("Alp")) {
0644                 out << "        <name>" << QString::fromUtf8( "α" ) << "</name> \n";
0645             } else if (name == QLatin1String("Bet")) {
0646                 out << "        <name>" << QString::fromUtf8( "β" ) << "</name> \n";
0647             } else if (name == QLatin1String("Gam")) {
0648                 out << "        <name>" << QString::fromUtf8( "γ" ) << "</name> \n";
0649             } else if (name == QLatin1String("Del")) {
0650                 out << "        <name>" << QString::fromUtf8( "δ" ) << "</name> \n";
0651             } else if (name == QLatin1String("Eps")) {
0652                 out << "        <name>" << QString::fromUtf8( "ε" ) << "</name> \n";
0653             }
0654 
0655             out << "       <styleUrl>#" << styleId << "</styleUrl> \n"
0656                 << "       <Point> \n"
0657                 << "           <coordinates>" << longitude << "," << latitude << ",0" << "</coordinates> \n"
0658                 << "       </Point> \n"
0659                 << "   </Placemark> \n";
0660 
0661         } while ( !line.isNull() );
0662     }
0663 
0664     out << "</Document> \n"
0665         << "</kml> \n";
0666 
0667     file.close();
0668 }
0669 
0670 int main(int argc, char *argv[])
0671 {
0672     QCoreApplication  app(argc, argv);
0673 
0674     if (!QFileInfo("catalog.dat").exists())
0675     {
0676         std::cerr << "Missing stars.dat in current directory. Exiting." << std::endl;
0677         return 1;
0678     }
0679 
0680     colorTable.append(double(-0.23)); // Spica blue
0681     colorTable.append(double(0.0)); //Rigel blue-white
0682     colorTable.append(double(0.09)); //Deneb white
0683     colorTable.append(double(0.80)); //Capella yellow
0684     colorTable.append(double(1.23)); //Arcturus orange
0685     colorTable.append(double(1.85)); //Betelgeuse red
0686     colorTable.append(double(2.35)); //Mu Cep garnet red
0687 
0688     exportToDat();
0689     exportToKml();
0690 
0691     QFile starFile("stars.dat");
0692     starFile.open(QIODevice::ReadOnly);
0693     QDataStream in(&starFile);    // read the data serialized from the file
0694  // Read and check the header
0695     quint32 magic;
0696     in >> magic;
0697     if (magic != 0x73746172)
0698         return -1;
0699 
0700     // Read the version
0701     qint32 version;
0702     in >> version;
0703     if (version > 004) {
0704         qDebug() << "stars.dat: file too new.";
0705      return -1;
0706     }
0707     int id;
0708     double ra;
0709     double de;
0710     double mag;
0711     int colorIdx;
0712 
0713     while ( !in.atEnd() ) {
0714         in >> id;
0715         in >> ra;
0716         in >> de;
0717         in >> mag;
0718         in >> colorIdx;
0719         qDebug() << "ID:" << id << "RA:" << ra << "DE:" << de << "MAG:" << mag << "idx:" << colorIdx;
0720     }
0721 
0722     app.exit();
0723 }