2017-02-05 6 views
0

私は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; 
} 

答えて

0

これを見つけました。 gdal2tiles.pyが使用するタイルファイル名の命名規則は、Google Mapsが使用するXYZスキームに基づいています。マーブルマップは、XYZスキームと反対の緯度規則を使用するTMSスキームに基づいています。 gdal2tiles.pyのソースコードを修正すると、適切なTMSファイル名でタイルが作成され、問題が解決されます。

彼のソリューションを投稿したGitHubのjeffaudiに感謝します。https://gist.github.com/jeffaudi/9da77abf254301652baa#file-gdal2tilesg-py

関連する問題