2 #include "FeatureNomenclature.h"
10 #include <QNetworkAccessManager>
11 #include <QNetworkRequest>
12 #include <QNetworkReply>
39 QUrl(
"http://planetarynames.wr.usgs.gov/nomenclature/SearchResults"));
41 "Mozilla/5.0 (X11; Linux i686; rv:6.0) "
42 "Gecko/20100101 Firefox/6.0");
43 m_request->setHeader(QNetworkRequest::ContentTypeHeader,
44 "application/x-www-form-urlencoded");
105 if (!range.isEmpty()) {
106 startLon = range[0].first;
107 endLon = range[0].second;
110 if (range.size() > 1) {
115 runQuery(target, startLat, startLon, endLat, endLon);
116 runQuery(target, startLat, startLon2, endLat, endLon2);
121 runQuery(target, startLat, startLon, endLat, endLon);
198 bool greaterThan =
false;
200 greaterThan = (lhsDiameter > rhsDiameter);
203 greaterThan = lhsDiameter.
isValid();
223 m_xmlRepresenation = NULL;
224 m_xmlRepresenation =
new QDomElement(searchResultFeature);
225 m_approvalStatus = status;
235 m_xmlRepresenation = NULL;
246 delete m_xmlRepresenation;
247 m_xmlRepresenation = NULL;
261 QGridLayout *layout =
new QGridLayout;
262 widget->setLayout(layout);
266 QLabel *titleLabel =
new QLabel(
"<h2>Feature Details</h2>");
267 layout->addWidget(titleLabel, row, 0, 1, 2);
276 displayValue.first =
"Feature Name:";
278 displayValues.append(displayValue);
284 displayValue.first =
"Feature ID:";
286 displayValues.append(displayValue);
288 displayValue.first =
"Target:";
290 displayValues.append(displayValue);
292 displayValue.first =
"System:";
294 displayValues.append(displayValue);
296 displayValue.first =
"Control Network:";
298 displayValues.append(displayValue);
300 displayValue.first =
"Diameter:";
302 displayValues.append(displayValue);
304 displayValue.first =
"Originating Continent:";
305 displayValue.second =
307 displayValues.append(displayValue);
309 displayValue.first =
"Originating Ethnicity:";
310 displayValue.second =
312 displayValues.append(displayValue);
314 displayValue.first =
"Feature Type:";
315 displayValue.second =
317 displayValues.append(displayValue);
319 displayValue.first =
"Center Latitude:";
320 displayValue.second =
322 displayValues.append(displayValue);
324 displayValue.first =
"Center Longitude:";
325 displayValue.second =
327 displayValues.append(displayValue);
329 displayValue.first =
"Northern Latitude:";
330 displayValue.second =
332 displayValues.append(displayValue);
334 displayValue.first =
"Southern Latitude:";
335 displayValue.second =
337 displayValues.append(displayValue);
339 displayValue.first =
"Eastern Longitude:";
340 displayValue.second =
342 displayValues.append(displayValue);
344 displayValue.first =
"Western Longitude:";
345 displayValue.second =
347 displayValues.append(displayValue);
349 displayValue.first =
"Approval Date:";
350 displayValue.second =
352 displayValues.append(displayValue);
354 displayValue.first =
"Approval Status:";
355 displayValue.second =
357 displayValues.append(displayValue);
359 displayValue.first =
"Last Updated:";
360 displayValue.second =
362 displayValues.append(displayValue);
364 displayValue.first =
"Reference:";
365 displayValue.second =
367 displayValues.append(displayValue);
369 displayValue.first =
"Origin:";
370 displayValue.second =
372 displayValues.append(displayValue);
374 displayValue.first =
"URL:";
375 displayValue.second =
377 displayValues.append(displayValue);
379 for (
int i = 0; i < displayValues.count(); i++) {
380 QLabel *titleLabel =
new QLabel(displayValues[i].first);
381 QLabel *valueLabel =
new QLabel( (this->*(displayValues[i].second))() );
382 valueLabel->setOpenExternalLinks(
true);
383 valueLabel->setWordWrap(
true);
385 if (valueLabel->text() !=
"") {
386 layout->addWidget(titleLabel, row, 0);
387 layout->addWidget(valueLabel, row, 1);
405 return getTagText(
"id");
413 return getTagText(
"name");
421 return getTagText(
"cleanName");
431 QString targetStr = target();
434 if (targetStr.toUpper() ==
"MOON")
436 else if (targetStr.toUpper() ==
"MARS")
438 else if (targetStr.toUpper() ==
"MERCURY")
439 cnet =
"Preliminary MESSENGER";
449 QString nameString = name();
450 QString cleanNameString = cleanName();
452 QString displayNameString = nameString;
454 if (nameString != cleanNameString)
455 displayNameString = nameString +
" (" + cleanNameString +
")";
457 return displayNameString;
465 return getTagText(
"target");
473 return getTagText(
"system");
498 return diameter().toString();
522 return centerLatitude().toString();
547 return centerLongitude().toString();
572 return northernLatitude().toString();
597 return southernLatitude().toString();
623 return easternLongitude().toString();
649 return westernLongitude().toString();
658 return getTagText(
"continent");
666 return getTagText(
"ethnicity");
674 return getTagText(
"approvalstatus");
682 return getTagText(
"approvaldate");
690 return getTagText(
"featuretype");
698 return getTagText(
"reference");
706 return getTagText(
"origin");
714 return getTagText(
"lastUpdated");
722 return QUrl(
"http://planetarynames.wr.usgs.gov/Feature/" +
id());
730 return "<a href='" + referenceUrl().toString() +
"'>" +
731 referenceUrl().toString() +
740 return m_approvalStatus;
781 if (m_xmlRepresenation) {
783 m_xmlRepresenation->elementsByTagName(tagName);
786 text = nodes.at(0).toElement().text().trimmed();
801 if (reply->error() == QNetworkReply::NoError) {
807 QDomDocument xmlResultDocument;
808 if (xmlResultDocument.setContent(reply->readAll(),
809 &errorMsg, &errorLine, &errorCol)) {
810 for (QDomNode node = xmlResultDocument.firstChild();
812 node = node.nextSibling()) {
813 QDomElement element = node.toElement();
814 if (element.tagName() ==
"searchresults") {
820 QMessageBox::warning(NULL,
"Failed to read nomenclature database result",
821 "An error occurred when parsing the data sent back "
822 "from the nomenclature database. "
823 "The XML result was invalid. The parse is [" +
824 errorMsg +
"] on line [" +
825 QString(errorLine) +
"], column [" +
826 QString(errorCol) +
"]");
830 QMessageBox::warning(NULL,
"Failed to query nomenclature database",
831 "An error occurred when querying the nomenclature "
832 "database for features that intersect the qeuried "
833 "ground range. Please make sure you have an active "
834 "internet connection. The error returned was [" +
835 reply->errorString() +
"]");
838 reply->deleteLater();
854 ASSERT(xmlSearchResults.tagName() ==
"searchresults");
859 for (QDomNode node = xmlSearchResults.firstChild();
861 node = node.nextSibling()) {
862 QDomElement element = node.toElement();
863 QString approvalID = element.childNodes().item(15).toElement().attribute(
"id");
865 if (element.tagName() ==
"feature") {
867 if(approvalID ==
"5") {
870 else if(approvalID ==
"6") {
873 else if(approvalID ==
"7") {
904 QUrl encodedFormData;
907 encodedFormData.addQueryItem(
"additionalInfoColumn",
"true");
908 encodedFormData.addQueryItem(
"approvalDateColumn",
"true");
909 encodedFormData.addQueryItem(
"approvalStatusColumn",
"true");
910 encodedFormData.addQueryItem(
"centerLatLonColumn",
"true");
911 encodedFormData.addQueryItem(
"cleanFeatureNameColumn",
"true");
912 encodedFormData.addQueryItem(
"contEthColumn",
"true");
913 encodedFormData.addQueryItem(
"coordSystemColumn",
"true");
914 encodedFormData.addQueryItem(
"diameterColumn",
"true");
915 encodedFormData.addQueryItem(
"featureIDColumn",
"true");
916 encodedFormData.addQueryItem(
"featureNameColumn",
"true");
917 encodedFormData.addQueryItem(
"featureTypeCodeColumn",
"true");
918 encodedFormData.addQueryItem(
"featureTypeColumn",
"true");
919 encodedFormData.addQueryItem(
"lastUpdatedColumn",
"true");
920 encodedFormData.addQueryItem(
"latLonColumn",
"true");
921 encodedFormData.addQueryItem(
"originColumn",
"true");
922 encodedFormData.addQueryItem(
"quadColumn",
"true");
923 encodedFormData.addQueryItem(
"referenceColumn",
"true");
924 encodedFormData.addQueryItem(
"targetColumn",
"true");
927 encodedFormData.addQueryItem(
"is_0_360",
"true");
928 encodedFormData.addQueryItem(
"is_planetographic",
"false");
929 encodedFormData.addQueryItem(
"is_positive_east",
"true");
932 encodedFormData.addQueryItem(
"displayType",
"XML");
933 encodedFormData.addQueryItem(
"sort_asc",
"true");
934 encodedFormData.addQueryItem(
"sort_column",
"name");
937 encodedFormData.addQueryItem(
"approvalStatus",
"");
938 encodedFormData.addQueryItem(
"beginDate",
"");
939 encodedFormData.addQueryItem(
"continent",
"");
940 encodedFormData.addQueryItem(
"endDate",
"");
941 encodedFormData.addQueryItem(
"ethnicity",
"");
942 encodedFormData.addQueryItem(
"feature",
"");
943 encodedFormData.addQueryItem(
"featureType",
"");
944 encodedFormData.addQueryItem(
"minFeatureDiameter",
"");
945 encodedFormData.addQueryItem(
"maxFeatureDiameter",
"");
946 encodedFormData.addQueryItem(
"reference",
"");
947 encodedFormData.addQueryItem(
"system",
"");
949 encodedFormData.addQueryItem(
"target", target.toUpper());
950 encodedFormData.addQueryItem(
"easternLongitude",
951 QString::number(endLon.
degrees()));
952 encodedFormData.addQueryItem(
"westernLongitude",
953 QString::number(startLon.
degrees()));
954 encodedFormData.addQueryItem(
"northernLatitude",
955 QString::number(endLat.
degrees()));
956 encodedFormData.addQueryItem(
"southernLatitude",
957 QString::number(startLat.
degrees()));