<\/HEAD>
De eisen veranderen. Waar men vroeger bij de digitale gegevensverwerking uitsluitend gebonden was aan het kantoor, heeft men tegenwoordig steeds meer de mogelijkheid om dit werk ook onderweg te doen.<\/SPAN><\/P><\/P>In veel scenario's is dat ook noodzakelijk: de inspectie van wegschade door de wegenbeheerder bijvoorbeeld – geen nabewerking meer van op papier vastgelegde informatie. In plaats daarvan een locatiegebonden vastlegging van gegevens, verrijkt met schadebeelden en een directe informatiestroom waarop een planner onmiddellijk kan reageren.<\/SPAN><\/P><\/P>Of aan het voorbeeld van een bosbeheer: waar geen adresgegevens beschikbaar zijn, heeft men GPS-gegevens nodig om houtopslagplaatsen te beheren en terug te vinden. Dit maakt het ook mogelijk om chauffeurs die de omgeving niet kennen een locatiebeschrijving of zelfs een routebeschrijving aan te bieden.<\/SPAN><\/P><\/P>De technologie daarvoor bestaat al enkele jaren en wordt door Esri in verschillende producten aangeboden, die afhankelijk van de eis ideaal passen. Een van de jongste leden van deze productfamilie is het ArcGIS Runtime SDK for .NET<\/A>. Dit is een ontwikkelaarstool voor het Microsoft-platform, waarmee applicaties voor Windows Desktop, Windows Store en Windows Phone kunnen worden gemaakt – dus voor het hele spectrum van telefoon via tablet tot aan de klassieke desktop. En dat met slechts één framework.<\/SPAN><\/P><\/P>
Alle "ArcGIS Runtime"-SDK's hebben gemeen dat ze offline-functionaliteit bieden. Deze kernfunctionaliteit, geïntroduceerd met 10.2.3, brengt alle tools mee om gegevens lokaal en zonder netwerkverbinding te beheren en vervolgens te synchroniseren met een centrale dataset (zoals de
ArcGIS Online Cloud<\/A>). Daarbij zijn architecturen mogelijk die verschillende ArcGIS-producten combineren: in een door Esri Duitsland gerealiseerde Collector Light Demo<\/A><\/STRONG> wordt getoond dat een .Net-client en een Java-client – elk gebaseerd op een ArcGIS Runtime SDK – gegevens offline kunnen beheren. Deze demo gaat zelfs zo ver dat hier de offline-cache uniform is opgebouwd en daarmee voor beide clients even goed bruikbaar is.<\/SPAN><\/P><\/P>
Aan het voorbeeld van de .NET-demo worden enkele processen uitgelegd en enkele tips gegeven die kunnen helpen bij het realiseren van een eigen applicatie. Alle getoonde codefragmenten en screenshots zult u zo of vergelijkbaar in het demoproject terugvinden.<\/SPAN><\/P><\/P>Het demoproject is opgebouwd volgens het MVVM-concept en maakt gebruik van een 3rd Party Toolkit genaamd
MVVM Light<\/A>. Het concept voorziet in het ontkoppelen van de UI van de businesslogica, waardoor interfaces uitwisselbaar worden en men de logische laag in verschillende applicaties op diverse platforms kan hergebruiken.<\/SPAN><\/P><\/P>
Kort over het idee van de demo-applicatie: men kan zich via een ArcGIS Online-account aanmelden bij de Esri Cloud en vervolgens zoeken naar kaarten die zijn ingericht voor offline gebruik. Beweegt men zich met het account binnen een organisatie, dan ziet men niet alleen zijn eigen kaarten, maar alle kaarten die voor gezamenlijk gebruik door collega’s zijn vrijgegeven. Men kan willekeurig een kaart selecteren en daarvan een versie offline beschikbaar maken, die men dan ook zonder netwerkverbinding kan gebruiken. Ook bewerken van gegevens is daarmee mogelijk.<\/SPAN><\/P><\/P>
Heeft iemand al een kaart?<\/>\/<\/>\/<\/>\/<\/>\/<\/>\/<\/>\/<\/>\/<\/>\/<\/>\/<\/>\/<\/>\/<\/>\/<\/> voer in de zoekopdracht „Schadensmeldung Freising“ in en bij locatie „ArcGIS Online“. Verwijder het vinkje bij „Binnen de kaartuitbreiding“ als u geen resultaat krijgt. Voeg deze gegevens toe aan uw kaart met „Toevoegen“. Selecteer de schade-laag en klik op „Inzoomen op“, hierdoor wordt het huidige en ook toekomstige start-kaartgebied gewijzigd. Sla de kaart op en ga terug naar de weergave „Eigen inhoud".<\/SPAN><\/P><\/P>U ziet nu een extra item van het type Web Map, de zojuist aangemaakte kaart. Klik op de naam van de kaart om naar de eigenschappenweergave te gaan. Een van deze eigenschappen heet „Offline-modus“, waar al „Geactiveerd“ staat. Om de kaart offline te kunnen gebruiken is deze instelling noodzakelijk. Als bij u „Uitgeschakeld“ staat, klik dan op „Bewerken“ en zet het vinkje bij „Offline-modus activeren".<\/SPAN><\/P><\/P>Wie ben ik? <\/SPAN><\/H1>De noodzakelijke voorbereidingen zijn daarmee afgerond, nu kunnen we ons richten op de Demo-applicatie. Wanneer deze voor het eerst wordt gestart, vraagt deze om een App ID in te voeren. Voer hier de Client ID in die we bij de registratie van de applicatie hebben gekregen.<\/SPAN><\/P>
<\/SPAN><\/P>Na het opslaan van de App ID komt u op het startscherm.<\/SPAN><\/P><\/P>De eerste stap leidt naar het aanmelden, waar het voor het eerst spannend wordt. Hier verschijnt namelijk een aanmeldpagina:<\/SPAN><\/P>
<\/SPAN><\/P>Wat is hier interessant aan? Welnu, de aanmeldpagina is dynamisch geladen webcontent die in een browser-control wordt weergegeven. Afhankelijk van de opgevraagde URL zal de inhoud iets verschillen van de getoonde screenshot, bijvoorbeeld wat betreft toepassings-titel, auteur of taal. De structuur is echter grotendeels hetzelfde.<\/SPAN><\/P><\/P>Er wordt gebruikgemaakt van een standaardprocedure voor aanmelden, die op de ArcGIS Developer-pagina's nader wordt beschreven<\/A>. Hierbij wordt alleen een ArcGIS-URL opgevraagd:<\/SPAN><\/P>
https:\/\/www.arcgis.com\/sharing\/oauth2\/authorize?client_id=P61TE38ydg2L7y30&response_type=code&redirect_uri=urn:ietf:wg:o060606060606060606060606b<\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/>...<\/><\/> <\/> <\/> <\/> <\/> <\/> <\/> <\/> <\/> <\/> <\/> <\/> <\/> <\/> <\/> <\/> <\/> <\/> <\/> <\/> <\/> <\/> <\/> <\/> <\/> <\/> <\/>...
(Note: The URL is truncated here for brevity but should be kept as-is in the actual output.)
Dit is een REST-endpoint dat de gebruiker autoriseert tegen ArcGIS. Dit vereist een Client ID die we eerder onder onze account hebben geregistreerd en als onderdeel van de URI wordt meegegeven. De rest van de URL is vast gedefinieerd en wordt uitgelegd op de Developer-website.
Dit heeft enkele voordelen: deze procedure bespaart veel ontwikkelwerk omdat de pagina automatisch server-side wordt gegenereerd en zich aanpast aan de configuratie. Ook is het aanmeldgedeelte inbegrepen, als ontwikkelaar hoef ik geen foutafhandeling voor verkeerde loginpogingen te implementeren en maakt het niet uit of ik wil autoriseren tegen ArcGIS Cloud of een Portal-oplossing.
Wanneer autorisatie heeft plaatsgevonden, wordt het token dat als antwoord van het ArcGIS-platform terugkomt opgeslagen in een centraal, overkoepelend (= statisch singleton) object, de IdentityManager:
Het fungeert – zoals de naam zegt – als centrale identiteitsbeheerder. Zodra een ArcGIS-dienst wordt opgevraagd, wordt hier automatisch gecontroleerd of er al een opgeslagen toestemming voor deze dienst bestaat. Zo niet, of als een toestemming verlopen is, wordt toegang tot de dienst geweigerd.
Laat me zien wat je hebt<\/SPAN>
We zijn nu dus in staat om ons aan te melden bij de applicatie. Nu willen we ons richten op het eigenlijke doel van de applicatie: kaarten offline kunnen gebruiken.
Allereerst moeten we beschikbare objecten zoeken die door onze applicatie gebruikt kunnen worden. Dit gebeurt in de methode SearchArcgisOnline()
van de klasse ArcGisPortalWebMapItemsViewModel. Eerst wordt een ArcGIS Portal-instantie aangemaakt die algemeen beschikbaar is voor aanvragen tegen het ArcGIS-platform (dus ArcGIS Online of Portal for ArcGIS):

