2017-02-05 9 views
0

Qt 5.7 및 대리석지도 위젯으로 앱을 제작 중이며 앱에 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지도에서 사용하는 XYZ 체계를 기반으로합니다. 대리석지도는 XYZ 체계와 반대 위도 관습을 사용하는 TMS 체계에 기반합니다. gdal2tiles.py의 소스 코드를 수정하면 적절한 TMS 파일 이름으로 타일이 생성되고 문제가 해결됩니다.

그의 솔루션을 게시 한 GitHub의 jeffaudi에게 감사 : https://gist.github.com/jeffaudi/9da77abf254301652baa#file-gdal2tilesg-py