<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic ArcGIS Runtime Offline Mapping using qt c++ widgets in ArcGIS Online Questions</title>
    <link>https://community.esri.com/t5/arcgis-online-questions/arcgis-runtime-offline-mapping-using-qt-c-widgets/m-p/1495827#M59820</link>
    <description>&lt;P&gt;Hello everyone,&lt;/P&gt;&lt;P&gt;I've developed an application in Qt using the ArcGIS Runtime SDK. While the application functions well in online mode, I now require it to operate offline.&lt;/P&gt;&lt;P&gt;After conducting some research on offline mapping, I began constructing the application using the guidance provided in this reference: &lt;A href="https://developers.arcgis.com/qt/cpp/sample-code/generate-offline-map/" target="_self"&gt;https://developers.arcgis.com/qt/cpp/sample-code/generate-offline-map/&lt;/A&gt;&amp;nbsp;.&lt;/P&gt;&lt;P&gt;I have successfully executed the application and observed several files generated in the designated location. However, I am uncertain whether these files are the correct ones for offline map functionality (please see the attached screenshot of the folder contents).&lt;/P&gt;&lt;P&gt;I have included my code for your review. Kindly advise on any mistakes I may have made.&lt;/P&gt;&lt;P&gt;Additionally, the sample code appears to only support creating offline maps for specific geometries (extents). Is it feasible to display/load maps offline based on regions or to encompass entire countries, incorporating both raster and vector files?&lt;/P&gt;&lt;P&gt;I am working with ArcGIS Free Developer License. Will offline mode works with ArcGIS Free License?&lt;/P&gt;&lt;P&gt;Thank&amp;nbsp;you!&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;LI-CODE lang="cpp"&gt;// H FILES

#ifndef OFFLINE_MAP_GENERATION_H
#define OFFLINE_MAP_GENERATION_H

#include &amp;lt;QWidget&amp;gt;
#include &amp;lt;QTemporaryDir&amp;gt;

#define DELHI_LAT 28.7041
#define DELHI_LON 77.1025

#define BENGALURU_LAT 12.9716
#define BENGALURU_LON 77.5946

#define CHENNAI_LAT 13.0843
#define CHENNAI_LON 80.2705

namespace Esri::ArcGISRuntime
{
class Map;
class MapGraphicsView;
class Portal;
class PortalItem;
class OfflineMapTask;
class Basemap;
class PortalItem;
class Portal;
class Error;
class GenerateOfflineMapJob;
class GenerateOfflineMapParameters;
class Envelope;
class Viewpoint;
class SpatialReference;
class Point;
class GeometryEngine;
} // namespace Esri::ArcGISRuntime

namespace Ui {
class offline_map_generation;
}

class offline_map_generation : public QWidget
{
Q_OBJECT

public:
explicit offline_map_generation(QWidget *parent = nullptr);
~offline_map_generation();

private slots:
void slot_portal_error(const Esri::ArcGISRuntime::Error&amp;amp; error);
void slot_portal_item_error(const Esri::ArcGISRuntime::Error&amp;amp; error);
void onGenerateOfflineMapParametersCompleted(const QUuid&amp;amp; taskId, const Esri::ArcGISRuntime::GenerateOfflineMapParameters&amp;amp; parameters);
void slot_map_offline_generator_job_has_error(const Esri::ArcGISRuntime::Error&amp;amp; error);
void slot_offline_map_generator_error_occured(const Esri::ArcGISRuntime::Error&amp;amp; error);
void on_pushButton_offlinemap_clicked();

private:
Ui::offline_map_generation *ui;

QString m_WebMapID;
Esri::ArcGISRuntime::Map *m_map = nullptr;
Esri::ArcGISRuntime::MapGraphicsView *m_mapView = nullptr;
Esri::ArcGISRuntime::OfflineMapTask *m_OfflineMapTask;
Esri::ArcGISRuntime::PortalItem *m_PortalItem;
Esri::ArcGISRuntime::Portal *m_Portal;
Esri::ArcGISRuntime::GenerateOfflineMapJob *m_offline_generator_job;

QTemporaryDir m_tempPath;

void generate_offline_map();
};


#endif // OFFLINE_MAP_GENERATION_H&lt;/LI-CODE&gt;&lt;LI-CODE lang="cpp"&gt;// CPP

#include "offline_map_generation.h"
#include "ui_offline_map_generation.h"