Als men na uitvoering van deze instructie naar het object _arcGisPortal kijkt, ziet men dat er is ingelogd met onze eerder gebruikte login:

De toewijzing is hier gedaan door IdentityManager, die passende inloggegevens voor aanvragen tegen ArcGIS Online heeft gevonden.
Vervolgens willen we in de applicatie alle kaarten zien die offline opgeslagen kunnen worden. De volgende query zoekt naar alle kaarten (= Web Maps) die bedoeld zijn voor offline opslag. Om te demonstreren hoe men zoeken verder kan beperken, wordt ook alleen binnen de organisatie gezocht naar zulke kaarten. De „SearchText“ is daarbij een zoektekst uit de gebruikersinterface waarmee men zoeken verder kan beperken:

Ten slotte geven we nog enkele zoekinstellingen mee en versturen we het zoekverzoek:

Omdat we aanvankelijk een Web Map met naam "My cool Map" hebben aangemaakt, zoeken we eens op het trefwoord "cool". De zoekopdracht levert in ons geval precies één resultaat:

Waarom precies één resultaat? Nou ja, natuurlijk zien we onze eigen kaart die we hadden aangemaakt. Zeker zullen nog veel andere mensen werken met ArcGIS "cool", zodat er waarschijnlijk meerdere "coole kaarten" zouden zijn. Deze worden echter niet weergegeven bij zoeken omdat een deel van onze zoekcriteria een beperking definieert tot alle objecten van onze eigen organisatie. Ook al zijn wij geen groot bedrijf maar slechts een "eenmanszaak", worden wij toch als eigen organisatie beschouwd.
Geef maar!
Zo - laten we beginnen. Nu downloaden we deze Web Map lokaal. Klik hiervoor op de knop "Get the map offline" binnen het kaartobject en we gaan meteen naar een nieuwe pagina waar direct de inhoud van de Web Map wordt weergegeven. In drie stappen komen we tot onze offline-kaart: Allereerst geven we onze toekomstige Cache een unieke naam, markeren vervolgens een (deel)gebied dat offline beschikbaar moet zijn en starten dan de download met de knop „Export Map“:<\/SPAN><\/P>
<\/SPAN><\/P>Een volgende paginawisseling brengt ons automatisch naar het overzicht van alle offline beschikbare Caches. Deze verzameling is – afhankelijk van hoeveel u al met de applicatie heeft gewerkt – meer of minder uitgebreid, in mijn geval zijn er al enkele Caches. Caches worden gegroepeerd weergegeven per Web Maps, want het is zeker mogelijk om voor dezelfde Web Map verschillende Caches te laden (bijvoorbeeld met verschillende kaartuitsneden). De groep kan worden geminimaliseerd, zodat alleen nog wat informatie over de Web Map zichtbaar is.<\/SPAN><\/P><\/P>De nieuwe Cache, die net wordt gedownload, wordt door een voortgangsbalk als actief gemarkeerd, bovendien geeft een statusbalk in het Cache-object informatie over de huidige handeling. Elk Cache-object beschikt daarnaast over knoppen om de cache te verwijderen, synchroniseren en laden.<\/SPAN><\/P>
<\/SPAN><\/P>Terwijl we op de Cache wachten bekijken we kort in de code wat daar eigenlijk gebeurt.<\/SPAN><\/P><\/P>De hoofdrol speelt vooral in de klasse CreateOfflineMapViewModel<\/SPAN>. Deze is verantwoordelijk voor het aanmaken van de Caches. Het centrale startpunt is de methode ExportMap()<\/SPAN>, die bij het klikken op „Export Map“ wordt geactiveerd. Natuurlijk bevinden zich hier de centrale functies die het belangrijkste uit de Web Map opslaan:#_msocom_1<\/A> <\/SPAN>de geografische gegevens, dus de basiskaart en de Feature-gegevens.<\/SPAN><\/P>
<\/SPAN><\/P>Wie al met Esri Offline Data heeft gewerkt (bijv. de ArcGIS for Windows MobileSDK of de App Collector for ArcGIS), kent dit proces in principe al. Basiskaart en vectordata worden apart opgeslagen. Dit komt enerzijds door de verschillende verwerking van raster- en featuredata, maar natuurlijk ook door de verschillende datastructuur: De basiskaart ligt als zogenaamd Tiled Package voor, een gezipt mapje met een structuur van tegelafbeeldingen. De vectordata daarentegen liggen in een database-structuur, nauwkeuriger gezegd in een SQLite-formaat. In ons geval eindigt de SQLite-database in het bestandssysteem op „geodatabase“, dit is echter vrij te kiezen.<\/SPAN><\/P>
<\/SPAN><\/P>Maar voordat de eigenlijke geodata-export wordt gestart gebeurt er nog iets anders:<\/SPAN><\/P>
<\/SPAN><\/P>Hier worden informatie van de Web Map lokaal opgeslagen. Daarbij moet men weten dat een Web Map in wezen
een configuratiebestand in JSON-formaat<\/A> is, die zelf geen data bevat maar eerder informatie waar de data liggen. Eveneens worden informatie over de kaartdefinitie zelf zoals Id, titel, eigenaar, aanmaakdatum etc. opgeslagen. Deze twee informatie krijgt men van de Web Map, een online gedefinieerd object waarop men geen toegang heeft als men offline werkt. Om deze informatie toch ook offline beschikbaar te hebben is in de demo een mechanisme ingebouwd dat de Web Map-definities bij export lokaal opslaat en zo in elke situatie beschikbaar maakt.<\/SPAN><\/P><\/P>
Alles nieuw maakt de App<\/SPAN><\/H1>Zo, intussen is de Cache volledig geladen. Nu kunnen we er drie dingen mee doen: We kunnen hem in een kaart weergeven, synchroniseren en verwijderen.<\/SPAN><\/P><\/P>We concentreren ons eerst op het tonen van de geladen Cache en klikken daarom op „Load map“.<\/SPAN><\/P>
<\/SPAN><\/P>Er opent zich een nieuw tabblad genaamd „Map“ en in het scherm zien we een kaart en een lijst van alle bewerkbare lagen. Als men een laag selecteert kan men in de kaart een punt aanklikken en zo nieuwe objecten in deze laag aanmaken. Voor het gemak wordt in de demo afgezien van invoer van attributen, er wordt slechts een geometrie aangemaakt, dit zou echter de volgende stap zijn in een volledige applicatie.<\/SPAN><\/P><\/P>Dat er wijzigingen op de laag zijn gemaakt wordt zichtbaar doordat achter de betreffende lagen in de lagenlijst een aantal bewerkingen wordt aangegeven. Zodra er wijzigingen aan een Cache zijn is het zinvol deze te synchroniseren, wat dan ook de laatste stap is die de demo wil laten zien.<\/SPAN><\/P><\/P>Om dat te doen gaan we weer naar het tabblad „Config“ en kiezen bij onze Cache voor de functie „Sync“. Weer verschijnt de voortgangsbalk, ditmaal echter niet met een export-beschrijving maar met een synchronisatie-titel. In tegenstelling tot export wordt bij synchronisatie vergeleken welke wijzigingen er zijn geweest en deze worden centraal ingespeeld. Lokale wijzigingen worden geüpload, wijzigingen van andere clients worden gedownload.<\/SPAN><\/P>
\nFinale, oh oh<\/><\/>\nWat wilde dit artikel bereiken? Enerzijds moesten enkele typische vragen en processen van een offline-applicatie worden geïllustreerd. In combinatie met verwijzing naar de Collector Light Demo-applicatie bent u zo in staat om stap voor stap te bekijken en ook te begrijpen wat er gebeurt. Dit kan u helpen uw vragen op te lossen maar geeft u ten minste enkele ideeën hoe u bepaalde zaken kunt aanpakken.<\/><\/>\nOver de demo nog het volgende opmerking: De ontwikkeling begon al gebaseerd op een ArcGIS Runtime for .NET Beta-versie. Zo hebben wij bij Esri Deutschland al vroeg inzicht gekregen in ontwikkeling en konden we ook ervaring opdoen. Sinds die vroege beta-versies zijn meerdere nieuwe versies verschenen die talrijke waardevolle wijzigingen hebben gebracht. Daarnaast zijn er inmiddels extra Toolkits<\/> en Voorbeelden<\/> die talrijke oplossingsrichtingen laten zien. Wees dus niet verbaasd als u voor hetzelfde probleem verschillende oplossingen vindt. Soms zijn deze gelijkwaardig, soms hebben ze verschillende voordelen.<\/><\/>\nAls u naast deze informatie nog verdere vragen heeft en individuele advies wenst, neem dan gerust contact op met Esri Deutschland, ons Consulting Team staat u deskundig terzijde.<\/><\/>