<\/HEAD>
S ArcGIS Runtime<\/A> lze vytvářet nativní aplikace pro všechny běžné platformy. Nativní aplikace jsou zvláště vhodné pro mobilní scénáře v terénu. Protože v terénu často není zaručeno stabilní připojení k internetu, měly by být mapy včetně všech souvisejících dat uloženy lokálně na zařízení. Již existuje několik možností, jak to s ArcGIS Runtime provést:<\/P><\/P>
- On Demand export dat přímo z ArcGIS Services (
Feature<\/A>, Raster<\/A> a Vector Tile<\/A>)<\/LI>On Demand export kompletních map<\/A><\/LI>Předzpracování ArcGIS Runtime Content<\/A> nebo Mobile Map Packages<\/A> pomocí ArcGIS Desktop a následné kopírování do zařízení<\/LI><\/UL>
Tyto možnosti jsou také využívány v ArcGIS Apps jako
.<\/SPAN>get(<\/SPAN>"my webmap id"<\/SPAN>)<\/SPAN>\noffline_webmap =<\/SPAN> WebMap(<\/SPAN>offline_map_item)<\/SPAN>\n\n# Procházení záložek webové mapy a vytvoření mapové oblasti pro každou záložku<\/SPAN>\nfor<\/SPAN> bookmark in<\/SPAN> offline_webmap.<\/SPAN>definition.<\/SPAN>bookmarks:<\/SPAN>\n bookmark_name =<\/SPAN> bookmark.<\/SPAN>name\n item_prop =<\/SPAN> {<\/SPAN>'title'<\/SPAN>:<\/SPAN> offline_map_item.<\/SPAN>title +<\/SPAN> '_'<\/SPAN> +<\/SPAN> bookmark_name +<\/SPAN> '_MapArea'<\/SPAN>,<\/SPAN>\n 'snippet'<\/SPAN>:<\/SPAN> 'my snippet'<\/SPAN>,<\/SPAN>\n 'description'<\/SPAN>:<\/SPAN> 'my description'<\/SPAN>,<\/SPAN>\n 'tags'<\/Span>:['python api', 'MapArea', 'my tag']}
offline_area = offline_webmap.offline_areas.create(area=bookmark_name, folder='my portal content folder', item_properties=item_prop)
K rychlému testu lze použít Python Notebook v příloze tohoto blogu na notebooks.esri.com (upload).
Použití MapAreas v ArcGIS Runtime aplikacích v terénu
Nyní byly MapAreas webové mapy a související mobilní data vytvořeny v portálu. Teď je stačí stáhnout a použít s ArcGIS Runtime. Funkce Preplanned Workflow v SDK jsou dostupné až od verze ArcGIS Runtime 100.2. Zde jsou základní kroky implementace na příkladu .NET SDK:
1. Načtení WebMapy
<SPAn var portal = await ArcGISPortal.CreateAsync();
var webmapItem = await PortalItem.CreateAsync(portal, "WebMap Portal ID");
var myMap = new Map(webmapItem);<SPAn line-numbers-rows"><SPAn...</SPAn>
2. Dotaz na MapAreas webové mapy
var offlineMapTask = await OfflineMapTask.CreateAsync(myMap);
var preplannedMapAreas = await offlineMapTask.GetPreplannedMapAreasAsync();...
3. Stažení informací a dat MapArea jako rozbaleného Mobile Map Package
var myArea = preplannedMapAreas.FirstOrDefault();
var downloadJob = offlineMapTask.DownloadPreplannedOfflineMap(myArea, "Cesta k uložení");
var results = await downloadJob.GetResultAsync();...
4. Načtení a zobrazení lokálně uložené MapArea v mapě
var offlineMapArea = await MobileMapPackage.OpenAsync("Cesta k uložení");
myMap = offlineMapArea.Maps[0];...
Synchronizace úprav s Feature Service
K synchronizaci úprav prvků obousměrně je lokální SQLite Geodatabase automaticky registrována pomocí OfflineMapTask u Feature Service. Vývojář se o to nemusí starat. Synchronizace probíhá takto:
var editLayer = class="punctuation token">(<\/SPAN>FeatureLayer<SPAN class="punctuation token">)<\/SPAN>myMap<SPAN class="punctuation token">.<\/SPAN>OperationalLayers<SPAN class="punctuation token">[<\/SPAN><SPAN class="number token">0<\/SPAN><SPAN class="punctuation token">]<\/SPAN><SPAN class="punctuation token">;<\/SPAN>\n<SPAN class="keyword token">var<\/SPAN> featureTable <SPAN class="operator token">=<\/SPAN> <SPAN class="punctuation token">(<\/SPAN>GeodatabaseFeatureTable<SPAN class="punctuation token">)<\/SPAN>editLayer<SPAN class="punctuation token">.<\/SPAN>FeatureTable<SPAN class="punctuation token">;<\/SPAN>\n\n<SPAN class="keyword token">var<\/SPAN> syncTask <SPAN class="operator token">=<\/SPAN> <SPAN class="keyword token">await<\/SPAN> GeodatabaseSyncTask<SPAN class="punctuation token">.<\/SPAN><SPAN class="token function">CreateAsync<\/SPAN><SPAN class="punctuation token">(<\/SPAN>featureTable<SPAN class="punctuation token">.<\/SPAN>Geodatabase<SPAN class="punctuation token">.<\/SPAN>Source<SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">;<\/SPAN>\n\n<SPAN class="comment token">\/\/ sync geodatabase<\/SPAN>\n<SPAN class="keyword token">var<\/SPAN> taskParameters <SPAN class="operator token">=<\/SPAN> <SPAN class="keyword token">await<\/SPAN> syncTask<SPAN class="punctuation token">.<\/SPAN><SPAN class="token function">CreateDefaultSyncGeodatabaseParametersAsync<\/SPAN><SPAN class="punctuation token">(<\/SPAN>featureTable<SPAN class="punctuation token">.<\/SPAN>Geodatabase<SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">;<\/SPAN>\n\n<SPAN class="keyword token">var<\/SPAN> syncJob <SPAN class="operator token">=<\/SPAN> syncTask<SPAN class="punctuation token">.<\/span><span class="token function">SyncGeodatabase</span><span class="punctuation token">(</span>taskParameters<span class="punctuation token">,</span> featureTable<span class="punctuation token">.</span>Geodatabase<span class="punctuation token">)</span><span class="punctuation token">;</span>
<span class="keyword token">var</span> result <span class="operator token">=</span> <span class="keyword token">await</span> syncJob<span class="punctuation token">.</span><span class="token function">GetResultAsync</span><span class="punctuation token">(</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
<span class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span>
Před tím, než bude Geodatabase na zařízení smazána, musí být nejprve odregistrována u Feature Service (jinak by byl nakonec zaplněn obrovským množstvím replik). Další informace k tomu jsou uvedeny v dokumentaci. Takto to lze provést:
var editLayer = (FeatureLayer)myMap.OperationalLayers[0];
Závěrečná slova
S Preplanned Workflow bylo téma mobilních offline scénářů v ArcGIS dotaženo do konce. Celá věc je nyní ucelená, ale stále má na některých místech potenciál pro zlepšení, např. by byly tvary jako MapAreas užitečnější než jen obdélníkové plochy (která pracovní oblast je přesně obdélníková). Ještě uvidíme vylepšení a celkově je to již velmi užitečné. Preplanned Workflow brzy najdeme i v několika ArcGIS aplikacích (Collector, Explorer). Momentálně je dostupný pouze v ArcGIS Online, v ArcGIS Enterprise bude implementován v pozdější verzi.
P.s.: Sekce o vytváření MapAreas pomocí Python API (v příloze je nové Python Notebook) a synchronizaci úprav Feature byly mírně upraveny. Velké díky patří Antti Kajanus z týmu ArcGIS Runtime za tip na chytrou implementaci Python API a jeho opravu registrace/odregistrace geodatabází. 