Distancias por carretera entre dos puntos con GoogleMaps

Distancias por carretera entre dos puntos con GoogleMaps

Postby JmGarcia » Tue Jun 08, 2010 9:54 pm

Necesito hacer un programa que mida distancias entre dos puntos "por carretera" con el API de GoogleMaps.
Es decir: Hacer una llamada CGI del tipo http://maps.google.es/maps?hl=es&tab=wl........ etc... y capturar la pagina de retorno con funciones de oIE:=Createobject("InternetExplorer.Application") oIE:Navigate2(cUrl) oIE:Document:body:innerHTML() oIE:Document:body:innerText() etc... y coger la distancia.

Creo haberme explicado, gracias.
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Re: Distancias por carretera entre dos puntos con GoogleMaps

Postby norberto » Fri Jun 11, 2010 11:29 am

hi, i need this too, someone can help?
norberto
 
Posts: 566
Joined: Thu Aug 30, 2007 3:40 pm
Location: BR

Re: Distancias por carretera entre dos puntos con GoogleMaps

Postby George » Fri Jun 11, 2010 1:23 pm

I think you need MapPoint software and use their methods to get that info:

You can try the following code:
Code: Select all  Expand view
local hToolBar, hStandard, oMapPoint, nDist, oMap, oActive
oActive = TActiveX():New( oWnd, "MapPoint.Control.16" )

oMap := oActive:Do( "Newmap", 1 )
hToolBar = oActive:GetProp( "Toolbars" )

oMap := oActive:ActiveMap()
oStartLocation:= oMap:FindResults("205 Broadway, Lawrence, MA"):Item(1)
oEndLocation:= oMap:FindResults("77 Centre Street, Roxbury, MA"):Item(1)

msgInfo( oMap:Distance( oStartLocation, oEndLocation ), "Distance" )



Regards

George
George
 
Posts: 724
Joined: Tue Oct 18, 2005 6:49 pm

Re: Distancias por carretera entre dos puntos con GoogleMaps

Postby JmGarcia » Fri Jun 11, 2010 8:52 pm

Tanks George
George wrote:I think you need MapPoint software...
I what I want am that she is free.

I have solved it using WinHTTP windows services and the URL http://maps.google.es/maps...

Example: Distance Madrid to Paris.
Code: Select all  Expand view

local oHttp,cTextoHTML
   Try
      oHttp:=CreateObject("winhttp.winhttprequest.5.1")
      oHttp:SetTimeouts(30000,30000,30000,30000)
      oHttp:Open("GET","http://maps.google.es/maps?saddr=Madrid&daddr=París",.F.)
      oHttp:Send()
      cTextoHTML:=oHttp:ResponseText()
   Catch
      cTextoHTML:="Error"
   End Try
 


Search string in var cTextoHTML "1.270 km – aprox. 12h 11 min" in HTML code is "<div><b>1.270&#160;km</b> &#8211; aprox. <b>12h 11 min</b></div>".
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Re: Distancias por carretera entre dos puntos con GoogleMaps

Postby Kleyber » Mon Jun 14, 2010 5:56 pm

JmGarcia,

Y como hiciste para coger el string?
Kleyber Derick

FWH / xHb / xDevStudio / SQLLIB
User avatar
Kleyber
 
Posts: 581
Joined: Tue Oct 11, 2005 11:28 am
Location: São Luiz, Brasil

Re: Distancias por carretera entre dos puntos con GoogleMaps

Postby JmGarcia » Mon Jun 14, 2010 9:02 pm

Kleyber wrote:Y como hiciste para coger el string?
Con un "sniffer".
Justo antes de pulsar el boton de enviar (en Google Maps) pongo el "snifer a escuchar" la trama ethernet que envia el navegador. Los snifer que uso son el Analyzer y el Ethereal

Despues solo es cuestion de buscar la cadena GET o POST que se ha enviado. Es algo asi:
GET /maps?f=d&source=s_d&saddr=madrid&daddr=paris&hl=es&geocode=&abauth=b5f75994:aQ681J0Cduy_G3Fuv48v8fvBOr4&mra=ls&vps=1&output=js&jsv=247a&sll=40.396764,-3.713379&sspn=17.117291,14.128418 HTTP/1.1

