Hola grupo
Estoy buscando una función, que al pasarle una dirección me devuelva, la longitud y latitud geográfica, he estado haciendo pruebas con una función del master Navarro, funciona algunas veces y otra no, la dirección está bien, algo falla, me pueden ayudar ?
Function GeoCoordenadas( cPostal_Code, cStreet, cNumber, cLocality, cState)
Local cWeb := "http://maps.google.es/maps/place/"
local cMap
local cRet := ""
local oOle
local nPos1
local nPos2
local aCoor := { 0, 0, 0 }
local cNation:="Spain"
cPostal_Code := StrTran( AllTrim( cPostal_Code ), ' ', '+' )
cStreet := StrTran( AllTrim( cStreet ), ' ', '+' )
cNumber := StrTran( AllTrim( cNumber ), ' ', '+' )
cLocality := StrTran( AllTrim( cLocality ), ' ', '+' )
cState := StrTran( AllTrim( cState ), ' ', '+' )
cNation := StrTran( AllTrim( cNation ), ' ', '+' )
cMap := AllTrim( cPostal_Code ) + "+" + AllTrim( cStreet ) + "+" + ;
AllTrim( cNumber ) + "+" + AllTrim( cLocality ) + "+" + ;
AllTrim( cState ) + "+" + AllTrim( cNation )
oOle := CreateObject("Winhttp.WinHttpRequest.5.1")
oOle:Open( "GET", cWeb + AllTrim( cMap ), .F. )
oOle:Send()
cURL := oOle:ResponseText
nPos1 := At( "/@", cUrl )
Msginfo(cWeb + AllTrim( cMap ))
if !Empty( nPos1 )
nPos2 := At( "/data", cUrl )
cRet := Substr( cUrl, nPos1, nPos2 - nPos1 )
if !Empty( nPos2 )
cRet := StrTran( cRet, "/@", "" )
aCoor := hb_ATokens( cRet, "," )
endif
endif
aCoor := { aCoor[ 1 ], aCoor[ 2 ] }
// Msginfo( aCoor[ 1 ])
// Msginfo( aCoor[ 2 ])
Return aCoor
Un saludo,
Gabriel
Coordenadas geográficas
- jrestojeda
- Posts: 543
- Joined: Wed Jul 04, 2007 3:51 pm
- Location: Buenos Aires - Argentina
Re: Coordenadas geográficas
Hola, cómo estás?
Yo tengo el siguiente código que lo uso hace bastantes años, pero del mismo modo, no siempre me ubica las coordenadas.
Lo dejo así puedes probarlo.
Puede que google limite la cantidad de consultas permitidas. Para trabajar sin límite de consultas posiblemente tengas que generar una Key del Api de google maps.
Saludos,
Yo tengo el siguiente código que lo uso hace bastantes años, pero del mismo modo, no siempre me ubica las coordenadas.
Lo dejo así puedes probarlo.
Code: Select all
// GEOLOCALIZACION DE DIRECCION //
Function ConsultoDireccion(Calle,Localidad,Provincia,Pais)
cCalle :=STRTRAN(Calle ," ","%20")
cLocalidad:=STRTRAN(Localidad," ","%20")
cProvincia:=STRTRAN(Provincia," ","%20")
cPais :=STRTRAN(Pais ," ","%20")
cCalle :=ALLTRIM(cCalle)
cLocalidad:=ALLTRIM(cLocalidad)
cProvincia:=ALLTRIM(cProvincia)
cPais :=ALLTRIM(cPais)
// URL Sin Key del API de google maps
cUrl:="https://maps.googleapis.com/maps/api/geocode/xml?address="+cCalle+" "+cLocalidad+" "+cProvincia+" "+cPais+"&sensor=false"
// URL Con Key del API de google maps
//cUrl:="https://maps.googleapis.com/maps/api/geocode/xml?address="+cCalle+" "+cLocalidad+" "+cProvincia+" "+cPais+"&sensor=false&key=AQUI_VA_LA_CLAVE"
aCoordenadas:={}
oFe:=CreateObject("MSXML2.ServerXmlHttp")
IF Hb_IsObject(oFe)
oFe:Open("GET",cUrl,.F.)
oFe:Send()
cTexto1 := oFe:ResponseText
Private oXmlDoc := TXmlDocument():New()
Private oXmlNode
oXMlDoc:READ(cTexto1)
oXmlNode := oXmlDoc:FindFirst("status")
cValor := oXmlNode:cData
IF cValor="ZERO_RESULTS"
MsgInfo("Atención: Dirección no encontrada, cambie los parámetros y vuelva a intentarlo.","Por favor verifique")
Return aCoordenadas
ENDIF
IF cValor<>"OK"
MsgInfo("Atención: Dirección no encontrada, cambie los parámetros y vuelva a intentarlo.","Por favor verifique")
Return aCoordenadas
ENDIF
oXmlNode := oXmlDoc:FindFirst("lat")
cLatitud := oXmlNode:cData
oXmlNode := oXmlDoc:FindFirst("lng")
cLongitud := oXmlNode:cData
AADD(aCoordenadas, cLatitud )
AADD(aCoordenadas, cLongitud )
ENDIF
Return aCoordenadas
//
Saludos,
Ojeda Esteban Eduardo.
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
Buenos Aires - Argentina.
FWH - PellesC - DBF/CDX - ADS - Gloriosos .Bat - MySql - C# .net - FastReport
Skype: jreduojeda
Re: Coordenadas geográficas
Gracias por la respuesta, pasa igual que con el código del master Navarro, algunas veces funciona y otras no, a ver si alguien nos puede ayudar ?
Un saludo,
Gabriel
Un saludo,
Gabriel