.NET

Primeiros passos com GeoJSON, Couchbase, .NET e Google Maps

Esta é uma postagem de convidado de Calvin Allen. Calvin é um desenvolvedor .NET em Columbus, OH, que gosta de projetar software que não apenas resolva problemas comerciais, mas que também seja fácil de usar, dentro do orçamento e do prazo. Se ele não está projetando software, está aprendendo a ser um desenvolvedor de software melhor. Para ele, isso não é apenas uma carreira - é também um estilo de vida.

O que é GeoJSON? GeoJSON.org o define como:
"GeoJSON é um formato para codificar uma variedade de estruturas de dados geográficos"

Mas o que isso realmente significa? Basicamente, é um formato padrão, usando a estrutura JSON, para definir objetos geográficos. Esses "objetos geográficos" podem ser vários itens diferentes, desde um simples "Ponto" até um objeto mais complexo, como um "Polígono".

Aqui está um exemplo simples de um "ponto em um mapa" para as "Ilhas Dinagat":

Agora que você já conhece toda a história, pode estar se perguntando: "Por que eu preciso do GeoJSON?". A resposta simples é que ele é um padrão atualmente suportado em várias tecnologias de mapeamento, como o Google Maps. Com seus dados já no formato GeoJSON, você pode fornecer esses dados diretamente para o Google Maps e renderize seu objeto conforme descrito. Isso não apenas evita que você tenha que "desenvolver seu próprio" formato, mas outros provedores já estão oferecendo suporte a ele, o que pode ser aproveitado conforme desejado.

Vamos começar com o código!

Demonstrarei o formato GeoJSON usando um aplicativo .NET MVC, o Couchbase (Community) Server (e o SDK do .NET) e o Google Maps - vou ter que presumir que você tem algum conhecimento prático de todos esses utilitários.

Não entrarei em detalhes sobre como criar o projeto MVC ou instalar/configurar o Couchbase, pois há muitos outros tutoriais/artigos que descrevem como realizar esses itens, especialmente em Blog do Couchbase de Matthew Groves.
Uma coisa que vou mencionar agora é que chamei o bucket do Couchbase de "recursos" e o pré-carreguei (tudo por meio do Console do Couchbase) com dois documentos - um para um polígono em torno de Roma e outro com um ponto sobre as Ilhas Dinagat (como visto acima). Esses dois arquivos json podem ser encontrados no repositório do github, para o qual criarei um link mais adiante neste artigo.

Com o novo site MVC carregado no Visual Studio, abra o console do gerenciador de pacotes NuGet e digite o seguinte comando para carregar o SDK do Couchbase .NET:

Quando o SDK do Couchbase .NET terminar de ser instalado, execute o seguinte comando para instalar a biblioteca geojson:

O primeiro pacote, "couchbasenetclient", será usado para se comunicar com nosso servidor Couchbase local para gerenciar nossos documentos GeoJSON. Essa é uma biblioteca criada e suportada pela equipe do Couchbase. A próxima, "geojson.net", é uma biblioteca auxiliar para criar/ler documentos GeoJSON. Nos bastidores, a biblioteca geojson.net utiliza o JSON.Net para serialização/deserialização de json dos tipos .NET que a biblioteca nos fornece. Sem dúvida, você poderia passar sem esse pacote/biblioteca e gerenciar os tipos por conta própria, mas, para simplificar, optei por utilizá-lo.

A primeira coisa que precisamos fazer é conectar nosso controlador. Vou reutilizar o "HomeController" que já existe no projeto.

Primeiro, adicionarei um construtor, que usaremos para armazenar nosso balde:

Agora, vou precisar de três pontos de extremidade -

  1. Um para obter uma lista de todos os recursos
  2. Um que funcionará como um simples roteamento para a página do mapa (você verá o que quero dizer)
  3. E, por fim, um para o qual a API do Google Maps fará uma chamada direta, a fim de obter o JSON para o recurso.

Aqui estão os três:

First (Primeiro) - é a ação que retorna a lista completa de recursos no meu bucket do Couchbase. Essa é apenas uma consulta N1QL simples para obter os IDs dos recursos como uma lista de cadeias de caracteres. (Eu só me importo com o ID do recurso na página da lista)

