edutraini Posted May 25, 2017 Report Share Posted May 25, 2017 Bom dia, Pessoal Um cliente meu me pediu uma rotina para calcular o frete Para isso preciso saber a distancia entre ponto A e B Existe alguma forma de Buscar essa Informacao atraves do sistema Obrigado Quote Link to comment Share on other sites More sharing options...
gilmer Posted May 25, 2017 Report Share Posted May 25, 2017 Bom Dia, Com a API do Google Map você consegue Quote Link to comment Share on other sites More sharing options...
kapiaba Posted May 25, 2017 Report Share Posted May 25, 2017 http://fivewin.com.br/index.php?/topic/20762-1-google-maps-distancia-entre-2-pontos/ http://cbsa.com.br/post/calcular-distancia-entre-dois-enderecos---google-maps-api.aspx Quote Link to comment Share on other sites More sharing options...
edutraini Posted June 2, 2017 Author Report Share Posted June 2, 2017 Boa tarde Usei a function postada no link do fivewin e funcionou perfeitamente Muito Obrigado So gostaria de saber se existe alguma forma de pegar a distancia entre um ponto e outro mostrada html que é gerado Quote Link to comment Share on other sites More sharing options...
Jmsilva Posted June 6, 2017 Report Share Posted June 6, 2017 Boa Noite, se entendi vc quer calcular a distancia entre ponto A e B sem usar a API do Google. Segue a função Harbour abaixo: Ponto A(-45.4392298,-23.658715) - Longitude e Latitude Ponto B(-45.449916,-23.660759) - Longitude e Latitude calcDist(-45.4392298,-23.658715,-45.449916,-23.660759) // result calculado pelo Google e o mesmo da funçao 1.11 km **============================================== Function calcDist(nLg1, nLt1, nLg2, nLt2) **============================================== Local nKm nKm :=6371*Acos(Cos(PI()*(90-nLt2)/180)*Cos((90-nLt1)*PI()/180)+; Sin((90-nLt2)*PI()/180)*Sin((90-nLt1)*PI()/180)*Cos((nLg1-nLg2)*PI()/180)) Return nKm Quote Link to comment Share on other sites More sharing options...
EDUTEK Posted June 17, 2017 Report Share Posted June 17, 2017 Bom Dia Neste cado do google no lugar do endereço ponto a x ponto b, teria como usar a Latitude e Logitude de cada ponto ? e como ficaria se fosse possivel ? Quote Link to comment Share on other sites More sharing options...
EDUTEK Posted June 17, 2017 Report Share Posted June 17, 2017 Boa Noite, se entendi vc quer calcular a distancia entre ponto A e B sem usar a API do Google. Segue a função Harbour abaixo: Ponto A(-45.4392298,-23.658715) - Longitude e Latitude Ponto B(-45.449916,-23.660759) - Longitude e Latitude calcDist(-45.4392298,-23.658715,-45.449916,-23.660759) // result calculado pelo Google e o mesmo da funçao 1.11 km **============================================== Function calcDist(nLg1, nLt1, nLg2, nLt2) **============================================== Local nKm nKm :=6371*Acos(Cos(PI()*(90-nLt2)/180)*Cos((90-nLt1)*PI()/180)+; Sin((90-nLt2)*PI()/180)*Sin((90-nLt1)*PI()/180)*Cos((nLg1-nLg2)*PI()/180)) Return nKm Grato pela resposta isso já me ajuda a calcular se o veiculo está chegando ao destino, pois eu pego pelo rastreador a posição atual dele, e no cadastro do cliente tenhop o Lat e Long do endereco Quote Link to comment Share on other sites More sharing options...
Jmsilva Posted June 17, 2017 Report Share Posted June 17, 2017 Assim como na func acima, api do Google que permite cálculo em linha reta: //google.maps.geometry.spherical.computeDistanceBetween(p1, p2).toFixed(2); FWRITE(nHAND,[ calcDistance: function(p1, p2){ ]+CRLF) FWRITE(nHAND,[ var tmp = google.maps.geometry.spherical.computeDistanceBetween(p1, p2); ]+CRLF) FWRITE(nHAND,[ var ret; ]+CRLF) FWRITE(nHAND,[ obj.km = obj.km + tmp; ]+CRLF) FWRITE(nHAND,[ if (obj.km < 1000){ ]+CRLF) FWRITE(nHAND,[ ret = 'PA: '+(Math.round(tmp))+" Total: "+]) //continua FWRITE(nHAND,[(Math.round(obj.km)) + " m"; ]+CRLF) FWRITE(nHAND,[ }else{ ]+CRLF) FWRITE(nHAND,[ ret = 'PA: '+(Math.round(tmp / 10) / 100)+" Total: "+]) //continua FWRITE(nHAND,[(Math.round(obj.km / 10) / 100) + " km"; ]+CRLF) FWRITE(nHAND,[ } ]+CRLF) FWRITE(nHAND,[ return ret; ]+CRLF) FWRITE(nHAND,[ }, ]+CRLF) JMSilva Caraguá/SP Quote Link to comment Share on other sites More sharing options...
Jmsilva Posted June 17, 2017 Report Share Posted June 17, 2017 Calcular a distância entre dois pontos via Api Google obedecendo traçado da rota. function calcRoute() { var request = { origin: new google.maps.LatLng(-23.621236,-45.385464), destination: new google.maps.LatLng(-23.710194,-45.442806), travelMode: google.maps.TravelMode.DRIVING }; directionsService.route(request, function(response, status) { if (status == google.maps.DirectionsStatus.OK) { directionsDisplay.setDirections(response); } }); } function computeTotalDistance(result) { var total = 0; var myroute = result.routes[0]; for (var i = 0; i < myroute.legs.length; i++) { total += myroute.legs[i].distance.value; } total = total / 1000.0; document.getElementById('total').innerHTML = total + ' km'; } JMSilva - Caraguá/SP Quote Link to comment Share on other sites More sharing options...
EDUTEK Posted June 20, 2017 Report Share Posted June 20, 2017 Boa Dia Obrigado pelo retorno, agora eu não uso a API do Google, que tenho que baixar e o que tenho que configurar para usar ela ? Quote Link to comment Share on other sites More sharing options...
jfaguiar Posted October 3, 2017 Report Share Posted October 3, 2017 pode ser feito assim ( com base no site: http://cbsa.com.br/post/calcular-distancia-entre-dois-enderecos---google-maps-api.aspx ) JSON exemplo: Function Dist2Pontos(cOrig, cDest) Local oServer, cUrl, aArray, erro DEFAULT cOrig := "Rua Dom Joaquim de Melo, 1278 - Rodolfo Teófilo, Fortaleza - CE" DEFAULT cDest := "Rua Clarindo de Queiroz, 1587 - Centro, Fortaleza - CE" cUrl := "http://maps.googleapis.com/maps/api/distancematrix/json?origins="+cOrig+"&destinations="+cDest+"&mode=driving&language=pt-BR&sensor=false" Try oServer := CreateObject( 'MSXML2.ServerXMLHTTP.6.0' ) Catch erro ? erro:Description return nil End oServer:open('GET', cUrl, .f.) oServer:send() If oServer:Status != 200 MsgStop(Alltrim(STR(oServer:Status))+" - "+oServer:StatusText , "Erro") Return nil Endif While oServer:readyState != 4 oServer:WaitForResponse(1000) End hb_jsondecode(oServer:responseText, @aArray) If aArray == nil MsgStop("Erro ao retornar os dados.") Return nil Endif If aArray['status'] != 'OK' MsgStop(aArray['message'], "Erro") Return nil Else xbrowse(aArray) ? oServer:responseText ? aArray["rows"][1]["elements"][1]["distance"]["text"] ? aArray["rows"][1]["elements"][1]["duration"]["text"] Endif Return nil Retorno do JSON { "destination_addresses" : [ "Rua Clarindo de Queiroz, 1587 - Centro, Fortaleza - CE, Brasil" ], "origin_addresses" : [ "Rua Dom Joaquim de Melo, 1278 - Rodolfo Teófilo, Fortaleza - CE, 60430-660, Brasil" ], "rows" : [ { "elements" : [ { "distance" : { "text" : "2,8 km", "value" : 2798 }, "duration" : { "text" : "9 minutos", "value" : 521 }, "status" : "OK" } ] } ], "status" : "OK" } Tipos de Status que pode retorna: OK retorno válido. INVALID_REQUEST requisição inválida. MAX_ELEMENTS_EXCEEDED origem ou destino ultrapassaram o numero máximo de caracteres.. OVER_QUERY_LIMIT aplicação excedeu o número máximo de requisições em um determinado período. REQUEST_DENIED sua aplicação bloqueou o uso do Distance Matrix. UNKNOWN_ERROR erro no servidor. Tente novamente que pode funcionar. pode ser feito retornando em XML (ver no link do site que passei no inicio do post) eu particularmente prefiro o mapa: Desculpem-me, mas nesse assunto sou totalmente leigo. Tentei compilar em fw+xharbour 13.07 e deu falta da function hb_jsondecode. Gostaria de saber quais libs e includes devo colocar no projeto. Quote Link to comment Share on other sites More sharing options...
joaosolution Posted October 3, 2017 Report Share Posted October 3, 2017 http://www.pctoledo.com.br/forum/viewtopic.php?f=42&t=13306 Att João Bosco Quote Link to comment Share on other sites More sharing options...
edutraini Posted November 16, 2018 Author Report Share Posted November 16, 2018 Bom dia, Pessoal Ah um tempo atras postei esse tema e conseguir funcionar perfeitamente De uns tres meses para ca o aplicativo do google foi desativado parece que agora tem que pagar Alguem poderia me dar uma dica se existe alguma outra forma de calcular a distancia entre dois pontos Essa rotina meu cliente colocava o endereco de entrega e o sistema conseguir calcular a distancia para poder fazer o calculo do frete cOrig := alltrim(End_Empr)+" - "+alltrim(Bai_Empr)+","+alltrim(Cid_Empr)+" - "+Est_Empr cDest := alltrim(End_Clie)+" - "+alltrim(Bai_Clie)+","+alltrim(Cid_Clie)+" - "+Est_Clie cUrl := "http://maps.googleapis.com/maps/api/distancematrix/json?origins="+cOrig+"&destinations="+cDest+"&mode=driving&language=pt-BR&sensor=false" Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted November 16, 2018 Report Share Posted November 16, 2018 Bom dia, Pessoal Ah um tempo atras postei esse tema e conseguir funcionar perfeitamente De uns tres meses para ca o aplicativo do google foi desativado parece que agora tem que pagar Alguem poderia me dar uma dica se existe alguma outra forma de calcular a distancia entre dois pontos Essa rotina meu cliente colocava o endereco de entrega e o sistema conseguir calcular a distancia para poder fazer o calculo do frete cOrig := alltrim(End_Empr)+" - "+alltrim(Bai_Empr)+","+alltrim(Cid_Empr)+" - "+Est_Empr cDest := alltrim(End_Clie)+" - "+alltrim(Bai_Clie)+","+alltrim(Cid_Clie)+" - "+Est_Clie cUrl := "http://maps.googleapis.com/maps/api/distancematrix/json?origins="+cOrig+"&destinations="+cDest+"&mode=driving&language=pt-BR&sensor=false" Bom dia, nem pagando da certo, eles mudaram alguma coisa na API, referente a pegar lat. e long, informando o endereço, se vc já tiver esta informação e mandar direto o numero da certo. Quote Link to comment Share on other sites More sharing options...
sygecom Posted November 16, 2018 Report Share Posted November 16, 2018 Se colocar o seu KEY no pago funciona, exemplo: https://maps.googleapis.com/maps/api/geocode/xml?address="+cENDERECO+"&sensor=false&key=xxxxxxxxx Quote Link to comment Share on other sites More sharing options...
rochinha Posted November 16, 2018 Report Share Posted November 16, 2018 Amiguinhos, Agora existe a necessidade de cadastro como desenvolvedor para APIs do Google, onde você recebe um token que deve ser incluso nas chamadas as APIs. O cadastro é gratuíto, mas tem se um limite mensal de buscas. Para se cadastrar como Google Developer é necessário tem uma conta de email no GMail, se não tem crie uma agora. Após criar sua conta de email crie sua conta Google Developer. Quando eu criei a minha a taxa estava em U$ 5,00 agora tá salgada U$ 25,00. Ops, pulem as três linhas anteriores(vou deixá-las somente para documentação) O local de cadastro na plataforma de mapas é aqui Quote Link to comment Share on other sites More sharing options...
leo@lhsistemas.com Posted December 12, 2018 Report Share Posted December 12, 2018 Bom dia. Gostaria de saber como faço para pegar a geolocalização do cliente ao cadastrar no meu sistema, é possível ? Como fazer ? Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.