#include "Map.h"
#include "MapGraphicsView.h"
#include "PortalItem.h"
#include "Portal.h"
#include "OfflineMapTask.h"
#include "Error.h"
#include "GenerateOfflineMapJob.h"
#include "GenerateOfflineMapParameters.h"
#include "Viewpoint.h"
#include "TaskWatcher.h"
#include "SpatialReference.h"
#include "Point.h"
#include "Envelope.h"
#include "GeometryEngine.h"

using namespace Esri::ArcGISRuntime;

offline_map_generation::offline_map_generation(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::offline_map_generation)
{
    ui-&amp;gt;setupUi(this);

    m_WebMapID = "0807d723aa8e41428319524e75148522";
    bool loginRequired = false;
    m_Portal = new Portal(loginRequired, this);
    m_Portal-&amp;gt;load();

    m_PortalItem = new PortalItem(m_Portal, m_WebMapID, this);

    connect(m_Portal, &amp;amp;Esri::ArcGISRuntime::Portal::errorOccurred, this, &amp;amp;offline_map_generation::slot_portal_error);
    connect(m_PortalItem, &amp;amp;Esri::ArcGISRuntime::PortalItem::errorOccurred, this, &amp;amp;offline_map_generation::slot_portal_item_error);

    m_map = new Map(m_PortalItem, this);

    m_mapView = new MapGraphicsView();
    m_mapView-&amp;gt;setMap(m_map);

    m_OfflineMapTask = new OfflineMapTask(m_map, this);

    ui-&amp;gt;widget-&amp;gt;layout()-&amp;gt;addWidget(m_mapView);
}

offline_map_generation::~offline_map_generation()
{
    delete ui;
}

void offline_map_generation::slot_portal_error(const Esri::ArcGISRuntime::Error&amp;amp; error)
{
    qDebug()&amp;lt;&amp;lt;"Portal Error";
    qDebug()&amp;lt;&amp;lt;"Error Type"&amp;lt;&amp;lt;error.errorType();
    qDebug()&amp;lt;&amp;lt;error.message();
    qDebug()&amp;lt;&amp;lt;error.additionalMessage();
}

void offline_map_generation::slot_portal_item_error(const Esri::ArcGISRuntime::Error &amp;amp;error)
{
    qDebug()&amp;lt;&amp;lt;"Portal Item Error";
    qDebug()&amp;lt;&amp;lt;"Error Type"&amp;lt;&amp;lt;error.errorType();
    qDebug()&amp;lt;&amp;lt;error.message();
    qDebug()&amp;lt;&amp;lt;error.additionalMessage();
}

void offline_map_generation::onGenerateOfflineMapParametersCompleted(const QUuid&amp;amp; taskId, const Esri::ArcGISRuntime::GenerateOfflineMapParameters&amp;amp; parameters)
{
    QString Path = "D:/offline_map";
    GenerateOfflineMapJob *generateJob = NULL;

    // Adjust as needed based on your map's scale

    generateJob = m_OfflineMapTask-&amp;gt;generateOfflineMap(parameters, Path);
    if(generateJob == NULL)
    {
        qDebug()&amp;lt;&amp;lt;"Offline Map is not generated";
    }
    else
    {
        generateJob-&amp;gt;start();
        qDebug()&amp;lt;&amp;lt;"Map generated in path"&amp;lt;&amp;lt;Path;
        connect(generateJob, &amp;amp;GenerateOfflineMapJob::errorOccurred, this, &amp;amp;offline_map_generation::slot_map_offline_generator_job_has_error);
    }

}

void offline_map_generation::generate_offline_map()
{

    Point corner1 = {CHENNAI_LON, CHENNAI_LAT, SpatialReference::wgs84()};
    Point corner2 = {DELHI_LAT, DELHI_LON, SpatialReference::wgs84()};

    const Envelope extent = Envelope(corner1, corner2);
    const Envelope mapExtent = geometry_cast&amp;lt;Envelope&amp;gt;(GeometryEngine::project(extent, SpatialReference::wgs84()));

    connect(m_OfflineMapTask, &amp;amp;Esri::ArcGISRuntime::OfflineMapTask::createDefaultGenerateOfflineMapParametersCompleted, this, &amp;amp;offline_map_generation::onGenerateOfflineMapParametersCompleted);
    connect(m_OfflineMapTask, &amp;amp;Esri::ArcGISRuntime::OfflineMapTask::errorOccurred, this, &amp;amp;offline_map_generation::slot_offline_map_generator_error_occured);

    m_OfflineMapTask-&amp;gt;createDefaultGenerateOfflineMapParameters(mapExtent);
}

void offline_map_generation::on_pushButton_offlinemap_clicked()
{
    generate_offline_map();
}

