Prezados leitores, hoje daremos continuidade ao post anterior falando um pouco sobre o GeoWave.

1. LocationTech GeoWave

O GeoWave é uma biblioteca que conecta a escalabilidade de estruturas de computação distribuídas de key-value stores (Hadoop + HBase neste caso) com software geoespacial para armazenar, recuperar e analisar conjuntos de dados geoespaciais maciços. Essa é uma ótima ferramenta 🙂

Falando do ponto de vista do desenvolvedor, esta biblioteca implementa um provedor de dados vetoriais do kit de ferramentas GeoTools para ler recursos (geometria e atributos) de um ambiente distribuído. Quando adicionamos o plugin correspondente ao GeoServer, o usuário verá novas stores para configurar novos tipos de conjuntos de dados distribuídos suportados.

Hoje em dia, o GeoWave suporta três tipos de armazenamento de dados distribuídos; Apache Accumulo, Google BigTable e HBase, usaremos o último deles.

Deixemos o GeoServer para mais tarde. De acordo com os guias de usuários e desenvolvedores do GeoWave, temos que definir índices primários e secundários que as camadas devem usar, então podemos carregar informações para o nosso local de armazenamento de dados.

Conforme consta no guia do desenvolvedor, vamos construir com o Maven o kit de ferramentas GeoWave para salvar dados geográficos no HBase:

> mvn package -P geowave-tools-singlejar

E incluir o plugin no GeoServer:

> mvn package -P geotools-container-singlejar

Defini minha própria variável de ambiente com um comando para executar os processos GeoWave o mais confortável possível:

> set GEOWAVE=
  java -cp "%GEOWAVE_HOME%/geowave-deploy-0.9.6-SNAPSHOT-tools.jar" 
  mil.nga.giat.geowave.core.cli.GeoWaveMain

Agora, podemos executar facilmente comandos digitando % geowave% […]. Verificamos a versão GeoWave:

> %geowave% --version

Ok, vamos registrar os índices espaciais e temporais necessários da nossa camada. O aplicativo cliente irá filtrar dados usando um filtro espacial (BBOX) e um filtro temporal para buscar apenas medições de NO2 de uma data específica.

Agora, registre ambos os índices:

> %geowave% config addindex 
  -t spatial eea-spindex --partitionStrategy ROUND_ROBIN

> %geowave% config addindex 
  -t spatial_temporal eea-hrindex --partitionStrategy ROUND_ROBIN 
  --period HOUR

E adicione uma “loja”, na terminologia do GeoWave, para nossa nova camada:

> %geowave% config addstore eea-store 
  --gwNamespace geowave.eea -t hbase --zookeeper localhost:2222

Aviso, no último comando, 2222 é o número da porta onde foi publicado o Zookeeper.

Agora, podemos carregar os dados. Nossa entrada são arquivos CSV, então eu usarei a opção “-f geotools-vector” para indicar que o GeoTools inspeciona o provider de vetores que deve usar para ler os dados. Existem outros formatos suportados e, claro, podemos desenvolver um novo provider para ler nossos próprios tipos de dados específicos.

Para carregar um arquivo CSV, faça:

> %geowave% ingest localtogw 
  -f geotools-vector 
  ./mydatapath/eea/NO2-measures.csv eea-store eea-spindex,eea-hrindex

Ok, dados carregados, até agora sem problemas, certo? Porém, a GeoTools CSVDataStore tem algumas limitações ao ler arquivos. O código atual não suporta atributos de data/hora (nem atributos booleanos). O código gera todos eles como strings (texto). Isso é inaceitável para nossos próprios requisitos, a data da medição deve ser um atributo preciso para o índice, então foi alterado no código java original. Além disso, para calcular o tipo de valor apropriado de cada atributo, o leitor lê todas as linhas no arquivo, é a maneira mais segura, mas pode ser muito lento ao ler grandes arquivos com milhares e milhares de linhas. Se o arquivo tiver um esquema congruente, podemos ler um pequeno conjunto de linhas para calcular os tipos. Então também foi alterado. Temos que reconstruir GeoTools e GeoWave. Você pode baixar as alterações deste fork do GeoTools.

Após esta pausa, vamos voltar ao caminho principal do guia, onde nós carregamos recursos em nossa camada com o comando “ingest”. Nós incluímos o plugin em uma instância do GeoGerver implantada também (é fácil, basta copiar a biblioteca “geowave-deploy-xxx-geoserver.jar” para a pasta “..\WEB-INF\lib” e reiniciar).

No próximo post iremos abordar o GeoServer, não perca!