Entonces la cadena que interesa es /maps?f=d&source=s_d&saddr=madrid&daddr=paris y como el site es "maps.google.es" pues se añade y ya esta:
http://maps.google.es/maps?f=d&source=s_d&saddr=madrid&daddr=paris

Solo es cuestion de ir cambiando las cadenas de las ciudades.

Saludos.
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Re: Distancias por carretera entre dos puntos con GoogleMaps

Postby Andrés González » Mon Jun 14, 2010 9:24 pm

Hola JMGarcia, estoy siguiendo de cerca tu trabajo y ahora me he puesto a investigar como trabaja GoogleMaps y me surgen una serie de preguntas, para medir la distancia entre dos puntos, supongo que se tiene que tener instalando un Mapplet, puesto que segun creo GoogleMaps no tiene instalado alguno por defecto, cual tienes instalado?. La distancia entre dos puntos es lineal, supongo, no te refieres a trayectorias entre dos puntos, que creo que también hace googlemaps por lo que he visto en algún ejemplo.

Por otra parte, supongo que a los metodos GET y POST a que te refieres son ejemplos que ya han salido en el foro, o son propios del objeto oHttp:=CreateObject("winhttp.winhttprequest.5.1"). Por otra parte, con esos metodos puedes obtener la latitud y longitud de un punto determinado del mapa que marques con el raton, sabes como hacerlo?.

Hay forma de contactar contigo para hablar sobre el tema?
Saludos

Andrés González desde Mallorca
User avatar
Andrés González
 
Posts: 627
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Re: Distancias por carretera entre dos puntos con GoogleMaps

Postby JmGarcia » Mon Jun 14, 2010 9:35 pm

Andrés González wrote:...para medir la distancia entre dos puntos...
Esto que he hecho GoogleMaps me devuelve la distancia por carretera.
Una vez que me devuelve la pagina HTML con cTextoHTML:=oHttp:ResponseText() me dedico a "analizar" el contenido en busca de los datos de los km que estan en un string de este tipo <div><b>1.270&#160;km</b> &#8211; aprox. <b>12h 11 min</b></div>
Yo no tengo nada instalado, ni Mapplet ni nada, solo uso GoogleMaps haciendole una peticion como si la hiciera "a mano".



Andrés González wrote:...Por otra parte, con esos metodos puedes obtener la latitud y longitud de un punto determinado del mapa que marques con el raton, sabes como hacerlo?...
Todo lo que te de GoogleMaps en formato HTML es posible cogerlo.



Andrés González wrote:...Hay forma de contactar contigo para hablar sobre el tema?...
Te envio un e-mail a tu correo de gmail.com
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Re: Distancias por carretera entre dos puntos con GoogleMaps

Postby Kleyber » Tue Jun 15, 2010 12:21 pm

JmGarcia wrote:
Kleyber wrote:Y como hiciste para coger el string?
Con un "sniffer".
Justo antes de pulsar el boton de enviar (en Google Maps) pongo el "snifer a escuchar" la trama ethernet que envia el navegador. Los snifer que uso son el Analyzer y el Ethereal

Despues solo es cuestion de buscar la cadena GET o POST que se ha enviado. Es algo asi:
GET /maps?f=d&source=s_d&saddr=madrid&daddr=paris&hl=es&geocode=&abauth=b5f75994:aQ681J0Cduy_G3Fuv48v8fvBOr4&mra=ls&vps=1&output=js&jsv=247a&sll=40.396764,-3.713379&sspn=17.117291,14.128418 HTTP/1.1

Entonces la cadena que interesa es /maps?f=d&source=s_d&saddr=madrid&daddr=paris y como el site es "maps.google.es" pues se añade y ya esta:
http://maps.google.es/maps?f=d&source=s_d&saddr=madrid&daddr=paris

Solo es cuestion de ir cambiando las cadenas de las ciudades.

