Skip to content

Commit 06ba828

Browse files
committed
Panoramax
1 parent 10268b0 commit 06ba828

19 files changed

+1834
-161
lines changed

IGNMap/IGNMap.jucer

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,22 @@
77
userNotes="KAKADU_LIB=1 : compilation avec Kakadu pour le JPEG2000
OPJ_STATIC=1 : compilation avec OpenJpeg pour le JPEG2000
">
88
<MAINGROUP id="Q5WC5m" name="IGNMap">
99
<GROUP id="{9A86AAA1-D00D-B665-F610-FBAAF5936AEC}" name="Images">
10+
<FILE id="ILbuJM" name="Carto.png" compile="0" resource="1" file="Images/Carto.png"/>
1011
<FILE id="D0Gt1C" name="GSD.png" compile="0" resource="1" file="Images/GSD.png"
1112
xcodeResource="0"/>
1213
<FILE id="bOamUH" name="IGNMapv3.png" compile="0" resource="1" file="Images/IGNMapv3.png"/>
14+
<FILE id="FUyr7r" name="Layer.png" compile="0" resource="1" file="Images/Layer.png"/>
1315
<FILE id="BcYc12" name="Move.png" compile="0" resource="1" file="Images/Move.png"/>
1416
<FILE id="qhgxQ6" name="NoSelectable.png" compile="0" resource="1"
1517
file="Images/NoSelectable.png"/>
1618
<FILE id="nUxKfx" name="NoView.png" compile="0" resource="1" file="Images/NoView.png"/>
1719
<FILE id="uDq1oD" name="Options.png" compile="0" resource="1" file="Images/Options.png"/>
20+
<FILE id="BlqJPJ" name="Ortho.png" compile="0" resource="1" file="Images/Ortho.png"/>
21+
<FILE id="An36M6" name="OrthoCarto.png" compile="0" resource="1" file="Images/OrthoCarto.png"/>
1822
<FILE id="RILn7C" name="Polygone.png" compile="0" resource="1" file="Images/Polygone.png"/>
1923
<FILE id="d2ujBd" name="Polyline.png" compile="0" resource="1" file="Images/Polyline.png"/>
2024
<FILE id="Dct1tZ" name="Rectangle.png" compile="0" resource="1" file="Images/Rectangle.png"/>
25+
<FILE id="tURk1Y" name="Scale.png" compile="0" resource="1" file="Images/Scale.png"/>
2126
<FILE id="qTB2vq" name="Search.png" compile="0" resource="1" file="Images/Search.png"/>
2227
<FILE id="C3qDH8" name="Select.png" compile="0" resource="1" file="Images/Select.png"/>
2328
<FILE id="o6hJ93" name="Select3D.png" compile="0" resource="1" file="Images/Select3D.png"/>

IGNMap/Images/Carto.png

16.3 KB
Loading

IGNMap/Images/Layer.png

5.17 KB
Loading

IGNMap/Images/Ortho.png

28.7 KB
Loading

IGNMap/Images/OrthoCarto.png

26.9 KB
Loading

IGNMap/Images/Scale.png

5.03 KB
Loading

IGNMap/JuceLibraryCode/BinaryData.cpp

Lines changed: 1282 additions & 34 deletions
Large diffs are not rendered by default.

IGNMap/JuceLibraryCode/BinaryData.h

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,18 @@
88

