私はQt 5.7とMarble Mapsウィジェットを使用してアプリケーションを構築していますので、FAAの断面図をアプリケーションに表示する必要があります(無料ダウンロード:https://www.faa.gov/air_traffic/flight_info/aeronav/digital_products/vfr/ )。これらの図はGEO-TIFF形式であり、適切に地理参照されています。マーブルマップは逆の緯度でタイル張りのFAA断面図(地図)を表示します
これらのマップを大理石で表示するための最初の手順は、それらをタイルに変換することです。私はgdaltranslateとgdal2tiles.pyを使ってこれをやっています。モントリオールのセクションチャートでこれらのユーティリティを実行した後、結果はhttp://flt.l5.ca/maps/sectionalsというフォルダに表示されます。
Googleマップの上にグラフを非常に正確に重ねることができるため、変換プロセスは成功したようです(例:http://flt.l5.ca/maps/sectionals/googlemaps.html)。
は大理石で地図を表示するためには、私は次のDGMLファイル作成:
<?xml version="1.0" encoding="UTF-8"?>
<dgml xmlns="http://edu.kde.org/marble/dgml/2.0">
<document>
<head>
<license short="© FAA">© FAA</license>
<name>FAA Sectionals</name>
<target>earth</target>
<theme>sectionals</theme>
<icon pixmap="preview.png"/>
<visible>true</visible>
<description><![CDATA[<p>FAA Sectional Charts</p><p>FAA-provided sectional VFR charts for the USA.</p>]]></description>
<zoom>
<minimum> 900 </minimum>
<maximum> 3500 </maximum>
<discrete> true </discrete>
</zoom>
</head>
<map bgcolor="#000000">
<canvas/>
<target/>
<layer name="sectionals" backend="texture">
<texture name="faa_data" expire="604800">
<sourcedir format="PNG"> earth/sectionals </sourcedir>
<tileSize width="256" height="256"/>
<storageLayout levelZeroColumns="1" levelZeroRows="1" maximumTileLevel="19" mode="OpenStreetMap"/>
<projection name="Mercator"/>
<downloadUrl protocol="http" host="flt.l5.ca" path="/maps/sectionals"/>
</texture>
</layer>
</map>
<settings>
<property name="coordinate-grid">
<value>true</value>
<available>true</available>
</property>
<property name="overviewmap">
<value>true</value>
<available>true</available>
</property>
<property name="compass">
<value>true</value>
<available>true</available>
</property>
<property name="scalebar">
<value>true</value>
<available>true</available>
</property>
</settings>
</document>
</dgml>
マップは大理石地図に表示さんが、間違った半球上、すなわち代わりの上部に表示されていますモントリオール約45Nの緯度、それは同じ経度で反対の緯度(45S)で南アメリカに現れます。
Googleマップなどの他のマッピングサービスが適切な場所に配置されていることを考えれば、これはどのように可能ですか?
QtのMarbleWidgetにマップを表示するための非常に簡単なコードは以下のとおりです。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "marble/MarbleWidget.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
Marble::MarbleWidget *mapWidget = ui->MarbleWidget;
mapWidget->setProjection(Marble::Mercator);
mapWidget->setMapThemeId(QStringLiteral("earth/sectionals/sectionals.dgml"));
mapWidget->setShowOverviewMap(false);
mapWidget->setShowScaleBar(false);
mapWidget->setShowCompass(false);
mapWidget->setMapQualityForViewContext(Marble::PrintQuality, Marble::Still);
mapWidget->setMapQualityForViewContext(Marble::LowQuality, Marble::Animation);
}
MainWindow::~MainWindow()
{
delete ui;
}