<\/HEAD>
As exigências estão mudando. Antigamente, o processamento digital de dados era exclusivamente limitado ao escritório, mas hoje em dia há cada vez mais a possibilidade de realizar esse trabalho também em movimento.<\/SPAN><\/P><\/P>Em muitos cenários isso também é necessário: a inspeção de danos nas ruas pela manutenção das vias, por exemplo – não há mais pós-processamento de informações coletadas em papel. Em vez disso, uma coleta de dados baseada na localização, enriquecida com imagens dos danos e um fluxo imediato de informações, ao qual um despachante pode reagir instantaneamente.<\/SPAN><\/P><\/P>Ou no exemplo de uma administração florestal: onde não há dados de endereço disponíveis, são necessários dados GPS para gerenciar e localizar depósitos de madeira. Isso também permite oferecer uma descrição da localização ou até mesmo uma orientação para motoristas de caminhão que não conhecem a área.<\/SPAN><\/P><\/P>A tecnologia para isso existe há alguns anos e é oferecida pela Esri em vários produtos que se encaixam idealmente dependendo da necessidade. Um dos membros mais recentes dessa família de produtos é o ArcGIS Runtime SDK for .NET<\/A>. Trata-se de uma ferramenta para desenvolvedores para a plataforma Microsoft, com a qual podem ser criados aplicativos para Windows Desktop, Windows Store e Windows Phone – ou seja, para todo o espectro desde telefone até tablet e desktop clássico. E tudo isso com apenas um framework.<\/SPAN><\/P><\/P>
Todos os SDKs "ArcGIS Runtime" têm em comum a funcionalidade offline. Essa funcionalidade principal introduzida na versão 10.2.3 traz todas as ferramentas para gerenciar dados localmente e sem conexão de rede e depois sincronizá-los com um banco de dados central (como o
ArcGIS Online Cloud<\/A>). São possíveis arquiteturas que combinam os diferentes produtos ArcGIS entre si: em uma Collector Light Demo<\/A><\/STRONG> realizada pela Esri Alemanha, é demonstrado que um cliente .Net e um cliente Java – ambos baseados em um ArcGIS Runtime SDK – podem gerenciar dados offline. Essa demo vai até o ponto de construir o cache offline uniformemente, tornando-o utilizável igualmente para ambos os clientes.<\/SPAN><\/P><\/P>
No exemplo da demo .NET, alguns processos serão explicados e algumas dicas dadas que podem ajudar a realizar sua própria aplicação. Todas as partes do código e capturas de tela mostradas você encontrará no projeto demo da mesma forma ou similar.<\/SPAN><\/P><\/P>O projeto demo é construído segundo o conceito MVVM e utiliza um toolkit 3rd Party chamado
MVVM Light<\/A>. O conceito prevê uma desacoplagem da UI da lógica de negócios, tornando as interfaces intercambiáveis e permitindo reutilizar a camada lógica em diferentes aplicações em várias plataformas.<\/SPAN><\/P><\/P>
Breve sobre a ideia da aplicação demo: você pode se conectar à Esri Cloud através de uma conta ArcGIS Online e então procurar mapas configurados para uso offline. Se você estiver usando a conta dentro de uma organização, verá não apenas seus próprios mapas, mas todos os que foram compartilhados para uso conjunto com colegas. Você pode escolher qualquer mapa e disponibilizar uma versão dele offline, que poderá ser usada mesmo sem conexão de rede. Também é possível editar dados dessa forma.<\/SPAN><\/P><\/P>
Alguém tem um mapa?<\/SPAN><\/H1>Esta foi a primeira parte dos preparativos, agora temos uma conta de usuário e um Client ID para nossa aplicação. Mas ainda faltam mapas que possamos usar offline depois. Porque se começássemos agora com a demo, poderíamos fazer login com sucesso, mas não teríamos resultados na busca.<\/SPAN><\/P><\/P>Então vamos criar agora um mapa, mais precisamente um Web Map. Vá para "Meus Conteúdos". Aqui você já vê sua aplicação registrada.<\/SPAN>
< /p> Você cria um novo mapa clicando em "Criar->Mapa". Na janela seguinte damos um título ao mapa (para manter um esquema uniforme: "My cool Map") e definimos tags. Tags também são necessárias aqui novamente porque permitem encontrar mapas posteriormente por palavras-chave. Recomenda-se usar palavras-chave temáticas e locais como "offline" e "München".< /span> < /p> < /p> Quando você finalmente cria o mapa clicando em "Ok", verá em seguida um mapa-múndi vazio. Aqui você pode alterar o mapa base conforme desejar, mas principalmente adicionar camadas de mapas com dados. Esses podem ser seus próprios dados ou dados disponíveis publicamente.< /span> < /p> Vá para "Adicionar->Procurar Camada". Digite em digite na busca "Schadensmeldung Freising" e em Local "ArcGIS Online". Remova a marcação em "Dentro da extensão do mapa" caso não obtenha resultado. Adicione esses dados ao seu mapa com "Adicionar". Selecione a camada de danos e clique em "Zoom para", assim o recorte inicial atual e futuro do mapa será alterado. Salve o mapa e volte para a visualização "Meus conteúdos".<\/SPAN><\/P><\/P>Agora você verá uma outra entrada do tipo Web Map, o mapa recém-criado. Clique no nome do mapa para acessar a visualização de propriedades. Uma dessas propriedades é chamada "Modo Offline", que já está marcada como "Ativado". Para usar o mapa offline, essa configuração é necessária. Se estiver marcado como "Desativado", clique em "Editar" e marque "Ativar modo offline".<\/SPAN><\/P><\/P>Quem sou eu? <\/SPAN><\/H1>As preparações necessárias estão concluídas, agora podemos nos dedicar ao aplicativo Demo. Quando iniciado pela primeira vez, ele solicitará a entrada de um App ID. Insira aqui o Client ID que recebemos ao registrar o aplicativo.<\/SPAN><\/P>
<\/SPAN><\/P>Após salvar o App ID, você será levado à tela inicial.<\/SPAN><\/P><\/P>O primeiro caminho leva ao login, onde fica interessante pela primeira vez. Aqui aparece uma página de login:<\/SPAN><\/P>
<\/SPAN><\/P>O que há de interessante nisso? Bem, a página de login é um conteúdo web carregado dinamicamente exibido em um controle de navegador. Dependendo da URL solicitada, o conteúdo pode diferir um pouco da captura de tela mostrada, por exemplo, no título do aplicativo, autor ou idioma. Essencialmente, a estrutura é a mesma.<\/SPAN><\/P><\/P>É usado um procedimento padrão para login, que está descrito com mais detalhes nas páginas do ArcGIS Developer<\/A>. Apenas uma URL ArcGIS é solicitada:<\/SPAN><\/P>
https:\/\/www.arcgis.com\/sharing\/oauth2\/authorize?client_id=P61TE38ydg2L7y30&response_type=code&redirect_uri=urn:ietf:wg:o...<\/A><\/SPAN><\/P><\/P>
Trata-se de um Rest Endpoint que autoriza o usuário contra o ArcGIS. Ele requer um Client ID que registramos inicialmente sob nossa conta e que é passado como parte da URI. O restante da URL é fixo e explicado no site do Developer.<\/SPAN><\/P><\/P>Isso tem algumas vantagens: esse procedimento reduz muito o esforço de desenvolvimento, pois a página é gerada automaticamente no servidor e se adapta à configuração. A área de login também está incluída, como desenvolvedor não preciso lidar com tratamento de erros para tentativas de login incorretas e não importa se quero autorizar contra a ArcGIS Cloud ou uma solução Portal.<\/SPAN><\/P><\/P>Quando a autorização ocorre, o token retornado pela plataforma ArcGIS é armazenado em um objeto centralizado e abrangente (=singleton estático), o IdentityManager:<\/SPAN><\/P>
<\/SPAN><\/P>Ele atua – como o nome indica – como gerenciamento central de identidade. Sempre que um serviço ArcGIS é solicitado, ele verifica automaticamente se há uma permissão armazenada para esse serviço. Caso contrário, ou se a permissão expirou, o acesso ao serviço não será permitido.<\/SPAN><\/P><\/P>
Mostre-me o que você tem<\/SPAN><\/H1>Agora estamos aptos a fazer login no aplicativo. Agora queremos ir direto ao propósito principal do aplicativo: a possibilidade de usar mapas offline.<\/SPAN><\/P><\/P>Primeiro precisamos procurar objetos disponíveis que nosso aplicativo possa usar. Isso acontece no método SearchArcgisOnline()<\/SPAN> da classe ArcGisPortalWebMapItemsViewModel<\/SPAN>. Primeiro, uma instância do ArcGIS Portal é criada, que está disponível para solicitações gerais contra a plataforma ArcGIS (ou seja, ArcGIS Online ou Portal for ArcGIS):<\/SPAN><\/P>
Ao examinar o objeto _arcGisPortal após executar a instrução, percebe-se que o login foi feito com nossa conta usada anteriormente:<\span> <\p>
<\span> <\p> A associação foi feita pelo IdentityManager, que encontrou as credenciais adequadas para solicitar ao ArcGIS Online.<\span> <\p> Em seguida, queremos ver todos os mapas no aplicativo que podem ser salvos offline. A consulta abaixo procura todos os mapas (=Web Maps) destinados ao armazenamento offline. Para demonstrar como restringir ainda mais a pesquisa, ela procura apenas dentro da organização por esses mapas. O "SearchText" é um texto de busca da interface do aplicativo usado para restringir ainda mais a pesquisa:<\span> <\p>
<\span> <\p> Finalmente, fornecemos algumas configurações de pesquisa e enviamos a consulta:<\span> <\p>
<\span> <\p> Como criamos inicialmente um Web Map chamado "My cool Map", vamos procurar pela palavra-chave "cool". A busca retorna exatamente um resultado no nosso caso:<\span> <\p>
<\span> <\p> Por que exatamente um resultado? Bem, claro que vemos nosso próprio mapa criado por nós mesmos. Certamente muitas outras pessoas acham trabalhar com ArcGIS "cool", então provavelmente haveria vários "mapas legais". No entanto, eles não aparecem na busca porque parte dos nossos critérios limita os resultados aos objetos da nossa própria organização. Mesmo sendo uma empresa de "uma pessoa", somos considerados uma organização própria.<\span> <\p> Me dá!<\span>
Então – vamos lá. Agora vamos baixar esse Web Map localmente. Para isso, clique no botão "Get the map offline" dentro do objeto do mapa e mudamos para uma nova página onde o conteúdo do Web Map será exibido imediatamente. Em três etapas chegaremos ao nosso mapa offline: Primeiro, damos ao nosso futuro Cache um nome único, em seguida marcamos uma área (parcial) que deve estar disponível offline e então iniciamos o download com o botão "Export Map":<\/SPAN><\/P>
<\/SPAN><\/P>Uma outra troca de página nos leva automaticamente para a visualização de todos os Caches disponíveis offline. Essa coleção é – dependendo de quanto você já trabalhou com a aplicação – mais ou menos extensa, no meu caso já existem alguns Caches. Os Caches são exibidos agrupados por Web Maps, pois é perfeitamente possível carregar diferentes Caches para o mesmo Web Map (por exemplo, com diferentes recortes de mapa). O grupo pode ser minimizado, de modo que apenas algumas informações sobre o Web Map fiquem visíveis.<\/SPAN><\/P><\/P>O novo Cache, que está sendo baixado, é marcado como ativo por uma barra de progresso, além disso uma barra de status no objeto Cache informa sobre o processo atual. Cada objeto Cache também possui botões para excluir, sincronizar e carregar o Cache.<\/SPAN><\/P>
<\/SPAN><\/P>Enquanto esperamos pelo Cache, vamos dar uma olhada rápida no código para ver o que realmente acontece.<\/SPAN><\/P><\/P>A ação principal ocorre principalmente na classe CreateOfflineMapViewModel<\/SPAN>. Esta é responsável pela criação dos Caches. O ponto central de entrada é o método ExportMap()<\/SPAN>, que foi acionado ao clicar em "Export Map". Naturalmente, aqui estão as funções centrais que salvam o mais importante do Web Map:#_msocom_1<\/A> <\/SPAN>os dados geográficos, ou seja, o mapa base e os dados de feição.<\/SPAN><\/P>
<\/SPAN><\/P>Quem já trabalhou com dados Esri Offline (por exemplo, com o ArcGIS for Windows MobileSDK ou o aplicativo Collector for ArcGIS), conhece esse processo basicamente. O mapa base e os dados vetoriais são armazenados separadamente. Isso se deve, por um lado, ao processamento diferente dos dados raster e de feição, mas claro também à estrutura diferente dos dados: O mapa base está em um chamado Tiled Package, uma pasta compactada com uma estrutura de imagens em mosaico. Já os dados vetoriais estão em uma estrutura de banco de dados, mais precisamente em formato SQLite. No nosso caso, o banco SQLite termina no sistema de arquivos como "geodatabase", mas isso é configurável.<\/SPAN><\/P>
<\/SPAN><\/P>Mas antes que a exportação real dos dados geográficos comece, algo mais acontece:<\/SPAN><\/P>
<\/SPAN><\/P>Aqui são armazenadas localmente informações do Web Map. Para isso é preciso saber que um Web Map é basicamente
um arquivo de configuração no formato JSON<\/A>, que não contém dados em si, mas sim informações sobre onde os dados estão localizados. Também são armazenadas informações sobre a definição do mapa em si como Id, título, proprietário, data de criação etc. Essas duas informações vêm do Web Map, um objeto definido online ao qual você não tem acesso quando trabalha offline. Para ter essas informações disponíveis offline também, foi implementado na demo um mecanismo que salva localmente as definições do Web Map durante a exportação e assim as torna disponíveis em qualquer situação.<\/SPAN><\/P><\/P>
Tudo novo faz o App<\/SPAN><\/H1>Então, agora o Cache está completamente carregado. Agora podemos fazer três coisas com ele: podemos exibi-lo em um mapa, sincronizá-lo e excluí-lo.<\/SPAN><\/P><\/P>Vamos nos concentrar primeiro na exibição do Cache carregado e clicamos em "Load map".<\/SPAN><\/P>
Abre-se uma nova aba chamada "Map", e na visualização vemos um mapa e uma lista de todas as camadas editáveis. Se você selecionar uma camada, pode clicar em um ponto no mapa e assim criar novos objetos nessa camada. Para simplificar, a demo não inclui a entrada de atributos, apenas cria uma geometria — este seria o próximo passo em uma aplicação completa.<\span> Que alterações foram feitas na camada fica evidente porque na lista da camada aparece um número indicando quantas edições foram feitas nas camadas afetadas. Assim que houver alterações em um Cache faz sentido sincronizá-lo — este será também o último passo mostrado pela demo.<\span> Para fazer isso voltamos para a aba "Config", selecionamos a função "Sync" no nosso Cache. Novamente aparece a barra de carregamento, desta vez não com uma descrição de exportação mas com um título de sincronização. Ao contrário da exportação, na sincronização é comparado quais alterações ocorreram e elas são aplicadas centralmente. Alterações locais são enviadas para cima e alterações feitas por outros clientes são baixadas.<\span>
<\span> Finale, oh oh<\span>
Qual era o objetivo deste artigo? Por um lado deveria ilustrar algumas questões típicas e processos de uma aplicação offline. Juntamente com a referência à Collector Light Demo Application você pode assim examinar os passos individualmente e compreendê-los. Isso pode ajudar a resolver suas dúvidas ou pelo menos dar algumas ideias sobre como abordar certas coisas.<\span>
Sobre a demo vale ainda mencionar o seguinte: O desenvolvimento começou baseado numa versão Beta do ArcGIS Runtime for .NET. Assim tivemos desde cedo insights da Esri Deutschland sobre o desenvolvimento e pudemos ganhar experiência antecipadamente. Desde as primeiras versões beta várias novas versões foram lançadas trazendo muitas mudanças valiosas. Além disso existem agora toolkits adicionais (Toolkits) e exemplos (Exemplos) mostrando várias soluções possíveis. Portanto não se surpreenda se encontrar diferentes soluções para o mesmo problema — às vezes equivalentes outras vezes com vantagens distintas.<\span>
Se você tiver dúvidas além dessas informações e desejar consultoria individualizada fique à vontade para contatar a Esri Deutschland — nossa equipe de consultoria está pronta para ajudá-lo competentemente.<\span>
<\BODY> <\HTML>