telecomHall BR

 

Hunter Mapbasic PlotSectors

terça-feira, 18 de maio de 2010 20:00:00 Categories: Hunter Mapbasic Mapinfo
Rate this Content 2 Votes

A representação dos setores da nossa rede através de linhas como já vimos é suficiente para diversas análises. Entretanto, às vezes é mais interessante trabalhar com símbolos no lugar das linhas simples, como por exemplo o setor representado por um símbolo parecido com uma pétala de rosa. Hoje criaremos o nosso primeiro programa do Mapbasic – onde veremos como isso é feito.

 

 

Nota: Na grande maioria dos tutoriais temos os arquivos relacionados, e que são enviados para os Assinantes.

  • Se você é um Assinante, por favor verifique em seu e-mail o arquivo recebido para este tutorial, e utilize o suporte para qualquer dúvida ou problema que encontrar.
    • Blog_010_Hunter_Mapbasic_PlotSectors.zip.
  • Se você é um Membro comum e tem acesso apenas ao tutorial escrito, aprenderá sempre conceitos muito importantes que com certeza vão lhe ajudar em seus próprios desenvolvimentos. Leia e comprove em cada novo tutorial.
    • Se você deseja contribuir de alguma forma, a maneira mais simples é tornar-se um Assinante.

A nossa audiência vai de estudantes a profissionais experientes. Por isso pedimos um pouco de compreensão e tolerância se alguns dos conceitos hoje apresentados forem básicos para você. Além disso, todos os tutoriais, códigos e programas estão num processo contínuo de edição. Isso significa que se encontrarmos algum erro, por exemplo, de gramática ou ortografia, tentaremos corrigi-lo o mais rápido possível. Também gostaríamos de receber o seu feedback, nos informando de erros encontrados ou passagens que ficaram confusas e merecem ser reescritas.

 

Objetivo

A partir de uma tabela com informação de informação de latitude, longitude, abertura da antena e azimute dos setores da nossa rede, plotar os dados no Mapinfo utilizando regiões - como pétalas de rosa - ao invés de linhas simples.

 

Dados de Entrada

O primeiro passo então é obter a tabela com os campos necessários. Alguns são requeridos, ou obrigatórios, pois sem eles não conseguimos fazer nada. Outros são opcionais – caso não existam, consideramos valores padrão. São eles:

  • latitude: latitude do setor - REQUERIDO;
  • longitude: longitude do setor - REQUERIDO;
  • ant_azim: azimute da antena, determinando a direção do nosso símbolo - REQUERIDO;
  • ant_h: abertura horizontal da antena, determinando a largura do nosso símbolo. OPCIONAL: caso não haja esse campo na tabela, vamos considerar por exemplo uma abertura padrão de 65 graus.
  • sectorlength: comprimento do setor, em metros. OPCIONAL: caso não haja esse campo na tabela, vamos considerar por exemplo um comprimento padrão de 300 metros.
  • freqband: indica se o setor pode ter 2 tipos de símbolos, para que quando forem sobrepostos ambos apareçam. Por exemplo, no caso do GSM 900/1800, utilizamos o BCCHNo, e de acordo com o mesmo, plotamos com um ou outro tipo de símbolo. Não se preocupe, você verá isso mais tarde. Também é um campo OPCIONAL, e se não existir, consideraremos um valor padrão qualquer.

Bom, já temos os dados de nossa rede na tabela tbl_Network, do banco de dados Hunter_Network_DB.mdb, no diretório C:\Hunter\Network\Database. E até já geramos uma Tabela e um Mapa no Mapinfo com os setores.

Infelizmente, essa tabela gerada não continha a informação (campo) do azimute da antena, que vamos precisar agora. Para resolver esse problema, no arquivo baixado já há uma nova versão do arquivo que gera essa tabela (Sectors.TAB) incluindo esse campo. É o arquivo Hunter_MI_Network_1.3_RUN.mdb localizado no diretório C:\Hunter\MI\Network\Scripts.

