{"id":1579162,"date":"2022-05-27T05:00:42","date_gmt":"2022-05-27T12:00:42","guid":{"rendered":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=1579162"},"modified":"2022-06-21T08:36:38","modified_gmt":"2022-06-21T15:36:38","slug":"5-tips-and-tricks-to-streamline-your-offline-maps","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps","title":{"rendered":"5 tips and tricks to streamline your offline maps"},"author":308752,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[738191],"tags":[23711,586441,760912],"industry":[],"product":[36871,36881,36891,36901,36911,36921,763892,36601],"class_list":["post-1579162","blog","type-blog","status-publish","format-standard","hentry","category-developers","tag-mobile","tag-offline-maps","tag-work-offline","product-api-net-win-desktop","product-api-for-android","product-api-ios","product-api-java","product-api-mac-osx","product-api-cqt","product-runtime-sdk","product-developers"],"acf":{"authors":[{"ID":308752,"user_firstname":"Luke","user_lastname":"Smallwood","nickname":"Luke Smallwood","user_nicename":"lsmallwood","display_name":"Luke Smallwood","user_email":"LSmallwood@esri.com","user_url":"","user_registered":"2022-04-22 16:06:24","user_description":"Luke is a Software Developer with the ArcGIS Runtime team. He works primarily on the Runtime SDK for Qt, offline workflows and geotriggers.","user_avatar":"<img alt='' src='https:\/\/secure.gravatar.com\/avatar\/28b7daeb6927c17c108f9ea587ff471725e502f3db0125f40968962ee27570b4?s=96&#038;d=blank&#038;r=g' srcset='https:\/\/secure.gravatar.com\/avatar\/28b7daeb6927c17c108f9ea587ff471725e502f3db0125f40968962ee27570b4?s=192&#038;d=blank&#038;r=g 2x' class='avatar avatar-96 photo' height='96' width='96' loading='lazy' decoding='async'\/>"}],"short_description":"This article gives some advice on how to get the most out of your offline workflows with ArcGIS Runtime.","flexible_content":[{"acf_fc_layout":"content","content":"<p><span data-contrast=\"auto\"><i>This is the first of several blog posts discussing offline workflows for developers using ArcGIS Runtime. In this blog, I will share tips and tricks to help you optimize your offline Runtime apps. Code examples are written in <a href=\"https:\/\/developers.arcgis.com\/qt\/\">Qt C++<\/a> but the concepts apply to Runtime APIs.<\/i><\/span><\/p>\n<p><span data-contrast=\"auto\">Taking maps offline is a key workflow for ArcGIS Runtime. If you&#8217;re developing an app that needs to work wherever your users are, regardless of network connectivity, read on. You can do many things when your app is offline: visualization, editing, navigation, analysis, running <a href=\"https:\/\/developers.arcgis.com\/qt\/device-location\/work-with-geotriggers\/\">geotriggers<\/a>, and more. But with so many possible workflows, how can you be sure that you are getting the most out of your offline data?<\/span><\/p>\n"},{"acf_fc_layout":"image","image":{"ID":1579342,"id":1579342,"title":"loss_of_network","filename":"loss_of_network.jpg","filesize":10151,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/loss_of_network.jpg","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\/loss_of_network","alt":"Loss of network","author":"308752","description":"","caption":"","name":"loss_of_network","status":"inherit","uploaded_to":1579162,"date":"2022-05-18 11:18:15","modified":"2022-05-18 11:18:38","menu_order":0,"mime_type":"image\/jpeg","type":"image","subtype":"jpeg","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":334,"height":341,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/loss_of_network-213x200.jpg","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/loss_of_network.jpg","medium-width":256,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/loss_of_network.jpg","medium_large-width":334,"medium_large-height":341,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/loss_of_network.jpg","large-width":334,"large-height":341,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/loss_of_network.jpg","1536x1536-width":334,"1536x1536-height":341,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/loss_of_network.jpg","2048x2048-width":334,"2048x2048-height":341,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/loss_of_network.jpg","card_image-width":334,"card_image-height":341,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/loss_of_network.jpg","wide_image-width":334,"wide_image-height":341}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h1><span data-contrast=\"none\">Introduction<\/span><\/h1>\n<p><span data-contrast=\"none\">The <\/span><a href=\"https:\/\/developers.arcgis.com\/documentation\/mapping-apis-and-services\/offline\/\"><span data-contrast=\"none\">Building offline applications guide<\/span><\/a><span data-contrast=\"none\"> gives an introduction to offline apps so I&#8217;m not going to spend too much time covering the basics in this article. Mostly we&#8217;ll be talking about the <\/span><span data-contrast=\"none\"><a href=\"https:\/\/developers.arcgis.com\/qt\/cpp\/api-reference\/esri-arcgisruntime-offlinemaptask.html\">OfflineMapTask<\/a> <\/span><span data-contrast=\"none\">and the <\/span><a href=\"https:\/\/developers.arcgis.com\/qt\/cpp\/api-reference\/esri-arcgisruntime-offlinemapsynctask.html\"><span data-contrast=\"none\">OfflineMapSyncTask<\/span><\/a><span data-contrast=\"none\"> for taking maps offline with Runtime. A lot of advice in this article focuses on the design of your data or tweaking the <\/span><a href=\"https:\/\/developers.arcgis.com\/qt\/cpp\/api-reference\/esri-arcgisruntime-generateofflinemapparameters.html\"><span data-contrast=\"none\">GenerateOfflineMapParameters<\/span><\/a><span data-contrast=\"none\"> or <\/span><a href=\"https:\/\/developers.arcgis.com\/qt\/cpp\/api-reference\/esri-arcgisruntime-downloadpreplannedofflinemapparameters.html\"><span data-contrast=\"none\">DownloadPreplannedOfflineMapParameters<\/span><\/a><span data-contrast=\"none\"> that you use to set up your offline jobs. There are five areas that can really help boost your offline workflows:<\/span><\/p>\n<ol>\n<li><span data-contrast=\"none\">Don&#8217;t take data offline.<\/span><\/li>\n<li><span data-contrast=\"none\">Avoid duplicating effort.<\/span><\/li>\n<li><span data-contrast=\"none\">Think about sync.<\/span><\/li>\n<li><span data-contrast=\"none\">Work with services.<\/span><\/li>\n<li><span data-contrast=\"none\">Don&#8217;t forget to tidy up.<\/span><\/li>\n<\/ol>\n<h1>1. Don&#8217;t take data offline<\/h1>\n<p><span data-contrast=\"none\">That&#8217;s right &#8211; if you don&#8217;t need to take data offline, don&#8217;t do it. The number one issue we hear from users is that their offline data is BIG. And big means slow to download and lots of disk space on your device. But, I hear you say, isn&#8217;t this article supposed to be about taking data offline? Let&#8217;s look at some strategies to make sure you&#8217;re only taking the data you really need.<\/span><\/p>\n"},{"acf_fc_layout":"image","image":{"ID":1579372,"id":1579372,"title":"no_offline_basemap","filename":"no_offline_basemap.png","filesize":73634,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/no_offline_basemap.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\/no_offline_basemap","alt":"Online map with basemap taken offline to device with no basemap","author":"308752","description":"","caption":"","name":"no_offline_basemap","status":"inherit","uploaded_to":1579162,"date":"2022-05-18 11:25:17","modified":"2022-05-18 11:25:44","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":2026,"height":1268,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/no_offline_basemap-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/no_offline_basemap.png","medium-width":417,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/no_offline_basemap.png","medium_large-width":768,"medium_large-height":481,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/no_offline_basemap.png","large-width":1726,"large-height":1080,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/no_offline_basemap-1536x961.png","1536x1536-width":1536,"1536x1536-height":961,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/no_offline_basemap.png","2048x2048-width":2026,"2048x2048-height":1268,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/no_offline_basemap-743x465.png","card_image-width":743,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/no_offline_basemap-1726x1080.png","wide_image-width":1726,"wide_image-height":1080}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h2><span data-contrast=\"none\">Leave data online<\/span><\/h2>\n<p><span data-contrast=\"none\">With data that is not business critical, or changes frequently, let those layers remain online for when you do have network coverage. Think of a layer with real-time weather reports or a super high quality basemap that covers the whole globe. These give you great context for your app, but do you really need them all the time? Rather than making all your layers sync enabled, or skipping layers that can&#8217;t be taken offline, you can leave some as online only. These layers can still be included in your offline map by setting the <code>onlineOnlyServicesOption <\/code> in the <code>GenerateOfflineMapParameters<\/code>. That way your most important data is available offline, but you can still have access to your extra online-only layers when you have connectivity.<\/span><\/p>\n<div>\n<pre style=\"background: #f5f5f5; overflow: auto; width: auto; padding: 0.2em 0.6em 0.2em 40px; border-style: solid; border-color: gray; border-width: 0em 0em 0em 0.2em; margin: 0px; line-height: 125%; font-size: 15px;\">GenerateOfflineMapParameters myParams;\r\nmyParams.setOnlineOnlyServicesOption(OnlineOnlyServicesOption::Include);\r\n<\/pre>\n<\/div>\n"},{"acf_fc_layout":"quote","author_name":"","author_profession_organization":"","image":false,"text":"<p style=\"margin-bottom: 10px;\">Don't download all data in your offline maps app if you can leave it online<\/p><a href=\"https:\/\/twitter.com\/intent\/tweet?url=https:\/\/bit.ly\/3OcEViS&text=%22Don%27t%20download%20all%20data%20in%20your%20offline%20maps%20app%20if%20you%20can%20leave%20it%20online%22%20&hashtags=Runtime,SDK&via=arcgisdevs\" target=\"_blank\"><img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/2021-Twitter-logo-blue-e1652894444328.png\"><\/a> <a href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&url=https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\/\" target=\"_blank\"><img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/06\/linkedin-26.png\" alt=\"LinkedIn logo\"><\/a>"},{"acf_fc_layout":"content","content":"<h2><span data-contrast=\"none\">An empty geodatabase is a small geodatabase<\/span><\/h2>\n<p>Offline maps are often used in data collection scenarios where field crews are collecting huge amounts of new data. If users in the field are just adding new information, then they might not need existing features in their offline map. Set <code>isReturnSchemaOnlyForEditableLayers<\/code> to true on your <code>GenerateOfflineMapParameters<\/code> and the offline map will end up with empty geodatabases ready to be populated with new features in the field. The same goes for attachments: if your users don&#8217;t need to see existing attachments (which can be large photos, videos, and so on), set the <code>ReturnLayerAttachmentOption<\/code> for your parameters to <code>None<\/code>.<\/p>\n"},{"acf_fc_layout":"quote","author_name":"","author_profession_organization":"","image":false,"text":"<p style=\"margin-bottom: 10px;\">\r\n    Start with an empty geodatabase if your users are just adding new information\r\n<\/p>\r\n<a href=\"https:\/\/twitter.com\/intent\/tweet?url=https:\/\/bit.ly\/3OcEViS&text=%22Start%20with%20an%20empty%20geodatabase%20if%20your%20users%20are%20just%20adding%20new%20information%22&hashtags=Runtime,SDK&via=arcgisdevs\" target=\"_blank\">\r\n    <img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/2021-Twitter-logo-blue-e1652894444328.png\" alt=\"Twitter logo\">\r\n<\/a> \r\n<a href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&url=https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\/\" target=\"_blank\"><img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/06\/linkedin-26.png\" alt=\"LinkedIn logo\"><\/a>"},{"acf_fc_layout":"content","content":"<h2>Don&#8217;t be the font of all knowledge<\/h2>\n<p>Esri&#8217;s vector basemaps provide excellent context for offline workflows at all scales. But when taken offline they include a huge set of fonts to support character sets across the globe. If you know for a fact that your app won&#8217;t require characters sets such as Chinese, Japanese, Thai, Korean, or Georgian, you can set the <code>EsriVectorTilesDownloadOption<\/code> to <code>UseReducedFontsService<\/code>. This will switch to a slimmed down set of fonts that greatly reduces the download size of your basemap.<\/p>\n<div>\n<pre style=\"background: #f5f5f5; overflow: auto; width: auto; padding: 0.2em 0.6em 0.2em 40px; border-style: solid; border-color: gray; border-width: 0em 0em 0em 0.2em; margin: 0px; line-height: 125%; font-size: 15px;\">GenerateOfflineMapParameters myParams;\r\nmyParams.setEsriVectorTilesDownloadOption(\r\n    EsriVectorTilesDownloadOption::UseReducedFontsService);\r\n<\/pre>\n<\/div>\n<div>\n<pre style=\"background: #f5f5f5; overflow: auto; width: auto; padding: 0.2em 0.6em 0.2em 40px; border-style: solid; border-color: gray; border-width: 0em 0em 0em 0.2em; margin: 0px; line-height: 125%; font-size: 15px;\">DownloadPreplannedOfflineMapParameters myParams;\r\nmyParams.setEsriVectorTilesDownloadOption(\r\n    EsriVectorTilesDownloadOption::UseReducedFontsService);\r\n<\/pre>\n<\/div>\n"},{"acf_fc_layout":"image","image":{"ID":1579462,"id":1579462,"title":"vector_tiles_fonts","filename":"vector_tiles_fonts.png","filesize":37504,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/vector_tiles_fonts.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\/vector_tiles_fonts","alt":"Esri vector tiles basemap with other character fonts for labels","author":"308752","description":"","caption":"","name":"vector_tiles_fonts","status":"inherit","uploaded_to":1579162,"date":"2022-05-18 11:45:39","modified":"2022-05-18 11:46:11","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":482,"height":384,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/vector_tiles_fonts-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/vector_tiles_fonts.png","medium-width":328,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/vector_tiles_fonts.png","medium_large-width":482,"medium_large-height":384,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/vector_tiles_fonts.png","large-width":482,"large-height":384,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/vector_tiles_fonts.png","1536x1536-width":482,"1536x1536-height":384,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/vector_tiles_fonts.png","2048x2048-width":482,"2048x2048-height":384,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/vector_tiles_fonts.png","card_image-width":482,"card_image-height":384,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/vector_tiles_fonts.png","wide_image-width":482,"wide_image-height":384}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"quote","author_name":"","author_profession_organization":"","image":false,"text":"<p style=\"margin-bottom: 10px;\">\r\n    Save space by only downloading fonts that will be used by your \r\n<\/p>\r\n<a href=\"https:\/\/twitter.com\/intent\/tweet?url=https:\/\/bit.ly\/3OcEViS&text=%22Save%20space%20by%20only%20downloading%20fonts%20that%20will%20be%20used%20by%20your%20map%22&hashtags=Runtime,SDK&via=arcgisdevs\" target=\"_blank\">\r\n    <img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/2021-Twitter-logo-blue-e1652894444328.png\" alt=\"Twitter logo\">\r\n<\/a> \r\n<a href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&url=https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\/\" target=\"_blank\">\r\n    <img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/06\/linkedin-26.png\" alt=\"LinkedIn logo\">\r\n<\/a>\r\n"},{"acf_fc_layout":"content","content":"<h2>Ready to level up<\/h2>\n<p>When you do need to take a basemap offline, focus on the data you really need, to keep download sizes small. You can cut out unnecessary levels of detail by setting appropriate <code>minScale<\/code> and <code>maxScale<\/code> values for <code>GenerateOfflineMapParameters<\/code> (I always get these the wrong way round &#8211; the max scale is the smaller number and controls how zoomed in you are, so a max scale of 1 would be zoomed in to real world scale). If you are specifying the level IDs directly with <code>ExportTileCacheParameters<\/code>, you can try skipping out intermediate levels to avoid downloading those tiles.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":1579502,"id":1579502,"title":"level_of_detail","filename":"level_of_detail-e1653715722502.png","filesize":79465,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/level_of_detail-e1653715722502.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\/level_of_detail","alt":"Illustration of levels of detail from world scale to town","author":"308752","description":"","caption":"","name":"level_of_detail","status":"inherit","uploaded_to":1579162,"date":"2022-05-18 13:11:21","modified":"2022-05-18 13:11:44","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":500,"height":302,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/level_of_detail-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/level_of_detail-e1653715722502.png","medium-width":432,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/level_of_detail-e1653715722502.png","medium_large-width":500,"medium_large-height":302,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/level_of_detail-e1653715722502.png","large-width":500,"large-height":302,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/level_of_detail-e1653715722502.png","1536x1536-width":500,"1536x1536-height":302,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/level_of_detail-e1653715722502.png","2048x2048-width":500,"2048x2048-height":302,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/level_of_detail-e1653715722502.png","card_image-width":500,"card_image-height":302,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/level_of_detail-e1653715722502.png","wide_image-width":500,"wide_image-height":302}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"quote","author_name":"","author_profession_organization":"","image":false,"text":"<p style=\"margin-bottom: 10px;\">\r\n    Only download the levels of detail that you need for your basemap\r\n<\/p>\r\n<a href=\"https:\/\/twitter.com\/intent\/tweet?url=https:\/\/bit.ly\/3OcEViS&text=%22Only%20download%20the%20levels%20of%20detail%20that%20you%20need%20for%20your%20basemap%22&hashtags=Runtime,SDK&via=arcgisdevs\" target=\"_blank\">\r\n    <img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/2021-Twitter-logo-blue-e1652894444328.png\" alt=\"Twitter logo\">\r\n<\/a> \r\n<a href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&url=https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\/\" target=\"_blank\">\r\n    <img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/06\/linkedin-26.png\" alt=\"LinkedIn logo\">\r\n<\/a>\r\n"},{"acf_fc_layout":"content","content":"<h2>Small is beautiful<\/h2>\n<p><span data-contrast=\"none\">For exporting basemaps, you don&#8217;t need to stick with boring old envelopes to define your area of interest. If your study area covers a linear feature like a river or a road, you can buffer it to create a targeted polygon and set that as your <code>GenerateOfflineMapParameters<\/code> <code>areaOfInterest<\/code> instead. This also works when defining a map area ahead of time using the preplanned workflow (see below). The Define polygon offline map areas for Collector <\/span><a href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/collector\/field-mobility\/use-polygon-offline-areas-collector\/\"><span data-contrast=\"none\">blog<\/span><\/a><span data-contrast=\"none\"> describes creating polygon map areas for the preplanned workflow.<\/span><\/p>\n"},{"acf_fc_layout":"image","image":{"ID":1579542,"id":1579542,"title":"polygon_map_area","filename":"polygon_map_area.png","filesize":112922,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/polygon_map_area.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\/polygon_map_area","alt":"Image of polygon map area following the line of a road","author":"308752","description":"","caption":"","name":"polygon_map_area","status":"inherit","uploaded_to":1579162,"date":"2022-05-18 13:15:43","modified":"2022-05-18 13:16:09","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1168,"height":880,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/polygon_map_area-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/polygon_map_area.png","medium-width":346,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/polygon_map_area.png","medium_large-width":768,"medium_large-height":579,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/polygon_map_area.png","large-width":1168,"large-height":880,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/polygon_map_area.png","1536x1536-width":1168,"1536x1536-height":880,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/polygon_map_area.png","2048x2048-width":1168,"2048x2048-height":880,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/polygon_map_area-617x465.png","card_image-width":617,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/polygon_map_area.png","wide_image-width":1168,"wide_image-height":880}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"quote","author_name":"","author_profession_organization":"","image":false,"text":"<p style=\"margin-bottom: 10px;\">\r\n    Customize the shape of your area of interest to focus just on the data you need\r\n<\/p>\r\n<a href=\"https:\/\/twitter.com\/intent\/tweet?url=https:\/\/bit.ly\/3OcEViS&text=%22Customize%20the%20shape%20of%20your%20area%20of%20interest%20to%20focus%20just%20on%20the%20data%20you%20need%22&hashtags=Runtime,SDK&via=arcgisdevs\" target=\"_blank\">\r\n    <img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/2021-Twitter-logo-blue-e1652894444328.png\" alt=\"Twitter logo\">\r\n<\/a> \r\n<a href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&url=https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\/\" target=\"_blank\">\r\n    <img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/06\/linkedin-26.png\" alt=\"LinkedIn logo\">\r\n<\/a>\r\n"},{"acf_fc_layout":"content","content":"<h1>2. Avoid duplicating effort<\/h1>\n<p>If you have many users that work in the same geographic areas, or users who make regular repeat visits, you want them to share as much of the heavy lifting for going offline as possible. Rather than endlessly packaging and downloading the same data, here are a few ideas for reusing data.<\/p>\n<h2>I already have a perfectly good basemap<\/h2>\n<p>If users typically visit the same geographic region (for example, a city or town) again and again, you can pre-load a basemap onto their device and have your offline map refer to it. This means every map that you take offline is smaller and it also allows you to get creative with the basemap &#8211; for example you can export a custom .tpk or .vtpk from ArcGIS Pro. Set the <code>referenceBasemapDirectory<\/code> and <code>referenceBasemapFilename<\/code> on either <code>GenerateOfflineMapParameters<\/code> or <code>DownloadPreplannedOfflineMapParameters<\/code> to use a basemap that&#8217;s already on the device.<\/p>\n<pre style=\"background: #f5f5f5; overflow: auto; width: auto; padding: 0.2em 0.6em 0.2em 40px; border-style: solid; border-color: gray; border-width: 0em 0em 0em 0.2em; margin: 0px; line-height: 125%; font-size: 15px;\">\/\/ Update default parameters to specify use of local basemap.\r\nparams.setReferenceBasemapDirectory(dataPath);\r\nparams.setReferenceBasemapFilename(\"naperville_imagery.tpkx\");<\/pre>\n"},{"acf_fc_layout":"quote","author_name":"","author_profession_organization":"","image":false,"text":"<p style=\"margin-bottom: 10px;\">\r\n    Set up a basemap on your device that you can reuse again and again\r\n<\/p>\r\n<a href=\"https:\/\/twitter.com\/intent\/tweet?url=https:\/\/bit.ly\/3OcEViS&text=%22Set%20up%20a%20basemap%20on%20your%20device%20that%20you%20can%20reuse%20again%20and%20again%22&hashtags=Runtime,SDK&via=arcgisdevs\" target=\"_blank\">\r\n    <img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/2021-Twitter-logo-blue-e1652894444328.png\" alt=\"Twitter logo\">\r\n<\/a> \r\n<a href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&url=https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\/\" target=\"_blank\">\r\n    <img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/06\/linkedin-26.png\" alt=\"LinkedIn logo\">\r\n<\/a>\r\n\r\n"},{"acf_fc_layout":"content","content":"<h2>Preplanned workflow<\/h2>\n<p>Let&#8217;s say you have many users who regularly want to visit the same areas. You can make use of the pre-planned workflow to define map areas and their data ahead of time. That means that any user who wants to take one of those areas offline can just download the bits and pieces that make up the offline map without needing to wait for backend services to prepare the data. You use the <code>DownloadPreplannedOfflineMapParameters<\/code> to take one of these areas offline, but when you are defining the map area ahead of time, you can still think about the other tips in this article, such as generating schema-only geodatabases.<\/p>\n"},{"acf_fc_layout":"quote","author_name":"","author_profession_organization":"","image":false,"text":"<p style=\"margin-bottom: 10px;\">\r\n    Plan your offline maps ahead of time to save time and share data\r\n<\/p>\r\n<a href=\"https:\/\/twitter.com\/intent\/tweet?url=https:\/\/bit.ly\/3OcEViS&text=%22Plan%20your%20offline%20maps%20ahead%20of%20time%20to%20save%20time%20and%20share%20data%22&hashtags=Runtime,SDK&via=arcgisdevs\" target=\"_blank\">\r\n    <img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/2021-Twitter-logo-blue-e1652894444328.png\" alt=\"Twitter logo\">\r\n<\/a> \r\n<a href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&url=https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\/\" target=\"_blank\">\r\n    <img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/06\/linkedin-26.png\" alt=\"LinkedIn logo\">\r\n<\/a>\r\n"},{"acf_fc_layout":"content","content":"<h1>3. Think about sync<\/h1>\n<p>When we talk about editing with offline maps, we are really talking about the feature sync workflow, where edits from a mobile geodatabase on your device are uploaded to a feature service and changes from others are downloaded. If you are using a sync workflow it&#8217;s important to think about how and when you sync.<\/p>\n<h2>I don&#8217;t need any changes at all<\/h2>\n<p>This is a common offline workflow, for example, read-only maps for reference or as an aid to navigation. Make sure that you don&#8217;t set your map up with unused editing capabilities because you are creating extra work (such as a replica on the feature service that needs to be created and eventually unregistered). Set the <code>PreplannedUpdateMode<\/code> to <code>NoUpdates<\/code> for a <code>DownloadPreplannedOfflineMapParameters<\/code> or the <code>GenerateOfflineMapUpdateMode<\/code> to <code>NoUpdates<\/code> for a <code>GenerateOfflineMapParameters<\/code>. Now your offline map contains the data you want, but you don&#8217;t need to worry about updating it. If you need an updated map in the future, take a new one offline.<\/p>\n"},{"acf_fc_layout":"quote","author_name":"","author_profession_organization":"","image":false,"text":"<p style=\"margin-bottom: 10px;\">\r\n    Create zero maintenance snap-shot offline maps when you don't need any updates\r\n<\/p>\r\n<a href=\"https:\/\/twitter.com\/intent\/tweet?url=https:\/\/bit.ly\/3OcEViS&text=%22Create%20zero%20maintenance%20snap-shot%20offline%20maps%20when%20you%20don't%20need%20any%20updates%22&hashtags=Runtime,SDK&via=arcgisdevs\" target=\"_blank\">\r\n    <img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/2021-Twitter-logo-blue-e1652894444328.png\" alt=\"Twitter logo\">\r\n<\/a> \r\n<a href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&url=https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\/\" target=\"_blank\">\r\n    <img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/06\/linkedin-26.png\" alt=\"LinkedIn logo\">\r\n<\/a>"},{"acf_fc_layout":"content","content":"<h2>I need to upload local edits and download changes from others<\/h2>\n<p>What about when your app needs to make changes and see updates from other users? Not a problem, you can do bidirectional sync with both the on-demand and preplanned workflows. The main thing to consider here is the impact of performing a sync on the backing feature service. As a rule, it is cheap to perform an upload sync (sending your changes to the backing feature service) but it can be expensive to perform a download sync (fetching changes from the service) since it requires an exclusive lock on the database. Design your workflows so that users upload their changes regularly to avoid losing work but only download changes when required. Set the <code>syncDirection<\/code> for your <code>OfflineMapSyncParameters<\/code> to either <code>Upload<\/code> or <code>Download<\/code> rather than sticking with the default of <code>Bidirectional<\/code>.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":1579612,"id":1579612,"title":"sync_directions","filename":"sync_directions.png","filesize":5300,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/sync_directions.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\/sync_directions","alt":"Download sync is more expensive than upload sync or no updates mode","author":"308752","description":"","caption":"","name":"sync_directions","status":"inherit","uploaded_to":1579162,"date":"2022-05-18 13:27:25","modified":"2022-05-18 13:28:03","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":227,"height":241,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/sync_directions-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/sync_directions.png","medium-width":227,"medium-height":241,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/sync_directions.png","medium_large-width":227,"medium_large-height":241,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/sync_directions.png","large-width":227,"large-height":241,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/sync_directions.png","1536x1536-width":227,"1536x1536-height":241,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/sync_directions.png","2048x2048-width":227,"2048x2048-height":241,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/sync_directions.png","card_image-width":227,"card_image-height":241,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/sync_directions.png","wide_image-width":227,"wide_image-height":241}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"quote","author_name":"","author_profession_organization":"","image":false,"text":"<p style=\"margin-bottom: 10px;\">\r\n    Upload changes whenever you need but avoid performing download sync at busy times\r\n<\/p>\r\n<a href=\"https:\/\/twitter.com\/intent\/tweet?url=https:\/\/bit.ly\/3OcEViS&text=%22Upload%20changes%20whenever%20you%20need%20but%20avoid%20performing%20download%20sync%20at%20busy%20times%22&hashtags=Runtime,SDK&via=arcgisdevs\" target=\"_blank\">\r\n    <img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/2021-Twitter-logo-blue-e1652894444328.png\" alt=\"Twitter logo\">\r\n<\/a> \r\n<a href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&url=https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\/\" target=\"_blank\">\r\n    <img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/06\/linkedin-26.png\" alt=\"LinkedIn logo\">\r\n<\/a>\r\n"},{"acf_fc_layout":"content","content":"<h2>I only need to download changes from others (read-only)<\/h2>\n<p>If an offline map only needs to receive updates from other users, and it uses the pre-planned workflow, you can opt into an advanced workflow called Scheduled, or Packaged Updates. In this scenario, the preplanned map area attached to the online web map is regularly updated (for example, every week or every day) with changes from the feature service. The changes that were applied are also cached so that any offline maps based off that map area can just download the relevant update packages. This optimization is massively scalable since none of the offline clients need to go directly to the feature service. If the map area supports it, set the <code>PreplannedUpdateMode<\/code> to <code>DownloadScheduledUpdates<\/code> for your <code>DownloadPreplannedOfflineMapParameters<\/code>.<\/p>\n"},{"acf_fc_layout":"quote","author_name":"","author_profession_organization":"","image":false,"text":"<p style=\"margin-bottom: 10px;\">\r\n    Use scheduled update packages to get others' changes quickly and easily\r\n<\/p>\r\n<a href=\"https:\/\/twitter.com\/intent\/tweet?url=https:\/\/bit.ly\/3OcEViS&text=%22Use%20scheduled%20update%20packages%20to%20get%20others'%20changes%20quickly%20and%20easily%22&hashtags=Runtime,SDK&via=arcgisdevs\" target=\"_blank\">\r\n    <img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/2021-Twitter-logo-blue-e1652894444328.png\" alt=\"Twitter logo\">\r\n<\/a> \r\n<a href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&url=https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\/\" target=\"_blank\">\r\n    <img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/06\/linkedin-26.png\" alt=\"LinkedIn logo\">\r\n<\/a>"},{"acf_fc_layout":"content","content":"<h1>4. Work with services<\/h1>\n<p>Most of the advice in this article looks at using the <code>OfflineMapTask<\/code> to simplify taking entire maps offline. However, you can get more fine-grained control over how individual layers are taken offline by working directly with services.<\/p>\n<ul>\n<li>ExportVectorTilesTask &#8211; Take vector tiled basemaps offline as .vtpk files.<\/li>\n<li>ExportTileCacheTask &#8211; Take imagery tiled basemaps offline as .tpk or .tpkx files.<\/li>\n<li>GeodatabaseSyncTask &#8211; Create a local replica geodatabase and sync it back to the feature service.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2>Use the overrides workflow to tweak individual services<\/h2>\n<p>You can get the best of both worlds by taking entire maps offline and still treating individual services differently by using the overrides workflow.<\/p>\n<p>You start with the <code>GenerateOfflineMapParameters<\/code> to get the basics right and then create a set of <code>GenerateOfflineMapParametersOverrides<\/code> from these.<\/p>\n<div>\n<pre style=\"background: #f5f5f5; overflow: auto; width: auto; padding: 0.2em 0.6em 0.2em 40px; border-style: solid; border-color: gray; border-width: 0em 0em 0em 0.2em; margin: 0px; line-height: 125%; font-size: 15px;\">connect(m_offlineMapTask, &amp;OfflineMapTask::createDefaultGenerateOfflineMapParametersCompleted,\r\n\r\nthis, [this](QUuid, const GenerateOfflineMapParameters&amp; params)\r\n{\r\n  \/\/ Use the parameters to create a set of overrides.\r\n  m_parameters = params;\r\n  m_offlineMapTask-&gt;createGenerateOfflineMapParameterOverrides(params);\r\n});\r\n<\/pre>\n<\/div>\n<p>These overrides present a set of low-level parameters for exporting tiles, generating geodatabases, and so on for each service in the map that you can adjust as needed. For example, you can use a buffered area of interest to create a larger offline basemap like so:<\/p>\n<div>\n<pre style=\"background: #f5f5f5; overflow: auto; width: auto; padding: 0.2em 0.6em 0.2em 40px; border-style: solid; border-color: gray; border-width: 0em 0em 0em 0.2em; margin: 0px; line-height: 125%; font-size: 15px;\">LayerListModel* layers = m_map-&gt;basemap()-&gt;baseLayers();\r\n\r\nif (!layers || layers-&gt;isEmpty())\r\n  return;\r\n\r\nOfflineMapParametersKey keyForTiledLayer(layers-&gt;at(0));\r\nif (keyForTiledLayer.isEmpty() || keyForTiledLayer.type() != OfflineMapParametersType::ExportTileCache)\r\n  return;\r\n\r\n\/\/ Obtain the dictionary of parameters for taking the basemap offline.\r\nQMap dictionary = m_parameterOverrides-&gt;exportTileCacheParameters();\r\nif (!dictionary.contains(keyForTiledLayer))\r\n  return;\r\n\r\n\/\/ Create a new geometry around the original area of interest.\r\nauto bufferGeom = GeometryEngine::buffer(m_parameters.areaOfInterest(), bufferMeters);\r\n\r\n\/\/ Apply the geometry to the ExportTileCacheParameters.\r\nExportTileCacheParameters&amp; exportTileCacheParam = dictionary[keyForTiledLayer];\r\n\r\n\/\/ Set the parameters back into the dictionary.\r\nexportTileCacheParam.setAreaOfInterest(bufferGeom);\r\n\r\n\/\/ Store the dictionary.\r\nm_parameterOverrides-&gt;setExportTileCacheParameters(dictionary);\r\n<\/pre>\n<\/div>\n<p>See the full sample this code is taken from on the <a href=\"https:\/\/github.com\/Esri\/arcgis-runtime-samples-qt\/blob\/main\/ArcGISRuntimeSDKQt_CppSamples\/Maps\/GenerateOfflineMap_Overrides\/README.md\">arcgis-runtime-samples-qt repository<\/a>.<\/p>\n<h1>5. Don&#8217;t forget to tidy up<\/h1>\n<p>Once you are done with your offline map, clean everything up to save space on your device and on the backend services.<\/p>\n<h2>Cancel that<\/h2>\n<p>If you are running a job to create an offline map (or any <code>Job<\/code> for that matter) and you suddenly realize you&#8217;ve made a mistake (it happens to us all), you can call <code>Job.cancelAsync<\/code> to clean things up before you start again. This will clean up any half-finished files lon your device and stops the backing services from doing unnecessary work, like creating basemap packages that are no longer needed.<\/p>\n"},{"acf_fc_layout":"quote","author_name":"","author_profession_organization":"","image":false,"text":"<p style=\"margin-bottom: 10px;\">\r\n    Cancel unwanted jobs to reduce load on back-end services\r\n<\/p>\r\n<a href=\"https:\/\/twitter.com\/intent\/tweet?url=https:\/\/bit.ly\/3OcEViS&text=%22Cancel%20unwanted%20jobs%20to%20reduce%20load%20on%20back-end%20services%22&hashtags=Runtime,SDK&via=arcgisdevs\" target=\"_blank\">\r\n    <img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/2021-Twitter-logo-blue-e1652894444328.png\" alt=\"Twitter logo\">\r\n<\/a> \r\n<a href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&url=https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\/\" target=\"_blank\">\r\n    <img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/06\/linkedin-26.png\" alt=\"LinkedIn logo\">\r\n<\/a>\r\n"},{"acf_fc_layout":"content","content":"<h2>Unregister your geodatabases<\/h2>\n<p>If you have any mobile geodatabases that are set up to sync with a feature-service, make sure to call <code>GeodatabaseSyncTask::unregisterGeodatabase<\/code> when you are finished with them. That allows the feature service to forget about that specific replica so it can get on with more important things.<\/p>\n"},{"acf_fc_layout":"quote","author_name":"","author_profession_organization":"","image":false,"text":"<p style=\"margin-bottom: 10px;\">\r\n     When you are done, unregister geodatabases to free up space in the feature service    \r\n<\/p>\r\n<a href=\"https:\/\/twitter.com\/intent\/tweet?url=https:\/\/bit.ly\/3OcEViS&text=%22When%20you%20are%20done,%20unregister%20geodatabases%20to%20free%20up%20space%20in%20the%20feature%20service%22&hashtags=Runtime,SDK&via=arcgisdevs\" target=\"_blank\">\r\n    <img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/2021-Twitter-logo-blue-e1652894444328.png\" alt=\"Twitter logo\">\r\n<\/a> \r\n<a href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&url=https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\/\" target=\"_blank\">\r\n    <img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/06\/linkedin-26.png\" alt=\"LinkedIn logo\">\r\n<\/a>"},{"acf_fc_layout":"content","content":"<h2>Please close the map behind you<\/h2>\n<p>Finally, when you are finished with an offline map, delete it from the device to save disk space. Sometimes a file-handle may be left over from your app that prevents the folder from being deleted. If that&#8217;s the case, you can call <code>MobileMapPackage::close<\/code> to free things up before you delete.<\/p>\n"},{"acf_fc_layout":"quote","author_name":"","author_profession_organization":"","image":false,"text":"<p style=\"margin-bottom: 10px;\">\r\n    To save disk space, remove offline files when you are done with them\r\n<\/p>\r\n<a href=\"https:\/\/twitter.com\/intent\/tweet?url=https:\/\/bit.ly\/3OcEViS&text=%22To%20save%20disk%20space,%20remove%20offline%20files%20when%20you%20are%20done%20with%20them%22&hashtags=Runtime,SDK&via=arcgisdevs\" target=\"_blank\">\r\n    <img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/2021-Twitter-logo-blue-e1652894444328.png\" alt=\"Twitter logo\">\r\n<\/a> \r\n<a href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&url=https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\/\" target=\"_blank\">\r\n    <img src=\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/06\/linkedin-26.png\" alt=\"LinkedIn logo\">\r\n<\/a>"},{"acf_fc_layout":"content","content":"<h1>Summary<\/h1>\n<p>I hope that&#8217;s given you some ideas of how you can focus your offline workflows with Runtime. Keep the following in mind:<\/p>\n<ul>\n<li>Minimize the data you need to download as much as possible.<\/li>\n<li>Share data between maps and users whenever you can.<\/li>\n<li>Plan your editing workflows to minimize load on feature services.<\/li>\n<li>Work with underlying services when you need fine-grained control over your map&#8217;s layers.<\/li>\n<li>Dispose of resources such as files on disk or server resources when you are done.<\/li>\n<\/ul>\n<p>Do you know any other tips for offline work? What problems have you faced trying to make your app offline? Contact us or join the community to share what and how you are using offline apps with Runtime.<\/p>\n<p>In my next article, I&#8217;ll look at working with scheduled update packages in more detail. You can subscribe to new information about Runtime workflows with RSS feeds via the <a href=\"https:\/\/community.esri.com\/\">Esri Community Blog<\/a><br \/>\nand follow us on Twitter.<\/p>\n"}],"related_articles":[{"ID":1546152,"post_author":"3811","post_date":"2022-04-07 17:12:15","post_date_gmt":"2022-04-08 00:12:15","post_content":"","post_title":"ArcGIS Runtime in 2022 and beyond","post_excerpt":"","post_status":"publish","comment_status":"closed","ping_status":"closed","post_password":"","post_name":"arcgis-runtime-in-2022-and-beyond","to_ping":"","pinged":"","post_modified":"2022-10-18 12:29:32","post_modified_gmt":"2022-10-18 19:29:32","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=1546152","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"},{"ID":1560832,"post_author":"3811","post_date":"2022-04-27 09:46:13","post_date_gmt":"2022-04-27 16:46:13","post_content":"","post_title":"What's new in ArcGIS Runtime 100.14","post_excerpt":"","post_status":"publish","comment_status":"open","ping_status":"closed","post_password":"","post_name":"whats-new-in-arcgis-runtime-100-14","to_ping":"","pinged":"","post_modified":"2024-04-12 03:43:48","post_modified_gmt":"2024-04-12 10:43:48","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=1560832","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"}],"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/offline_app_small.png","wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/offline_app.png"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>5 tips and tricks to streamline your offline maps<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"5 tips and tricks to streamline your offline maps\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\" \/>\n<meta property=\"og:site_name\" content=\"ArcGIS Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/esrigis\/\" \/>\n<meta property=\"article:modified_time\" content=\"2022-06-21T15:36:38+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@ESRI\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\"},\"author\":{\"name\":\"Luke Smallwood\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/ba8e4b4ddfdea5278aaebe489f604997\"},\"headline\":\"5 tips and tricks to streamline your offline maps\",\"datePublished\":\"2022-05-27T12:00:42+00:00\",\"dateModified\":\"2022-06-21T15:36:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\"},\"wordCount\":8,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"Mobile\",\"offline maps\",\"work offline\"],\"articleSection\":[\"Developers\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\",\"name\":\"5 tips and tricks to streamline your offline maps\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2022-05-27T12:00:42+00:00\",\"dateModified\":\"2022-06-21T15:36:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"5 tips and tricks to streamline your offline maps\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"name\":\"ArcGIS Blog\",\"description\":\"Get insider info from Esri product teams\",\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\",\"name\":\"Esri\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"width\":400,\"height\":400,\"caption\":\"Esri\"},\"image\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/esrigis\/\",\"https:\/\/x.com\/ESRI\",\"https:\/\/www.linkedin.com\/company\/5311\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/ba8e4b4ddfdea5278aaebe489f604997\",\"name\":\"Luke Smallwood\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/28b7daeb6927c17c108f9ea587ff471725e502f3db0125f40968962ee27570b4?s=96&d=blank&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/28b7daeb6927c17c108f9ea587ff471725e502f3db0125f40968962ee27570b4?s=96&d=blank&r=g\",\"caption\":\"Luke Smallwood\"},\"description\":\"Luke is a Software Developer with the ArcGIS Runtime team. He works primarily on the Runtime SDK for Qt, offline workflows and geotriggers.\",\"sameAs\":[\"https:\/\/uk.linkedin.com\/in\/luke-smallwood-28bab322\"],\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/lsmallwood\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"5 tips and tricks to streamline your offline maps","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps","og_locale":"en_US","og_type":"article","og_title":"5 tips and tricks to streamline your offline maps","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2022-06-21T15:36:38+00:00","twitter_card":"summary_large_image","twitter_site":"@ESRI","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps"},"author":{"name":"Luke Smallwood","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/ba8e4b4ddfdea5278aaebe489f604997"},"headline":"5 tips and tricks to streamline your offline maps","datePublished":"2022-05-27T12:00:42+00:00","dateModified":"2022-06-21T15:36:38+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps"},"wordCount":8,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["Mobile","offline maps","work offline"],"articleSection":["Developers"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps","name":"5 tips and tricks to streamline your offline maps","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2022-05-27T12:00:42+00:00","dateModified":"2022-06-21T15:36:38+00:00","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/runtime-sdk\/developers\/5-tips-and-tricks-to-streamline-your-offline-maps#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"5 tips and tricks to streamline your offline maps"}]},{"@type":"WebSite","@id":"https:\/\/www.esri.com\/arcgis-blog\/#website","url":"https:\/\/www.esri.com\/arcgis-blog\/","name":"ArcGIS Blog","description":"Get insider info from Esri product teams","publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization","name":"Esri","url":"https:\/\/www.esri.com\/arcgis-blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","width":400,"height":400,"caption":"Esri"},"image":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/esrigis\/","https:\/\/x.com\/ESRI","https:\/\/www.linkedin.com\/company\/5311\/"]},{"@type":"Person","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/ba8e4b4ddfdea5278aaebe489f604997","name":"Luke Smallwood","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/28b7daeb6927c17c108f9ea587ff471725e502f3db0125f40968962ee27570b4?s=96&d=blank&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/28b7daeb6927c17c108f9ea587ff471725e502f3db0125f40968962ee27570b4?s=96&d=blank&r=g","caption":"Luke Smallwood"},"description":"Luke is a Software Developer with the ArcGIS Runtime team. He works primarily on the Runtime SDK for Qt, offline workflows and geotriggers.","sameAs":["https:\/\/uk.linkedin.com\/in\/luke-smallwood-28bab322"],"url":"https:\/\/www.esri.com\/arcgis-blog\/author\/lsmallwood"}]}},"text_date":"May 27, 2022","author_name":"Luke Smallwood","author_page":"https:\/\/www.esri.com\/arcgis-blog\/author\/lsmallwood","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/05\/offline_app.png","primary_product":"ArcGIS Runtime SDKs","tag_data":[{"term_id":23711,"name":"Mobile","slug":"mobile","term_group":0,"term_taxonomy_id":23711,"taxonomy":"post_tag","description":"","parent":0,"count":116,"filter":"raw"},{"term_id":586441,"name":"offline maps","slug":"offline-maps","term_group":0,"term_taxonomy_id":586441,"taxonomy":"post_tag","description":"","parent":0,"count":5,"filter":"raw"},{"term_id":760912,"name":"work offline","slug":"work-offline","term_group":0,"term_taxonomy_id":760912,"taxonomy":"post_tag","description":"","parent":0,"count":2,"filter":"raw"}],"category_data":[{"term_id":738191,"name":"Developers","slug":"developers","term_group":0,"term_taxonomy_id":738191,"taxonomy":"category","description":"","parent":0,"count":423,"filter":"raw"}],"product_data":[{"term_id":36871,"name":"ArcGIS Runtime SDK for .NET","slug":"api-net-win-desktop","term_group":0,"term_taxonomy_id":36871,"taxonomy":"product","description":"","parent":36601,"count":65,"filter":"raw"},{"term_id":36881,"name":"ArcGIS Runtime SDK for Android","slug":"api-for-android","term_group":0,"term_taxonomy_id":36881,"taxonomy":"product","description":"","parent":36601,"count":65,"filter":"raw"},{"term_id":36891,"name":"ArcGIS Runtime SDK for iOS","slug":"api-ios","term_group":0,"term_taxonomy_id":36891,"taxonomy":"product","description":"","parent":36601,"count":55,"filter":"raw"},{"term_id":36901,"name":"ArcGIS Runtime SDK for Java","slug":"api-java","term_group":0,"term_taxonomy_id":36901,"taxonomy":"product","description":"","parent":36601,"count":59,"filter":"raw"},{"term_id":36911,"name":"ArcGIS Runtime SDK for macOS","slug":"api-mac-osx","term_group":0,"term_taxonomy_id":36911,"taxonomy":"product","description":"","parent":36601,"count":27,"filter":"raw"},{"term_id":36921,"name":"ArcGIS Runtime SDK for Qt","slug":"api-cqt","term_group":0,"term_taxonomy_id":36921,"taxonomy":"product","description":"","parent":36601,"count":80,"filter":"raw"},{"term_id":763892,"name":"ArcGIS Runtime SDKs","slug":"runtime-sdk","term_group":0,"term_taxonomy_id":763892,"taxonomy":"product","description":"","parent":756692,"count":20,"filter":"raw"},{"term_id":36601,"name":"Developers","slug":"developers","term_group":0,"term_taxonomy_id":36601,"taxonomy":"product","description":"","parent":0,"count":763,"filter":"raw"}],"primary_product_link":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&products=runtime-sdk","_links":{"self":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/1579162","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/users\/308752"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=1579162"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/1579162\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=1579162"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=1579162"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=1579162"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=1579162"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=1579162"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}