Saludos.



Muchas gracias por la aclaración.

Saludos,
Kleyber Derick

FWH / xHb / xDevStudio / SQLLIB
User avatar
Kleyber
 
Posts: 581
Joined: Tue Oct 11, 2005 11:28 am
Location: São Luiz, Brasil

Re: Distancias por carretera entre dos puntos con GoogleMaps

Postby JmGarcia » Tue Jun 15, 2010 8:15 pm

Os dejo el codigo fuente del "calculador de distancias por carretera" que he hecho y que consulta a GoogleMaps y de la pagina HTML de respuesta extracta los datos.

Todo el truco esta en esta linea oHttp:Open("GET","http://maps.google.es/maps?saddr="+alltrim(cOrigen)+"&daddr="+alltrim(cDestino),.F.) y en la pagina que responde cTextoHTML:=oHttp:ResponseText()

Code: Select all  Expand view

#include "FiveWin.ch"

static oDlg,cOrigen:="",cDestino:="",cTextoHTML:="",nDistancia:=0,cTiempo:=""
static oGet1,oGet2,oBtn1,oBtn2,nSeg:=0

function main()
set exact on
set date french
set century on
cOrigen:=left("Madrid, Spain"+space(255),255)
cDestino:=left("Paris, France"+space(255),255)
oHttp:=CreateObject("winhttp.winhttprequest.5.1")
DEFINE DIALOG oDlg TITLE "Calculador de distancias por carretera"
@ 1,  2 SAY "Origen" OF oDlg
@ 1,  5 GET oGet1 VAR cOrigen  OF oDlg SIZE 90, 10 PICTURE replicate("X",255)
@ 1.8,2 SAY "Destino" OF oDlg
@ 2,  5 GET oGet2 VAR cDestino OF oDlg SIZE 90, 10 PICTURE replicate("X",255)
@ 3,  7 BUTTON oBtn1 PROMPT "&Ok"       SIZE 30, 12 OF oDlg ACTION Calcular()
@ 3, 16 BUTTON oBtn2 PROMPT "&Cancelar" SIZE 30, 12 OF oDlg ACTION oDlg:End()
ACTIVATE DIALOG oDlg CENTERED
return nil

function Calcular()
local Aux,Aux1
nSeg:=seconds()
CursorWait()
oGet1:Disable()
oGet2:Disable()
oBtn1:Disable()
oBtn2:Disable()
Try
   oHttp:SetTimeouts(30000,30000,30000,30000)
   oHttp:Open("GET","http://maps.google.es/maps?saddr="+alltrim(cOrigen)+"&daddr="+alltrim(cDestino),.F.)
   oHttp:Send()
   cTextoHTML:=oHttp:ResponseText()
Catch
   cTextoHTML:="Error"
End Try
// Buscar una cadena de este tipo "<div><b>702&#160;km</b> &#8211; aprox. <b>6h 48 min</b></div>"
Aux:="&#160;km</b>"
if .not. Aux $ cTextoHTML
   CursorArrow()
   MsgInfo("Imposible calcular distancia","Informacion")
   oGet1:Enable()
   oGet2:Enable()
   oBtn1:Enable()
   oBtn2:Enable()
   return nil
endif
cTextoHTML:=substr(cTextoHTML,at(Aux,cTextoHTML)-25)
Aux:="<div>"
cTextoHTML:=substr(cTextoHTML,at(Aux,cTextoHTML))
Aux:="</div>"
cTextoHTML:=left(cTextoHTML,at(Aux,cTextoHTML)+len(Aux)-1)
Aux:="<div><b>"
Aux1:=substr(cTextoHTML,at(Aux,cTextoHTML)+len(Aux))
Aux:="&#160;km"
Aux1:=left(Aux1,at(Aux,Aux1)+len(Aux)-1)
do while "." $ Aux1 // Quita los PUNTOS
   Aux1:=stuff(Aux1,at(".",Aux1),1,"")