99
namespace BinaryData
1010
{
11+
extern const char* Carto_png;
12+
const int Carto_pngSize = 16681;
13+
1114
extern const char* GSD_png;
1215
const int GSD_pngSize = 667;
1316

1417
extern const char* IGNMapv3_png;
1518
const int IGNMapv3_pngSize = 195348;
1619

20+
extern const char* Layer_png;
21+
const int Layer_pngSize = 5289;
22+
1723
extern const char* Move_png;
1824
const int Move_pngSize = 5869;
1925

@@ -26,6 +32,12 @@ namespace BinaryData
2632
extern const char* Options_png;
2733
const int Options_pngSize = 5176;
2834

35+
extern const char* Ortho_png;
36+
const int Ortho_pngSize = 29419;
37+
38+
extern const char* OrthoCarto_png;
39+
const int OrthoCarto_pngSize = 27533;
40+
2941
extern const char* Polygone_png;
3042
const int Polygone_pngSize = 609;
3143

@@ -35,6 +47,9 @@ namespace BinaryData
3547
extern const char* Rectangle_png;
3648
const int Rectangle_pngSize = 619;
3749

50+
extern const char* Scale_png;
51+
const int Scale_pngSize = 5155;
52+
3853
extern const char* Search_png;
3954
const int Search_pngSize = 961;
4055

@@ -60,7 +75,7 @@ namespace BinaryData
6075
const int Translation_fr_txtSize = 6623;
6176

6277
// Number of elements in the namedResourceList and originalFileNames arrays.
63-
const int namedResourceListSize = 17;
78+
const int namedResourceListSize = 22;
6479

6580
// Points to the start of a list of resource names.
6681
extern const char* namedResourceList[];

IGNMap/Source/MainComponent.cpp

Lines changed: 91 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ juce::PopupMenu MainComponent::getMenuForIndex(int menuIndex, const juce::String
247247
menu.addCommandItem(&m_CommandManager, CommandIDs::menuSynchronize);
248248
menu.addCommandItem(&m_CommandManager, CommandIDs::menuToolSentinel);
249249
menu.addCommandItem(&m_CommandManager, CommandIDs::menuToolZoom);
250-
menu.addCommandItem(&m_CommandManager, CommandIDs::menuToolStac);
250+
menu.addCommandItem(&m_CommandManager, CommandIDs::menuToolPanoramax);
251251
menu.addCommandItem(&m_CommandManager, CommandIDs::menuToolStereo);
252252
menu.addItem(1000, "Test");
253253
}
@@ -265,15 +265,6 @@ juce::PopupMenu MainComponent::getMenuForIndex(int menuIndex, const juce::String
265265
PanelSubMenu.addCommandItem(&m_CommandManager, CommandIDs::menuShowSelection);
266266
menu.addSubMenu(juce::translate("Panels"), PanelSubMenu);
267267
menu.addSeparator();
268-
menu.addCommandItem(&m_CommandManager, CommandIDs::menuZoomTotal);
269-
juce::PopupMenu ScaleSubMenu;
270-
ScaleSubMenu.addCommandItem(&m_CommandManager, CommandIDs::menuScale1k);
271-
ScaleSubMenu.addCommandItem(&m_CommandManager, CommandIDs::menuScale10k);
272-
ScaleSubMenu.addCommandItem(&m_CommandManager, CommandIDs::menuScale25k);
273-
ScaleSubMenu.addCommandItem(&m_CommandManager, CommandIDs::menuScale100k);
274-
ScaleSubMenu.addCommandItem(&m_CommandManager, CommandIDs::menuScale250k);
275-
menu.addSubMenu(juce::translate("Scale"), ScaleSubMenu);
276-
menu.addSeparator();
277268
menu.addCommandItem(&m_CommandManager, CommandIDs::menuGoogle);
278269
menu.addCommandItem(&m_CommandManager, CommandIDs::menuBing);
279270
}
@@ -309,7 +300,6 @@ void MainComponent::getAllCommands(juce::Array<juce::CommandID>& c)
309300
CommandIDs::menuImportImageFile, CommandIDs::menuImportImageFolder, CommandIDs::menuImportDtmFile,
310301
CommandIDs::menuImportDtmFolder, CommandIDs::menuImportLasFile, CommandIDs::menuImportLasFolder,
311302
CommandIDs::menuExportVector, CommandIDs::menuExportImage, CommandIDs::menuExportLas,
312-
CommandIDs::menuZoomTotal,
313303
CommandIDs::menuTest, CommandIDs::menuShowSidePanel,
314304
CommandIDs::menuShowVectorLayers, CommandIDs::menuShowImageLayers, CommandIDs::menuShowDtmLayers,
315305
CommandIDs::menuShowLasLayers, CommandIDs::menuShowSelection, CommandIDs::menuShowImageOptions, CommandIDs::menuShowAnnotations,
@@ -318,9 +308,8 @@ void MainComponent::getAllCommands(juce::Array<juce::CommandID>& c)
318308
CommandIDs::menuAddGeoportailOrthophotoIRC, CommandIDs::menuAddGeoportailPlanIGN, CommandIDs::menuAddGeoportailParcelExpress,
319309
CommandIDs::menuAddGeoportailSCAN50Histo,
320310
CommandIDs::menuAddWmtsServer, CommandIDs::menuAddTmsServer, CommandIDs::menuSynchronize,
321-
CommandIDs::menuScale1k, CommandIDs::menuScale10k, CommandIDs::menuScale25k, CommandIDs::menuScale100k, CommandIDs::menuScale250k,
322311
CommandIDs::menuGoogle, CommandIDs::menuBing,
323-
CommandIDs::menuToolSentinel, CommandIDs::menuToolZoom, CommandIDs::menuToolStac, CommandIDs::menuToolStereo,
312+
CommandIDs::menuToolSentinel, CommandIDs::menuToolZoom, CommandIDs::menuToolPanoramax, CommandIDs::menuToolStereo,
324313
CommandIDs::menuHelp, CommandIDs::menuAbout };
325314
c.addArray(commands);
326315
}
@@ -431,24 +420,6 @@ void MainComponent::getCommandInfo(juce::CommandID commandID, juce::ApplicationC
431420
case CommandIDs::menuExportLas:
432421
result.setInfo(juce::translate("Export LAS"), juce::translate("Export LAS"), "Menu", 0);
433422
break;
434-
case CommandIDs::menuZoomTotal:
435-
result.setInfo(juce::translate("Zoom total"), juce::translate("Zoom total"), "Menu", 0);
436-
break;
437-
case CommandIDs::menuScale1k:
438-
result.setInfo(juce::translate("1 : 1000"), juce::translate("1 : 1000"), "Menu", 0);
439-
break;
440-
case CommandIDs::menuScale10k:
441-
result.setInfo(juce::translate("1 : 10 000"), juce::translate("1 : 10 000"), "Menu", 0);
442-
break;
443-
case CommandIDs::menuScale25k:
444-
result.setInfo(juce::translate("1 : 25 000"), juce::translate("1 : 25 000"), "Menu", 0);
445-
break;
446-
case CommandIDs::menuScale100k:
447-
result.setInfo(juce::translate("1 : 100 000"), juce::translate("1 : 100 000"), "Menu", 0);
448-
break;
449-
case CommandIDs::menuScale250k:
450-
result.setInfo(juce::translate("1 : 250 000"), juce::translate("1 : 250 000"), "Menu", 0);
451-
break;
452423
case CommandIDs::menuShowSidePanel:
453424
result.setInfo(juce::translate("View Side Panel"), juce::translate("View Side Panel"), "Menu", 0);
454425
if (m_Panel.get() != nullptr)
@@ -515,8 +486,8 @@ void MainComponent::getCommandInfo(juce::CommandID commandID, juce::ApplicationC
515486
case CommandIDs::menuToolZoom:
516487
result.setInfo(juce::translate("Zoom"), juce::translate("Zoom"), "Menu", 0);
517488
break;
518-
case CommandIDs::menuToolStac:
519-
result.setInfo(juce::translate("Stac"), juce::translate("Stac"), "Menu", 0);
489+
case CommandIDs::menuToolPanoramax:
490+
result.setInfo(juce::translate("Panoramax"), juce::translate("Panoramax"), "Menu", 0);
520491
break;
521492
case CommandIDs::menuToolStereo:
522493
result.setInfo(juce::translate("Stereoscopic View"), juce::translate("Stereoscopic View"), "Menu", 0);
@@ -636,24 +607,6 @@ bool MainComponent::perform(const InvocationInfo& info)
636607
case CommandIDs::menuExportLas:
637608
ExportLas();
638609
break;
639-
case CommandIDs::menuZoomTotal:
640-
m_MapView.get()->ZoomWorld();
641-
break;
642-
case CommandIDs::menuScale1k:
643-
m_MapView.get()->ZoomScale(1000);
644-
break;
645-
case CommandIDs::menuScale10k:
646-
m_MapView.get()->ZoomScale(10000);
647-
break;
648-
case CommandIDs::menuScale25k:
649-
m_MapView.get()->ZoomScale(25000);
650-
break;
651-
case CommandIDs::menuScale100k:
652-
m_MapView.get()->ZoomScale(100000);
653-
break;
654-
case CommandIDs::menuScale250k:
655-
m_MapView.get()->ZoomScale(250000);
656-
break;
657610
case CommandIDs::menuShowSidePanel:
658611
return ShowHideSidePanel();
659612
case CommandIDs::menuShow3DViewer:
@@ -704,8 +657,8 @@ bool MainComponent::perform(const InvocationInfo& info)
704657
case CommandIDs::menuToolZoom:
705658
OpenTool("Zoom");
706659
break;
707-
case CommandIDs::menuToolStac:
708-
OpenTool("Stac");
660+
case CommandIDs::menuToolPanoramax:
661+
OpenPanoramax();
709662
break;
710663
case CommandIDs::menuToolStereo:
711664
OpenTool("Stereo");
@@ -950,7 +903,7 @@ void MainComponent::buttonClicked(juce::Button* button)
950903
juce::ToolbarButton* tlb = dynamic_cast<juce::ToolbarButton*>(button);
951904
if (tlb == nullptr)
952905
return;
953-
switch (tlb->getItemId()) {
906+
switch (tlb->getItemId()) {
954907
case MainComponentToolbarFactory::Move: m_MapView.get()->SetMouseMode(MapView::Move); break;
955908
case MainComponentToolbarFactory::Select: m_MapView.get()->SetMouseMode(MapView::Select); break;
956909
case MainComponentToolbarFactory::Zoom: m_MapView.get()->SetMouseMode(MapView::Zoom); break;
@@ -961,7 +914,20 @@ void MainComponent::buttonClicked(juce::Button* button)
961914
case MainComponentToolbarFactory::Text: m_MapView.get()->SetMouseMode(MapView::Text); break;
962915
case MainComponentToolbarFactory::Gsd: m_MapView.get()->ZoomGsd(tlb->getButtonText().getDoubleValue()); break;
963916
case MainComponentToolbarFactory::Search: Search(tlb->getButtonText()); tlb->setButtonText(""); break;
917+
case MainComponentToolbarFactory::Layer: SetDefaultLayers(tlb->getButtonText()); tlb->setButtonText(""); break;
918+
case MainComponentToolbarFactory::Scale:
919+
{
920+
juce::String scale = tlb->getButtonText();
921+
tlb->setButtonText("");
922+
if (scale.isNotEmpty()) {
923+
if (scale == "Total")
924+
m_MapView.get()->ZoomWorld();
925+
else
926+
m_MapView.get()->ZoomScale(scale.getDoubleValue());
927+
}
928+
break;
964929
}
930+
}
965931
}
966932

967933
//==============================================================================
@@ -2028,6 +1994,42 @@ void MainComponent::Search(juce::String query)
20281994
m_VectorViewer.get()->RenameAndViewLastClass(query);
20291995
}
20301996

1997+
//==============================================================================
1998+
// Fixe les couches par defaut
1999+
//==============================================================================
2000+
void MainComponent::SetDefaultLayers(juce::String layers)
2001+
{
2002+
if (layers.isEmpty())
2003+
return;
2004+
m_MapView.get()->setMouseCursor(juce::MouseCursor(juce::MouseCursor::WaitCursor));
2005+
m_GeoBase.ClearSelection();
2006+
actionListenerCallback("UpdateSelectFeatures");
2007+
if (layers == "Empty") {
2008+
m_GeoBase.RemoveClass("MVT", "https://data.geopf.fr/tms/1.0.0/PLAN.IGN");
2009+
m_GeoBase.RemoveClass("WMTS", "ORTHOIMAGERY.ORTHOPHOTOS");
2010+
m_ImageViewer.get()->SetBase(&m_GeoBase);
2011+
actionListenerCallback("UpdateRaster");
2012+
}
2013+
if (layers == "Ortho") {
2014+
m_GeoBase.RemoveClass("MVT", "https://data.geopf.fr/tms/1.0.0/PLAN.IGN");
2015+
AddWmtsServer("data.geopf.fr/wmts", "ORTHOIMAGERY.ORTHOPHOTOS", "PM_0_19", "jpeg", 256, 256, 20);
2016+
}
2017+
if (layers == "Carto") {
2018+
m_GeoBase.RemoveClass("WMTS", "ORTHOIMAGERY.ORTHOPHOTOS");
2019+
AddMvtServer("https://data.geopf.fr/tms/1.0.0/PLAN.IGN", "pbf",
2020+
"https://data.geopf.fr/annexes/ressources/vectorTiles/styles/PLAN.IGN/standard.json", 256, 256, 18);
2021+
}
2022+
if (layers == "Ortho+Carto") {
2023+
AddWmtsServer("data.geopf.fr/wmts", "ORTHOIMAGERY.ORTHOPHOTOS", "PM_0_19", "jpeg", 256, 256, 20);
2024+
m_GeoBase.RemoveClass("MVT", "https://data.geopf.fr/tms/1.0.0/PLAN.IGN");
2025+
AddMvtServer("https://data.geopf.fr/tms/1.0.0/PLAN.IGN", "pbf",
2026+
"https://data.geopf.fr/annexes/ressources/vectorTiles/styles/PLAN.IGN/toponymes.json", 256, 256, 18);
2027+
}
2028+
2029+
m_MapView.get()->setMouseCursor(juce::MouseCursor(juce::MouseCursor::NormalCursor));
2030+
}
2031+
2032+
20312033
//==============================================================================
20322034
// Ouverture d'une fenetre outil
20332035
//==============================================================================
@@ -2045,8 +2047,8 @@ ToolWindow* MainComponent::OpenTool(juce::String toolName)
20452047
tool = new SentinelViewer("Sentinel", juce::Colours::grey, juce::DocumentWindow::allButtons, this, &m_GeoBase);
20462048
if (toolName == "Zoom")
20472049
tool = new ZoomViewer("Zoom", juce::Colours::grey, juce::DocumentWindow::allButtons, this, &m_GeoBase);
2048-
if (toolName == "Stac")
2049-
tool = new StacViewer("Stac", juce::Colours::grey, juce::DocumentWindow::allButtons, this, &m_GeoBase);
2050+
if (toolName == "Panoramax")
2051+
tool = new StacViewer("Panoramax", juce::Colours::grey, juce::DocumentWindow::allButtons, this, &m_GeoBase);
20502052
if (toolName == "Stereo")
20512053
tool = new StereoViewer("Stereo", juce::Colours::grey, juce::DocumentWindow::allButtons, this, &m_GeoBase);
20522054

@@ -2057,4 +2059,37 @@ ToolWindow* MainComponent::OpenTool(juce::String toolName)
20572059
}
20582060

