Pular para o conteúdo principal

Extraindo dados Georreferenciados

Para quem trabalha com obra civil o georreferenciamento foi uma das maneiras mais convenientes que nas ultimas décadas se consolidou como uma ferramenta de compatibilização e expansão entre projetos existentes e novos de tal forma que hoje a maior parte das empresas possuem sistema bem elaborados de guardar de forma georreferenciada as informações de seus empreendimentos.

O problema é que para a projetista sempre é uma surra importar essas informações, especialmente porque elas são disponibilizadas em documentos de AutoCAD e em coordenadas UTM.


Dessa forma as coordenadas informadas em X e Y correspondem aos valores reais e a elevação vem escrita como um texto solto ou na forma de bloco, como pode ser viso na foto.

Mais ainda, é possível encontrar desenhos com curvas de nível como polyline  com Z sendo a elevação do terreno, ou seja, existe uma infinidade de formas de se receber os dados de locação de campo com os valores informados georreferenciados.

Pensando em todas essas barreiras pensei em desenvolver um código capaz de unir todas essas informações para importação no PLS-CADD, o programa de CAD para roteamento de linhas de transmissão de energia.

O PLS-CADD tem uma forma simples de entrar com dados de topografia, trata-se do formato XYZ. Este formato é uma forma de organização bem compacta de armazenamento e manipulação de massas de dados topográficos como nuvem de pontos. É possível, por exemplo, criar um arquivo tabulado com as informações de cada ponto de medição e importa-lo.

O Fato é que a forma com que a topografia brasileira informa os dados é bem caótica de tal forma que sempre temos que realizar algum tipo de manipulação para gerar uma "nuvem de pontos" e com isso ter uma precisão maior na locação das linhas de transmissão.

Não vou entrar em méritos de código mas esse programa foi feito usando o .NET API do AutoCAD 2012. E basicamente consiste em um comando que carrega um formulário e o mantem retido, "aberto e ligado ao AutoCAD"  durante toda a seção de importação de pontos de tal forma que os botões da janela enviam comando de prompt pelo ActiveDocument executando o comando com todas as interfaces disponíveis da API retornando os dados no formulário aberto.


A janela fica sendo uma escarva do AutoCAD de tal forma que a área de impressão de valores é acessada como "Public", logo todos os comando executados no MyCommands.cs podem transferir e acessar a interface de saída a qualquer momento. Não existe risco de mais de um comando acessar a interface pois todos rodam bem rápido além disso, o usuário só pode executar um comando de cada vez.

Um ponto importante que foi criado nesse programa foi associação do Feature Code. O Feature Code é a designação de pontos utilizada no PLS-CADD, trata-se de uma lista de códigos numéricos que associam a cada ponto descrição do tipo de obstáculo que ele se refere e os espaçamento associados que serão adotados durante o roteamento da Linha de Transmissão. Como o desejo é criar um arquivo de pontos já final, completamente pré-analisado no processo de importação isso era vital, logo criei uma classe separada, responsável por ler o arquivo *.fea onde são salvos os Feature Codes e lista-los de tal forma que todas as funções sejam capazes de utilizar.

Foi criado basicamente 4 comandos iniciais para realizar a importação dos pontos:

  • "Importar XY"
  • "Importar YX e Z"
  • "Importar Polyline de elevação"
  • "Importar um bloco com informações"
Os dois primeiros são bem parecidos, trata-se de selecionar um ponto georreferenciado no desenho de AutoCAD e, através de outra caixa de dialogo, associar as informações pertinentes do ponto. Útil quando a informação sobre o ponto está solta no desenho como texto ou indicação de outra natureza como foto e afins.


O Terceiro comando trata-se de importar uma polyline de elevação. O PLS-CADD é capaz de importar isso também e esse comando é um pouco desnecessário, mas como eu estava com a mão na massa decidi fazer uma ferramenta bem universal onde não seria necessário importar alguns pontos de uma forma e outros de outra forma.

Quem trabalha com Polilinhas do AutoCAD logo notará que existem 3 tipos de Ploylines: Polyline, Polyline2d e Polyline3d. É engraçado porque o PLS-CADD só entende Polyline2d  mas quando ele cria um DXF 3D do alinhamento da Linha de Transmissão (LT) ele exporta uma Polyline3d. 