enddo
nDistancia:=val(Aux1)
Aux:="</b> &#8211; aprox. <b>"
Aux1:=substr(cTextoHTML,at(Aux,cTextoHTML)+len(Aux))
Aux:="</b></div>"
Aux1:=left(Aux1,at(Aux,Aux1)-1)
cTiempo:=Aux1
CursorArrow()
MsgInfo("De "+chr(34)+upper(alltrim(cOrigen))+chr(34)+;
        " a " +chr(34)+upper(alltrim(cDestino))+chr(34)+;
        " hay "+alltrim(str(nDistancia))+" km."+chr(13)+;
        "Tiempo por carretera "+cTiempo,;
        "Informacion ("+alltrim(str(seconds()-nSeg,5,1))+"seg.)")
oGet1:Enable()
oGet2:Enable()
oBtn1:Enable()
oBtn2:Enable()
return nil
 
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Re: Distancias por carretera entre dos puntos con GoogleMaps

Postby Kleyber » Tue Jun 15, 2010 10:45 pm

Muchisimas gracias.

Saludos,
Kleyber Derick

FWH / xHb / xDevStudio / SQLLIB
User avatar
Kleyber
 
Posts: 581
Joined: Tue Oct 11, 2005 11:28 am
Location: São Luiz, Brasil

Re: Distancias por carretera entre dos puntos con GoogleMaps

Postby Armando » Tue Jun 15, 2010 11:13 pm

JMGarcía:

Excelente !, se agradece.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3061
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Distancias por carretera entre dos puntos con GoogleMaps

Postby Kleyber » Wed Jun 16, 2010 12:26 am

JMGarcia,

Has intentado hacer esto, pero allá de tener la distancia, si se puede tener otra dialog con el mapa que tiene Google Maps?

saludos,
Kleyber Derick

FWH / xHb / xDevStudio / SQLLIB
User avatar
Kleyber
 
Posts: 581
Joined: Tue Oct 11, 2005 11:28 am
Location: São Luiz, Brasil

Re: Distancias por carretera entre dos puntos con GoogleMaps

Postby Kleyber » Wed Jun 16, 2010 12:36 am

Me respondo. Usando el oIE:=Createobject("InternetExplorer.Application"), oIE:Navigate2(cUrl), etc.

Saludos,
Kleyber Derick

FWH / xHb / xDevStudio / SQLLIB
User avatar
Kleyber
 
Posts: 581
Joined: Tue Oct 11, 2005 11:28 am
Location: São Luiz, Brasil

Re: Distancias por carretera entre dos puntos con GoogleMaps

Postby JmGarcia » Wed Jun 16, 2010 6:28 am

Kleyber wrote:Me respondo. Usando el oIE:=Createobject("InternetExplorer.Application"), oIE:Navigate2(cUrl), etc.
Efectivamente...
Como a mi solo me interesa la distancia me vale con tener la página web en una variable string con cTextoHTML:=oHttp:ResponseText()
Si quieres puedes hacer después MemoWrit("Distancia.html",cTextoHTML) y ya tienes la página.
Se pueden usar mas parámetros en la URL como zoom, tipo de mapa, etc... sería cuestion de investigar.

Tambien para saber las coordenadas geodésicas de un lugar poner este tipo de URL "http://maps.google.es/maps?q=Calle Gran Via 1, Madrid" y en la página de respuesta buscar la cadena strin siguiente "viewport:{center:" y despues de esta está una cadena de este tipo "{lat:40.419148,lng:-3.6977530000000001}," que son las coordenadas.
Es decir, la cadena string es "viewport:{center:{lat:40.419148,lng:-3.6977530000000001},"
Mi abuelo decía: Los aviones vuelan porque Dios quiere, y los helicópteros ni Dios sabe porque vuelan.
FWH 16.02, xHarbour 1.2.3, Harbour 3.2.0, WorkShop 4.5, AJ Make 0.30, Borlan BCC 7.00, VisualStudio 2013
User avatar
JmGarcia
 
Posts: 654
Joined: Mon May 29, 2006 3:14 pm
Location: Madrid - ESPAÑA

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 89 guests