void offline_map_generation::slot_map_offline_generator_job_has_error(const Esri::ArcGISRuntime::Error &amp;amp;error)
{
    qDebug()&amp;lt;&amp;lt;"Error in Job";
    qDebug()&amp;lt;&amp;lt;"Error Type"&amp;lt;&amp;lt;error.errorType();
    qDebug()&amp;lt;&amp;lt;error.message();
    qDebug()&amp;lt;&amp;lt;error.additionalMessage();
}

void offline_map_generation::slot_offline_map_generator_error_occured(const Esri::ArcGISRuntime::Error &amp;amp;error)
{
    qDebug()&amp;lt;&amp;lt;"Error in Map Generation";
    qDebug()&amp;lt;&amp;lt;"Error Type"&amp;lt;&amp;lt;error.errorType();
    qDebug()&amp;lt;&amp;lt;error.message();
    qDebug()&amp;lt;&amp;lt;error.additionalMessage();
}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="KailashSubramaniyan_0-1718966084888.png" style="width: 400px;"&gt;&lt;img src="https://community.esri.com/t5/image/serverpage/image-id/107613i44CA886134175F52/image-size/medium?v=v2&amp;amp;px=400" role="button" title="KailashSubramaniyan_0-1718966084888.png" alt="KailashSubramaniyan_0-1718966084888.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="KailashSubramaniyan_1-1718966104695.png" style="width: 400px;"&gt;&lt;img src="https://community.esri.com/t5/image/serverpage/image-id/107614i03D8E6E50755EE19/image-size/medium?v=v2&amp;amp;px=400" role="button" title="KailashSubramaniyan_1-1718966104695.png" alt="KailashSubramaniyan_1-1718966104695.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="KailashSubramaniyan_2-1718966127918.png" style="width: 400px;"&gt;&lt;img src="https://community.esri.com/t5/image/serverpage/image-id/107615i167847263F33B29B/image-size/medium?v=v2&amp;amp;px=400" role="button" title="KailashSubramaniyan_2-1718966127918.png" alt="KailashSubramaniyan_2-1718966127918.png" /&gt;&lt;/span&gt;&lt;/P&gt;</description>
    <pubDate>Fri, 21 Jun 2024 10:38:37 GMT</pubDate>
    <dc:creator>KailashSubramaniyan</dc:creator>
    <dc:date>2024-06-21T10:38:37Z</dc:date>
    <item>
      <title>ArcGIS Runtime Offline Mapping using qt c++ widgets</title>
      <link>https://community.esri.com/t5/arcgis-online-questions/arcgis-runtime-offline-mapping-using-qt-c-widgets/m-p/1495827#M59820</link>
      <description>&lt;P&gt;Hello everyone,&lt;/P&gt;&lt;P&gt;I've developed an application in Qt using the ArcGIS Runtime SDK. While the application functions well in online mode, I now require it to operate offline.&lt;/P&gt;&lt;P&gt;After conducting some research on offline mapping, I began constructing the application using the guidance provided in this reference: &lt;A href="https://developers.arcgis.com/qt/cpp/sample-code/generate-offline-map/" target="_self"&gt;https://developers.arcgis.com/qt/cpp/sample-code/generate-offline-map/&lt;/A&gt;&amp;nbsp;.&lt;/P&gt;&lt;P&gt;I have successfully executed the application and observed several files generated in the designated location. However, I am uncertain whether these files are the correct ones for offline map functionality (please see the attached screenshot of the folder contents).&lt;/P&gt;&lt;P&gt;I have included my code for your review. Kindly advise on any mistakes I may have made.&lt;/P&gt;&lt;P&gt;Additionally, the sample code appears to only support creating offline maps for specific geometries (extents). Is it feasible to display/load maps offline based on regions or to encompass entire countries, incorporating both raster and vector files?&lt;/P&gt;&lt;P&gt;I am working with ArcGIS Free Developer License. Will offline mode works with ArcGIS Free License?&lt;/P&gt;&lt;P&gt;Thank&amp;nbsp;you!&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;LI-CODE lang="cpp"&gt;// H FILES

#ifndef OFFLINE_MAP_GENERATION_H
#define OFFLINE_MAP_GENERATION_H

#include &amp;lt;QWidget&amp;gt;
#include &amp;lt;QTemporaryDir&amp;gt;

#define DELHI_LAT 28.7041
#define DELHI_LON 77.1025

#define BENGALURU_LAT 12.9716
#define BENGALURU_LON 77.5946

#define CHENNAI_LAT 13.0843
#define CHENNAI_LON 80.2705