Nota: seria interessante você mesmo tentar fazer essa alteração. Lembre-se que esse é um assunto que você já conhece. Em caso de dúvidas, contate o suporte. Senão, simplesmente siga com os novos ddos fornecidos.

Os dados atualizados (Sectors.TAB) já contém o campo ant_azim (1). E também os campos requeridos latitude e longitude (2). Os demais campos vamos deixar como padrão.

 

Importante: Estamos utilizando os dados do Hunter Network porque eles já estão disponíveis. Isso não é entretanto uma obrigação. Se você preferir, pode abrir uma tabela do Excel com os campos (pelo menos os requeridos) e criar simplesmente criar pontos – para criar um mapa básico. Desse ponto em diante é possível utilizar o programa que vamos criar para fazer as alterações de símbolos.

 

O que são programas Mapbasic

Chega de conversa, vamos trabalhar. Primeiro, vamos relembrar um pouco de Mapbasic.

O Mapbasic é o programa que permite criar executáveis (mais ou menos como Macros no VBA), para serem utilizados em conjunto com o Mapinfo, automatizando tarefas, criando formulários de interface, etc. Infelizmente, ele tem a interface bem pobre em termos de recursos – praticamente igual ao Bloco de Notas do Windows. Ou seja, já deu pra ver que temos que digitar tudo não é mesmo?

 

Os arquivos fonte tem a extensão .MB, e os executáveis .MBX.

Para rodar um programa MBX no Mapinfo você pode dar um duplo clique no mesmo usando o Windows Explorer, ou acessar o Menu: Ferramentas (1) -> Rodar Programa Mapbasic... (2). Observe que existem vários programas MBX disponíveis com a instalação (3).

 

Você também pode acessar o Menu: Ferramentas (1) -> Gerenciador de Ferramentas (2) e escolher quais os programas MBX devem estar pré-carregados apenas na sessão atual (3), ou se devem ser carregados sempre que o Mapinfo for iniciado (4). Lembre-se que fizemos isso para o programa GELink.mbx num tutorial anterior!

 

Quando rodamos um programa MBX, pode aparecer uma barra de ferramentas, um menu, ambos ou até mesmo nada. No caso do nosso programa de hoje, escolhemos criar uma nova barra de ferramentas. Assim, no final desse tutorial, quando rodarmos o nosso programa, aparecerá a barra de ferramentas Hunter Tools, conforme mostrado abaixo.

 

No Mapinfo, você pode escolher quais barras de ferramentas ficam disponíveis através do Menu: Opções (1) -> Barras de Ferramentas (2), ou dando um clique com o botão direito na barra principal (3).

 

Basicamente, temos dois botões, um que roda o nosso programa propriamente dito, e outro apenas com informações do mesmo. Observe que definimos ícones. Mais tarde veremos como fazer isso.

Além das Barras de Ferramentas, poderíamos ter incluído um novo Menu, mas vamos deixar isso para outro tutorial. Vale mais a pena utilizar menu quando você tem vários programas, e divide cada um em submenus.

Também é possível criar Interfaces do Usuário, ou seja, caixas de diálogo com combobox, caixa de texto, botão OK, etc. Tudo também bem parecido com o que temos nos forms do VBA. Nesse primeiro programa, criamos uma interface – caixa de diálogo – bem simples, apenas para permitir algumas configurações extras, e até mostrarmos algumas funções a mais do Mapbasic.

No nosso caso, dê um duplo clique na tabela Sectors.TAB (C:\Hunter\MI\Network\Data) e também no programa , com Com a tabela Sectors aberta, e também o programa HunterPlotSectors_v1.0.MBX (C:\Hunter\MI\Network\Scripts).

Clicando no ícone da rede, surge a Interface Principal.

 

Clicando no botão OK, os símbolos são plotados.

 

Temos ainda as opções de criar símbolos com tamanhos diferentes e também de criar símbolos apenas para a região no zoom atual. Pode-se usar qualquer combinação, dependo do que se deseja.