20592061
return nullptr;
2062+
}
2063+
2064+
//==============================================================================
2065+
// Ouverture de l'outil Panoramax
2066+
//==============================================================================
2067+
void MainComponent::OpenPanoramax()
2068+
{
2069+
/* Connexion Panoramax */
2070+
std::string url = "https://panoramax.ign.fr/api/map";
2071+
if (m_GeoBase.Class("Panoramax", url.c_str()) == nullptr) {
2072+
XGeoPref pref;
2073+
XFrame F, geoF = XGeoProjection::FrameGeo(pref.Projection());
2074+
pref.ConvertDeg(XGeoProjection::RGF93, pref.Projection(), geoF.Xmin, geoF.Ymin, F.Xmin, F.Ymin);
2075+
pref.ConvertDeg(XGeoProjection::RGF93, pref.Projection(), geoF.Xmax, geoF.Ymax, F.Xmax, F.Ymax);
2076+
2077+
std::string ext = "mvt";
2078+
std::string style = "https://panoramax.ign.fr/api/map/style.json";
2079+
int zoom = 15;
2080+
2081+
MvtLayer* mvt = new MvtLayer(url, ext, 256, 256, zoom);
2082+
mvt->SetFrame(F);
2083+
mvt->LoadStyle(style);
2084+
if (!GeoTools::RegisterObject(&m_GeoBase, mvt, "Panoramax", "Panoramax", url)) {
2085+
delete mvt;
2086+
return;
2087+
}
2088+
2089+
m_MapView.get()->SetFrame(m_GeoBase.Frame());
2090+
m_MapView.get()->RenderMap(false, true, false, false, false, true);
2091+
m_ImageViewer.get()->SetBase(&m_GeoBase);
2092+
}
2093+
2094+
OpenTool("Panoramax");
20602095
}

