Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Operações com medidas de ângulos expressos em angulos, minutos e segundos


Visitante

Pergunta

9 respostass a esta questão

Posts Recomendados

  • 0
  • 0

Jhonas valeu mesmo

Só mais uma pergunta é possível implementar o  código abaixo no delphi usando  TEdit com mácara para graus minutos e segundos para a pessoa entrar manualmente com a latitude e longitude e o resultado ser mostrado em 2 label ?

Vai ser para um programa de astrologia

Obrigado

---------------------------

Esse foi o link que você me passou

http://www.cleibsonalmeida.blog.br/site/python-transformacao-de-coordenadas/

Segue um pequeno trecho de código python que exemplifica como fazer esse tipo de cálculo
(usando a biblioteca re -> regex).

 

latitude = '23º34"45"S'
longitude = '105º34'12"E'
import re
        if len(latitude) == 10:
            lat_polaridade = -1 if latitude[-1:] == 'S' else 1
            lat_temp = re.findall('\d{2,3}', latitude)
            grau_lat = int(lat_temp[0])
            min_lat = int(lat_temp[1])/60
            seg_lat = int(lat_temp[2])/3600
            lat_final = round(grau_lat + min_lat + seg_lat, 10) * lat_polaridade
            latitude = str(lat_final)
        if len(longitude) == 10 or len(longitude) == 11:
            lon_polaridade = -1 if longitude[-1:] == 'W' else 1
            lon_temp = re.findall('\d{2,3}', longitude)
            grau_lon = int(lon_temp[0])
            min_lon = int(lon_temp[1])/60
            seg_lon = int(lon_temp[2])/3600
            lon_final = round(grau_lon + min_lon + seg_lon, 10) * lon_polaridade
            longitude = str(lon_final)

----------------------------------------------------------

Os resultados serão:
latitude = '-23.5791666667'
longitude = '105.57'

Link para o comentário
Compartilhar em outros sites

  • 0

é possível implementar o  código abaixo no delphi usando  TEdit com mácara para graus minutos e segundos para a pessoa entrar manualmente com a latitude e longitude e o resultado ser mostrado em 2 label ?

sim...  se voce conhece o delphi, basta converter os comandos do python para delphi

http://www.atug.com/andypatterns/pythonDelphiTalk.htm

ou pode ver exemplos em delphi

https://www.google.com.br/search?ei=EfqiWu2fD8SnwATiw5KICQ&q=latitude+e+longitude+no+delphi&o que=latitude+e+longitude+delphi&gs_l=psy-ab.1.0.0i22i30k1.1503.4055.0.5931.7.7.0.0.0.0.131.815.0j7.7.0....0...1.1.64.psy-ab..0.7.810...0j0i67k1.0.U6IgUyrRsTE

usando  MaskEdit com mácara para graus minutos e segundos

na propriedade EditMask voce pode colocar essa mascara

!90º 00' 00">LL;1;_

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas como vai

Obrigado pelos links que você tem me passado, ainda sou principiante em progamação aqui no lazarus e agradeço pela sua ajuda.

Você conheçe algum código para lázarus ou delphi que eu possa usar aqui que faça a soma de angulos expressos em angulos, graus e minutos

Usando dois MaskEdit e dando o resultado num label depois de clicado num Button?

 179°  59'  60"    MaskEdit1
+ 70°    5'   15"     MaskEdit2  
----------------
109°  54'   45"  Label

 

Abraço


Aqui no lazarus funcionou está máscara para 3 digitos   !990º 00' 00">;1;_  está correto?

 

5aa443a536733_Semttulo2.jpg.d6114341088a1facd2c308db7e781c69.jpg

Editado por Visitante
Esqueçi de colocar o resultado da soma
Link para o comentário
Compartilhar em outros sites

  • 0

Tudo bem Jhonas bom dia

Consegui esse código aqui, mas  não está funcionando no Lázarus ,  então já vou deixar o código completo aqui caso alguém precise


ele trava nesta linha de instrução na hora da depuração (em cima do símbolo do grau '°' )

 'º': Result := StrToInt(Trim(Copy(P_Texto, 1, Pos(P_Caracter, P_Texto)-1)));

 