E quando clicamos no ícone de interrogação, temos as informações do programa.

 

Criando, compilando e rodando um programa Mapbasic

Agora sim, vamos lá. Se você nunca criou um programa no Mapbasic, vamos fazer um bem rapidinho.

Abra o Mapbasic, e digite o texto abaixo.

 

Salve o programa em qualquer lugar, é temporário. Observe que ele foi salvo com a extensão .MB. Pronto, você já tem seu primeiro programa Mapbasic.

Só que não é possível rodar um programa MB, somente os programas compilados MBX. Para compilar o seu programa, com ele aberto, acesse o Menu: Project (1) -> Select Project File... (2).

 

Nota: Na verdade, você vai perceber que com o tempo é melhor você utilizar as teclas de atalho CTRL + K.

 

Pronto. Verifique o local onde você salvou o arquivo temporario.MB. Agora temos o arquivo compilado temporario.MBX.

 

Dê um duplo clique no arquivo temporario.MBX. Veja o que acontece.

 

Tudo bem, esse programa não serve para nada além de informar a você a mensagem do seu primeiro programa em Mapbasic. Mas esse era o ponto: demonstrar o procedimento de criação, compilação e execução. Agora estamos prontos para ver a sintaxe de um programa real, o HunterPlotSectos.MBX.

 

O Código

Finalmente, da mesma forma que no VBA, você pode ler o programa linha a linha. O código é totalmente comentado – comentários também vem após um ‘.

Por questões de espaço, apenas algumas partes são mostradas. Sempre que você ver “...” significa que há mais código, que foi truncado, ou seja, é mais longo e você pode conferir no código completo fornecido. E cada parte mostrada tem partes que serão descritas logo a seguir.

Nosso programa (bem como quase todos) começa assim.

(1) Instrução que diz ao Mapbasic para usar os arquivos MAPBASIC.DEF e também ICONS.DEF quando compilar o programa. Estes arquivos localizam-se em C:\Program Files\MapInfo\MapBasic. Você pode abri-los, e vai ver que são uma série de definições que o Mapbasic utiliza. É mais ou menos como se fosse uma DLL, cujos dados ficam disponíveis quando você a inclui.

(2) Declarações dos Procedimentos (Sub) e Funções (Function) que criamos e usamos no programa.

(3) Declaração de variáveis – integer, string, etc.

(4) Note que podemos, e declaramos variáveis próprias. No caso, definimos uma variável do tipo ponto, constituída de valores de X e Y, ambos do tipo float.

Nota: como sempre mencionamos, isto não é um curso de programação. Se você tem alguma dúvida por exemplo sobre o que é uma variável do tipo integer, entre em contato com o suporte e ajudaremos.

Seguindo, temos o procedimento principal, onde criamos a barra de tarefas (1).

 

Observe que os comentários encontram-se todos no código, o que dispensa ficar reproduzindo tudo aqui. De qualquer forma, nesse procedimento simplesmente criamos a barra de ferramentas Hunter Tools, bem como os procedimentos que são chamados quando cada botão é clicado.

Continuando, temos o procedimento chamado quando o botão para criar setores é clicado - CreateSectors. Este é o principal. Basicamente este procedimento utiliza a função ValidateMap() (1) para verificar se uma tabela com os dados mínimos requeridos está aberta. Se sim, cria a caixa de diálogo (2). Utilizamos variáveis, como intSelectedSymbol (3) para conter os valores da caixa quando o botão OK for clicado.

 

Quando o botão OK é clicado, é chamado o procedimento GetValues2PlotSectors(). Este é um procedimento intermediário. Basicamente ele lê os valores de cada registro da tabela (1) e armazena em outras variáveis (2).

 

Por fim, temos o procedimento PlotSector(), responsável por fazer os cálculos, e plotar os símbolos (1). Esse procedimento chama uma função auxiliar – GetCoords() (2), que faz os cálculos para obter os pontos que ligados formam a pétala de rosa.

 

