Imprimi Página | Fechar janela

Calculo de km entre dois potos

Impresso de: Helpfacil - Portal do conhecimento
Nome do Forum: ADVPL
Descrição do Forum: Dúvidas sobre a programação em ADVPL
URL:http://www.helpfacil.com.br/display_topic_threads.asp?ForumID=1&TopicID=42252
Data da Impressão: terça-feira, 18 de dezembro de 2018 at 17:13


Topico: Calculo de km entre dois potos

Postado por: INOVAT
Assunto: Calculo de km entre dois potos
Data Postagem: segunda-feira, 8 de outubro de 2018 at 13:52

Galera,

Tenho a latitude e longitude de dois pontos, dois endereços de clientes e preciso calcular a distância entre eles em Kilometros, a fim de cobrança de frete por kilometro rodado, no advpl tem alguma função que faça isso, ou alguém conhece alguma maneira de obter essa kilometragem ?


Obrigado pela ajuda.

Cmkas


Respostas:

Postado Por: AIRTONLIRA
Data Postagem: segunda-feira, 8 de outubro de 2018 at 14:23

Eu fiz um Mashup para saber a distancia entre 2 pontos usando o google maps.
Mas calcular o frete com base nisso é mais complicado.
Por que tem que saber todos componentes do frete, se tem TDE, etc ,,,,



Postado Por: REISM01
Data Postagem: segunda-feira, 8 de outubro de 2018 at 14:29

Clarice,

Boa Tarde! Tudo bom ?

Utilize o Metodo HttpGet:

http://tdn.totvs.com/display/tec/HTTPGet

Segue um Exemplo de um Colega (Crédito: Fernando Bueno - FB Solutions), utilizando o HttpGet e API Google para calcular Distancia em Kms:

#INCLUDE "XMLXFUN.CH"
#INCLUDE "RWMAKE.CH"


/*/{Protheus.doc} GMapsDist
//TODO Retorna distância entre 2 pontos através da APi Google Maps
@author Fernando Bueno
@since 27/06/2017
@version 1.0
@param cOrigem, characters, descricao
@param cDestino, characters, descricao
@type function
/*/
User Function GMapsDist(cOrigem, cDestino)
Local cError := ""
Local cWarning := ""
Local oScript
Local nRet

cEnd := "http://maps.googleapis.com/maps/api/directions/xml?origin=" + cOrigem + "&destination=" + cDestino
cEnd := strtran(cEnd, " ", "%20")
retXML := HTTPGET(cEnd)

//Gera o Objeto XML ref. ao script
oScript := XmlParser( retXML, "_", @cError, @cWarning )
//Caso não retornar valor, o usuário informará manualmente através do setKM()
If oScript:_DirectionsResponse:_status:TEXT == "ZERO_RESULTS" .OR. oScript:_DirectionsResponse:_status:TEXT <> "OK"
nRet := 0
setKM()
nRet := nGetKM
//Do contrário, pode pegar o valor e gravar em sua tabela
Else
nRet := oScript:_DirectionsResponse:_route:_leg:_distance:_value:TEXT
nRet := Round((Val(nRet)/1000),1)
EndIf

SAVE oScript XMLFILE "C:\Temp\dist.xml"

Return nRet


/*/{Protheus.doc} setKM
//TODO Função utilizada para gravar manualmente a distância
@author Fernando
@since 27/06/2017
@version undefined

@type function
/*/
Static Function setKM()
Static oDlgKM
Static oButtonKM
Static oGetKM
Static nGetKM := 0
Static oSayKM1
Static oSayKM2

DEFINE MSDIALOG oDlgKM TITLE "Informe o KM" FROM 000, 000 TO 150, 400 COLORS 0, 16777215 PIXEL

@ 009, 010 SAY oSayKM1 PROMPT "A distância entre Mun Origem e Mun Destino não foi encontrada" SIZE 192, 011 OF oDlgKM COLORS 0, 16777215 PIXEL
@ 035, 010 SAY oSayKM2 PROMPT "Informe o KM manualmente:" SIZE 073, 009 OF oDlgKM COLORS 0, 16777215 PIXEL
@ 033, 083 MSGET oGetKM VAR nGetKM SIZE 071, 010 OF oDlgKM COLORS 0, 16777215 PIXEL VALID nGetKM > 0 PICTURE "@E 9999.9"
@ 054, 136 BUTTON oButtonKM PROMPT "Confirma" SIZE 052, 014 OF oDlgKM PIXEL ACTION Close(oDlgKM)
ACTIVATE MSDIALOG oDlgKM

Return

Espero que te ajude.

Boa Sorte !

Um forte abraço!

Maurilio G. Reis.
ReisM01 - reis.maurilio@gmail.com



Postado Por: INOVAT
Data Postagem: segunda-feira, 8 de outubro de 2018 at 16:22



Amigos,

No exemplo do Google Maps são enviados duas Cidades, para retornar o KM.


Não consigo visualizar o que tenho que mudar para enviar endereços ( Rua Inicial e Rua Final )

Obrigado pela ajuda.


Cmkas







Imprimir Página | Fechar Janela