E esta é a mensagem de erro mostrado no depurador do Lázarus

unit1.pas(42,14)  Error: Constant and CASE types do not match


 

Agradecido se puder  me auxiliar
         

 

procedure TForm1.Button1Click(Sender: TObject);

//Segue solução em Delphi, destaco que Edit1 e Edit2 esperam uma string válida, com o formato: ggº mm' ss"


   function GetValorNumerico(const P_Texto: string; const P_Caracter: Char): Integer;
   begin
      case P_Caracter of
     'º': Result := StrToInt(Trim(Copy(P_Texto, 1, Pos(P_Caracter, P_Texto)-1))); 

      '''': Result := StrToInt(Trim(Copy(P_Texto, Pos('º', P_Texto)+2, 2)));
         '"': Result := StrToInt(Trim(Copy(P_Texto, Pos('''', P_Texto)+2, 2)));
      end;
   end;

var
   W_Graus1: integer;
   W_Minutos1: integer;
   W_Segundos1: integer;

   W_Graus2: integer;
   W_Minutos2: integer;
   W_Segundos2: integer;

   W_Graus3: integer;
   W_Minutos3: integer;
   W_Segundos3: integer;
begin
   W_Graus1 := GetValorNumerico(Edit1.Text, 'º');
   W_Minutos1 := GetValorNumerico(Edit1.Text, '''');
   W_Segundos1 := GetValorNumerico(Edit1.Text, '"');

   W_Graus2 := GetValorNumerico(Edit2.Text, 'º');
   W_Minutos2 := GetValorNumerico(Edit2.Text, '''');
   W_Segundos2 := GetValorNumerico(Edit2.Text, '"');

   if W_Segundos1 < W_Segundos2 then
   begin
      Dec(W_Minutos1);
      Inc(W_Segundos1, 60);
   end;

   W_Segundos3 := W_Segundos1 - W_Segundos2;

   if W_Minutos1 < W_Minutos2 then
   begin
      Dec(W_Graus1);
      Inc(W_Minutos1, 60);
   end;

   W_Minutos3 := W_Minutos1 - W_Minutos2;

   W_Graus3 := W_Graus1 - W_Graus2;

   Label1.Caption := Format('%dº %d'' %d"', [W_Graus3, W_Minutos3, W_Segundos3]);
end;                           

Link para o comentário
Compartilhar em outros sites

  • 0

If  P_Caracter =  'º' then Result := StrToInt(Trim(Copy(P_Texto, 1, Pos(P_Caracter, P_Texto)-1))); 

 If  P_Caracter =  '''' then Result := StrToInt(Trim(Copy(P_Texto, Pos('º', P_Texto)+2, 2)));

if  P_Caracter =  '"' then Result := StrToInt(Trim(Copy(P_Texto, Pos('''', P_Texto)+2, 2)));
      end;

 

ou veja nesses links

https://www.google.com.br/search?ei=O_juWp_EKMGowATgpaKYAQ&q=case+com+char+delphi&o que=case+com+char+delphi&gs_l=psy-ab.1.0.0i30k1.15554.16067.0.17742.4.4.0.0.0.0.128.475.0j4.4.0....0...1c.1.64.psy-ab..0.4.471...0i7i30k1.0.E9EIojoi9Hk

 

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas  muito obrigado vou estou os links o google, sou ainda principiante estava tentando colocar as linhas que você passou mas não estou acertando aqui no caso estas instruções  vão para qual parte do código principal

 If  P_Caracter =  'º' then Result := StrToInt(Trim(Copy(P_Texto, 1, Pos(P_Caracter, P_Texto)-1)));

 If  P_Caracter =  '''' then Result := StrToInt(Trim(Copy(P_Texto, Pos('º', P_Texto)+2, 2)));

if  P_Caracter =  '"' then Result := StrToInt(Trim(Copy(P_Texto, Pos('''', P_Texto)+2, 2)));
      end;

 

correção: Jhonas muito obrigado vou estudar os links do google que você me passou

correção: Jhonas muito obrigado vou estudar os links do google que você me passou

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...