Convertendo uma String WKT para uma Geometria e vice-versa

Convertendo uma String WKT para uma Geometria e vice-versa

Primeiramente vamos entender o que é WKT, o WKT é a sigla de ‘Well-known text’. é de certo modo uma linguagem de marcação para a definição de vetores, geometrias,etc. Toda a sua estruturação é feita em texto puro, onde a abertura da definição contém o tipo do objeto geométrico, por exemplo:

  • POLYGON;
  • LINE;
  • MULTIPOLYGON;
  • etc.

Numa aplicação WEB, ao trabalharmos com o desenho de objetos geométricos em cima de uma layer do OpenLayers e caso queiremos persistir esse objeto, precisamos converter o mesmo para um formato entendível a aplicação servidora, logo fiz a conversão dos objetos geométricos para o formato WKT pelo Javascript e depois eu fiz um parser do WKT para transformá-lo em um objeto geométrico (Polygon, MultiPolygon, etc).

Abaixo segue uma parte do código Javascript que eu fiz para converter para o WKT os objetos geométricos desenhados em uma Layer do OpenLayers:

Action que chama a função acima:

Acima então tenho a parte que interessa a este artigo sobre como fazer a conversão. A sacada está na função addPolygonsToHTMLInput logo porque esta adiciona em um INPUT HIDDEN todos os objetos que eu desenhei separados por um ponto-e-virgula para que seja submitado com a página para o servidor.

Na aplicação Java que trata a requisição, para popular um objeto MultiPolygon, eu fiz uma classe factory para encapsular a lógica de négocio. Abaixo segue a implementação da mesma e a forma de chama-lá.

Com essa classe factory para fazer o parse e a instanciação dos objetos geométricos fica simples o nosso trabalho:

Resumo

Este artigo aborda uma solução que eu desenvolvi para conseguir trabalhar de maneira fácil com os objetos geométrios e conseguir passar os mesmo entre a linguagem Java e Javascript e vice-verso.

A implementação acima não é 100% eficiente porque nos testes que eu havia começado, o método MultiPolygon.toString() retorna a anotação do WKT como sendo MULTIPOLYGON, e na importação na camada do OpenLayers o mesmo interpreta todos os polígonos que foram desenhados como sendo um só. Em breve vou estar melhorando este código e postarei aqui.

Download da Classe

Abaixo eu deixo a classe que realiza o parse e conversão das geometrias.

http://www.mediafire.com/file/9n7i6nekv2gm74w/GeometriaFactory.java

Referências

CIH – Centro Internacional de Hidroinformática

Vector Formats – OpenLayers

WKT Wikipédia

Vivid Solutions Library

Agradecimentos

Marcos Roque Rosa – CIH

Diogo Henrique – CIH

Blog Java