1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
// [WriteFile Name=OpenMobileMap_MapPackage, Category=Maps]// [Legal]// Copyright 2016 Esri.// Licensed under the Apache License, Version 2.0 (the "License");// you may not use this file except in compliance with the License.// You may obtain a copy of the License at// http://www.apache.org/licenses/LICENSE-2.0// Unless required by applicable law or agreed to in writing, software// distributed under the License is distributed on an "AS IS" BASIS,// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.// See the License for the specific language governing permissions and// limitations under the License.// [Legal]#ifdef PCH_BUILD#include"pch.hpp"#endif// PCH_BUILD#include"OpenMobileMap_MapPackage.h"#include"Basemap.h"#include"Error.h"#include"MapQuickView.h"#include"MobileMapPackage.h"#include<QtCore/qglobal.h>#include<QStandardPaths>usingnamespace Esri::ArcGISRuntime;
// helper method to get cross platform data pathnamespace{
QString defaultDataPath(){
QString dataPath;
#ifdef Q_OS_IOS dataPath = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);
#else dataPath = QStandardPaths::writableLocation(QStandardPaths::HomeLocation);
#endifreturn dataPath;
}
// sample MMPK locationconst QString sampleFileYellowstone {"/ArcGIS/Runtime/Data/mmpk/Yellowstone.mmpk"};
} // namespaceOpenMobileMap_MapPackage::OpenMobileMap_MapPackage(QQuickItem* parent) :
QQuickItem(parent)
{
// connect to the Mobile Map Package instance to know when errors occurconnect(MobileMapPackage::instance(), &MobileMapPackage::errorOccurred,
[](const Error& e)
{
if (e.isEmpty())
{
return;
}
qDebug() << QString("Error: %1 %2").arg(e.message(), e.additionalMessage());
});
}
OpenMobileMap_MapPackage::~OpenMobileMap_MapPackage() = default;
voidOpenMobileMap_MapPackage::init(){
qmlRegisterType<MapQuickView>("Esri.Samples", 1, 0, "MapView");
qmlRegisterType<OpenMobileMap_MapPackage>("Esri.Samples", 1, 0, "OpenMobileMap_MapPackageSample");
}
voidOpenMobileMap_MapPackage::componentComplete(){
QQuickItem::componentComplete();
// find QML MapView component m_mapView = findChild<MapQuickView*>("mapView");
// create the MMPK data path// data is downloaded automatically by the sample viewer app. Instructions to download// separately are specified in the readme.const QString dataPath = defaultDataPath() + sampleFileYellowstone;
// Load the MMPKcreateMapPackage(dataPath);
}
// create map packagevoidOpenMobileMap_MapPackage::createMapPackage(const QString& path){
//! [open mobile map package cpp snippet]// instatiate a mobile map package m_mobileMapPackage = newMobileMapPackage(path, this);
// wait for the mobile map package to loadconnect(m_mobileMapPackage, &MobileMapPackage::doneLoading, this, [this](const Error& error)
{
if (!error.isEmpty())
{
qDebug() << QString("Package load error: %1 %2").arg(error.message(), error.additionalMessage());
return;
}
if (!m_mobileMapPackage || !m_mapView || m_mobileMapPackage->maps().isEmpty())
{
return;
}
// The package contains a list of maps that could be shown in the UI for selection.// For simplicity, obtain the first map in the list of maps.// set the map on the map view to display m_mapView->setMap(m_mobileMapPackage->maps().at(0));
});
m_mobileMapPackage->load();
//! [open mobile map package cpp snippet]}