IGNMap/Source/MainComponent.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,14 @@ class MainComponent : public juce::Component,
5353
menuImportVectorFolder, menuImportVectorFile, menuImportImageFolder, menuImportImageFile,
5454
menuImportDtmFolder, menuImportDtmFile, menuImportLasFile, menuImportLasFolder,
5555
menuExportVector, menuExportImage, menuExportLas,
56-
menuZoomTotal, menuScale1k, menuScale10k, menuScale25k, menuScale100k, menuScale250k,
5756
menuShowSidePanel, menuShow3DViewer,
5857
menuShowVectorLayers, menuShowImageLayers, menuShowDtmLayers, menuShowLasLayers, menuShowSelection, menuShowImageOptions,
5958
menuShowAnnotations, menuAddOSM, menuAddPlanIGN, menuAddWmtsServer, menuAddTmsServer,
6059
menuAddGeoportailOrthophoto, menuAddGeoportailOrthophotoIRC, menuAddGeoportailOrthohisto, menuAddGeoportailSatellite,
6160
menuAddGeoportailCartes, menuAddGeoportailPlanIGN, menuAddGeoportailParcelExpress, menuAddGeoportailSCAN50Histo,
6261
menuMove, menuSelect, menuZoom,
6362
menuSynchronize, menuGoogle, menuBing,
64-
menuToolSentinel, menuToolZoom, menuToolStac, menuToolStereo,
63+
menuToolSentinel, menuToolZoom, menuToolPanoramax, menuToolStereo,
6564
menuHelp, menuAbout
6665
};
6766

@@ -99,6 +98,8 @@ class MainComponent : public juce::Component,
9998

10099
// Recherche
101100
void Search(juce::String query);
101+
// Layers par defaut
102+
void SetDefaultLayers(juce::String layers);
102103

103104
private:
104105
juce::ApplicationCommandManager m_CommandManager;
@@ -164,6 +165,7 @@ class MainComponent : public juce::Component,
164165
void Test();
165166
ToolWindow* OpenTool(juce::String toolName);
166167
void ShowProperties(uint32_t index);
168+
void OpenPanoramax();
167169

168170
void Synchronize();
169171
void connectionMade() override;

0 commit comments

Comments
 (0)