namespace Esri::ArcGISRuntime
{
class Map;
class MapGraphicsView;
class Portal;
class PortalItem;
class OfflineMapTask;
class Basemap;
class PortalItem;
class Portal;
class Error;
class GenerateOfflineMapJob;
class GenerateOfflineMapParameters;
class Envelope;
class Viewpoint;
class SpatialReference;
class Point;
class GeometryEngine;
} // namespace Esri::ArcGISRuntime

namespace Ui {
class offline_map_generation;
}

class offline_map_generation : public QWidget
{
Q_OBJECT

public:
explicit offline_map_generation(QWidget *parent = nullptr);
~offline_map_generation();

private slots:
void slot_portal_error(const Esri::ArcGISRuntime::Error&amp;amp; error);
void slot_portal_item_error(const Esri::ArcGISRuntime::Error&amp;amp; error);
void onGenerateOfflineMapParametersCompleted(const QUuid&amp;amp; taskId, const Esri::ArcGISRuntime::GenerateOfflineMapParameters&amp;amp; parameters);
void slot_map_offline_generator_job_has_error(const Esri::ArcGISRuntime::Error&amp;amp; error);
void slot_offline_map_generator_error_occured(const Esri::ArcGISRuntime::Error&amp;amp; error);
void on_pushButton_offlinemap_clicked();

private:
Ui::offline_map_generation *ui;

QString m_WebMapID;
Esri::ArcGISRuntime::Map *m_map = nullptr;
Esri::ArcGISRuntime::MapGraphicsView *m_mapView = nullptr;
Esri::ArcGISRuntime::OfflineMapTask *m_OfflineMapTask;
Esri::ArcGISRuntime::PortalItem *m_PortalItem;
Esri::ArcGISRuntime::Portal *m_Portal;
Esri::ArcGISRuntime::GenerateOfflineMapJob *m_offline_generator_job;

QTemporaryDir m_tempPath;

void generate_offline_map();
};


#endif // OFFLINE_MAP_GENERATION_H&lt;/LI-CODE&gt;&lt;LI-CODE lang="cpp"&gt;// CPP

#include "offline_map_generation.h"
#include "ui_offline_map_generation.h"

#include "Map.h"
#include "MapGraphicsView.h"
#include "PortalItem.h"
#include "Portal.h"
#include "OfflineMapTask.h"
#include "Error.h"
#include "GenerateOfflineMapJob.h"
#include "GenerateOfflineMapParameters.h"
#include "Viewpoint.h"
#include "TaskWatcher.h"
#include "SpatialReference.h"
#include "Point.h"
#include "Envelope.h"
#include "GeometryEngine.h"

using namespace Esri::ArcGISRuntime;

offline_map_generation::offline_map_generation(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::offline_map_generation)
{
    ui-&amp;gt;setupUi(this);

    m_WebMapID = "0807d723aa8e41428319524e75148522";
    bool loginRequired = false;
    m_Portal = new Portal(loginRequired, this);
    m_Portal-&amp;gt;load();

    m_PortalItem = new PortalItem(m_Portal, m_WebMapID, this);

    connect(m_Portal, &amp;amp;Esri::ArcGISRuntime::Portal::errorOccurred, this, &amp;amp;offline_map_generation::slot_portal_error);
    connect(m_PortalItem, &amp;amp;Esri::ArcGISRuntime::PortalItem::errorOccurred, this, &amp;amp;offline_map_generation::slot_portal_item_error);

    m_map = new Map(m_PortalItem, this);

    m_mapView = new MapGraphicsView();
    m_mapView-&amp;gt;setMap(m_map);

    m_OfflineMapTask = new OfflineMapTask(m_map, this);

    ui-&amp;gt;widget-&amp;gt;layout()-&amp;gt;addWidget(m_mapView);
}

offline_map_generation::~offline_map_generation()
{
    delete ui;
}

void offline_map_generation::slot_portal_error(const Esri::ArcGISRuntime::Error&amp;amp; error)
{
    qDebug()&amp;lt;&amp;lt;"Portal Error";
    qDebug()&amp;lt;&amp;lt;"Error Type"&amp;lt;&amp;lt;error.errorType();
    qDebug()&amp;lt;&amp;lt;error.message();
    qDebug()&amp;lt;&amp;lt;error.additionalMessage();
}

void offline_map_generation::slot_portal_item_error(const Esri::ArcGISRuntime::Error &amp;amp;error)
{
    qDebug()&amp;lt;&amp;lt;"Portal Item Error";
    qDebug()&amp;lt;&amp;lt;"Error Type"&amp;lt;&amp;lt;error.errorType();
    qDebug()&amp;lt;&amp;lt;error.message();
    qDebug()&amp;lt;&amp;lt;error.additionalMessage();
}

