Add search by RA and DEC point
This commit is contained in:
+36
-4
@@ -8,10 +8,34 @@
|
|||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
#include <QContextMenuEvent>
|
#include <QContextMenuEvent>
|
||||||
|
#include <QRegExp>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
const QStringList DEFAULT_COLUMNS = {"EXPTIME", "OBJECT", "RA", "DEC"};
|
const QStringList DEFAULT_COLUMNS = {"EXPTIME", "OBJECT", "RA", "DEC"};
|
||||||
|
|
||||||
|
double RA(const QString &ra)
|
||||||
|
{
|
||||||
|
QRegularExpression reg("(\\d+)\\s*(\\d+)?\\s*(\\d+)?");
|
||||||
|
QRegularExpressionMatch match = reg.match(ra);
|
||||||
|
double h = match.captured(1).toDouble();
|
||||||
|
double m = match.captured(2).toDouble();
|
||||||
|
double s = match.captured(3).toDouble();
|
||||||
|
qDebug() << match.capturedTexts() << h << m << s;
|
||||||
|
return h*15 + m*0.25 + s*15/3600;
|
||||||
|
}
|
||||||
|
|
||||||
|
double DEC(const QString &dec)
|
||||||
|
{
|
||||||
|
QRegularExpression reg("([\\+\\-])?(\\d+)\\s*(\\d+)?\\s*(\\d+)?");
|
||||||
|
QRegularExpressionMatch match = reg.match(dec);
|
||||||
|
double sign = match.captured(1) == "-" ? -1 : 1;
|
||||||
|
double d = match.captured(2).toDouble();
|
||||||
|
double m = match.captured(3).toDouble();
|
||||||
|
double s = match.captured(4).toDouble();
|
||||||
|
qDebug() << match.capturedTexts() << sign << d << m << s;
|
||||||
|
return sign * (d + m/60 + s/3600);
|
||||||
|
}
|
||||||
|
|
||||||
SelectColumnsDialog::SelectColumnsDialog(QWidget *parent) : QDialog(parent)
|
SelectColumnsDialog::SelectColumnsDialog(QWidget *parent) : QDialog(parent)
|
||||||
{
|
{
|
||||||
m_listWidget = new QListWidget(this);
|
m_listWidget = new QListWidget(this);
|
||||||
@@ -130,12 +154,16 @@ void FITSFileModel::prepareQuery()
|
|||||||
{
|
{
|
||||||
QString cols;
|
QString cols;
|
||||||
QString join;
|
QString join;
|
||||||
QString where;
|
QStringList where;
|
||||||
QString sql = "SELECT f.file,";
|
QString sql = "SELECT f.file,";
|
||||||
for(int i=0; i<m_value.size(); i++)
|
for(int i=0; i<m_value.size(); i++)
|
||||||
{
|
{
|
||||||
if(m_key[i] == "file")
|
if(m_key[i] == "file")
|
||||||
where = QString(" WHERE f.file LIKE '%1'").arg(m_value[i]);
|
where.append(QString(" f.file LIKE '%1' ").arg(m_value[i]));
|
||||||
|
else if(m_key[i] == "RA pos")
|
||||||
|
where.append(QString(" %1 BETWEEN f.minRa AND f.maxRa ").arg(RA(m_value[i])));
|
||||||
|
else if(m_key[i] == "DEC pos")
|
||||||
|
where.append(QString(" %1 BETWEEN f.minDec AND f.maxDec ").arg(DEC(m_value[i])));
|
||||||
else
|
else
|
||||||
join += QString(" JOIN fits_headers AS s%1 ON f.id=s%1.id_file AND s%1.key='%2' AND s%1.value LIKE '%3'").arg(i).arg(m_key[i]).arg(m_value[i]);
|
join += QString(" JOIN fits_headers AS s%1 ON f.id=s%1.id_file AND s%1.key='%2' AND s%1.value LIKE '%3'").arg(i).arg(m_key[i]).arg(m_value[i]);
|
||||||
}
|
}
|
||||||
@@ -150,7 +178,7 @@ void FITSFileModel::prepareQuery()
|
|||||||
sql += cols;
|
sql += cols;
|
||||||
sql += " FROM fits_files AS f";
|
sql += " FROM fits_files AS f";
|
||||||
sql += join;
|
sql += join;
|
||||||
sql += where;
|
if(!where.isEmpty())sql += " WHERE " + where.join("AND");
|
||||||
sql += " GROUP BY f.id" + m_sort;
|
sql += " GROUP BY f.id" + m_sort;
|
||||||
setQuery(sql);
|
setQuery(sql);
|
||||||
setHeaderData(0, Qt::Horizontal, tr("File name"));
|
setHeaderData(0, Qt::Horizontal, tr("File name"));
|
||||||
@@ -232,11 +260,15 @@ DataBaseView::DataBaseView(Database *database, QWidget *parent) : QWidget(parent
|
|||||||
m_model->filesUnmarked(indexes);
|
m_model->filesUnmarked(indexes);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
QStringList fitsKeywords = m_database->getFitsKeywords();
|
||||||
for(int i=0; i<3; i++)
|
for(int i=0; i<3; i++)
|
||||||
{
|
{
|
||||||
m_filterKeyword[i] = new QComboBox(this);
|
m_filterKeyword[i] = new QComboBox(this);
|
||||||
m_filterKeyword[i]->addItem("file");
|
m_filterKeyword[i]->addItem("file");
|
||||||
m_filterKeyword[i]->addItems(m_database->getFitsKeywords());
|
m_filterKeyword[i]->addItem("RA pos");
|
||||||
|
m_filterKeyword[i]->addItem("DEC pos");
|
||||||
|
m_filterKeyword[i]->addItems(fitsKeywords);
|
||||||
|
|
||||||
m_search[i] = new QLineEdit(this);
|
m_search[i] = new QLineEdit(this);
|
||||||
m_search[i]->setPlaceholderText(tr("Text to search, you can % as wildcard"));
|
m_search[i]->setPlaceholderText(tr("Text to search, you can % as wildcard"));
|
||||||
connect(m_search[i], &QLineEdit::returnPressed, this, &DataBaseView::applyFilter);
|
connect(m_search[i], &QLineEdit::returnPressed, this, &DataBaseView::applyFilter);
|
||||||
|
|||||||
Reference in New Issue
Block a user