De fato, para o código eu só tratei os objetos to tipo Polyline, Polyline2d, pois as curvas de nível são linhas com elevação constante. Adicionalmente é possível editar a elevação de cada linha através da mesma caixa de dialogo apresentada nos comandos anteriores. Também é possível importar todas elas juntas caso cada uma esteja na sua dada elevação.


Por fim, o mais complexo comando foi o de importar informações listadas num bloco. Muito embora este seja a forma mais eficiente de associar as informações do levantamento topográfico uma vez que é possível associar a natureza o obstáculo cota, altura e dezenas de outras informações, para conversão é muito mais complexo.

A tarefa de importar eu dividi em 2 passos: 
1º Passo: Associar as informações do bloco com os atributos do PLS-CADD, desta maneira o usuário selecione um Block Reference com informações, cada atributo assim como o nome do bloco e as coordenadas X,Y e Z são listadas para associação com cada atributo de ponto do PLS-CADD.;
2º Passo: Selecionar todos os Block Reference que se deseja importar com aquela associação feita.
Com isso foi possível rapidamente extrair todas as informações da topografia e transferi-las para o PLS-CADD.

Comentários

  1. Olá Vitor!
    É possível falar contigo sobre este trabalho que você publicou?
    Se sim poderia informar seu número de telefone ou email? O meu email é: marcoantonio@engemap.com.br

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

Numeração Automática no AutoCAD

Sem dúvida esse é uma ferramenta única que fazia falta a tempos e foi introduzida recentemente no AutoCAD, na última década… Em 2013 tinha feito um programa para criar uma bolinhas de numeração automática usando o conceito de Leader eu fazia um controle dos números dos itens na mão mesmo, depois de um tempo resolvi fazer um menuzinho para controlar o conteúdo do número dos bullets, hoje isso não é mais necessário, existe um comando no próprio AutoCAD para isso e faz parte das Ferramentas Expressas do AutoCAD. Gosto de compartilhar ferramentas e dicas que tendem a ser menos conhecidas ou subutilizadas, mas ainda podem fornecer um impulso para sua produtividade e fluxo de trabalho e que eu mesmo me surpreendi quando as encontrei Hoje, quero apresentar outra ferramenta, a numeração automática. Como o nome indica, o comando Numeração automática permite que você adicione automaticamente um número às etiquetas ou texto em um desenho. Vou mostrar como a numeração automática pode ser usada par...

Alterar a cor de fundo do AutoCAD

Eu sou um adepto do fundo preto, tudo que eu posso mudo a cor do fundo para preto. Nas ultimas versões do AutoCAD tenho notado que não é mais o padrão o fundo preto absoluto, é um cinza escuro. As vezes gosto também de mudar a cor do Layout de branco para preto afinal de contas quando trabalhamos com penas e contraste no model space preto, ver um desenho no layout é impossível.  Você pode mudar sua cor de fundo do AutoCAD para a cor que quiser. Definindo cores personalizadas Primeiro, vá para o menu Opções (botão Aplicativo> Opções), selecione a guia Exibição e clique no botão Cores. Agora você deve ver a caixa de diálogo Cores da janela de desenho: Agora você pode atualizar as cores de qualquer elemento da interface. Isso incluí o plano de fundo em qualquer contexto (selecione Model e Layout). Você pode escolher qualquer uma das predefinições, ou você pode escolher a partir de todo o espectro (basta escolher a opção Selecionar Cor ...). Se você não gost...

Unindo blocos em AutoCAD utilizando .NET

Hoje me deparai com uma necessidade de unir blocos com propriedades então resolvi fazer um comando para realizar esses procedimento. A principio esse procedimento não é tão complexo de ser executado individualmente mas por outro lado gostaria também de analisar um pouco melhor as possibilidades de se manipular blocos utilizando o AutoCAD. Abaixo o código que utilizei: using Autodesk.AutoCAD.ApplicationServices ; using Autodesk.AutoCAD.DatabaseServices ; using Autodesk.AutoCAD.EditorInput ; using Autodesk.AutoCAD.Runtime ; using System.Linq ; // This line is not mandatory, but improves loading performances [assembly: CommandClass(typeof(Merging_AutoCAD_blocks.Comandos))] namespace Merging_AutoCAD_blocks { public class Comandos { /// <summary> /// Uni dois ou mais blocos em um unico bloco. /// </summary> [CommandMethod("MERGBLKS")] public static void UnindoBlocos () {...