Hola Amigos del Foro,
Estoy desarrollando un programa que captura los datos de latitud y longitud (float) desde un GPS, datos que posteriormente los compara con una referencia que entrega el usuario. Si lo anterior es válido, en una carta digital que está georeferenciada, se genera un punto rojo que marca la posición del usuario dentro de dicha carta. Hasta ahí todo va bien, el problema lo tengo al tratar de editar el valor que me entrega el GPS para que sea un entero. Es decir, si la latitud en segundos es 35,43, necesito solo el 35 y si la longitud es 0,42, solo necesito el 0. Estos valores pueden variar en su longitud, ya que si bien el GPS solo entrega valores con 2 decimales significativos, los enteros pueden ser 1 o 2 como máximo (ejemplo: 59, 23 segundos ó en algunos casos 02,37). Luego de buscar en el foro, encontré funciones como trunc, RoundTo y otras, pero opté por usar “Copy”, de la forma en que se aprecia en el código de abajo, ya que las funciones me causaban problemas y mis conocimientos de Delphi son muy básicos. El programa compila bien y se genera el ejecutable, pero llegado el momento de realizar el redondeo de las cifras me arroja el siguiente error:
“Raised Exception Class EConvert Error with message ‘ ‘’is not a valid Integer Value’. Process stopped. Use Step or Run to continue.” Según lo que entiendo, las comilla que encierran al separador (‘,’) me están causando el problema, pero lo cierto es que no sé como solucionarlo.
Les adjunto el código para que quede más claro y a ver si alguien más avezado me puede ayudar con este problema que ya me saca canas verdes. De antemano muchas gracias a quienes lean este mensaje.
Código Delphi
[-]
procedure TForm1.Timer1Timer(Sender: TObject);
var
strGPSMinL : String;
strMinL : String;
strMinG : String;
strGPSMinG : String;
intMinLat1 : Integer;
intMinLong1 : Integer;
intMinLat2 : Integer;
intMinLong2 : Integer;
intMinL : Integer;
intMinG : Integer;
pxl : Integer;
pxg : Integer;
begin
strSecLat := FloatToStr(ZylGPSReceiver.GetLatitudeSecond); strSecLong := FloatToStr(ZylGPSReceiver.GetLongitudeSecond); strGPSMinL := FloatToStr(ZylGPSReceiver.GetLatitudeMinute); strGPSMinG := FloatToStr(ZylGPSReceiver.GetLongitudeMinute); strMinL := copy (strGPSMinL,0,2); strMinG := copy (strGPSMinG,0,2); Edit3.Text := strMinL; Edit4.Text := strMinG; intMinL := StrToInt(strMinL); intMinG := StrtoInt(strMinG); intMinLat1 := StrToInt(txtminlat1.Text); intMinLong1 := StrToInt(txtminlong1.Text); intMinLat2 := StrToInt(txtminlat2.Text); intMinLong2 := StrToInt(txtminlong2.Text); pos2 := (Copy(strSecLat,1,(Pos(',',strSecLat))-1)); pos1 := (Copy(strSecLong,1,(Pos(',',strSecLong))-1)); Edit1.Text:=pos1 Edit2.Text := pos2 mensajedeerror.Caption := ' '; if (intMinL <= intMinLat1) and (intMinG <= intMinLong1) and (intMinL <= intMinLat2) and (intMinG <= intMinLong2) then
Begin
if (pos1 = '0') and (intMinL = intMinLat2) then
pxl := 595;
... etc