Consultas geoespaciais: Usando Python para pesquisar cidades

16665891 10211247083188500 2291386332147570222 o

Daniel Ancuta é um engenheiro de software com vários anos de experiência no uso de diferentes tecnologias. Ele é um grande fã de "The Zen of Python", que tenta aplicar não apenas em seu código, mas também em sua vida pessoal. Você pode encontrá-lo no Twitter: @daniel_ancuta

Consultas geoespaciais: Usando Python para pesquisar cidades

As informações de geolocalização são usadas todos os dias em quase todos os aspectos de nossa interação com os computadores. Seja em um site que deseja nos enviar notificações personalizadas com base na localização, em mapas que nos mostram a rota mais curta possível ou apenas em tarefas executadas em segundo plano que verificam os lugares que visitamos.

Hoje, gostaria de apresentar a você consultas geoespaciais que são usados no Couchbase. Consultas geoespaciais permitem que você pesquise documentos com base em sua localização geográfica.

Juntos, escreveremos uma ferramenta em Python que usa consultas geoespaciais com API REST do Couchbase e Pesquisa de texto completo do Couchbaseque nos ajudará a pesquisar um banco de dados de cidades.

Pré-requisitos

Dependências

Neste artigo, usei Couchbase Enterprise Edition 5.1.0 build 5552 e Python 3.6.4.

Para executar os snippets deste artigo, você deve instalar o Couchbase 2.3 (estou usando o 2.3.4) via pip.

Couchbase

  1. Criar um bucket de cidades
  2. Crie uma pesquisa de cidades com o campo geográfico do tipo geopoint. Você pode ler sobre isso na seção Inserção de um campo filho parte da documentação.

Ele deve se parecer com a imagem abaixo:

image 1

Preenchimento do Couchbase com dados

Antes de mais nada, precisamos ter dados para nosso exercício. Para isso, usaremos um banco de dados de cidades de geonames.org.

O GeoNames contém dois bancos de dados principais: lista de cidades e lista de códigos postais.

Todos estão agrupados por país com as informações correspondentes, como nome, coordenadas, população, fuso horário, código do país e assim por diante. Ambos estão no formato CSV.

Para fins deste exercício, usaremos a lista de cidades. Eu usei PL.zip mas sinta-se à vontade para escolher o que preferir da lista lista de cidades.

Modelo de dados

A classe City será nossa representação de uma única cidade que usaremos em todo o aplicativo. Ao encapsulá-la em um modelo, unificamos a API e não precisamos depender de fontes de dados de terceiros (por exemplo, arquivo CSV) que podem mudar.

A maioria dos nossos snippets está localizada (até que seja dito o contrário) no arquivo core.py. Portanto, lembre-se apenas de atualizá-lo (especialmente ao adicionar novas importações) e não substituir todo o conteúdo.

 

Iterador de CSV para processar cidades

Como temos uma classe de modelo, é hora de preparar um iterador que nos ajudará a ler as cidades do arquivo CSV.

Inserir cidades no bucket do Couchbase

Unificamos a maneira de representar uma cidade e temos um iterador que lê essas informações do arquivo csv.

É hora de colocar esses dados em nossa fonte de dados principal, Couchbase.

 

Para verificar se tudo o que escrevemos até agora está funcionando, vamos carregar o conteúdo CSV no Couchbase.

 

Nesse ponto, você deverá ter cidades carregadas no seu bucket do Couchbase. O tempo que isso leva depende do país que você escolheu.

Pesquisar cidades

Temos nosso bucket pronto com dados, então é hora de voltar ao CitiesService e preparar alguns métodos que nos ajudariam a pesquisar cidades.

Mas antes de começarmos, precisamos modificar um pouco a classe City, adicionando o seguinte método:

Essa é uma lista de métodos que implementaremos no CitiesService:

  • get_by_name(name, limit=10), retorna cidades por seus nomes
  • get_by_coordinates(lat, lon), retorna a cidade por coordenadas
  • get_nearest_to_city(city, distance='10', unit='km', limit=10), retorna a cidade mais próxima

get_by_name

 

get_by_coordinates

 

get_nearest_to_city

Como você pode notar neste exemplo, usamos as classes RawQuery e SortRaw. Infelizmente, a API couchbase-python-client não funciona corretamente com o Couchbase e as pesquisas geográficas mais recentes.

Métodos de chamada

Como agora temos todos os métodos prontos, podemos chamá-lo!

O que fazer daqui para frente?

Acredito que essa introdução permitirá que você trabalhe em algo mais avançado.

Há algumas coisas que você pode fazer:

  • Talvez usar uma ferramenta CLI ou uma API REST para fornecer esses dados... Melhorar a forma como carregamos os dados, pois pode não ser muito eficiente se quisermos carregar TODAS as cidades de TODOS os países.

Você pode encontrar o código completo do core.py em github gist.

Se você tiver alguma dúvida, não hesite em me enviar um tweet @daniel_ancuta.

 

Esta postagem faz parte do Programa de redação comunitária

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

Autor

Postado por Laura Czajkowski, gerente da comunidade de desenvolvedores, Couchbase

Laura Czajkowski é a Snr. Developer Community Manager da Couchbase, supervisionando a comunidade. Ela é responsável pelo nosso boletim informativo mensal para desenvolvedores.

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.