Esse é o método de roteamento simples que utilizo ao navegar na página da lista para manter o ID do recurso solicitado no qual o usuário clicou.

E, finalmente, esse método é chamado por meio da API do Google Maps na página MapFeature para obter o JSON do recurso que o usuário deseja mapear (novamente, usando o objeto FeatureCollection da biblioteca geojson.net - isso usa o Json.Net para serializar esse objeto, que também vem com seus próprios serializadores na biblioteca).

Agora, vamos às páginas de visualização propriamente ditas (há apenas duas)

Na página "Features" (Recursos), que é apenas uma listagem dos recursos em nosso bucket do Couchbase, apenas geramos cada um dos IDs dos recursos em um link de ação dentro de uma lista não ordenada:

A última página, MapFeature, é a que faz o "trabalho pesado":


$(function () {
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 6
});

map.data.loadGeoJson('/Home/GetFeatureJson/@id');

//a chamada de retorno para cada um dos recursos no loop - o último vence
function forEachGeometry(feature) {
feature.getGeometry().forEachLatLng(resetCenter);
};

//pega a latitude e a longitude de cada geometria e redefine o ponto central no mapa - o último vence - totalmente ineficiente
função resetCenter(latLng) {
map.setCenter(latLng);
};

//sempre que um recurso for adicionado ao mapa, faça um loop sobre a coleção - completamente ineficiente, mas deve dar uma ideia
map.data.addListener('addfeature', function (e) {
map.data.forEach(forEachGeometry);
});

});

https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY

Quando essa página é carregada, obtemos o ID do recurso em que o usuário clicou (armazenado no ViewBag) e, em seguida, mergulhamos diretamente em nossa marcação HTML. Você notará as duas divs, que são espaços reservados (especialmente o interior), que a API do Google Maps utilizará para exibir o mapa/os recursos.

Em seguida, entramos no Javascript - a maior parte disso é bastante básica, e diretamente dos documentos fornecidos pelo Googleexceto pelos poucos métodos que adicionei, que veremos a seguir.

A primeira coisa que fazemos é "renovar" nosso objeto de mapa e dizer a ele qual elemento DOM utilizar e qual será o nível de zoom padrão. Em seguida, você pode ver que estamos usando um método incorporado do Google Maps, loadGeoJson, que usa nosso URL local para obter o JSON do nosso bucket do Couchbase.

Os próximos métodos são rápidos que adicionei para fins de demonstração e que não devem ser utilizados em um ambiente de produção, pois são muito ineficientes. Eles redefinem o centro do mapa para o último objeto de Latitude/Longitude que encontramos nos dados que carregamos no mapa. Essa lógica não é precisa, mas "centralizará" o mapa em cima de qualquer recurso que estivermos renderizando.

A última coisa que fazemos é carregar a API do Google Maps a partir de sua CDN.

Este é um exemplo muito simples de armazenamento/consulta de dados GeoJSON de uma instância do Couchbase e de carregamento em um produto de mapeamento. E, embora eu tenha escolhido o Google Maps, outros provedores, como o MapBox, também oferecem suporte a GeoJSON.

E, por fim, se você precisar ver o exemplo na íntegra, confira o código no github. Você só precisará modificar a página MapFeature.cshtml para incluir sua própria chave de API do Google Maps (visite https://developers.google.com/maps/documentation/javascript/faça login com sua conta do Google e clique no botão "Get A Key" (Obter uma chave) no canto superior direito) e pronto! Fique à vontade para entrar em contato comigo se tiver mais perguntas - estou no Twitter como CalvinAllen_ou confira meu blog pessoal em https://www.calvinallen.net.

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por Matthew Groves

Matthew D. Groves é um cara que adora programar. Não importa se é C#, jQuery ou PHP: ele enviará solicitações de pull para qualquer coisa. Ele tem programado profissionalmente desde que escreveu um aplicativo de ponto de venda QuickBASIC para a pizzaria de seus pais nos anos 90. Atualmente, ele trabalha como gerente sênior de marketing de produtos da Couchbase. Seu tempo livre é passado com a família, assistindo aos Reds e participando da comunidade de desenvolvedores. Ele é autor de AOP in .NET, Pro Microservices in .NET, autor da Pluralsight e Microsoft MVP.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.