Os pontos interligados formam uma Polyline - Create Pline, que em seguida é convertida em região - ConvertToRegion().

Nota: para o caso onde precisamos de dois tipos de símbolos, usamos a função GetCoords() para um tipo, e GetCoords2() para outro. Assim obtemos pontos diferentes para cada caso, resultando em símbolos diferentes, como mostrado abaixo.

 

Poderíamos detalhar o código bem mais do que foi exposto acima, mas não é esse nosso objetivo, nem tão necessário, principalmente porque o código está totalmente comentado. Em caso de qualquer dúvida, por favor entre em contato via e-mail ou chat.

 

Muito difícil?

Bom, o programa já funcional, e já testamos no início. Mas tudo bem, vamos concordar: este não é um programa tão simples.

Inúmeras funções são apresentadas, procedimentos chamando funções, tratamento de erros, cálculos de trigonometria! Mas se fossemos explicar cada cálculo realizado, detalhar cada linha, perderíamos o nosso foco, que é ir construir passo a passo a ferramenta Hunter.

Em futuros módulos do Hunter, por exemplo os que tratam KPI e Parâmetros, temos códigos como este, e alguns bem mais complexos.

Mas veja o outro lado: você não tem a obrigação de aprender os códigos tudo de uma vez. Você já tem tudo pronto e funcional, basta usar. Em um breve tutorial mostraremos como vincular os seus dados reais aos aplicativos que vamos seguir criando. E você sempre pode contar com o nosso suporte.

Portanto, não entenda como difícil. Difícil seria se você precisasse fazer tudo sozinho!

 

Dicas Finais

Só para terminar por hoje de forma menos complicada, vamos ver algumas dicas finais (por hoje).

Primeiro vamos falar dos ícones que utilizamos na barra de ferramentas Hunter Tools. Os ícones pré-definidos do Mapbasic estão disponíveis através do arquivo ICONS.DEF – arquivo que é incluído (INCLUDE) no início do programa MBX.

A dica aqui é que existe um programa que permite que você visualize os ícones que você pode utilizar em sua aplicação. No diretório C:\Program Files\MapInfo\MapBasic\SAMPLES\MAPBASIC\ICONDEMO existe o arquivo ICONDEMO.MB. Abra esse arquivo, compile e rode – como você já deve ter aprendido. Observe que surge um novo menu Icon Sampler.

 

Carregue cada conjunto de ícones, como mostrado abaixo. Aí você pode escolher qual ícone usar em suas aplicações.

 

Clicando em cada um desses ícones, você tem a constante que o define (com o mouse em cima aparece também qual é a constante).

 

No caso do nosso código para o botão de interrogação, veja onde essa informação foi colocada.

 

Uma outra dica é aprender a usar os atalhos das tarefas mais comuns:

  • CTRL + K: Compilar arquivo atual
  • CTRL + U: Rodar arquivo atual
  • CTRL + F: Encontrar...
  • CTRL + G: Encontrar de novo
  • CTRL + T: Ir para linha... (especialmente quando houver alguma mensagem de erro, pois a linha com erro é informada).

E por fim, última dica. Sempre que quiser saber mais sobre um comando, por exemplo a sintaxe para criar uma barra de ferramenta, utilize o Help. É bem completo.

 

Conclusão

Com essa lição aprendemos a criar, compilar e executar um programa no Mapbasic. Especificamente, criamos um programa que pega os dados de latitude, longitude e azimute de uma tabela aberta no Mapinfo e cria símbolos para os setores.

Vimos que alguns programas não são tão simples, porém o desafio fica muito mais fácil quando temos um lugar de referência.

Esperamos que você tenha gostado. Tire suas eventuais dúvidas postando seus comentários no Blog ou através do nosso Suporte via Chat ou E-mail.

Até nosso próximo encontro, e lembre-se: O seu sucesso é o nosso sucesso!