void offline_map_generation::onGenerateOfflineMapParametersCompleted(const QUuid&amp;amp; taskId, const Esri::ArcGISRuntime::GenerateOfflineMapParameters&amp;amp; parameters)
{
    QString Path = "D:/offline_map";
    GenerateOfflineMapJob *generateJob = NULL;

    // Adjust as needed based on your map's scale

    generateJob = m_OfflineMapTask-&amp;gt;generateOfflineMap(parameters, Path);
    if(generateJob == NULL)
    {
        qDebug()&amp;lt;&amp;lt;"Offline Map is not generated";
    }
    else
    {
        generateJob-&amp;gt;start();
        qDebug()&amp;lt;&amp;lt;"Map generated in path"&amp;lt;&amp;lt;Path;
        connect(generateJob, &amp;amp;GenerateOfflineMapJob::errorOccurred, this, &amp;amp;offline_map_generation::slot_map_offline_generator_job_has_error);
    }

}

void offline_map_generation::generate_offline_map()
{

    Point corner1 = {CHENNAI_LON, CHENNAI_LAT, SpatialReference::wgs84()};
    Point corner2 = {DELHI_LAT, DELHI_LON, SpatialReference::wgs84()};

    const Envelope extent = Envelope(corner1, corner2);
    const Envelope mapExtent = geometry_cast&amp;lt;Envelope&amp;gt;(GeometryEngine::project(extent, SpatialReference::wgs84()));

    connect(m_OfflineMapTask, &amp;amp;Esri::ArcGISRuntime::OfflineMapTask::createDefaultGenerateOfflineMapParametersCompleted, this, &amp;amp;offline_map_generation::onGenerateOfflineMapParametersCompleted);
    connect(m_OfflineMapTask, &amp;amp;Esri::ArcGISRuntime::OfflineMapTask::errorOccurred, this, &amp;amp;offline_map_generation::slot_offline_map_generator_error_occured);

    m_OfflineMapTask-&amp;gt;createDefaultGenerateOfflineMapParameters(mapExtent);
}

void offline_map_generation::on_pushButton_offlinemap_clicked()
{
    generate_offline_map();
}

void offline_map_generation::slot_map_offline_generator_job_has_error(const Esri::ArcGISRuntime::Error &amp;amp;error)
{
    qDebug()&amp;lt;&amp;lt;"Error in Job";
    qDebug()&amp;lt;&amp;lt;"Error Type"&amp;lt;&amp;lt;error.errorType();
    qDebug()&amp;lt;&amp;lt;error.message();
    qDebug()&amp;lt;&amp;lt;error.additionalMessage();
}

void offline_map_generation::slot_offline_map_generator_error_occured(const Esri::ArcGISRuntime::Error &amp;amp;error)
{
    qDebug()&amp;lt;&amp;lt;"Error in Map Generation";
    qDebug()&amp;lt;&amp;lt;"Error Type"&amp;lt;&amp;lt;error.errorType();
    qDebug()&amp;lt;&amp;lt;error.message();
    qDebug()&amp;lt;&amp;lt;error.additionalMessage();
}&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="KailashSubramaniyan_0-1718966084888.png" style="width: 400px;"&gt;&lt;img src="https://community.esri.com/t5/image/serverpage/image-id/107613i44CA886134175F52/image-size/medium?v=v2&amp;amp;px=400" role="button" title="KailashSubramaniyan_0-1718966084888.png" alt="KailashSubramaniyan_0-1718966084888.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="KailashSubramaniyan_1-1718966104695.png" style="width: 400px;"&gt;&lt;img src="https://community.esri.com/t5/image/serverpage/image-id/107614i03D8E6E50755EE19/image-size/medium?v=v2&amp;amp;px=400" role="button" title="KailashSubramaniyan_1-1718966104695.png" alt="KailashSubramaniyan_1-1718966104695.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="KailashSubramaniyan_2-1718966127918.png" style="width: 400px;"&gt;&lt;img src="https://community.esri.com/t5/image/serverpage/image-id/107615i167847263F33B29B/image-size/medium?v=v2&amp;amp;px=400" role="button" title="KailashSubramaniyan_2-1718966127918.png" alt="KailashSubramaniyan_2-1718966127918.png" /&gt;&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 21 Jun 2024 10:38:37 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-online-questions/arcgis-runtime-offline-mapping-using-qt-c-widgets/m-p/1495827#M59820</guid>
      <dc:creator>KailashSubramaniyan</dc:creator>
      <dc:date>2024-06-21T10:38:37Z</dc:date>
    </item>
  </channel>
</rss>

