Jump to content
Fórum Script Brasil
  • 0

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


Guest

Question

9 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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

Edited by Guest
Esqueçi de colocar o resultado da soma
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      651.8k
×
×
  • Create New...